排查蜘蛛抓取問题时,多數人先看 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 重寫規則誤伤
重寫規則把不存在的路径统一轉發到某個處理程序,如果這個程序對所有响應都加了同一條头,等于给整批入口頁都上了鎖。
怎么排查
- 用 curl -I 直接看响應头,確認有没有 X-Robots-Tag。
- 換 UA 再测一次,有些配置只對特定 UA 生效。
- 對比不同目錄、不同入口頁的返回,看是個別問题還是整站問题。
- 检查 Nginx、Apache 配置里的 add_header、Header set,以及 CDN 後台的自定义响應头設定。
- 用搜尋资源平台自带的檢測工具看官方返回的抓取结果,比凭感觉猜更靠谱。
使用建议
- 入口頁正常情况下不要带 noindex,除非确實不希望它進索引。
- 如果只想控制抓取节奏,用 robots.txt 或抓取频率設定,別和 noindex 混着来。
- 修改响應头後要清缓存,CDN 和浏览器都可能缓存舊头,導致測試结果失真。
- 把响應头检查加進日常巡检清單,和狀態碼、超时放在一起看。
X-Robots-Tag 本身不會提高收錄或排名,它只是一個開關。真正影响抓取效果的是入口頁能否稳定訪問、連結是否可達、内容是否值得抓取。
總结一下:入口頁抓取出問题时,別只盯着 robots.txt 和 meta 标簽,响應头同样是常见故障点。养成用 curl 或抓包看原始响應的习惯,能省下不少来回猜测的時間。