網站收錄

robots.txt 與 noindex 冲突时:收錄核對先確認哪條指令真正生效

robots.txt 管抓取、noindex 管索引,两者叠加时顺序反了就會互相抵消。本文按抓取层到索引层梳理核對顺序:先確認爬虫能否請求到頁面,再看响應头與原始 HTML 里的指令,最後判断索引侧是延迟還是未生效,並列出常见誤用。

網站收錄

robots.txt 與 noindex 冲突时:收錄核對先確認哪條指令真正生效

把頁面從索引里拿掉时,很多人會同时做两件事:在 robots.txt 里屏蔽,在頁面上加 noindex。结果是頁面照舊出現在搜尋结果里,于是怀疑指令没生效。實际上這两條指令作用在不同阶段,顺序反了就會互相抵消。

两條指令分別在管什么

robots.txt 管的是能不能抓,它决定爬虫是否去請求這個 URL;noindex 管的是能不能索引,它寫在响應头或 HTML 里,必须被爬虫實际讀到才會起作用。

如果 robots.txt 禁止抓取,爬虫不會請求頁面,也就讀不到頁面上的 noindex。這时頁面可能因為外鏈和歷史信号仍留在索引中,只是缺少摘要或顯示為舊快照。想让它登出索引,反而要先允许抓取。

核對顺序:從抓取层往索引层走

  1. 確認 robots.txt 是否允许该 URL 被抓取,包括是否被通配符或目錄規則誤伤。
  2. 確認响應头里有没有 X-Robots-Tag,它的覆盖范围和優先級常被忽略。
  3. 確認 HTML head 里的 meta robots 是否真的出現在原始 HTML 中,而不是由脚本後插入。
  4. 確認頁面對爬虫返回的狀態碼是 200,而不是 403、503 或跳轉。
  5. 最後再去看索引侧的狀態,判断是刷新延迟還是指令根本没被讀到。

常见的几處誤用

  • 在 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 還在索引里”的情况,就能快速定位是抓取层没放行、指令没被讀到,還是只是索引刷新還没轮到。