網站收錄

robots 指令互相打架时:robots.txt、meta 與 X-Robots-Tag 的核對顺序

收錄狀態和設定對不上时,問题常常出在指令本身冲突。本文說明 robots.txt、meta robots、X-Robots-Tag 三者的作用范围,梳理禁止抓取加 noindex、响應头與頁面标簽取值不同、noindex 與 canonical 並存等常见组合,並给出一套從响應到索引报表的核對顺序。

網站收錄

robots 指令互相打架时:robots.txt、meta 與 X-Robots-Tag 的核對顺序

收錄狀態和预期不一致时,很多人第一反應是去查内容质量或内鏈,但有一類問题更靠前:蜘蛛拿到的指令本身互相矛盾。robots.txt、meta robots、X-Robots-Tag 都能表達“別收錄”,可它們的生效层級和作用范围並不一样,叠加在一起就容易出現“明明寫了 noindex,搜尋结果里還在”的情况。

三種指令各自管什么

  • robots.txt:管的是抓取。寫了 Disallow,蜘蛛通常不再来取頁面内容,但它本身不等于把頁面排除出索引。
  • meta robots:寫在 HTML 的 head 里,只對這個頁面生效,而且必须是服務端返回的原始 HTML。用脚本後期插入的 meta 标簽,往往讀不到。
  • X-Robots-Tag:通過 HTTP 响應头下發,對 HTML、PDF、图片都有效,也常被 CDN、網關或框架的預設配置顺手加上。

几種典型的冲突组合

robots.txt 禁止 + meta noindex

這是最容易踩的组合。抓取被屏蔽後,蜘蛛拿不到内容,也就讀不到 noindex,于是 URL 可能只凭外鏈或歷史信息留在索引里,顯示為没有摘要的條目。要下线頁面,更稳妥的顺序是先允许抓取、让 noindex 被讀到,等索引狀態變化後再用 robots.txt 屏蔽。

X-Robots-Tag 與 meta robots 取值不同

两個都寫了但结论相反时,排除類指令通常更占上風。如果服務器或 CDN 對所有响應預設加了 noindex,頁面里的 index 压不過它,這时该去查响應头,而不是反复看頁面源碼。

noindex 與 canonical 同时出現

這種情况下 canonical 基本不參與判断,因為頁面本身就不该進索引。想让 A 版本被收錄、B 版本合並到 A,就不该在 B 上同时挂 noindex。

核對顺序

  1. 確認目标 URL 返回 200,响應正文是完整頁面,不是驗證頁、拦截頁或占位頁。
  2. 用带 UA 的請求看响應头,重点看 X-Robots-Tag,包括 CDN、WAF、反爬层加的那一份。
  3. 看原始 HTML 的 head,確認 meta robots 是服務端輸出的,而不是脚本注入的。
  4. 對照 robots.txt 中與你所用爬虫 UA 匹配的分组,注意分组匹配規則與大小寫。
  5. 把 canonical 與 robots 指令放在一起看,判断目前意图是“收錄這個版本”還是“整個排除”。
  6. 最後回到索引报表核對狀態,注意报表本身有延迟,不要用当天資料下结论。

容易被忽略的位置

  • CDN 或反向代理的預設响應头模板,新上线站点常常整站带上了 noindex。
  • 移動端與桌面端模板不同,一端正常、一端被排除。
  • 站点地图里放進了被 noindex 的 URL,等于给蜘蛛送了一份自相矛盾的清單。
  • 篩選頁、排序頁、打印頁复用了主模板的 robots 配置。
核對這類問题时,判断依據應该是“蜘蛛實际收到了什么”,而不是“我們在代碼里寫了什么”。

把指令层級理清,再按抓取、响應头、頁面、报表的顺序逐层確認,多數“設定和收錄對不上”的情况都能落到具体某一层,而不必笼统归因到内容质量或运气上。