頁面從索引里消失,很多站点的第一反應是“被惩罚了”,但更常见的原因其實是指令用错了位置。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 之後,重新進入索引同样需要時間。记錄改動日期、按周观察,比反复調整設定更有效。
把“抓取”和“索引”两個环节分開来看,這類問题大多能自己定位。真正容易踩坑的,不是指令本身,而是把控制抓取的手段当成了刪除頁面的手段。