搜尋抓取

搜尋蜘蛛抓取:X-Robots-Tag 與 meta robots 冲突造成的入口漏抓排查

X-Robots-Tag 走 HTTP 响應头,meta robots 只作用于 HTML 頁面的 head,两者作用范围不同却常被当成一回事。当 CDN、反代或應用中間件批量下發限制性指令,而頁面里又寫着相反的規則时,搜尋蜘蛛往往按更嚴格的一方执行,入口就這样被悄悄掐掉。本文梳理常见冲突场景與可复用的排查顺序。

搜尋抓取

搜尋蜘蛛抓取:X-Robots-Tag 與 meta robots 冲突造成的入口漏抓排查

做抓取排查时,很多人只盯着 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,就會漏掉問题。

排查顺序建议

  1. 先取回原始响應头,用 curl 或浏览器開發者工具查看完整头部,不要只看浏览器渲染後的頁面。至少分別用桌面與移動 UA 各测一次。
  2. 把响應头里的 X-Robots-Tag 與頁面 head 中的 meta robots 逐條對齐,重点看 noindex、nofollow、noarchive 以及 UA 限定字段。
  3. 横向比對同一模板下的多個 URL,確認是整站問题、目錄級問题,還是個別頁面問题。
  4. 逐层向下找規則来源:CDN 邊缘規則、WAF 策略、Web 服務器配置、框架中間件、模板輸出,通常規則藏在其中一层而不是全部。
  5. 確認規則来源後,只改真正该改的那一层,避免同一指令在多處重复下發,留下下一次排查的隐患。

修复之後怎么確認

去掉限制性指令只是第一步。已经被限制過的 URL,需要重新被抓取一次,狀態才會更新,這個過程不會立刻完成。可以先把這些路径重新纳入 Sitemap 或站内入口,让它們重新出現在爬虫的常規路径上,再回到服務器日誌里观察该路径的抓取记錄是否恢复。

观察期建议看三件事:该路径的抓取命中是否回升、响應狀態是否稳定在 200、以及内鏈入口是否仍有指向。三者都正常,基本可以確認入口已经接回来。

判断一條規則是否生效,不要靠頁面看起来對不對,要靠响應头里到底寫了什么。抓取問题是工程問题,先看原始資料,再谈结论。

顺带提醒一句:noindex 並不等于禁止抓取,頁面仍可能被抓取,只是不會進入索引。長期處在 noindex 狀態的 URL,抓取频次往往會慢慢下降,等到想恢复时,需要一段不短的重新發現期。所以在批量下發這類指令前,最好明确它作用于哪些路径、由哪一层负责回收。