测试环境和线上环境的死链检查结果通常不会完全一致,因为两者的URL结构、抓取范围、访问控制和服务响应都可能不同。正确做法是:先在测试环境用限定范围的爬虫跑一遍,把结果按“仅测试环境出现”和“两处都出现”分类,再对线上做抽样验证。不要直接把测试环境的死链清单当成线上修复清单,也不要指望一次全站爬取就能覆盖所有入口。
死链检查的核心是让爬虫沿着链接访问并记录返回状态。测试环境与线上的差异主要来自四个方面:
/test、staging、端口号或基础路径,链接里如果写的是相对路径,爬取结果看起来一致;如果是绝对路径,两边指向的地址根本不同。robots.txt 全站禁止抓取。爬虫被拦截时返回 401、403 或跳转登录页,会被误判成死链。因此,对照的目的不是追求两边结果相同,而是判断某个死链是“代码或模板问题”还是“环境配置问题”。前者两边都会出现,后者只在一边出现。
建议对每个疑似的死链记录以下字段,再横向比较:
<a> 普通链接、图片 <img> 的 src、脚本请求、还是重定向链中的一环。判断规则可以简化为:两边都返回 404,且来源页面相同,基本可判定为模板或内容里的真实死链;只在测试环境 404、线上 200,多半是数据差异或路径前缀问题;只在线上 404、测试环境 200,优先怀疑线上重定向、缓存或发布遗漏。
下面是一套可直接执行的对照流程,假设你使用任意一种站点爬取工具(命令行或图形界面均可)。
curl -I 或浏览器开发者工具完成。适用条件:这套流程适合有独立测试域名的站点。如果测试和线上共用同一套内容管理系统、只是数据库不同,重点放在数据差异上;如果测试环境根本无法被外部爬虫访问,就先在本地用渲染后的 HTML 做链接提取,再拿提取出的 URL 去线上验证。
robots.txt 限制抓取不等于链接已移除。测试环境如果禁止爬虫,你看到的“无法访问”是抓取限制,不是死链。要单独确认该 URL 是否真的返回 404。反过来,把死链加进 robots.txt 也不能替代修复,它只是阻止抓取,不改变链接本身失效的事实。
站点地图不保证收录,也不能当死链清单。站点地图里列出的 URL 仍可能 404,爬虫是否抓取由各搜索引擎自行决定。对照时可以把站点地图当作链接来源之一,但不能假设里面的地址都有效。
HTTPS 不代表安全或排名,也不影响死链判断。协议从 HTTP 换成 HTTPS 后,旧链接如果没有正确 301,才会产生死链。检查时要把协议变化单独列出来看。
不同搜索引擎和平台对同一状态码的处理不同。404 和 410 在索引移除上的表现需要分别到各搜索引擎的站长平台核查,不要用一套结论套用所有平台。付费广告的落地页死链检查逻辑与自然搜索也不同,应分开处理。
下一步:先确定你的测试环境能否被爬虫正常访问。如果不能,就从线上抓取结果反推模板中的链接规则,再回到测试环境做定点验证,而不是强行全站对照。