如何检查网站死链,测试环境与线上怎样对照
📍 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。测试环境关闭了外网访问,部分商品数据未同步。此时直接拿测试环境爬取结果去改线上链接,很容易返工。
可以按下面的步骤做一次对照:
- 在两个环境分别用同一款爬虫工具抓取,或分别导出站内链接清单。抓取前确认是否遵守 robots.txt,但要注意:robots.txt 只限制抓取,不等于把页面从索引中移除。
- 为每个链接记录四项信息:来源页面、目标地址、HTTP 状态码、最终跳转地址。
- 把两边结果按“目标地址去掉域名后的路径”对齐,而不是按完整域名对齐。
- 标记差异类型:测试环境404但线上200、两边都404、测试环境200但线上404、两边都跳转到不同终点。
- 只把线上可复现的失效项列为待修复死链;测试环境独有的失效项先查数据同步、登录权限、环境变量和重写规则。
假设某商品页在测试环境返回404,线上返回200。常见错误是直接去改线上链接,但更可能的原因是测试库没有该商品数据。反过来,如果线上404、测试环境200,则要检查线上是否漏传文件、CDN缓存是否过期、服务器重写规则是否不同。这里的状态码是“已经定位到的现象”,原因仍需逐项验证,不能断言只有一个原因。
测试环境与线上对照时,哪些条件必须先统一
两边抓取结果不可比,通常不是工具问题,而是条件不同。对照前至少统一以下项目:
- 抓取入口:都从首页或同一份站点地图开始。站点地图能帮助发现链接,但不保证页面被收录。
- 登录状态:需要登录才能访问的页面,两边要么都带同一权限的测试账号,要么都排除。
- 协议与域名:测试环境常用 HTTP,线上常用 HTTPS。HTTPS 只表示传输加密,不保证页面没有漏洞,也不保证排名。对照时应把协议差异单独记录,不要和死链混在一起。
- 跳转规则:两边是否都把旧地址301到新地址,是否都保留了尾部斜杠。
- 数据范围:商品、文章、用户生成内容是否同步。数据缺失造成的404,修复重点是同步流程,不是改链接。
如果两边条件无法统一,就不要追求逐条一致。可以只对照稳定页面,例如栏目页、帮助页、关于页,把动态页面单独列出并注明差异原因。
用一张对照表减少协作返工
多人协作时,口头说“测试环境有死链”很难交付。可以建一张表,字段固定为:链接路径、测试状态码、线上状态码、测试跳转终点、线上跳转终点、差异类型、负责人、处理结论。每行只写一个链接,避免把多个问题塞进同一行。
判断结果可以按下面规则处理:
- 两边都返回404:优先修复,检查目标页面是否被删除、地址是否写错。
- 线上404、测试200:先查线上文件、重写规则和缓存,再决定是否改链接。
- 测试404、线上200:多数是环境差异,先补数据或权限,不要直接改线上。
- 两边都跳转但终点不同:检查跳转规则是否按环境配置,确认线上终点是否是期望页面。
- 返回403或429:这不是死链。403可能是权限限制,429可能是抓取过快,应调整抓取方式后复查。
常见错误与检查项
第一个常见错误是把 robots.txt 禁止抓取当成死链。被 robots.txt 拦住的地址,爬虫拿不到状态码,不能据此判断失效。第二个错误是只看首页链接,忽略分页、筛选参数和旧文章里的外链。第三个错误是拿测试环境的完整域名去替换线上域名,结果把跳转终点也改错。
交付前可以逐项检查:
- 两边抓取时间是否接近,避免一边刚发布、一边还是旧版本。
- 是否记录了来源页面,方便修复后回查。
- 是否区分了404、410、301、302、403、429,而不是统一叫死链。
- 是否确认线上失效链接可以被未登录用户复现。
- 是否把测试环境独有差异单独归档,避免误改线上。
下一步,选一个线上可复现的失效链接,按“来源页面—目标地址—状态码—跳转终点”四项记录完整,再与测试环境同路径结果并列。只有线上和测试环境都确认失效,或线上单独确认失效且原因已定位,才进入修复和复查环节。