先给结论:把同一个URL的“当前响应”与“缓存副本的生成时间”分开记录,再观察源站响应是否在缓存过期前后保持一致。如果源站已返回正确状态码和Location,但缓存副本仍显示旧结果,属于缓存过期;如果源站本身仍在返回旧状态码或错误目标,则缓存过期只是掩盖了未修复的事实。判断顺序应是先确认源站,再确认缓存,最后确认抓取与索引表现。
假设你负责一个已有业务站点,某个栏目页从A地址301到B地址。异常期间,它曾错误地301到C地址,或返回302、404。现在你收到“已恢复”的通知,手头只有这个栏目页URL。不要直接看浏览器地址栏就下结论,先把它拆成三条证据:
三条证据的时间戳要对齐。若源站证据是10:00,边缘缓存证据是10:01,抓取证据是三天前,那么后两者不能直接证明10:00之后已经修复。
缓存过期与真正修复最容易混淆的地方,是两者都会在某段时间后让旧结果消失。区分方法是把观察点放在缓存过期窗口的前后,而不是只看某一次刷新。
Age、Cache-Control、Expires。如果这些字段不可见,就改用“连续请求并记录响应是否变化”的方式,但要知道这只能提供弱证据。若源站在两个时间点都返回301到B,而边缘缓存在过期前返回301到C、过期后返回301到B,这更像缓存过期,不是源站修复。若源站在两个时间点仍返回301到C,边缘缓存过期后也回到301到C,则说明修复并未发生在源站,之前的“恢复”只是缓存副本被替换或短暂命中异常。
真正修复的证据不是“某一次请求对了”,而是源站和缓存路径在缓存周期结束后仍保持一致。可以按下面的条件判断:
一个假设例子:某页面在周一被错误301到C,周二源站改回301到B,但CDN缓存仍保留到C,缓存过期时间为24小时。周三上午缓存过期后,边缘节点回源拿到301到B,用户访问恢复正常。这种情况下,周二的“恢复”其实是缓存尚未过期时的假象,周三的变化才是缓存过期。若周二源站根本没有改回B,周三缓存过期后仍会回到C,那就不是缓存问题,而是修复未生效。
如果你确认是缓存过期,下一步不是继续改301规则,而是检查缓存刷新是否覆盖了该URL、缓存键是否包含会区分请求的变量、以及是否存在多层缓存。动作可以是在源站确认正确后,针对该URL触发一次缓存刷新,然后重新按上面的对照法观察一轮。若刷新后边缘响应与源站一致,并且经过一个缓存周期仍一致,就可以把该URL从“待观察”移到“已修复”。
如果你确认是真正修复,下一步应转向抓取与索引验证:确认目标地址可访问、返回200,确认旧地址不再被内部链接指向,并检查站点地图与内部链接是否已更新。但要注意,站点地图不保证收录,HTTPS也不保证安全无漏洞或排名,所以这些动作是降低再次出错的概率,不是修复成功的充分证明。
如果你无法区分,最稳妥的动作是暂停对301规则的进一步修改,先固定源站响应,再等一个完整缓存周期后复测。频繁改规则会让源站证据和缓存证据互相污染,反而更难判断。只有源站与缓存路径在同一观察窗口内给出相同结果,才能把“异常恢复”认定为真正修复,而不是缓存过期带来的短暂正常。