把 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 刚生效不久,索引更新需要时间,搜索词高度匹配时仍可能短暂出现。
自查顺序
- 用抓取工具或 URL 检查功能,看搜索引擎实际拿到的响应里有没有那句 noindex。以响应内容为准,不以本地代码为准。
- 确认抓取没有被 robots.txt 挡住,挡了就先把 Disallow 去掉。
- 确认标签位于 head 中,并且不是运行时才出现。
- 检查响应头里有没有 X-Robots-Tag,同名规则可能覆盖或叠加。
- 检查 canonical 与 noindex 是否指向同一个 URL,冲突时先把意图统一。
- 排查缓存层,强制刷新,让访客和爬虫拿到同一版 HTML。
- 批量页面要抽几个样本逐一验证,别假设一条配置对所有 URL 都生效。
noindex 还是 404,怎么选
页面只是暂时不想被搜到、内容以后还要用,用 noindex;内容确定永久下线,直接返回 404 或 410 更干脆,也不用长期维护标签。如果页面只是换了地址,应该用 301 把流量和信号带过去,而不是加个 noindex 放在那里不管。
最后提醒一点:noindex 表达的是“请不要收录”,不等于“立刻消失”。移除是逐步发生的,期间页面仍可能出现在结果里。隔一段时间回来查一次 URL 状态,比当天反复改配置更有参考价值。