如果两个地址返回的正文完全一致,但一个响应头是 200、另一个是 404 或 410,死链扫描工具通常只会把后者标成死链,而不会告诉你“内容其实还在”。这时是否保留旧地址、改写它的响应,取决于旧地址是否还被外部引用、以及你能否控制响应头。缺少完整日志和权限时,最小可执行动作是抽查响应头与正文是否真的对应同一份内容,再决定保留、改写还是退出,但仅凭扫描结果不能推断搜索引擎会如何处理。
“内容相同”这句话本身不够用。扫描工具比较的往往是状态码、跳转链和正文片段,它不会替你判断两个地址的语义是否等价。真正需要确认的是三件事:正文是否逐字一致、响应头里的状态码与缓存指令是否一致、以及两个地址是否指向同一个可寻址资源。
可执行动作:用 curl -I 或浏览器开发者工具只取响应头,和目标页正文做一次人工比对。如果响应头显示 404 而正文正常渲染,说明服务器返回了“软 404”式的矛盾响应。这个结果会直接改变下一步——你要处理的是响应头,而不是内容。
保留意味着让旧地址继续以正常状态返回,而不是继续返回 404。它成立的条件比较具体:旧地址仍被站外链接、历史邮件或线下物料引用;你有权修改服务器或应用层配置;并且这份内容确实需要以独立地址存在。
假设一个场景:某产品页从 /old-name 改到 /new-name,两个地址返回相同正文,但旧地址响应头是 404。如果外部还有指向旧地址的链接,保留并把它改成 200 或 301,能让访问者不落入死胡同。动作与结果的关系是:改完响应头后重新扫描,旧地址不再被标死链,此时你才需要判断它是否与新版构成重复内容——这一步不能靠扫描工具完成,要看两页是否真的需要并存。
注意一个边界:robots.txt 里禁止抓取旧地址,并不等于它已被可靠地从索引中移除,抓取限制和索引移除是两件事,不能互相替代。
改写通常指把旧地址改成指向新地址的跳转,或把 404 改成 410 以明确表达“已不存在”。它适合旧地址没有独立保留价值、只是改名或合并遗留的情况。
成立条件有三点:目标地址长期稳定、跳转链不形成循环、以及你确认这份内容未来不会再以旧地址单独出现。若目标地址本身还会再变,跳转就要跟着改,维护成本会累积。
容易踩的坑是把“正文相同”当成“可以随便 301”。如果两个地址面向不同语言、不同地区或不同用户群,即使当前正文一样,跳转也可能把一部分访问者带到不合适的页面。此时应优先保留并分别处理,而不是一律合并。
退出指不再为旧地址做任何保留或跳转,让它以 404 或 410 自然存在,并从站点地图和内部链接中清除。它适用于旧地址没有外部引用、内容已被新版完全覆盖、且继续维护只会增加混淆的情况。
这里要克制一个推断:站点地图里移除旧地址,不保证它立刻从索引消失;返回 410 也只是更明确地表达资源已不存在,具体处理仍取决于各搜索引擎,需要分别核查,不能一概而论。同理,把旧地址从站点地图删掉后扫描工具不再报错,只能说明你的清单干净了,不能说明外部引用也消失了。
如果你只有扫描结果,改不了响应头,也拿不到服务器日志,仍可做一件事:按“正文一致但状态码不同”筛出一小批地址,逐个记录状态码、跳转链和正文首段,形成一份对照表。这份表能帮你判断问题集中在某一类模板还是零散分布,从而决定先找谁要权限。
但要明确不能从这份表推出什么:不能推出这些地址一定被搜索引擎当作死链处理,不能推出改响应头后排名或收录会变化,也不能把“扫描报错数下降”当作处理正确的证据——报错数归零还可能是因为扫描范围缩小、超时被跳过或规则被放宽。真正能支撑决策的,是响应头与正文是否自洽、旧地址是否仍被引用这两类可核实的证据。