网站死链查询时遇到“假死链”,最常见的原因是查询工具或中间层读取了缓存结果:服务器已经返回200,但缓存仍保存旧的404;或者反过来,页面已经404,缓存却仍返回200。排除假象的核心方法是绕过缓存重新请求,并对比不同来源的响应。
死链查询的结果可能被三类缓存影响。第一类是浏览器缓存,本地访问过的404会被记住。第二类是CDN或反向代理缓存,它可能按URL缓存了状态码。第三类是查询工具自身的缓存,工具为节省请求会复用一段时间内的结果。判断时不要只看一次查询结果,而要看状态码来自哪一层。
可以用curl -I查看响应头,重点看Age、X-Cache、CF-Cache-Status这类字段。如果Age大于0,说明响应来自缓存;如果出现HIT,说明中间层直接返回了缓存内容。这些字段只能说明“可能来自缓存”,不能单独证明链接真实状态。
在URL后追加一个无意义的查询参数,例如?cachebust=20240521,让缓存键发生变化,从而回源获取真实响应。这是最直接的可执行步骤:
原始URL?cachebust=随机值,观察状态码是否变化。注意,带参数请求只适合诊断,不能作为最终结论。有些服务器会对未知参数返回不同内容,因此要结合响应头和页面正文一起判断。
单一工具的结果不足以定论。可以同时用以下方式交叉验证:
curl或浏览器开发者工具的Network面板直接请求,关闭“禁用缓存”选项。如果多个独立来源都返回404,且源站日志也记录404,就可以排除缓存假象。如果只有某一个工具返回404,其他来源返回200,则应优先怀疑该工具的缓存或抓取策略。
确认是缓存问题后,可以清理对应层级的缓存再复测。CDN缓存通常需要在控制台按URL刷新;浏览器缓存可以用无痕窗口或强制刷新;查询工具缓存则只能等待其过期或更换工具。清理后不要立即下结论,应间隔一段时间再请求一次,确认状态码稳定。
需要区分的是:robots.txt的抓取限制不等于索引移除,站点地图也不保证收录。这些因素不会直接造成死链查询中的缓存假象,排查时应把缓存问题和抓取、索引问题分开处理。
下一步:选一个被标记为死链的URL,分别做一次原始请求和一次带随机参数的请求,记录两次的状态码与响应头,再决定是清理缓存还是按真实死链处理。