做抓取排查时,很多人只盯着 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,就会漏掉问题。
排查顺序建议
- 先取回原始响应头,用 curl 或浏览器开发者工具查看完整头部,不要只看浏览器渲染后的页面。至少分别用桌面与移动 UA 各测一次。
- 把响应头里的 X-Robots-Tag 与页面 head 中的 meta robots 逐条对齐,重点看 noindex、nofollow、noarchive 以及 UA 限定字段。
- 横向比对同一模板下的多个 URL,确认是整站问题、目录级问题,还是个别页面问题。
- 逐层向下找规则来源:CDN 边缘规则、WAF 策略、Web 服务器配置、框架中间件、模板输出,通常规则藏在其中一层而不是全部。
- 确认规则来源后,只改真正该改的那一层,避免同一指令在多处重复下发,留下下一次排查的隐患。
修复之后怎么确认
去掉限制性指令只是第一步。已经被限制过的 URL,需要重新被抓取一次,状态才会更新,这个过程不会立刻完成。可以先把这些路径重新纳入 Sitemap 或站内入口,让它们重新出现在爬虫的常规路径上,再回到服务器日志里观察该路径的抓取记录是否恢复。
观察期建议看三件事:该路径的抓取命中是否回升、响应状态是否稳定在 200、以及内链入口是否仍有指向。三者都正常,基本可以确认入口已经接回来。
判断一条规则是否生效,不要靠页面看起来对不对,要靠响应头里到底写了什么。抓取问题是工程问题,先看原始数据,再谈结论。
顺带提醒一句:noindex 并不等于禁止抓取,页面仍可能被抓取,只是不会进入索引。长期处在 noindex 状态的 URL,抓取频次往往会慢慢下降,等到想恢复时,需要一段不短的重新发现期。所以在批量下发这类指令前,最好明确它作用于哪些路径、由哪一层负责回收。