同一份 HTML 正文,配不同的响应头,搜索引擎对页面的处理判断可能完全不同。最关键的差异不在正文,而在 Content-Type、X-Robots-Tag、Vary、Location 与缓存类头部。它们分别影响解析方式、抓取许可、缓存版本选择和最终落点。处理时不要先改正文,而应先把“同一内容对应几组响应头”列清楚,再决定保留哪一组。
内容相同不代表 URL 等价。以下头部会让抓取与索引环节得出不同结论:
Content-Type 的 MIME 类型和字符集:若声明为 text/plain 或字符集与正文实际编码不符,解析出的文本可能残缺或乱码,正文再正确也会被当成低质或不可解析内容。X-Robots-Tag:它等价于页面级 robots 指令。若某一组响应带 noindex,而另一组不带,正文相同也会出现“一个可索引、一个被排除”的分裂结果。Vary:声明按 User-Agent 或 Cookie 变化时,缓存与抓取会按不同版本分别处理,可能让爬虫拿到与用户不同的那一份头部。Location 与状态码:若一组返回 200、另一组返回 301/302,最终被索引的 URL 可能不是你以为的那一个。Cache-Control、ETag:影响中间层是否复用旧响应,从而让“当前头部”与“实际被抓到的头部”不一致。判断顺序建议是:先确认状态码与 Location,再看 Content-Type,然后核对 X-Robots-Tag,最后才看缓存与 Vary。这个顺序能把“落点错误”和“解析错误”分开,避免把两种问题混在一起改。
实际工作中常见的分歧是:A 方案让所有请求返回同一组头部,B 方案按设备或来源返回不同头部。两者都成立,但条件不同。
选 A(统一头部)的条件:页面正文对所有访问者一致,没有基于登录态或设备的内容差异。此时统一头部能让缓存复用率最高,抓取到的版本与用户看到的一致,排查成本最低。代价是失去按来源做差异化控制的能力,例如无法只对某类爬虫关闭索引。
选 B(差异化头部)的条件:确实存在必须区分的场景,例如内部测试流量需要 noindex,而公开流量需要可索引。此时必须同时正确设置 Vary,否则中间缓存可能把测试版的 noindex 返回给公开抓取。代价是每一组头部都要单独验证,且要确认爬虫命中的是哪一组。
一个可执行的判断动作:对同一 URL 用不同 User-Agent 各请求一次,把状态码、Content-Type、X-Robots-Tag、Vary 四项并排记录。如果四列完全一致,走 A;只要有一列不同,就必须按 B 的方式逐组验证,并确认差异是否真的必要。这个动作的结果直接决定下一步是收敛头部,还是补齐 Vary 与验证流程。
取你手上那个页面,列出它可能出现的所有响应头组合。每组记录:触发条件(UA、Cookie、路径)、状态码、正文是否一致。不要凭印象,要实际请求。若只有一组,问题范围就小;若有两组以上,先判断差异是否有意为之。
目标版本应是希望被收录的那一组。检查它的 Content-Type 是否与正文编码一致,X-Robots-Tag 是否不含 noindex,状态码是否为 200。若目标版本本身带排除指令,正文相同也没有意义——此时要改的是头部,不是正文。
若差异无必要,直接收敛为统一头部,并清理会返回旧头部的缓存层。若差异必要,保留差异但补齐 Vary,并确认抓取命中的是目标版本。收敛后重新请求一次,确认四列已一致;这一步的结果决定是否还需要继续排查正文层。
假设某页面正文完全一致,但 A 组返回 Content-Type: text/html; charset=utf-8 且无 X-Robots-Tag,B 组返回 Content-Type: text/html 且带 X-Robots-Tag: noindex。此时可区分的原因有三种:一是配置按来源分支,B 组是有意隔离;二是缓存层复用了旧响应,B 组是残留;三是某中间件默认追加了排除指令。区分方法是对两组分别记录触发条件:若 B 组只在特定 UA 下出现,偏向第一种;若随机出现且与 UA 无关,偏向第二种;若所有请求都带该指令,偏向第三种。数字只用于比较,不说明因果。确认原因后再决定收敛还是保留,避免直接删正文却留下头部问题。
请求量或抓取量下降,不能单独证明是响应头导致。它也可能是抓取配额调整、站点整体改版或外部链接变化。robots.txt 的抓取限制不等于可靠的索引移除:它只阻止抓取,已收录 URL 仍可能留在结果中。站点地图不保证收录,提交与否不改变头部层面的判断。HTTPS 不保证安全无漏洞或排名。不同搜索引擎对 X-Robots-Tag 与 Vary 的支持情况须分别核查,不要用一家的表现推断另一家。
把响应头对照表固定下来,确认目标版本,再决定收敛还是隔离,就能把“正文相同却结果不同”的问题落到可验证的动作上,而不是反复修改正文。