网站收录

robots 指令互相打架时:robots.txt、meta 与 X-Robots-Tag 的核对顺序

收录状态和设置对不上时,问题常常出在指令本身冲突。本文说明 robots.txt、meta robots、X-Robots-Tag 三者的作用范围,梳理禁止抓取加 noindex、响应头与页面标签取值不同、noindex 与 canonical 并存等常见组合,并给出一套从响应到索引报表的核对顺序。

网站收录

robots 指令互相打架时:robots.txt、meta 与 X-Robots-Tag 的核对顺序

收录状态和预期不一致时,很多人第一反应是去查内容质量或内链,但有一类问题更靠前:蜘蛛拿到的指令本身互相矛盾。robots.txt、meta robots、X-Robots-Tag 都能表达“别收录”,可它们的生效层级和作用范围并不一样,叠加在一起就容易出现“明明写了 noindex,搜索结果里还在”的情况。

三种指令各自管什么

  • robots.txt:管的是抓取。写了 Disallow,蜘蛛通常不再来取页面内容,但它本身不等于把页面排除出索引。
  • meta robots:写在 HTML 的 head 里,只对这个页面生效,而且必须是服务端返回的原始 HTML。用脚本后期插入的 meta 标签,往往读不到。
  • X-Robots-Tag:通过 HTTP 响应头下发,对 HTML、PDF、图片都有效,也常被 CDN、网关或框架的默认配置顺手加上。

几种典型的冲突组合

robots.txt 禁止 + meta noindex

这是最容易踩的组合。抓取被屏蔽后,蜘蛛拿不到内容,也就读不到 noindex,于是 URL 可能只凭外链或历史信息留在索引里,显示为没有摘要的条目。要下线页面,更稳妥的顺序是先允许抓取、让 noindex 被读到,等索引状态变化后再用 robots.txt 屏蔽。

X-Robots-Tag 与 meta robots 取值不同

两个都写了但结论相反时,排除类指令通常更占上风。如果服务器或 CDN 对所有响应默认加了 noindex,页面里的 index 压不过它,这时该去查响应头,而不是反复看页面源码。

noindex 与 canonical 同时出现

这种情况下 canonical 基本不参与判断,因为页面本身就不该进索引。想让 A 版本被收录、B 版本合并到 A,就不该在 B 上同时挂 noindex。

核对顺序

  1. 确认目标 URL 返回 200,响应正文是完整页面,不是验证页、拦截页或占位页。
  2. 用带 UA 的请求看响应头,重点看 X-Robots-Tag,包括 CDN、WAF、反爬层加的那一份。
  3. 看原始 HTML 的 head,确认 meta robots 是服务端输出的,而不是脚本注入的。
  4. 对照 robots.txt 中与你所用爬虫 UA 匹配的分组,注意分组匹配规则与大小写。
  5. 把 canonical 与 robots 指令放在一起看,判断当前意图是“收录这个版本”还是“整个排除”。
  6. 最后回到索引报表核对状态,注意报表本身有延迟,不要用当天数据下结论。

容易被忽略的位置

  • CDN 或反向代理的默认响应头模板,新上线站点常常整站带上了 noindex。
  • 移动端与桌面端模板不同,一端正常、一端被排除。
  • 站点地图里放进了被 noindex 的 URL,等于给蜘蛛送了一份自相矛盾的清单。
  • 筛选页、排序页、打印页复用了主模板的 robots 配置。
核对这类问题时,判断依据应该是“蜘蛛实际收到了什么”,而不是“我们在代码里写了什么”。

把指令层级理清,再按抓取、响应头、页面、报表的顺序逐层确认,多数“设置和收录对不上”的情况都能落到具体某一层,而不必笼统归因到内容质量或运气上。