内容相同、响应头不同,最直接的影响是:抓取与索引系统看到的“页面身份”和“可抓取状态”可能不一致。若两个 URL 返回同一份正文,但一个响应头声明缓存、语言、重定向或状态差异,后续该保留、改写还是退出,不能只看正文是否一样,而要先判断差异是否改变了“这个地址能否被稳定地当作独立页面处理”。
正文相同不代表响应头无关。需要优先核对三类字段:Content-Type、Content-Language、Location 与状态码组合。若一个地址返回 200 且正文完整,另一个返回 301 指向它,那么两者不是“内容相同”的竞争关系,而是主从关系;此时保留被指向的地址、退出重定向源,通常比强行让两个地址都参与收录更可控。
若两个地址都返回 200,但 Content-Language 不同,正文却完全一致,这属于身份信号冲突。它未必立刻导致不收录,却会让语言或地区判断变得不稳定。此时“改写”比“保留两个”更合适:要么修正错误的语言头,要么把其中一个地址改为明确的重定向。只有在两个地址确实面向不同语言或地区、且正文后续会分化时,保留双地址才成立。
Cache-Control、ETag、Last-Modified 不同,通常不会直接决定收录与否,但会改变你验证修复结果的方式。假设 A 地址返回 Cache-Control: max-age=86400,B 地址返回 no-cache;你更新正文后,B 的抓取端更容易看到新版本,A 可能仍在一段时间内返回旧内容。这里的数字只用于说明比较方法,不是固定阈值。
实际动作是:先记录两个地址在相同时间点的响应头与正文摘要,再在更新后按缓存窗口复查。若 A 仍返回旧正文,不能直接判定“未收录是因为内容问题”;更合理的解释是缓存或中间层尚未刷新。下一步应先让响应头与正文版本一致,再判断是否需要提交网址收录或调整内部链接。
当结果与直觉相反,例如正文更完整的地址反而没有出现在结果中,不要只凭一次查询下结论。可按以下证据分组:
Location,重定向链是否超过一跳。Vary 是否与此匹配。若日志中某地址抓取量归零,合理解释至少有三种:该地址已被合并、抓取预算转向了主地址、或服务器对该代理返回了不同响应。归零本身不是处理正确的证据,必须结合状态码和重定向目标一起看。
保留两个地址的前提是:它们确实承担不同角色,例如不同语言版本,且响应头中的语言、地区信号与正文一致,内部链接也各自指向对应版本。若只是正文相同、响应头不同,保留往往会让判断长期摇摆。
改写为单地址的前提是:其中一个地址是明确的主版本,另一个可以通过 301 或规范链接指向它。动作完成后,应复查重定向目标是否返回 200、正文是否完整、内部链接是否已改指主版本。若重定向目标本身返回错误状态,下一步不是继续提交,而是先修复目标地址。
退出某个地址的前提是:它已无独立价值,且退出方式不会误伤仍被引用的地址。需注意,robots.txt 的抓取限制不等于可靠的索引移除;它可能阻止抓取,却不能保证已收录地址从结果中消失。站点地图也不保证收录,提交与否只影响发现路径,不决定最终处理。
假设某页面有 /p 与 /p?lang=en 两个地址,正文完全相同,但前者响应头为 Content-Language: zh,后者为 en。若站点实际只服务中文读者,保留两个地址会让语言信号互相矛盾;此时应把英文头改回与正文一致,或将带参数地址重定向到主地址。若站点确实计划提供英文版,则应先让英文正文真正分化,再保留双地址。这个例子的关键不是参数本身,而是响应头是否与页面实际用途一致。
判断顺序可以归结为:先看状态与重定向是否改变地址关系,再看语言与缓存头是否改变内容版本,最后才决定保留、改写或退出。任何一步的结论,都应以可复核的响应头和正文对照为依据,而不是以单次抓取量或提交动作代替判断。