用死链检查工具扫出大量404或超时,先别急着改链接或删页面。缓存造成的假象很常见:工具拿到的是CDN边缘节点、浏览器、代理服务器或搜索引擎快照里的旧响应,而源站当前状态已经恢复或从未出错。排除办法是按“先确认源站、再逐层绕过缓存、最后对照多源结果”的顺序复核。
缓存假象有几个可观察特征,命中越多越值得怀疑:
Cache-Control、Age或CDN标识。这些只是“可能原因”的信号,不能据此断定就是缓存。真正定位需要下面几步实测。
这一步的目标是拿到源站的真实响应,而不是CDN或中间层返回的旧副本。
curl -I请求目标URL,观察状态码和响应头。命令示例(假设域名为example.com,仅作格式演示):curl -I https://example.com/page。?cachebust=20240101。多数缓存按完整URL做键,加参数通常能穿透旧缓存,拿到源站响应。--resolve把域名指向源站IP再请求:curl -I --resolve example.com:443:源站IP https://example.com/page。这样请求不经过CDN。Age差异明显,缓存嫌疑很大。适用条件:你能拿到源站IP或可控的测试入口。若站点完全托管在CDN后面、没有独立源站入口,就跳到下一步用多源对照。
单一工具的结果不足以定论,因为每个工具的出口节点、User-Agent和超时设置不同。
curl、在线HTTP状态检查、浏览器开发者工具的Network面板各跑一次,比较状态码。Date、Age、Last-Modified能帮助判断返回的是新内容还是旧副本。判断结果:如果多个独立出口都返回404,缓存假象基本可以排除,问题在源站本身;如果只有部分出口报错,优先怀疑该出口对应的缓存节点。
确认是缓存问题后,按从内到外的顺序处理,避免反复:
注意:robots.txt的抓取限制不等于可靠的索引移除,它只影响抓取,不保证页面从索引消失;站点地图提交也不保证收录。这些机制与缓存假象是不同层面的问题,不要混用。
为了避免每次都被缓存误导,可以在死链检查流程里固定几个检查项:扫描前记录工具出口和User-Agent;对报错URL先加参数复测一次;对批量报错先抽样验证源站;把“源站确认”和“缓存确认”分成两个独立结论。这样得到的死链清单才可用于后续修复,而不是把时间花在并不存在的坏链接上。
下一步:挑出本次扫描中报错最集中的一批URL,按上面的顺序做一次源站与缓存对照,只把源站确认返回404的URL列入修复清单。