网站收录

noindex 写了却没生效:三种写法的差异与排查顺序

noindex 加上去却没从索引里消失,通常不是搜索引擎忽略了指令,而是标签没被读到,或者几种屏蔽方式互相冲突。本文拆解 meta 标签、X-Robots-Tag 与 robots.txt 三种写法的生效差异,给出可执行的自查顺序,并说明什么情况下该用 404 而不是 noindex。

网站收录

noindex 写了却没生效:三种写法的差异与排查顺序

把 noindex 加上去,过几天在搜索结果里还能看到那个页面,这是很常见的情况。多数时候不是搜索引擎“不听话”,而是标签没被读到、读到了没被采纳,或者几种屏蔽方式互相打架。先搞清楚自己在用哪一种写法,再按顺序排查,通常比反复改代码更快。

三种写法管的不是一回事

meta robots 标签

写在 HTML 的 head 里,形如 meta name="robots" content="noindex"。它跟着这份 HTML 走,页面能被抓取才会被读到。如果正文由 JS 渲染,或者标签被放进了 body,都可能读不到。

X-Robots-Tag 响应头

在服务器或 CDN 上配置,对 PDF、图片这类非 HTML 文件也能生效,还可以按目录批量下发。好处是省事,风险也在省事:一条规则配错路径,整段站点都可能受影响,改之前先确认作用范围。

robots.txt 的 Disallow 不是 noindex

很多人把 robots.txt 当成屏蔽收录的工具,这恰好是最容易出问题的地方。Disallow 只阻止抓取,页面依然可能留在索引里,因为搜索引擎看不到页面上的 noindex,但它能从外链锚文本、标题等线索知道这个 URL 存在。更麻烦的是,Disallow 会挡住抓取,让你的 noindex 永远没机会被读到。

想彻底从索引里去掉一个 URL,顺序是:先允许抓取,再让页面返回 noindex(或 404/410),等抓取重新生效后逐步移除。反过来做,往往两边都不生效。

加了 noindex 还在索引里的常见原因

  • robots.txt 同时 Disallow 了该路径,标签根本没被读到。
  • 标签写在 body 里,或由 JS 动态注入,抓取拿到的初始 HTML 中并不存在。
  • CDN、页面缓存或预渲染服务返回的还是旧版本 HTML。
  • 该内容有多个 URL 版本(带参数、大小写、结尾斜杠不同),noindex 只加在了其中一个。
  • 页面自身有 canonical 指向别处,或别的页面 canonical 指向它,规则互相冲突。
  • 标签拼写有误,例如 no index、no-index。
  • noindex 刚生效不久,索引更新需要时间,搜索词高度匹配时仍可能短暂出现。

自查顺序

  1. 用抓取工具或 URL 检查功能,看搜索引擎实际拿到的响应里有没有那句 noindex。以响应内容为准,不以本地代码为准。
  2. 确认抓取没有被 robots.txt 挡住,挡了就先把 Disallow 去掉。
  3. 确认标签位于 head 中,并且不是运行时才出现。
  4. 检查响应头里有没有 X-Robots-Tag,同名规则可能覆盖或叠加。
  5. 检查 canonical 与 noindex 是否指向同一个 URL,冲突时先把意图统一。
  6. 排查缓存层,强制刷新,让访客和爬虫拿到同一版 HTML。
  7. 批量页面要抽几个样本逐一验证,别假设一条配置对所有 URL 都生效。

noindex 还是 404,怎么选

页面只是暂时不想被搜到、内容以后还要用,用 noindex;内容确定永久下线,直接返回 404 或 410 更干脆,也不用长期维护标签。如果页面只是换了地址,应该用 301 把流量和信号带过去,而不是加个 noindex 放在那里不管。

最后提醒一点:noindex 表达的是“请不要收录”,不等于“立刻消失”。移除是逐步发生的,期间页面仍可能出现在结果里。隔一段时间回来查一次 URL 状态,比当天反复改配置更有参考价值。