先给结论:异常恢复后出现“好结果”时,不能只凭当前页面能打开就判断修复生效。更可靠的区分方式是,先确认你观察的是哪个缓存层,再用不带缓存的请求、响应状态和抓取记录做交叉核对;只有当源站响应、缓存响应和抓取结果三者一致,才更接近真正修复。
假设某站点在一次改版后,把一批旧链接错误地返回了404。运维人员修正了规则,随后抽查时发现部分链接已经能打开,但另一些仍然返回404。团队内部出现两种判断:一种认为修复已经完成,只是缓存还没过期;另一种认为修复只覆盖了一部分路径,异常仍然存在。这个情境的关键不在于“404页面优化”本身做了多少设计,而在于如何把缓存过期和真正修复分开。
如果只看到“部分恢复”,最合理的下一步不是继续等,而是记录每个URL在源站、缓存节点和抓取工具中的响应差异。等待可能让缓存自然过期,也可能让真正的遗漏被掩盖。
异常恢复后的结果通常来自三个层面:源站应用、中间缓存或CDN、以及外部抓取或浏览器本地缓存。它们可能给出不同答案。要区分缓存过期与真正修复,先做三件事:
Cache-Control、Age、ETag,判断当前响应是否来自缓存副本。如果禁用缓存后仍然返回404,说明问题更可能在源站规则或内容本身;如果禁用缓存后返回200,而普通访问仍返回404,则缓存过期的解释更成立。这个动作的结果会直接决定下一步:前者需要继续修源站,后者只需确认缓存刷新范围。
缓存过期和真正修复都会表现为“过一段时间后变好”,但它们的证据不同。可以按以下对照来判断:
Age 较大,且与修复时间接近。这里要避免一个常见误判:某个URL恢复200,不等于整批URL都已修复。如果修复规则只匹配了部分路径,剩余URL仍会返回404,而缓存过期可能让其中几个先变好,造成“已经全部修好”的假象。此时应把URL按路径或参数分组,分别抽查,而不是只看首页或少数样本。
外部抓取记录是区分缓存与修复的重要旁证,但不能单独作为结论。站点地图提交、robots.txt 放行或抓取频率变化,都不保证某个URL已经被重新抓取并更新索引。更稳妥的做法是:
需要说明的是,robots.txt 的抓取限制不等于可靠的索引移除;站点地图也不保证收录。它们只能作为辅助信号,不能替代源站响应和抓取状态的核对。
较稳妥的判断条件是:源站对目标URL稳定返回200;缓存节点在刷新后也返回200;不带缓存的重复请求结果一致;抓取记录中出现200;并且这种状态在合理观察窗口内没有再次回退为404。满足这些条件后,才可以把“缓存过期”从主要解释中排除。
如果只满足其中一两条,尤其是只有浏览器能打开、而源站日志仍显示404,就应继续按异常处理。真正修复的标志不是“看起来好了”,而是多个独立观察点给出同一结论。下一步的动作也应据此调整:证据指向缓存时,安排缓存刷新和复查;证据指向源站遗漏时,回到规则和内容继续修复。