用死链接检测工具扫出404、超时或跳转异常时,先不要直接改链接或提交死链。缓存造成的假象通常来自三层:工具自身的结果缓存、CDN或反向代理的页面缓存、浏览器或本地DNS缓存。判断方法很简单:换一个不经过缓存的请求路径复测同一URL,如果结果不同,就说明前一次结果被缓存污染了。下面比较两种处理方案,并给出选择步骤。
这个方案的目标不是修复,而是确认链接到底是不是真的失效。代价是操作稍多,但能避免误删有效链接。
?cachebust=20240101。查询参数不同,CDN和代理通常不会命中同一份缓存。curl -I "https://example.com/page?cachebust=1",重点看状态码,以及 Age、X-Cache、CF-Cache-Status 这类字段。出现较大 Age 或明确命中缓存的标记,说明这次结果可能来自缓存副本。curl -I -H "Cache-Control: no-cache" 请求一次,对比两次状态码是否一致。判断结果:两次状态码一致且都不含命中缓存的标记,说明链接状态基本可信;如果带参数时返回200、不带参数时返回404,或反过来,说明至少有一方在提供缓存结果,需要继续定位缓存层。
如果第一次扫描出现大量同类异常,逐个复测成本太高,可以先处理缓存再整体重扫。代价是可能影响线上访问,且清理动作本身需要权限。
适用条件:你有缓存管理权限,且异常数量大、分布有规律。判断结果:清理后复扫,异常数量明显下降且样本URL恢复正常,说明原结果是缓存假象;如果清理后仍然404,才应按真实死链接处理。
先看异常规模。少量异常、想快速确认真假,选方案一,代价低、不影响线上。大量异常、且你有缓存操作权限,选方案二,但要按层清理并逐层验证。
再看证据是否指向缓存。响应头里出现命中缓存的标记、Age 数值偏大、同一URL在不同参数下结果不同,这些都是缓存参与的证据,优先方案一。没有任何缓存标记、多个独立网络环境复测结果一致,则更可能是真实失效,不必先清缓存。
检查项:复测时是否使用了不同网络环境;是否对比了带参数与不带参数的响应;是否记录了响应头中的缓存字段;是否在清理每一层缓存后都做了样本复测。
robots.txt 的抓取限制不等于可靠的索引移除,检测工具报错也可能只是抓取被限制,而非链接失效。站点地图不保证收录,扫描结果里没有出现某个URL,不代表它一定是死链。HTTPS 不保证安全无漏洞或排名,不能因为协议正常就跳过状态码检查。另外,不同搜索引擎和不同检测工具对超时、跳转链的处理方式不同,同一URL在不同工具里结果不一致时,要分别核查,而不是直接采信其中一个。
下一步:挑一个异常URL,用带随机参数的请求复测一次,把状态码和缓存标记记下来,再决定是清缓存还是按真实死链处理。