死链检测:测试环境与线上怎样对照

📍 WDQWDWQD987AAAAA:216.73.216.104
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /5244d55e9c91.html
📄

死链检测:测试环境与线上怎样对照

死链检测在测试环境和线上环境的对照,核心不是把两边结果直接相减,而是先统一“链接来源”和“判定标准”,再分别采集,最后只对同一来源、同一规则的差异做归因。直接拿测试环境的全站爬取结果去比对线上,往往会因为域名、CDN、登录态、robots.txt 和发布进度不同,产生大量假差异。

准备阶段:先统一链接来源与判定口径

对照之前要明确两件事。第一,链接来源是什么:是页面里的 <a href>、站点地图、日志中实际被访问的 URL,还是接口返回的跳转地址。第二,死链判定标准是什么:只看 HTTP 状态码,还是同时看跳转链长度、软 404、超时。两边口径不一致,结果就没有可比性。

最关键的一步是:把两边结果都归一化成“来源页面 + 目标 URL + 状态 + 判定时间”四列,再进入比对。少了来源页面,差异就无法定位到具体模板或组件。

实施阶段:分别采集,不要交叉污染

测试环境通常有独立域名、基础认证或未完全同步的数据,线上则有 CDN 缓存和灰度发布。建议两边各自独立跑一次完整检测,不要用测试环境的爬虫直接跨域访问线上。

  1. 测试环境先关闭或统一认证拦截,否则大量 401、403 会被误判为死链。
  2. 线上采集尽量贴近真实用户路径,必要时带上前端渲染,因为纯静态抓取可能看不到 JS 注入的链接。
  3. 对 3xx 跳转单独记录,区分“最终可达”和“跳转链过长”。
  4. 对超时项标记为待复核,不要直接归为 404。

如果测试环境用了占位域名或示例路径,这些链接在线上本就不存在,属于环境差异,不应算作线上死链。

验证阶段:按差异类型逐条归因

把两边结果对齐后,差异通常分四类,处理方式不同:

这里要区分“可能原因”和“已经定位的原因”。同一现象可能有多种解释,例如线上 404 既可能是文件未发布,也可能是大小写敏感导致,必须用单条 URL 复测确认,不能凭列表直接下结论。

维护阶段:把对照变成固定检查项

死链会随内容更新、栏目调整和外部链接变化持续产生。建议在发布流程里加一道固定检查:上线前跑一次测试环境检测,上线后对变更页面涉及的链接做抽样复测。站点地图不保证收录,也不能替代死链检测,它只是链接发现渠道之一。

判断是否要长期保留某个跳转时,看它是否仍有外部引用或用户访问。没有依据的跳转可以清理,有依据的应保留并定期复核。

下一步:选一个近期改版的栏目,按“来源页面 + 目标 URL + 状态 + 判定时间”四列,分别采集测试环境和线上结果,先完成一次小范围对照,再决定是否扩大到全站。

图1 图2

nginx