先给结论:当死链接检测工具在不同时间、不同节点对同一 URL 给出不同结果时,最可能的解释不是工具本身不稳定,而是请求穿过了不一致的缓存层,导致你检测到的其实是不同版本的响应。此时继续复检没有意义,应先把“同一版本”固定下来,再判断链接是否真的失效。
出现“同一链接有时 404、有时 200”时,通常只有两类成立条件。
两者的处理方向完全相反:前者要修内容或规则,后者要修缓存一致性。判断错方向,就会反复改一个本来没问题的页面。
关键证据是:同一时刻、从不同网络位置请求同一 URL,响应是否一致。
如果同一时刻不同节点结果不同,而稍后所有节点又趋于一致,这更符合缓存分层:不同层在不同时间失效或回源,造成短暂分歧。如果所有节点在同一时刻都返回相同的新状态,并且此后稳定不变,那更可能是源站真的改了。
另一个可区分点是响应头中的缓存标识。假设某响应带有 Age 头且数值较大,说明它来自缓存而非刚回源;同一次检测中若部分请求 Age 很小甚至缺失,说明它们走了不同路径。这组证据指向缓存不一致,而不是链接失效。
需要说明的是,抓取量或检测请求量突然归零,并不能单独证明问题已解决。它也可能是检测任务被限流、调度中断或目标暂时不可达,这些都与缓存一致性无关。
把检测拆成两步:先固定版本,再判断状态。
Age、Cache-Control 以及可能的节点标识。这个动作的结果会直接决定下一步:若源站返回 404,问题在内容或规则,应进入修复流程;若源站返回 200,而缓存层仍返回 404,问题在缓存失效与回源策略,应交给负责缓存配置的环节,而不是去改页面。
常规做法往往只清理一层缓存就复检,但多层架构下,清掉边缘缓存不代表反向代理或应用层缓存也同步失效。如果只清一层,复检结果可能仍然矛盾,让人误以为源站有问题。
因此,处理这类问题时要确认:所有相关缓存层的失效策略是否指向同一版本。只有当各层对同一 URL 的回源与失效行为一致,检测结果才具备可比性。在此之前,任何单次检测结果都只能说明“某一个版本的状态”,不能代表链接的真实状态。
把版本固定下来之后,再用死链接检测工具做批量判断,结论才可靠;否则工具报出的异常,可能只是缓存分歧的投影,而不是需要修复的死链接。