网站收录

X-Robots-Tag 与 meta 指令冲突:收录指令的两处来源与核对顺序

页面里明明没有 noindex,收录却一直不进来?问题可能出在 HTTP 响应头。X-Robots-Tag 与 meta robots 是两套入口,指令会叠加而不是互相覆盖。本文梳理冲突规则、三类容易被漏掉的来源,并给出四步核对顺序,帮你把排查范围从页面源码扩展到整条响应链路。

网站收录

X-Robots-Tag 与 meta 指令冲突:收录指令的两处来源与核对顺序

排查页面不收录时,大多数人的第一反应是打开 HTML 源码,确认有没有 noindex。但索引指令不止存在于页面里,它还可以写在 HTTP 响应头中。当两处指令不一致时,只看其中一处很容易得出错误结论。

两处指令,同一个字段

搜索引擎读取的 robots 指令有两个入口:

  • 页面内:HTML 中的 meta robots 标签,只作用于 HTML 页面。
  • 响应头里:X-Robots-Tag,作用于任何通过 HTTP 返回的资源,包括 PDF、图片、视频、接口文档等无法插入 meta 的文件。

两者内容格式基本一致,都支持 noindex、nofollow、noarchive、nosnippet 等指令,也可以限定只对某个搜索引擎 UA 生效。

冲突时以谁为准

关键结论是:指令是叠加的,不是互相覆盖的。同一个页面上,meta 里写 index、响应头里写 noindex,结果按 noindex 处理;反过来也一样。限制越严格的指令优先级越高。

同理,多个 X-Robots-Tag 响应头会逐条累加;同一行里用逗号分隔的多条指令也会一起生效。如果分隔符写错,某条指令可能被直接丢弃,这类细节最好实测确认,而不是凭记忆判断。

排查时不要问“哪一条指令生效”,而要问“所有指令加起来包含了什么限制”。

最容易漏掉的三类来源

1. 全站统一加的响应头

CDN、WAF、反向代理或某些缓存插件会默认给所有响应追加 X-Robots-Tag。配置一次,全站资源都可能带上 noindex。这类问题的特征是:页面内容正常、内链也是通的,但所有 URL 的收录状态异常一致。

2. 按目录或扩展名定向加的头

例如只对某个目录或 .pdf 结尾的请求加 noindex。此时首页、栏目页收录正常,某一批资源集体不进索引,很容易被误判成“内容质量不行”。

3. 不同 UA、不同节点看到的不一样

部分防护策略会对非浏览器 UA 返回不同的响应头,或者不同 CDN 节点缓存了不同版本的头。你本地拿到的是 A 版本,蜘蛛拿到的是 B 版本,两边结论自然对不上。

四步核对顺序

  1. 看原始响应头:用不缓存的方式请求目标 URL,确认返回头里有没有 X-Robots-Tag。命令行工具拿到的第一手响应,比“页面源码里没看到 noindex”更可靠。
  2. 对比 UA:分别用普通 UA 和搜索引擎 UA 请求同一个 URL,看响应头是否一致。不一致就说明中间有设备在做条件判断。
  3. 覆盖非 HTML 资源:把站内的 PDF、图片、文档按类型抽样,单独检查它们的响应头。这些文件没有 meta 可以兜底,只能靠头来控制。
  4. 看蜘蛛实际拿到的版本:在搜索后台的网址检查里查看已抓取的内容与抓取详情,确认蜘蛛当时收到的是哪个版本,而不是你现在能看到的版本。

两个边界提醒

一,响应头里的 noindex 需要蜘蛛真正抓取到才能被读到。如果同时用 robots.txt 拦住了抓取,指令就没有机会生效,这两件事要分开处理。二,把 noindex 去掉之后,恢复通常不是即时的,需要等下一次抓取与重新处理,不要因为当天没变化就反复改动配置。

把“页面里没有 noindex”扩展成“整条响应链路上都没有 noindex”,很多看起来莫名其妙的收录问题,往往能当场定位到源头。