如何检查网站死链,测试环境与线上怎样对照

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

如何检查网站死链,测试环境与线上怎样对照

检查网站死链时,测试环境与线上不能只对照一份链接列表,而要先确认两边抓取范围一致,再分别记录状态码和跳转终点,最后只把线上可复现的失效链接当成需要修复的死链。测试环境里出现的404,可能只是数据或权限差异造成的假警报。

先从一个假设例子看清对照流程

假设某站点有测试环境和线上环境,测试环境地址是 test.example.com,线上地址是 www.example.com。测试环境关闭了外网访问,部分商品数据未同步。此时直接拿测试环境爬取结果去改线上链接,很容易返工。

可以按下面的步骤做一次对照:

  1. 在两个环境分别用同一款爬虫工具抓取,或分别导出站内链接清单。抓取前确认是否遵守 robots.txt,但要注意:robots.txt 只限制抓取,不等于把页面从索引中移除。
  2. 为每个链接记录四项信息:来源页面、目标地址、HTTP 状态码、最终跳转地址。
  3. 把两边结果按“目标地址去掉域名后的路径”对齐,而不是按完整域名对齐。
  4. 标记差异类型:测试环境404但线上200、两边都404、测试环境200但线上404、两边都跳转到不同终点。
  5. 只把线上可复现的失效项列为待修复死链;测试环境独有的失效项先查数据同步、登录权限、环境变量和重写规则。

假设某商品页在测试环境返回404,线上返回200。常见错误是直接去改线上链接,但更可能的原因是测试库没有该商品数据。反过来,如果线上404、测试环境200,则要检查线上是否漏传文件、CDN缓存是否过期、服务器重写规则是否不同。这里的状态码是“已经定位到的现象”,原因仍需逐项验证,不能断言只有一个原因。

测试环境与线上对照时,哪些条件必须先统一

两边抓取结果不可比,通常不是工具问题,而是条件不同。对照前至少统一以下项目:

如果两边条件无法统一,就不要追求逐条一致。可以只对照稳定页面,例如栏目页、帮助页、关于页,把动态页面单独列出并注明差异原因。

用一张对照表减少协作返工

多人协作时,口头说“测试环境有死链”很难交付。可以建一张表,字段固定为:链接路径、测试状态码、线上状态码、测试跳转终点、线上跳转终点、差异类型、负责人、处理结论。每行只写一个链接,避免把多个问题塞进同一行。

判断结果可以按下面规则处理:

常见错误与检查项

第一个常见错误是把 robots.txt 禁止抓取当成死链。被 robots.txt 拦住的地址,爬虫拿不到状态码,不能据此判断失效。第二个错误是只看首页链接,忽略分页、筛选参数和旧文章里的外链。第三个错误是拿测试环境的完整域名去替换线上域名,结果把跳转终点也改错。

交付前可以逐项检查:

  1. 两边抓取时间是否接近,避免一边刚发布、一边还是旧版本。
  2. 是否记录了来源页面,方便修复后回查。
  3. 是否区分了404、410、301、302、403、429,而不是统一叫死链。
  4. 是否确认线上失效链接可以被未登录用户复现。
  5. 是否把测试环境独有差异单独归档,避免误改线上。

下一步,选一个线上可复现的失效链接,按“来源页面—目标地址—状态码—跳转终点”四项记录完整,再与测试环境同路径结果并列。只有线上和测试环境都确认失效,或线上单独确认失效且原因已定位,才进入修复和复查环节。

图1 图2

nginx