当两个地址返回的正文完全一样、响应头却不同时,死链检查工具给出的状态码、重定向和可索引判断可能互相矛盾。此时不要急着把其中一条标成死链,而要先确认差异来自服务端配置还是抓取链路,再决定保留哪条、改写哪条,或干脆退出这组对比。
正文相同只说明渲染结果接近,不代表两条响应在检查工具眼里等价。真正会改变判断的响应头集中在三类:状态码、Location 重定向链、X-Robots-Tag 与 Content-Type。状态码决定这条地址算 200 还是 404/410;重定向链决定工具是把它记为跳转还是终点;X-Robots-Tag 决定即使正文可读,抓取方是否被要求不索引。
因此,当工具把 A 判为正常、把 B 判为死链,而两者正文一致时,先看 B 的状态码是不是 4xx,再看它是否带 Location 却缺少最终 200 终点。若只是 X-Robots-Tag 不同,死链结论通常站不住,问题更接近索引控制而非链接可达性。
这三种动作不是按偏好选,而是按差异的稳定性和影响面选。
判断保留还是改写,一个可操作的动作是:对同一正文的两条地址分别请求三次,记录每次的状态码与 Location。如果三次结果一致且一条为 4xx,改写有依据;如果三次结果在 200 与 5xx 之间跳动,说明稳定性不足,应退出本轮判断。这个动作的结果直接决定下一步是改内链还是先修服务端。
假设某页面有 /a 和 /b 两条地址,正文逐字相同。/a 返回 200 且无 X-Robots-Tag;/b 返回 301,Location 指向一个已下线的地址,最终落到 404。死链检查工具可能把 /a 记为正常、把 /b 记为死链。
这时合理的处理是改写而非全删:把指向 /b 的内链改为 /a,并确认 /b 的重定向不再指向失效终点。若只因为 /b 是死链就删掉整组内容,会连带损失 /a 的可达入口。反过来,如果 /a 和 /b 都返回 200,只是 /b 多了 X-Robots-Tag: noindex,那么死链结论不成立,真正要处理的是索引意图是否与预期一致。
状态码或抓取量异常并不自动等于配置错误。常见替代解释包括:源站在特定时段限流、CDN 节点回源失败、抓取方被 robots.txt 限制后误报、以及响应头被中间层改写。robots.txt 的抓取限制只约束抓取行为,不等于可靠的索引移除手段;把它当成删除依据,容易把可访问地址误判为死链。
要区分这些原因,可对比同一地址在不同时间、不同出口的响应头。如果只有某一出口返回 4xx,问题更可能在链路而非源站;如果所有出口一致返回 4xx 且正文仍可读,才更接近服务端配置问题。这一步的结论决定你是改配置、改内链,还是先不动。
处理完响应头差异后,还要确认索引侧是否同步。站点地图提交不保证收录,HTTPS 也不保证安全无漏洞或排名,因此不要用“已提交”“已加密”替代对状态码和索引意图的核对。若涉及不同搜索引擎,其对 X-Robots-Tag 和重定向的处理须分别核查,不能凭一次工具结果推断全部。
最终动作可以归结为一句可执行的判断:正文相同不构成保留理由,响应头一致且状态码稳定返回 200 才是保留前提;只要有一条稳定返回错误状态码,就改写入口指向正常地址;只要响应在多次请求间不稳定,就退出本轮清理,先修稳定性再复检。