把頁面從索引里拿掉时,很多人會同时做两件事:在 robots.txt 里屏蔽,在頁面上加 noindex。结果是頁面照舊出現在搜尋结果里,于是怀疑指令没生效。實际上這两條指令作用在不同阶段,顺序反了就會互相抵消。
两條指令分別在管什么
robots.txt 管的是能不能抓,它决定爬虫是否去請求這個 URL;noindex 管的是能不能索引,它寫在响應头或 HTML 里,必须被爬虫實际讀到才會起作用。
如果 robots.txt 禁止抓取,爬虫不會請求頁面,也就讀不到頁面上的 noindex。這时頁面可能因為外鏈和歷史信号仍留在索引中,只是缺少摘要或顯示為舊快照。想让它登出索引,反而要先允许抓取。
核對顺序:從抓取层往索引层走
- 確認 robots.txt 是否允许该 URL 被抓取,包括是否被通配符或目錄規則誤伤。
- 確認响應头里有没有 X-Robots-Tag,它的覆盖范围和優先級常被忽略。
- 確認 HTML head 里的 meta robots 是否真的出現在原始 HTML 中,而不是由脚本後插入。
- 確認頁面對爬虫返回的狀態碼是 200,而不是 403、503 或跳轉。
- 最後再去看索引侧的狀態,判断是刷新延迟還是指令根本没被讀到。
常见的几處誤用
- 在 robots.txt 里寫 noindex。robots.txt 不支持 noindex 语法,寫進去只是無效文本,還會让人誤以為已经處理。
- 一邊 Disallow 全站一邊加 noindex。两條指令叠加後互相抵消,结果是頁面既不刷新也不登出。
- 只屏蔽某類參數 URL,却指望它們從索引消失。屏蔽只阻止後續抓取,已索引的版本需要單獨處理。
- noindex 頁面仍提交在 sitemap 里。一邊说別收,一邊把 URL 递過去,核對时容易被這類信号带偏。
- meta 标簽由前端框架在客戶端注入。渲染环节不稳定时,爬虫讀到的原始 HTML 里可能什么都没有。
需要临时屏蔽目錄时怎么做
測試环境、未上线栏目這類頁面,如果既不想被收錄也不希望被抓,一般會先用 robots.txt 屏蔽抓取。但要清楚這是以放弃索引控制為代價的:屏蔽之後,頁面上寫的 noindex 不再有机會被讀到。如果目标是彻底移除,路径通常是先放開抓取、返回正常狀態並加上 noindex,等索引侧確認移除後,再视情况恢复屏蔽或改成 410、301。
判断顺序只有一個原則:任何寫在頁面里的指令,都必须先被抓取到,才谈得上生效。核對时先問“爬虫有没有拿到這個响應”,再問“拿到的内容里寫了什么”。
核對时可以顺手记錄的東西
- 该 URL 在 robots.txt 中的匹配規則,以及測試工具给出的判定结果。
- 响應头完整内容,尤其是 X-Robots-Tag 與缓存相關的头部。
- 用抓取工具以爬虫身份請求时拿到的原始 HTML,與浏览器里看到的做對比。
- 指令修改的時間点,以及索引侧狀態變化的時間点,方便判断是延迟還是未生效。
把這些记錄下来,之後再遇到“加了 noindex 還在索引里”的情况,就能快速定位是抓取层没放行、指令没被讀到,還是只是索引刷新還没轮到。