内容相同、响应头不同,最直接的影响是:检测工具会把它们判成不同结果,而你需要先确认差异出现在哪一层,再决定是否算死链。如果正文一致、只有 Content-Type、Cache-Control、Location 或状态码不同,那么“抓到的内容”和“链接是否可用”就不再是同一件事。下面从两个常见矛盾现象拆开,并给出可核对的区分证据。
假设某个链接在检测工具里显示“内容存在”,但人工打开时被跳转或直接报错。常见解释有两种。
能区分这两者的证据是:关闭跟随重定向,分别记录原始链接和终点链接的状态码、Location 以及最终 URL。如果原始链接稳定返回 301/302 且终点为 200,属于解释 A;如果原始链接本身返回 200,但响应头在不同请求间变化,则更接近解释 B。这个动作会直接影响下一步:前者应更新站内链接指向终点,后者应排查缓存或服务端配置,而不是急着删链接。
两个 URL 都返回 200,正文肉眼一致,但一个 Content-Type 是 text/html,另一个是 application/octet-stream,或 Content-Length 相差很大。这会影响“这个链接是否还能作为页面入口”的判断。
一种解释是服务端对同一内容输出了不同 MIME 类型,浏览器可能下载而不是渲染;另一种解释是响应头来自不同中间层,比如 CDN 缓存了旧版本头信息。区分证据是:用同一请求头、同一路径、同一时间窗口连续请求两次,观察响应头是否稳定;再换一个不经过缓存的请求方式对比。若只有经过缓存的请求出现异常头,应优先处理缓存刷新与回源配置;若所有请求都返回错误类型,则应修正服务端输出。
不是所有响应头差异都值得上升到“死链”判断。以下字段会直接影响可用性判断:
Location:决定是否发生跳转,以及跳转链是否过长或形成循环。Content-Type:决定浏览器按页面渲染还是按文件下载,影响“可见内容”是否成立。Cache-Control 与 Age:决定你看到的是当前响应还是缓存副本,影响复测结果。Content-Length 或分块传输相关头:影响工具是否把响应截断,从而误判为空内容。把这些字段分开记录后,再决定链接是保留、替换、跳转还是移除,比单看“内容相同”更可靠。
假设站内有两个入口指向同一篇文章:入口 A 返回 200 且 Content-Type: text/html;入口 B 返回 301,Location 指向 A,但检测工具跟随跳转后显示“内容相同”。如果只看内容,会得出“两个入口都正常”的结论;如果看响应头,B 属于需要更新的旧入口。
处理顺序建议是:先记录原始响应头,再决定是否跟随跳转;对 3xx 链接,确认终点是否稳定返回 200;对 200 但类型异常的链接,确认服务端输出是否正确。完成这一步后,再复测同一批链接,观察异常是否收敛。若复测后仍有差异,说明问题不在链接本身,而在缓存、回源或服务端配置层。
即使响应头看起来正常,也不能据此推断链接一定适合保留。站点地图中的 URL 不保证被收录,robots.txt 的抓取限制也不等于可靠的索引移除;HTTPS 同样不保证页面无漏洞或获得更好排名。这些判断需要分别核查,不能和死链检测结论混在一起。
另外,请求量或抓取量归零,不能单独证明某个链接已被正确处理。它也可能是检测范围缩小、缓存命中变化或请求被限流造成的。把响应头、状态码和复测结果放在一起看,才能区分“链接已修复”和“只是这次没抓到”。