当 CDN、反向代理或应用层缓存各自返回不同版本的 robots.txt 时,不要先改规则,而要先判断"哪一层在对外供数"。如果只有边缘节点返回旧版本、回源拿到新版本,问题属于缓存一致性;如果回源本身也返回旧版本,问题属于发布链路。两种情况的下一步动作完全不同。
多层缓存下,同一路径可能同时存在边缘缓存、中间代理缓存和源站静态文件三份副本。定位一致性问题的第一步,是从不同网络位置请求同一路径,比较响应头中的缓存标识与正文内容。
这一步的结果决定后续方向:公网与回源不一致,处理缓存;两者一致但与发布系统里的文件不一致,处理发布或构建环节。
仅凭正文差异很难判断是哪一层。更可靠的做法是让每一层留下可区分的证据,而不是靠猜测。
# build-2024-06-a,作为版本标记。这个动作的价值在于:它把"看起来不一致"转化为"哪一层持有哪个版本"的事实,从而决定是触发缓存刷新,还是回到发布流程排查。
两种原因的处置顺序不同,判断错方向会浪费大量时间。
一个需要注意的反例:如果边缘与源站正文相同,但与你本地编辑的文件不同,这并不一定说明缓存有问题,也可能是发布流程根本没有把本地改动推送到源站。此时刷新缓存不会改变结果,必须先解决发布链路。
假设某站点有边缘缓存、中间代理和源站三层。发布新规则后,公网请求返回版本 A,中间层返回版本 B,源站返回版本 C。
按前面的方法,先给每层打上可区分标记,再逐层请求。若发现源站是 C、中间层是 B、边缘是 A,说明发布已到达源站但未穿透中间层,问题集中在中间层缓存失效策略。此时下一步应是检查中间层的缓存键与失效触发条件,而不是继续修改 robots.txt 内容。
这个例子中的数字和层数只是说明比较方法,不代表任何真实站点的现状。
请求量、抓取量或某个统计归零,不能单独证明缓存一致性问题已经解决。这些现象还可能来自抓取频率自然波动、规则本身被遵守、或统计口径变化。要确认一致性,应回到分层请求的正文与标记比对,而不是只看单一指标。
另外,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录;不同搜索引擎对规则的支持情况需要分别核查。这些事实会影响你对"问题是否真正解决"的判断,但不改变缓存一致性本身的定位方法。
先完成一次分层请求与标记比对,明确对外供数的是哪一层、哪一层持有旧版本。若差异只出现在缓存层,处理缓存失效与刷新;若源站本身就是旧版本,回到发布链路。只有把这两类原因分开,后续的规则修改或缓存操作才有明确目标。