先给结论:不要从“Google又抓了旧配置”入手,而要从发布链路里找出最后一次写入旧值的环节。可操作的做法是给每次配置写入留下可比较的版本标识,并让线上读取结果与发布记录对得上;如果对不上,问题通常不在抓取,而在发布系统、缓存回填或人工回滚中的某一环。
假设一个常见场景:你更新了 robots.txt 或页面级 meta robots 配置,发布记录显示新版本已成功,但过一段时间再读取线上内容,又回到旧值。此时有两种合理解释。
第一种解释是发布系统内部发生了覆盖。后执行的流水线、配置中心旧快照、定时任务或人工回滚,把文件重新写成了旧版本。第二种解释是发布本身没错,但读取路径拿到的是旧副本,例如 CDN 边缘节点、反向代理缓存、对象存储的旧对象,或读取端本身连到了非目标环境。
这两种解释对应完全不同的处理方向:前者要改发布流程,后者要改缓存与读取验证方式。若只看到“线上是旧值”就断定 Google 抓错,容易把排查引向错误方向。
能区分它们的是时间顺序和写入痕迹,而不是单次读取结果。建议收集以下三类证据:
判断规则可以简化成一句:如果源站内容摘要已是旧值,问题在写入侧;如果源站是新值而外层读取是旧值,问题在缓存或读取路径。 这个区分动作做完,下一步该查发布流水线还是查缓存层,就明确了。
最有效的实际动作,是在配置内容里加入一个可读的版本标识。例如在 robots.txt 顶部加一行注释:
# config-version: 2024-06-01-a
或在页面配置中保留一个不对外展示但可读取的版本字段。这样每次线上读取时,你看到的不只是“旧值还是新值”,而是“哪一个旧版本”。如果线上反复回到同一个旧版本号,说明存在固定的回填源,例如某个旧快照或某条定时任务;如果版本号在多个旧值之间跳动,则更可能是并发写入或缓存未收敛。
这个动作的结果会直接影响下一步:版本号固定,就去定位那个快照的持有者;版本号随机,就优先检查并发发布与缓存刷新顺序。
两类修复方式各有适用条件,不应同时盲目上。
若证据指向发布系统覆盖,优先做的是让配置写入具备单调性:后一次发布必须能识别并拒绝比当前版本更旧的写入,或至少记录覆盖告警。适用条件是你能控制发布流水线和配置中心。
若证据指向缓存回填,优先做的是缩短旧副本的存活窗口,并在发布后主动触发目标路径的刷新。适用条件是缓存层可被配置和观测,且你能确认回填来源。若缓存层不可控,则只能退回到源站侧加版本标识,用可观测性换取排查能力。
两种方式都成立时,先修写入侧更稳妥,因为缓存只是放大器;如果旧值根本不再被写入,缓存回填的旧副本也会随时间失去来源。
假设周一发布版本 A,线上读取为 A;周三发布版本 B,线上读取先为 B,几小时后回到 A。源站直连读取仍为 A,说明旧值确实被重新写入。检查发布记录发现,周三的发布流水线之外还有一条每日同步任务,它从上周快照恢复配置。此时可确认来源是同步任务,而不是 Google 抓取或缓存。
处理动作是暂停该同步任务,重新发布版本 C,并观察源站摘要是否稳定为 C。若稳定,再检查外层读取是否收敛。这个顺序的意义在于:先排除写入侧,再判断缓存与抓取,避免把发布问题误判成索引问题。
需要提醒的是,robots.txt 的抓取限制并不等于可靠的索引移除,站点地图也不保证收录;即使配置正确,Google 是否重新抓取和更新索引仍受其自身调度影响。因此,追踪配置来源与观察收录变化应分开处理,不能用抓取日志的短期波动替代发布链路的证据。