死链检测怎样检查前后环节的依赖

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

死链检测怎样检查前后环节的依赖

死链检测不是只跑一遍链接扫描就结束。真正要检查的是“前后环节的依赖”:前一个环节产出的链接数据,是否被后一个环节正确消费;后一个环节发现的问题,是否能追溯到前一个环节的输入。假设你接手一个站点,先拿到一份旧的全站URL清单,再用爬虫扫描,最后把404列表交给运维改跳转——这三个环节之间就有依赖。下面按这个假设例子展开。

先画出一条最小检测链路

把死链检测拆成四个节点:来源清单 → 抓取与发现 → 状态判定 → 处置与回归。每个节点都有输入和输出,检查依赖就是检查“上游输出”是否等于“下游输入”。

常见错误是跳过第一步,直接拿爬虫结果当全部链接。爬虫只能发现“能被爬到”的链接,孤岛页面、只在JavaScript里拼接的链接、未被任何页面引用的旧地址,都不会进入结果。这样后一个环节的输入本身就不完整。

检查来源清单与抓取结果是否对得上

可执行的检查方法是做一次数量与集合比对。假设来源清单有1200条URL,爬虫扫完只报告980条被访问,剩下的220条要逐类解释:是被 robots.txt 限制抓取,还是返回了超时,还是根本不在站内链接图中。这里要注意,robots.txt 的抓取限制不等于可靠的索引移除,它只影响爬虫行为,不能替代对链接可用性的判断。

判断结果分三种情况:

  1. 来源清单里有、爬虫没访问:可能是抓取限制或超时,需要单独用HTTP请求验证,而不是直接判为死链。
  2. 爬虫发现了、来源清单里没有:说明页面里有新链接,来源清单已过期,要反向更新清单。
  3. 两边都有但状态不一致:同一URL在不同时间返回不同状态,要记录抓取时间,避免把临时故障当成永久死链。

状态判定环节依赖哪些上游信息

状态判定最容易出错的依赖是重定向链。一个URL返回301到另一个URL,另一个又返回301,最终落到404——如果只看第一次响应,会误判为“正常跳转”。检查时要记录整条链的每一跳,并确认终点状态。判断条件是:链长超过一跳、终点为4xx或5xx、或出现循环跳转,都应列入待处理。

另一个依赖是请求头与超时设置。同一批URL,用不同的User-Agent或不同的超时阈值扫描,结果可能不同。这不是搜索引擎算法问题,而是抓取配置差异。要对比两次扫描的配置是否一致,否则前后环节的“死链数量”没有可比性。

处置环节如何依赖前面的分类结果

处置动作取决于死链类型,而类型来自状态判定。常见对应关系:

常见错误是把所有404统一跳转到首页。这会让用户和爬虫都失去原页面的语义,也不解决“原链接为什么失效”的上游问题。处置后必须回归:用同一份来源清单重新扫描,确认原URL的状态变化,并检查是否引入了新的重定向链。

第一次做时从哪一步开始

先固定一份来源清单,并记录它的生成时间和生成方式。然后跑一次抓取,保存原始响应日志,不要只保存汇总数字。接着做集合比对,把“未覆盖URL”单独列出并逐条给出原因。最后才进入状态判定和处置。这样每一步的输入输出都可追溯,前后环节的依赖才有据可查。下一步可以拿你手头最小的一份URL清单,按“来源—抓取—判定—回归”跑一遍,先确认清单与抓取结果能否对齐。

图1 图2

nginx