判断 noindex 是否被遵守,唯一可靠的做法是「日志验证抓取状态 + 索引状态回查」双轨对照:日志确认爬虫拿到了 200 且响应体里确实带 noindex,Search Console 或搜索引擎结果页确认该 URL 已从索引中消失。只看其中一个都会得出错误结论。
noindex 被遵守了吗?一句话判断标准
结论:日志里看到 Googlebot 抓取该 URL 后返回 200,同时 Search Console 的页面索引报告里该 URL 状态变成「已被 noindex 标记排除」,才算真正被遵守。
noindex 是 meta robots 标签(写在 HTML <head> 里的抓取指令),写法是 <meta name="robots" content="noindex, follow">。它对非 HTML 文件(PDF、图片、视频)无效,这类资源必须用 HTTP 响应头 X-Robots-Tag: noindex。判断依据必须是「爬虫实际读到了这个标签」,而不是「我在代码里写了这个标签」。
日志里怎么看出 noindex 已生效?
结论:在日志中过滤出该 URL 的请求记录,确认「部署 noindex 之后」存在至少一次 HTTP 200 的抓取,才算爬虫真正看到了标签。
具体操作分四步:
- 按 User-Agent 筛出爬虫请求,再按 URL 路径筛出目标页面。
- 剔除 304 记录。304 表示内容未修改,爬虫用的是旧缓存,不能证明它读到了新的 noindex。
- 确认存在状态码 200 且时间戳晚于你上线 noindex 的时间点。
- 用 curl 或浏览器直接请求一次该 URL,检查响应体里是否真有
<meta name="robots" content="noindex">,排除 CDN 返回旧 HTML 的可能。
注意:UA 字符串可以伪造,验证 Googlebot 要做反向 DNS 查询——IP 反解出的主机名必须以 googlebot.com 或 google.com 结尾,再对该主机名做正向解析确认 IP 一致。
为什么爬虫还在抓 noindex 页面?这算没遵守吗
结论:不算。noindex 只禁止「索引」,不禁止「抓取」,爬虫继续抓取 noindex 页面是完全正常的。
这是最常见的误判来源。noindex 页面仍会被抓取,因为爬虫需要重新访问才能发现标签、然后删除索引。真正阻止抓取的是 robots.txt 的 Disallow。判断标准要落在索引状态上:用 Search Console 的「网址检查」工具输入该 URL,查看「网页可编入索引」是否为「否」,原因是否显示「已检测到 noindex 标记」;或在搜索框执行 site:你的域名/具体路径,看结果是否还在。
robots.txt 和 noindex 一起用会怎样
结论:同时使用 robots.txt Disallow 和 noindex 会导致 noindex 永久失效,这是必须避免的组合。
原因是逻辑死锁:Disallow 让爬虫无法抓取页面,爬虫读不到页面里的 noindex 标签,于是标签不生效;而如果其他页面还在链接这个 URL,搜索引擎可能仍以「仅 URL 形式」把它收录。正确做法是二选一——想让页面彻底退出索引,就用 noindex,同时保持页面可被抓取。
哪些情况会让 noindex 失效
结论:缓存未刷新、标签写在 JS 渲染内容里、爬虫抓取预算不足,是 noindex 失效的三个主因。
- CDN 或页面缓存返回旧版本 HTML,需按缓存 TTL 强制刷新并确认线上响应体。
- 把 meta robots 放进 JS 动态渲染的内容里,Google 只在初始 HTML 中识别 meta robots;这种情况改用
X-Robots-Tag 响应头更稳。
- 一次性给大批量 URL 加 noindex,爬虫需要逐个重新抓取才能生效,周期取决于抓取预算和页面更新频率,不会同步完成。
- 服务器对该爬虫返回 429 或 503,抓取被拒,noindex 自然读不到,需先排查服务端限流。
最后补一句反向验证:Google 用 Search Console,Bing 用 Bing Webmaster Tools 的 URL 检查,百度用搜索资源平台的抓取诊断,三者工具不同但验证逻辑一致——先证抓取,再证索引。