如果两个地址返回的正文完全一致,但响应头不同,搜索引擎不收录的判断就不能只看“内容是否重复”。响应头会改变抓取器对页面身份、可访问性和资源归属的识别,进而影响该保留哪个地址、是否值得继续排查收录。先核对响应头差异,再决定是合并信号还是保留两个地址。
响应头字段很多,但真正影响收录判断的,通常集中在两组。
Location、Content-Type、Content-Language。它们决定这个地址算不算一个可索引的独立页面。Vary、Cache-Control、ETag、Last-Modified。它们决定抓取器是否把两个地址视为同一资源的不同版本。如果差异只落在第二组,正文又完全相同,那么收录问题更可能来自“版本识别”而不是“内容质量”。如果差异落在第一组,结论会完全不同:例如一个地址返回 200,另一个返回 301 或 404,那么后者不收录是正常结果,不需要再对比正文。
这是最容易被误判的情况。两个地址内容相同、状态码相同,看起来“应该都收录”,实际却可能只有一个进入索引。
当 Vary 声明了 User-Agent、Accept-Language 或 Accept-Encoding 时,抓取器会认为同一地址在不同请求条件下可能返回不同内容。此时它更倾向于把多个地址归并为同一资源的变体,而不是当作两个独立页面。若两个地址的 Content-Type 一个是 text/html,另一个是 application/xhtml+xml,部分抓取器也可能只把其中一种当作标准 HTML 处理。
可执行动作:先对两个地址分别发起不带 Cookie、不带额外 Accept 头的请求,记录状态码、Content-Type、Vary 三项。若正文哈希一致而只有 Vary 不同,下一步应检查是否真的需要内容协商。如果不需要,去掉多余的 Vary 声明并保持两个地址响应头一致,然后重新观察抓取日志中这两个地址的抓取频率与返回码。这个动作的结果会直接影响下一步:若抓取频率恢复且返回码稳定,说明此前是版本识别造成的归并;若仍无变化,再转向检查内链和站点结构。
这种情况下,“内容相同”这个前提本身就不成立。搜索引擎不收录 301 或 404 地址,是响应头在起作用,而不是内容在起作用。
301 表示该地址已永久指向另一个地址,抓取器会把信号集中到目标地址;404 表示该地址不存在,即使服务器仍返回了相同正文,也不应被当作有效页面。此时若继续对比两个地址的正文,方向就错了。
可执行动作:确认哪个地址是规范地址,然后检查另一个地址是否被内链、站点地图或外部链接指向。若被指向,应把这些引用改为规范地址,而不是保留两个地址同时可访问。动作完成后,观察规范地址的抓取与收录变化;如果规范地址本身仍不收录,问题就不在重复内容,而在规范地址的可访问性或内容质量。
不要只凭“内容一样”下结论。可以按下面顺序取证据:
Location、Content-Type、Vary 四项。如果四项中有任意一项不同,优先解释响应头差异,而不是重复内容。如果四项完全相同、正文也相同,那才轮到讨论规范标签、内链权重和内容质量。
假设例子:某站点有两个地址 A 和 B,正文完全相同。A 返回 200 且 Vary: Accept-Encoding,B 返回 200 且无 Vary。抓取日志显示 A 被抓取多次但未收录,B 几乎不被抓取。此时更合理的解释是 A 被当作变体入口、B 缺乏引用,而不是“内容重复导致都不收录”。把 B 的引用改为 A 并统一响应头后,再观察 A 的抓取返回码,才能判断下一步是否要处理内容本身。
响应头一致并不保证收录。robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。如果两个地址的响应头完全相同、正文也相同,但都不收录,应转向检查是否存在抓取限制、规范标签指向第三个地址,或页面本身缺乏被引用的入口。
另外,不同搜索引擎对 Vary 和内容协商的处理并不一致,必须分别核查。HTTPS 只说明传输层加密,不保证页面安全无漏洞,也不保证排名。把响应头差异当成唯一原因,会掩盖这些更基础的问题。