先做一个判断:如果同一外链地址在浏览器、服务器日志和抓取响应里看到的版本不同,问题通常不在“有没有被收录”,而在请求经过了哪几层缓存。缺少完整日志或权限时,仍然可以用带随机参数的请求、响应头里的缓存标记和版本指纹,把差异缩小到某一层;但这只能证明该层行为不一致,不能直接推出收录结果会怎样变化。
定位一致性问题的第一步,是确认自己能不能改变请求的缓存键。缓存键决定了不同请求是否被视为同一个对象,能控制它和不能控制它,排查路径完全不同。
选择依据很简单:能控制键,就做主动对照;不能控制键,就做被动取证。两者的结论强度不同,前者能定位到层,后者往往只能定位到“存在不一致”。
不必抓取整页再逐字 diff。先给页面找一个短小的版本指纹,例如正文里一个会随发布变化的标识、一段结构化数据的哈希,或响应头中的内容标记。假设某外链地址的正文里带一个发布标识,那么可以这样取样:
这个动作的结果会直接决定下一步:标识分叉指向内容版本问题,标记分叉指向缓存配置问题。两类问题的修复动作不同,混在一起处理会反复回退。
缓存相关的响应头经常被当成判定依据,但它们只描述某一跳的行为。经过多层缓存后,你看到的头可能来自最外层,而内层返回的内容并未被覆盖。常见的合理解释包括:外层缓存命中旧副本、内层回源拿到新版本、压缩或转码导致字节不同但语义相同。
因此,看到 Age 较大或缓存标记为命中,不能单独证明内容过期;看到版本不同,也不能单独证明源站发布失败。需要至少两个独立来源指向同一层,才适合下判断。
如果既拿不到服务器日志,也无法访问缓存层配置,排查应止步于“可复现的差异描述”。可以记录请求时间、返回的版本指纹和可见的响应头,形成一份可交接的说明,但不要写成“某层缓存故障”的结论。以下推断在没有权限时都不成立:
另外要提醒一点:robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。即使缓存一致性问题解决了,收录状态仍可能因其他原因保持不变,这两件事不能互相证明。
把差异缩到某一层之后,下一步才是决定改缓存键、缩短缓存时间,还是改发布流程。在拿到分层证据之前就改配置,往往只是把不一致从一个版本换成另一个版本,问题依旧存在。