验证修复后的响应,核心不是看页面能否打开,而是确认死链测试工具再次抓取该 URL 时,返回的状态码、跳转链路和最终落地页都与预期一致。最直接的做法是:用同一工具、同一入口、同一抓取范围做一次复测,再逐项比对修复前后的记录。如果工具仍报错,先区分“服务器返回错误”与“工具抓取被拦截”,两者处理方式完全不同。
复测前要确认三件事:原死链是在哪个入口被发现的(站内链接、站点地图、外链还是日志);工具当时用的 User-Agent 和抓取深度是什么;是否开启了 JavaScript 渲染。条件变了,结果就没有可比性。建议把修复前的报告导出留存,复测时用相同配置,只改变时间。如果原报告只给了“404”而没有记录请求头和重定向路径,可以先用 curl -I 或浏览器开发者工具的 Network 面板补一次单 URL 检查,作为基准。
curl -IL 查看完整重定向序列,或看工具报告里的 redirect chain。结果说明:出现多跳、循环跳转或跳到无关页面,都算未修复完成,即使最终页是 200。假设某文章页 /old-guide 被报 404,修复方式是把它 301 到 /new-guide。复测时如果工具显示 /old-guide 返回 301、/new-guide 返回 200,且站内导航里的链接已改为 /new-guide,才算修复完成。若只看到 301 就收工,而 /new-guide 本身也是 404,那么死链只是被转移了,并没有消失。这个例子里,判断依据是“最终响应”而不是“第一跳响应”。
一类是服务器确实还在返回错误,比如缓存未刷新、CDN 仍持有旧规则、跳转配置写错。另一类是工具侧问题,比如被防火墙拦截、超时设置过短、未执行 JavaScript 而页面靠脚本跳转。区分方法:用浏览器或无头请求单独访问同一 URL,如果浏览器正常而工具报错,偏工具侧;如果两者都错,偏服务器侧。已经定位的原因可以直接改,可能原因则需要逐项排除,不要一次改多处,否则无法判断是哪一步起了作用。
把这次修复的 URL、修复前状态、修复后状态和复测时间记进一份简单台账,下次全站扫描时优先核对这批地址。然后对同类问题做一次抽样:如果同一批链接都指向同一个旧路径,说明问题出在模板或批量替换规则,而不是单条链接。下一步可以按这个思路,把最近一次死链报告里状态码相同的 URL 分组,先处理数量最多的那一组。