蜘蛛池知识

蜘蛛池入口页的 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 或抓包看原始响应的习惯,能省下不少来回猜测的时间。