页面从索引里消失,很多站点的第一反应是“被惩罚了”,但更常见的原因其实是指令用错了位置。robots.txt、noindex、状态码这三类动作各自管的环节不同,混着用就会出现意料之外的结果。
三个手段各管哪一环
先把职责分清楚,后面的排查才不会乱。
robots.txt:只控制抓取,不控制索引
robots.txt 里的 Disallow,意思是“别来抓这个地址”。它并不承诺把页面从索引里拿掉。如果这个 URL 之前已经被收录,或者站外有链接指向它,搜索引擎仍可能保留一个只有标题和链接、没有摘要的索引条目。想让它彻底消失,只靠屏蔽抓取做不到。
更麻烦的是,被 Disallow 的页面,爬虫读不到页面里的 meta robots 标签,于是你在页面里写的 noindex 也一并失效。这是最典型的矛盾组合。
noindex:控制索引,前提是页面能被抓取
noindex 可以写在 HTML 的 meta 标签里,也可以通过 HTTP 响应头 X-Robots-Tag 下发。它的含义是“抓可以抓,但别放进索引”。响应头版本对 PDF、图片这类非 HTML 资源更适用,因为那些文件里没地方写 meta。
关键前提是:noindex 要生效,爬虫必须能访问到这一页。URL 一旦被 robots.txt 挡住,指令就送不进去。
状态码:页面确实不存在时的处理
- 404:页面已经没了,保留一段时间,让搜索引擎自行确认后移除
- 410:同样表示消失,语义更明确
- 301:页面搬了家,把索引和信号指向新地址
- 302/307:临时跳转,不适合长期拿来做迁移
要区分开:noindex 的页面还在,只是不进索引;404 是页面真的不在了。两者导致的索引变化节奏并不一样。
常见的错误组合
- 想删页面,既在 robots.txt 里屏蔽,又在页面里写 noindex:爬虫读不到 noindex,索引里反而可能留下一个没有摘要的空条目
- 想删页面,只做 robots.txt 屏蔽,页面本身不作任何处理:URL 可能长期留在索引里
- 只写 noindex,但不允许抓取:等于没写
- 用 302 做永久迁移:新地址收录慢,旧地址迟迟不退
判断口诀:想让页面消失,先保证它能被抓到,再用 noindex 或合适的状态码处理。robots.txt 不是删除工具。
逐项排查顺序
- 确认页面当前的索引状态,用站内搜索指令或 URL 检查工具看,别只依赖后台自己的报告
- 查 robots.txt 是否屏蔽了这个路径,注意通配符和目录写法的覆盖范围
- 查响应头里的 X-Robots-Tag,以及页面 meta robots 的实际内容
- 确认返回码是 200 还是 404/410/301,路径上有没有意料之外的跳转链
- 查 canonical 是否指向了别的 URL,导致索引被归到其他地方
- 记录以上改动的时间点,索引更新有延迟,当天通常看不到结果
改完怎么确认
改动生效后,用抓取测试类工具查看返回的 HTML 和响应头里指令是否符合预期;再对比 URL 检查结果里的抓取版本是否与线上一致。如果 noindex 是通过响应头下发的,这类工具一般也能直接看到。
索引状态的变化不是实时的。撤销 noindex 之后,重新进入索引同样需要时间。记录改动日期、按周观察,比反复调整设置更有效。
把“抓取”和“索引”两个环节分开来看,这类问题大多能自己定位。真正容易踩坑的,不是指令本身,而是把控制抓取的手段当成了删除页面的手段。