先给结论:多层缓存返回不同版本,通常不是提交工具本身出错,而是同一条URL在不同缓存层留下了不同副本。定位顺序应从最靠近源站的一层开始,逐层比对响应头与正文指纹,而不是反复重新提交。缺少完整日志或CDN权限时,仍可用带随机查询参数的请求做最小验证,但只能判断某一层是否命中旧副本,不能据此推断收录状态或抓取频率。
条件一,你能登录CDN、反向代理或页面缓存插件,看到各层缓存键、TTL和清除记录。此时应逐层固定缓存键做请求,记录每层返回的ETag、Last-Modified和正文哈希。条件二,你只有浏览器和命令行,没有后台权限。此时只能从外部观察:对同一路径分别附加不同的随机参数、切换User-Agent、切换地区出口,比较返回内容是否一致。两种条件的分界线是能否主动清除某一层并观察变化,能清除才谈得上验证因果,不能清除就只能标记可疑层。
选择依据很简单:如果各层响应头里的缓存年龄差异明显,优先怀疑TTL设置不一致;如果响应头一致但正文不同,优先怀疑某层缓存了压缩前或压缩后的不同表示,或缓存键漏掉了Vary维度。例外是源站本身在灰度发布,此时各层返回不同版本属于预期行为,应先确认发布状态再排查缓存。
具体动作是给同一条URL建立一张对照记录,每条至少包含:请求层、请求时间、响应状态、缓存命中标识、正文前若干字节的哈希。可用下面的方式手工构造请求,注意把尖括号写成转义形式:
把基准版本与各层版本对比。如果附加随机参数后返回新版本,说明该层缓存键包含查询串,问题在TTL或清除时机;如果附加随机参数后仍返回旧版本,说明旧副本可能被缓存在更靠前的一层,或者源站本身就还在输出旧版本。这个结果直接决定下一步:前者去改TTL与清除策略,后者去核对发布流程,而不是继续在提交工具里重复推送。
可区分的原因证据主要看三处。第一,Age或缓存年龄字段是否大于零且持续增长,若增长说明命中了缓存副本。第二,ETag或Last-Modified是否与源站基准一致,若不一致说明该层持有的是另一个版本。第三,Vary字段是否声明了编码、语言或User-Agent维度,若缺失而实际又按这些维度返回不同内容,缓存键就会串版本。
需要提醒的是,请求量或抓取量归零不能单独证明版本已一致。它还可能来自抓取预算调整、robots限制生效、站点临时不可达,或统计口径变化。同理,robots.txt里的抓取限制不等于可靠的索引移除,站点地图也不保证收录,这些信号都不能替代逐层比对。
假设某页面更新了标题,源站直连返回新标题,CDN不带参数返回旧标题,带随机参数返回新标题,页面缓存插件返回旧标题。按上面的记录方法,可以判断CDN层缓存键包含查询串,而页面缓存层可能未随发布清除。动作是先清除页面缓存层并复测,若复测后三层一致,则问题定位为该层清除时机;若仍不一致,再检查该层是否配置了独立TTL。这个例子只用于说明比较方法,数字与层数均为假设。
如果缺少权限,最小动作退化为:连续多天用带随机参数与不带参数两种请求各取一次样本,记录正文哈希是否收敛。收敛只能说明外部可见版本趋于一致,不能推出已被收录或排名会变化;不收敛也只能说明至少一层仍在输出旧副本,不能确定是哪一层。
在再次使用网站收录提交工具推送之前,先确认三件事:各层返回的正文哈希是否一致;响应头中的缓存标识是否指向同一版本;清除某一层后变化是否符合预期。只有这三项都指向同一版本,提交动作才不会被旧副本干扰。若涉及多个搜索引擎,其对缓存与提交信号的支持情况须分别核查,不能用一个平台的表现推断另一个。HTTPS同样不保证内容一致或安全无漏洞,它不解决缓存版本错位。
最终判断标准是:你能指出哪一层、因为哪个缓存键或TTL设置、在什么时间窗口内返回了旧版本,并能通过清除或改配置让该层复测一致。做不到这一点时,任何关于收录结果的推断都只是猜测。