搜索抓取

搜索蜘蛛抓取:X-Robots-Tag 响应头与 robots meta 冲突造成的入口屏蔽排查

页面能被蜘蛛抓取却长期不进入索引,有时不是内容问题,而是 robots.txt、meta robots 与 X-Robots-Tag 三类指令互相冲突。本文说明各指令的生效范围,梳理 index 与 noindex、nofollow、按 UA 分组误伤等叠加场景,并给出一套按响应头、模板、CDN 分层核对的排查顺序。

搜索抓取

搜索蜘蛛抓取:X-Robots-Tag 响应头与 robots meta 冲突造成的入口屏蔽排查

有些页面在抓取日志里能看到蜘蛛来过,但索引状态长期停在“已发现未抓取”或“已抓取未编入索引”,同站其他页面却正常。这类情况有时并非内容质量或内链问题,而是 robots 相关指令互相打架:一个来源说可以索引,另一个来源说不要索引,蜘蛛通常按更严格的规则执行,入口就在这一步被掐断。

先分清三类指令的生效范围

  • robots.txt:控制抓取行为,按路径与 UA 分组匹配,本身不直接控制索引。
  • meta robots:写在页面 head 中,控制该 URL 的索引与链接跟随。
  • X-Robots-Tag:HTTP 响应头形式,粒度更细,可按目录、文件类型甚至特定状态码统一下发。

三者作用层级不同,但只要出现 noindex,页面基本不会进入索引,哪怕 robots.txt 明确允许抓取。反过来,如果 robots.txt 屏蔽了某目录,页面里的 meta noindex 也就读不到,等于白写。

容易互相覆盖的几种组合

1. 页面写 index,响应头带 noindex

常见于反向代理或 CDN 层统一注入了 noindex,而站点模板里仍写着 index。蜘蛛读取响应头更早,会按响应头的 noindex 处理,页面表现为抓取正常但不收录。

2. robots.txt 屏蔽抓取,却依赖页面 noindex 退出索引

这是顺序错位:屏蔽后蜘蛛无法读到 meta 指令,退出索引的诉求落空,页面反而可能以无摘要形式出现。需要退出索引时,正确做法是保持 200 状态并返回 noindex。

3. nofollow 误伤关键内链

列表页、分页入口、聚合页如果被 X-Robots-Tag 标成 nofollow,深层 URL 的发现路径会明显减少,抓取量不一定立刻下降,但新页面进入队列的时间会被拉长。

4. 按 UA 分组的规则误伤

部分配置会对特定蜘蛛返回不同响应头。用浏览器 UA 自查时一切正常,换成蜘蛛 UA 才暴露 noindex,这也是排查时最容易漏掉的一步。

建议的排查顺序

  1. 用蜘蛛 UA 请求目标 URL,完整查看响应头,重点确认 X-Robots-Tag 中是否含 noindex、nofollow、noarchive。
  2. 核对 head 中的 meta robots 与 canonical 是否一致,是否存在重复声明。
  3. 检查 robots.txt 是否放行该路径,注意分组行、通配符与结尾斜杠的差异。
  4. 逐层对比源站、反向代理、CDN、WAF 的响应头,确认是哪一层注入的规则。
  5. 抽样同类页面若干条,判断是个别 URL 还是模板级批量问题。
  6. 调整后重新请求验证,并观察抓取日志中该目录的状态码与入口数量变化。

修复时的几个注意点

  • 同一份响应尽量只保留一个指令来源,避免多层重复下发相互矛盾的规则。
  • 页面需要退出索引时,用可抓取的 200 加 noindex,而不是用 robots.txt 屏蔽。
  • 分页、标签、列表页若只是不想被索引,也不要顺手加 nofollow,以免切断 URL 发现路径。
  • 修改缓存策略后,确认边缘缓存中的旧响应头已被替换,否则复测结果会失真。
指令排查的核心只有一句话:确认最终返回给蜘蛛的那一份响应里到底写了什么。本地模板和后台配置都只是中间环节。

把验证做成固定动作

每次调整 robots 相关配置后,用蜘蛛 UA 复测一次,并在随后一到两周内对比抓取日志里入口 URL 数量与状态码分布。如果入口数量下滑,优先回看这次改动涉及的响应头与 CDN 规则,而不是急着加外链或改正文内容,这样更容易定位真正的原因。