先给结论:多层缓存下出现版本不一致,最可能的原因不是“索引申请失败”,而是各层缓存的键、过期时间和刷新方式不同,导致同一 URL 在不同节点返回不同 HTML。缺少完整权限时,最小动作是固定一个 URL,分别记录 CDN、反向代理、应用层和浏览器拿到的响应头与正文特征,再判断差异发生在哪一层。这个动作只能缩小范围,不能直接证明搜索引擎会收录哪个版本。
假设某页面刚更新了正文和 canonical,运营在浏览器看到新标题,用命令行请求看到旧标题,CDN 边缘节点返回的又是第三种组合:新正文加旧 canonical。此时不要急着重新提交索引申请,因为提交只表达“请处理这个 URL”,并不指定搜索引擎必须采用哪一层缓存的内容。
可执行的最小动作是建立一张对照记录:对同一个 URL 依次请求浏览器、CDN 边缘、源站反向代理、应用直连,记录状态码、Age、Cache-Control、ETag、Last-Modified、Vary、canonical 和正文中的版本标记。若某个位置缺少权限,就把它标为“未验证”,而不是用其他层的结果代替。
多层缓存最容易误导人的地方,是让人把“我看到了旧内容”等同于“搜索引擎也看到了旧内容”。这两件事不能直接划等号。要区分它们,可以看三个证据。
这些证据只能支持“差异发生在哪一层”的判断,不能推出搜索引擎实际采用哪一版。抓取量或请求量归零也不能单独证明处理正确,因为还可能是抓取时机、 robots 限制、URL 参数变化或日志采样造成的。
当多层缓存不一致时,常见的错误做法是用 robots.txt 挡住旧版本,或者把 URL 重新塞进站点地图,然后期待索引申请自动解决。需要明确边界:
robots.txt 的抓取限制不等于可靠的索引移除。它可能阻止抓取,但已收录的 URL 仍可能出现在结果中。因此,在缓存版本未收敛前,反复提交索引申请通常只会增加噪声。更合理的顺序是先让源站和缓存层对同一 URL 返回可预期的一致版本,再决定是否提交。
缺少完整数据或权限时,仍可以按下面顺序执行,并记录每一步的结果如何影响下一步。
Vary 与缓存键是否把不该区分的维度纳入。这个顺序的价值在于:每一步都能排除一层,而不是靠“清所有缓存”碰运气。清所有缓存有时会让问题暂时消失,但无法说明是哪一层的键或过期策略导致不一致,下次仍会复发。
只有在同一 URL 从源站到边缘节点返回的版本已经稳定一致,并且 canonical、标题和正文指向同一版本时,提交索引申请才有明确意义。若仍存在多层返回不同版本,提交后搜索引擎可能抓到其中任意一层,反而让判断更困难。
可以提交的情形是:差异已定位到某一层并已修正,且从多个位置验证版本一致。不能提交的情形是:只看到浏览器旧版本,尚未确认源站和 CDN 的状态;或者只凭一次请求就断定索引有问题。若无法获得 CDN 或源站权限,最小动作是记录可观察到的响应差异并标注未验证项,而不是假设搜索引擎采用了你看到的那一版。下一步应把这份对照记录交给能修改缓存策略的人,由他们决定刷新哪一层、是否调整缓存键。