当CDN、反向代理、应用层缓存和搜索引擎抓取缓存各自返回不同版本的robots.txt时,先不要急着改规则。正确顺序是固定一个可复现的请求路径,逐层比对响应头与正文,确认分歧发生在哪一层,再决定是保留现有缓存策略、改写规则,还是退出某一层缓存。定位一致性问题的核心不是找到“唯一正确版本”,而是让所有角色对同一份可核对的证据达成一致。
多个角色看到不同版本,通常是因为他们请求的入口不同:有人直接访问源站,有人走CDN边缘节点,有人用带特定User-Agent的抓取工具。要先把分歧转成可以核对的项目,最有效的动作是固定一条路径并记录完整证据。
Content-Length、ETag、Last-Modified、Cache-Control、Age、Via、X-Cache等头部。这一步的实际结果是:如果两个人拿到的ETag或正文哈希不同,就说明确实存在版本分歧;如果哈希相同只是显示不同,问题可能出在查看工具或字符编码,不必继续改缓存。只有确认哈希不同,才进入下一层排查。
robots.txt的一致性通常经过四层:源站文件、应用层缓存、CDN或反向代理缓存、抓取端本地缓存。逐跳比对的目的是找到第一个返回旧版本或改写版本的节点。
Last-Modified。Age和X-Cache。如果Age很大且正文哈希等于旧版本,说明边缘缓存未刷新。假设一个短例子:源站已把Disallow: /old-path/改为Allow: /old-path/,但CDN边缘仍返回旧正文,Age显示为86400。此时可以判断问题出在CDN缓存层,而不是源站规则写错。下一步应针对该路径刷新缓存或调整Cache-Control,而不是继续修改robots.txt本身。如果逐跳比对后发现源站、CDN、代理返回的哈希都一致,只有抓取端看到旧版本,那么问题在抓取端缓存,站点侧改规则不会立即改变抓取端已缓存的内容。
确认分歧层级后,处理方式不是越多越好,而是按前提选择。
值得注意的是,robots.txt的抓取限制不等于可靠的索引移除。即使所有缓存层都返回了正确的Disallow,已经收录的URL也不会因此自动消失。把缓存一致性问题解决后,如果目标仍是移除索引,需要另行走noindex或移除工具路径,不能把缓存刷新当成索引移除动作。
要让多个角色对同一事实达成一致,可以把上述证据整理成一份最小核对表,每次变更后填写同一组字段:请求URL、解析IP、User-Agent、状态码、正文哈希、ETag、Age、X-Cache、比对时间。任何两个角色的记录只要正文哈希和ETag一致,就可以认为他们看到的是同一版本;不一致时,按层级顺序继续比对下一跳。
这份核对表的作用不是替代判断,而是把“我这边看到的是旧版本”变成可复核的证据。当证据显示分歧只在某一层时,下一步动作就明确了:刷新该层、调整该层缓存键,或让该层退出缓存。若证据显示各层一致但抓取端仍表现不同,则应记录抓取端请求时间与站点变更时间的先后关系,并继续观察抓取日志,而不是立即回滚规则。站点地图不保证收录,HTTPS不保证安全无漏洞或排名,不同搜索引擎对robots.txt的支持情况也须分别核查,这些都不能用缓存一致性来替代验证。