蜘蛛池知识

蜘蛛池入口頁的 X-Robots-Tag:藏在响應头里的抓取開關

X-Robots-Tag 是寫在 HTTP 响應头里的抓取開關,比 robots.txt 和 meta robots 更隐蔽,却常被 CDN、反向代理或建站程序預設加上,让入口頁陷入能抓不能收的狀態。本文讲清三者的区別,梳理四類常见踩坑场景,给出用 curl 排查响應头的步骤與日常使用建议。

蜘蛛池知识

蜘蛛池入口頁的 X-Robots-Tag:藏在响應头里的抓取開關

排查蜘蛛抓取問题时,多數人先看 robots.txt,再看頁面里的 meta robots,却容易漏掉第三個地方——HTTP 响應头里的 X-Robots-Tag。它和前面两者作用類似,但更隐蔽:不打開開發者工具或抓包,几乎看不到它的存在。

X-Robots-Tag 是什么

X-Robots-Tag 是搜尋引擎约定的一個 HTTP 响應头,用来告诉蜘蛛這條 URL 该怎么處理。它最大的特点是可以作用在非 HTML 资源上,比如 PDF、图片、视频,寫法上直接放在响應头里:

X-Robots-Tag: noindex, nofollow

也可以只针對某個蜘蛛生效:

X-Robots-Tag: googlebot: noindex

它和 robots.txt、meta robots 的区別

  • robots.txt 控制能不能抓,属于抓取层面的開關,放在站点根目錄。
  • meta robots 寫在 HTML 的 head 里,控制抓到之後怎么用,属于索引层面。
  • X-Robots-Tag 走响應头,同样属于索引层面,但覆盖面更广,也能作用在非 HTML 文件上。

三者叠加时,一般以更嚴格的那條為准。所以如果 robots.txt 放行了,頁面 meta 也寫了 index,蜘蛛依然不進索引,就该怀疑响應头。

入口頁常见的几個踩坑场景

1. 反向代理或 CDN 預設加头

部分 CDN、WAF 或安全插件,在檢測到可疑流量时會自動给响應加上 noindex,本意是防爬防盗,结果把正常蜘蛛一起挡了。這類头往往只在特定條件下出現,比如触發频率限制之後,所以日誌里看着正常,實际返回已经變了。

2. Nginx 的 add_header 繼承問题

Nginx 里 add_header 預設不會從父級 location 繼承到子級。只在 server 段寫一處,某個 location 下的入口頁可能就没有這個头;反過来,如果為別的原因加過,又容易在不需要的地方重复出現。

3. 建站程序或框架的預設配置

部分 CMS、建站系統和測試环境模板,會預設輸出 noindex 防止測試站被收錄。上线时忘记關掉,入口頁就一直是能抓不能收的狀態。

4. 泛目錄或 URL 重寫規則誤伤

重寫規則把不存在的路径统一轉發到某個處理程序,如果這個程序對所有响應都加了同一條头,等于给整批入口頁都上了鎖。

怎么排查

  1. 用 curl -I 直接看响應头,確認有没有 X-Robots-Tag。
  2. 換 UA 再测一次,有些配置只對特定 UA 生效。
  3. 對比不同目錄、不同入口頁的返回,看是個別問题還是整站問题。
  4. 检查 Nginx、Apache 配置里的 add_header、Header set,以及 CDN 後台的自定义响應头設定。
  5. 用搜尋资源平台自带的檢測工具看官方返回的抓取结果,比凭感觉猜更靠谱。

使用建议

  • 入口頁正常情况下不要带 noindex,除非确實不希望它進索引。
  • 如果只想控制抓取节奏,用 robots.txt 或抓取频率設定,別和 noindex 混着来。
  • 修改响應头後要清缓存,CDN 和浏览器都可能缓存舊头,導致測試结果失真。
  • 把响應头检查加進日常巡检清單,和狀態碼、超时放在一起看。
X-Robots-Tag 本身不會提高收錄或排名,它只是一個開關。真正影响抓取效果的是入口頁能否稳定訪問、連結是否可達、内容是否值得抓取。

總结一下:入口頁抓取出問题时,別只盯着 robots.txt 和 meta 标簽,响應头同样是常见故障点。养成用 curl 或抓包看原始响應的习惯,能省下不少来回猜测的時間。