搜索抓取

搜索蜘蛛抓取:X-Robots-Tag 与 meta robots 冲突造成的入口漏抓排查

X-Robots-Tag 走 HTTP 响应头,meta robots 只作用于 HTML 页面的 head,两者作用范围不同却常被当成一回事。当 CDN、反代或应用中间件批量下发限制性指令,而页面里又写着相反的规则时,搜索蜘蛛往往按更严格的一方执行,入口就这样被悄悄掐掉。本文梳理常见冲突场景与可复用的排查顺序。

搜索抓取

搜索蜘蛛抓取:X-Robots-Tag 与 meta robots 冲突造成的入口漏抓排查

做抓取排查时,很多人只盯着 robots.txt 和页面里的 meta 标签,却忽略了 HTTP 响应头里的 X-Robots-Tag。这两处规则一旦互相打架,搜索蜘蛛通常会挑更严格的那条执行,结果就是页面明明在 Sitemap 里、内链也正常,却始终等不来抓取。

两种指令的作用范围并不一样

先把基本盘理清楚,后面的判断才不容易跑偏:

  • X-Robots-Tag 通过 HTTP 响应头下发,不依赖页面内容,因此可以作用于 PDF、图片、视频等非 HTML 资源,也能按目录或按爬虫 UA 做区分,比如只对某个爬虫下发 noindex。
  • meta robots 只写在 HTML 的 head 里,对非 HTML 文件完全无效,而且必须等响应体被解析到才能被读到。
  • 两者可以并存。当指令方向冲突时,一般以限制性更强的一方为准,例如一处写 index、另一处写 noindex,生效的是 noindex。

常见的冲突场景

边缘节点批量加头

CDN、WAF 或反向代理的默认安全策略里,有时会带上一段“测试用”的 noindex 响应头,上线后忘记摘掉。它可能只覆盖某个路径前缀,或者只在命中缓存回源时才出现,于是同一批 URL 时而正常、时而被限制,抓取日志上表现为忽有忽无。

改版迁移后旧规则没清

站点整体搬迁或目录结构调整后,旧的 .htaccess、nginx add_header、应用中间件里残留的规则仍在生效,作用对象却已经指向新路径。此时新页面的 meta 写的是正常索引,响应头却是另一回事。

PC 与移动、主域与子域规则不一致

多端模板或子目录各自维护一份配置,很容易出现一端放行、一端拦截。搜索蜘蛛以移动端 UA 抓取时拿到的头,与桌面端抓取的结果不同,核查时如果只测了一种 UA,就会漏掉问题。

排查顺序建议

  1. 先取回原始响应头,用 curl 或浏览器开发者工具查看完整头部,不要只看浏览器渲染后的页面。至少分别用桌面与移动 UA 各测一次。
  2. 把响应头里的 X-Robots-Tag 与页面 head 中的 meta robots 逐条对齐,重点看 noindex、nofollow、noarchive 以及 UA 限定字段。
  3. 横向比对同一模板下的多个 URL,确认是整站问题、目录级问题,还是个别页面问题。
  4. 逐层向下找规则来源:CDN 边缘规则、WAF 策略、Web 服务器配置、框架中间件、模板输出,通常规则藏在其中一层而不是全部。
  5. 确认规则来源后,只改真正该改的那一层,避免同一指令在多处重复下发,留下下一次排查的隐患。

修复之后怎么确认

去掉限制性指令只是第一步。已经被限制过的 URL,需要重新被抓取一次,状态才会更新,这个过程不会立刻完成。可以先把这些路径重新纳入 Sitemap 或站内入口,让它们重新出现在爬虫的常规路径上,再回到服务器日志里观察该路径的抓取记录是否恢复。

观察期建议看三件事:该路径的抓取命中是否回升、响应状态是否稳定在 200、以及内链入口是否仍有指向。三者都正常,基本可以确认入口已经接回来。

判断一条规则是否生效,不要靠页面看起来对不对,要靠响应头里到底写了什么。抓取问题是工程问题,先看原始数据,再谈结论。

顺带提醒一句:noindex 并不等于禁止抓取,页面仍可能被抓取,只是不会进入索引。长期处在 noindex 状态的 URL,抓取频次往往会慢慢下降,等到想恢复时,需要一段不短的重新发现期。所以在批量下发这类指令前,最好明确它作用于哪些路径、由哪一层负责回收。