先给结论:恢复后不要只看页面当前返回的 canonical,而要把“同一 URL 在不同抓取时间、不同缓存层、不同客户端”看到的 canonical 分开记录。只有抓取端连续多次拿到新的 canonical,且旧值不再从任何缓存层回源,才能判断为真正修复;否则更可能只是缓存过期或边缘节点刷新。
假设你手头有一个商品页 /p/1001,此前 canonical 错误指向了另一个不相关的页面。你修改了模板并发布,现在浏览器里看到 canonical 已经正确。这个“正确”只能说明你的浏览器会话拿到了新版本,不能说明抓取端也拿到了。恢复至少分三层:源站输出、中间缓存、抓取端实际收到的响应。三层里任何一层还保留旧值,都会让异常重现。
判断顺序应该是:先确认源站直出,再确认缓存键和 TTL,最后看抓取端的连续观察结果。跳过前两步,直接看索引状态,很容易把缓存过期误判成修复成功。
缓存过期有一个典型特征:变化是“跳变”的,且与 TTL 或刷新动作时间吻合。真正修复的特征是:新 canonical 在多个独立抓取来源、多次请求中稳定出现,旧值不再返回。可以用下面这组信号做区分。
如果只看到一次新值就下结论,最常见的误判是把 CDN 边缘节点过期当成修复完成。等下一个节点回源旧缓存时,异常会再次出现。
以你手里的这个页面为对象,按下面步骤操作,每一步都记录结果,再决定下一步。
这个顺序的关键是:先排除缓存,再确认抓取,最后才谈索引。顺序颠倒会把缓存过期当成修复,或把修复当成缓存问题。
个别样本成立,不代表可以照搬。单页修复可能因为该页缓存恰好过期而看起来生效;规模化后,不同页面的 TTL、缓存节点、抓取频率、模板分支都可能不同,例外会集中出现。常见边界包括:
因此,规模化验证要按页面类型、模板、缓存策略分组,而不是用一个页面的结果推断全站。分组后,如果某组持续返回旧值,优先查该组的缓存和模板,而不是重复改 canonical 逻辑。
假设某页面 TTL 为 24 小时,你在修改后第 2 小时看到新 canonical,第 6 小时又看到旧值,第 26 小时起稳定为新值。这个序列更符合缓存逐步过期,而不是修复在第 2 小时就完成。若第 2 小时起连续多次、多来源都稳定为新值,且旧值不再回源,才更接近真正修复。这个例子只说明比较方法,不代表任何真实站点的表现。
把观察记录写成时间、来源、返回值三列,你就能用同一份证据回答“是缓存过期还是真正修复”,并据此决定是继续等待、刷新缓存,还是回到源站排查。