如果两个地址返回的正文完全一样,只有响应头不同,收录检查工具给出的结论通常不是“内容重复”这么简单。它更可能影响你对状态码、规范地址、抓取频次和缓存版本的判断,而这些判断又会决定你下一步是改内容、改服务器配置,还是先补验证数据。
响应头不同时,最先要区分的是:HTML 正文相同,还是渲染后的可见内容相同。两者在检查工具里可能显示为同一页面,但处理路径不同。
把手上那个页面先做三件事:
Content-Type、Content-Language、Cache-Control、Vary、Link 这几项中实际出现差异的字段。假设一个页面 A 返回 200 和 text/html; charset=utf-8,页面 B 正文相同但返回 200 加 Content-Language: en,而 A 是 zh-CN。这时“内容相同”只说明主体文本接近,不说明两个地址应被当成同一份文档。检查工具若只比较正文哈希,可能提示重复;若它同时读取语言和规范信号,结论可能完全不同。
响应头不是装饰信息,它会进入抓取、索引和展示三个环节。对收录检查工具来说,至少有以下几类判断会受影响。
200、301、302、304、410 会直接改变工具对“这个地址是否值得继续检查”的归类。正文相同但一个返回 200、另一个返回 304,后者通常只是缓存协商结果,不能直接当成独立可索引页面。Link: rel="canonical" 与 HTML 里的 rel="canonical" 不一致,工具可能报冲突。此时不要只改 HTML,先确认服务器为什么在响应头里发出另一个规范地址。Content-Language 不同时,即使正文相同,也可能被当成面向不同语言受众的版本。检查工具若只按正文相似度去重,会漏掉这层差异。Vary、Cache-Control、ETag 不同,会影响工具或中间缓存拿到的是哪个版本。你看到的“相同正文”可能只是某个缓存副本,而不是源站当前输出。这里要特别避免一个推断:某地址在收录检查工具里显示“已发现但未索引”,不能单独归因于响应头。它也可能是内链不足、站点地图未更新、页面质量判断或抓取预算分配的结果。响应头差异只是需要排查的一项证据。
如果你拿不到服务器配置权限,也没有日志或抓取统计,仍然可以做一组可复核的最小检查。目标不是证明谁对谁错,而是把“响应头不同”缩小到可验证的范围。
rel="canonical"、hreflang、meta robots 是否一致。这个动作的结果会直接影响下一步:如果差异只在 Cache-Control 或 ETag,优先排查缓存层;如果差异在 Content-Language 或 Link,优先排查多语言或规范地址配置;如果差异在状态码,先解决重定向或错误页,而不是继续比较正文。
假设某站点有 /product 和 /product?lang=zh 两个地址,正文完全一致。前者返回 200,后者返回 302 并指向前者。收录检查工具可能把前者标为可索引,把后者标为重定向。
此时不能因为正文相同就认为两个地址等价。更合理的处理是:确认 /product?lang=zh 是否应该存在。如果它只是参数变体,保留重定向并让规范地址指向 /product;如果它面向不同语言用户,则需要让 Content-Language、hreflang 和规范地址保持一致,而不是只改正文。
这个例子里的数字和地址都是假设,只用于说明比较方法。实际处理时,应以你抓到的响应头和页面信号为准。
响应头不同,能说明的是“两个响应在传输或协商层面不一致”,不能直接说明以下事项:
如果检查工具里某个地址的抓取量或请求量归零,也不能单独证明你的响应头处理正确。它可能是抓取频次正常波动、缓存命中、工具采样变化或该地址本身不再被需要。要结合状态码、规范信号和实际访问日志一起看,缺少日志时就明确标注“无法从现有数据判断”。
面对“正文相同、响应头不同”的页面,先不要改正文。按下面顺序做一个决定:
Vary,先明确这两个地址是否应该并存。应该并存就补齐对应信号;不应该并存就合并为一个地址。完成这一步后,再回到收录检查工具复核。此时你要看的不是“正文是否相同”,而是状态码、规范地址、语言信号和缓存字段是否已经指向同一个明确意图。只有这样,响应头差异才不会继续干扰你对收录状态的判断。