搜尋抓取

搜尋蜘蛛抓取:X-Robots-Tag 响應头與 robots meta 冲突造成的入口屏蔽排查

頁面能被蜘蛛抓取却長期不進入索引,有时不是内容問题,而是 robots.txt、meta robots 與 X-Robots-Tag 三類指令互相冲突。本文說明各指令的生效范围,梳理 index 與 noindex、nofollow、按 UA 分组誤伤等叠加场景,並给出一套按响應头、模板、CDN 分层核對的排查顺序。

搜尋抓取

搜尋蜘蛛抓取:X-Robots-Tag 响應头與 robots meta 冲突造成的入口屏蔽排查

有些頁面在抓取日誌里能看到蜘蛛来過,但索引狀態長期停在“已發現未抓取”或“已抓取未编入索引”,同站其他頁面却正常。這類情况有时並非内容质量或内鏈問题,而是 robots 相關指令互相打架:一個来源说可以索引,另一個来源说不要索引,蜘蛛通常按更嚴格的規則执行,入口就在這一步被掐断。

先分清三類指令的生效范围

  • robots.txt:控制抓取行為,按路径與 UA 分组匹配,本身不直接控制索引。
  • meta robots:寫在頁面 head 中,控制该 URL 的索引與連結跟随。
  • X-Robots-Tag:HTTP 响應头形式,粒度更细,可按目錄、文件類型甚至特定狀態碼统一下發。

三者作用层級不同,但只要出現 noindex,頁面基本不會進入索引,哪怕 robots.txt 明确允许抓取。反過来,如果 robots.txt 屏蔽了某目錄,頁面里的 meta noindex 也就讀不到,等于白寫。

容易互相覆盖的几種组合

1. 頁面寫 index,响應头带 noindex

常见于反向代理或 CDN 层统一注入了 noindex,而站点模板里仍寫着 index。蜘蛛讀取响應头更早,會按响應头的 noindex 處理,頁面表現為抓取正常但不收錄。

2. robots.txt 屏蔽抓取,却依赖頁面 noindex 登出索引

這是顺序错位:屏蔽後蜘蛛無法讀到 meta 指令,登出索引的诉求落空,頁面反而可能以無摘要形式出現。需要登出索引时,正确做法是保持 200 狀態並返回 noindex。

3. nofollow 誤伤關键内鏈

列表頁、分頁入口、聚合頁如果被 X-Robots-Tag 标成 nofollow,深层 URL 的發現路径會明顯减少,抓取量不一定立刻下降,但新頁面進入队列的時間會被拉長。

4. 按 UA 分组的規則誤伤

部分配置會對特定蜘蛛返回不同响應头。用浏览器 UA 自查时一切正常,換成蜘蛛 UA 才暴露 noindex,這也是排查时最容易漏掉的一步。

建议的排查顺序

  1. 用蜘蛛 UA 請求目标 URL,完整查看响應头,重点確認 X-Robots-Tag 中是否含 noindex、nofollow、noarchive。
  2. 核對 head 中的 meta robots 與 canonical 是否一致,是否存在重复声明。
  3. 检查 robots.txt 是否放行该路径,注意分组行、通配符與结尾斜杠的差异。
  4. 逐层對比源站、反向代理、CDN、WAF 的响應头,確認是哪一层注入的規則。
  5. 抽样同類頁面若干條,判断是個別 URL 還是模板級批量問题。
  6. 調整後重新請求驗證,並观察抓取日誌中该目錄的狀態碼與入口數量變化。

修复时的几個注意点

  • 同一份响應尽量只保留一個指令来源,避免多层重复下發相互矛盾的規則。
  • 頁面需要登出索引时,用可抓取的 200 加 noindex,而不是用 robots.txt 屏蔽。
  • 分頁、标簽、列表頁若只是不想被索引,也不要顺手加 nofollow,以免切断 URL 發現路径。
  • 修改缓存策略後,確認邊缘缓存中的舊响應头已被替換,否則复测结果會失真。
指令排查的核心只有一句话:確認最终返回给蜘蛛的那一份响應里到底寫了什么。本地模板和後台配置都只是中間环节。

把驗證做成固定動作

每次調整 robots 相關配置後,用蜘蛛 UA 复测一次,並在随後一到两周内對比抓取日誌里入口 URL 數量與狀態碼分布。如果入口數量下滑,優先回看這次改動涉及的响應头與 CDN 規則,而不是急着加外鏈或改正文内容,這样更容易定位真正的原因。