做抓取排查时,很多人只盯着 robots.txt 和頁面里的 meta 标簽,却忽略了 HTTP 响應头里的 X-Robots-Tag。這两處規則一旦互相打架,搜尋蜘蛛通常會挑更嚴格的那條执行,结果就是頁面明明在 Sitemap 里、内鏈也正常,却始终等不来抓取。
两種指令的作用范围並不一样
先把基本盘理清楚,後面的判断才不容易跑偏:
- X-Robots-Tag 通過 HTTP 响應头下發,不依赖頁面内容,因此可以作用于 PDF、图片、视频等非 HTML 资源,也能按目錄或按爬虫 UA 做区分,比如只對某個爬虫下發 noindex。
- meta robots 只寫在 HTML 的 head 里,對非 HTML 文件完全無效,而且必须等响應体被解析到才能被讀到。
- 两者可以並存。当指令方向冲突时,一般以限制性更强的一方為准,例如一處寫 index、另一處寫 noindex,生效的是 noindex。
常见的冲突场景
邊缘节点批量加头
CDN、WAF 或反向代理的預設安全策略里,有时會带上一段“測試用”的 noindex 响應头,上线後忘记摘掉。它可能只覆盖某個路径前缀,或者只在命中缓存回源时才出現,于是同一批 URL 时而正常、时而被限制,抓取日誌上表現為忽有忽無。
改版迁移後舊規則没清
站点整体搬迁或目錄结构調整後,舊的 .htaccess、nginx add_header、應用中間件里残留的規則仍在生效,作用對象却已经指向新路径。此时新頁面的 meta 寫的是正常索引,响應头却是另一回事。
PC 與移動、主域與子域規則不一致
多端模板或子目錄各自维護一份配置,很容易出現一端放行、一端拦截。搜尋蜘蛛以移動端 UA 抓取时拿到的头,與桌面端抓取的结果不同,核查时如果只测了一種 UA,就會漏掉問题。
排查顺序建议
- 先取回原始响應头,用 curl 或浏览器開發者工具查看完整头部,不要只看浏览器渲染後的頁面。至少分別用桌面與移動 UA 各测一次。
- 把响應头里的 X-Robots-Tag 與頁面 head 中的 meta robots 逐條對齐,重点看 noindex、nofollow、noarchive 以及 UA 限定字段。
- 横向比對同一模板下的多個 URL,確認是整站問题、目錄級問题,還是個別頁面問题。
- 逐层向下找規則来源:CDN 邊缘規則、WAF 策略、Web 服務器配置、框架中間件、模板輸出,通常規則藏在其中一层而不是全部。
- 確認規則来源後,只改真正该改的那一层,避免同一指令在多處重复下發,留下下一次排查的隐患。
修复之後怎么確認
去掉限制性指令只是第一步。已经被限制過的 URL,需要重新被抓取一次,狀態才會更新,這個過程不會立刻完成。可以先把這些路径重新纳入 Sitemap 或站内入口,让它們重新出現在爬虫的常規路径上,再回到服務器日誌里观察该路径的抓取记錄是否恢复。
观察期建议看三件事:该路径的抓取命中是否回升、响應狀態是否稳定在 200、以及内鏈入口是否仍有指向。三者都正常,基本可以確認入口已经接回来。
判断一條規則是否生效,不要靠頁面看起来對不對,要靠响應头里到底寫了什么。抓取問题是工程問题,先看原始資料,再谈结论。
顺带提醒一句:noindex 並不等于禁止抓取,頁面仍可能被抓取,只是不會進入索引。長期處在 noindex 狀態的 URL,抓取频次往往會慢慢下降,等到想恢复时,需要一段不短的重新發現期。所以在批量下發這類指令前,最好明确它作用于哪些路径、由哪一层负责回收。