唯一责任方的判定标准不是“谁最后写入”,而是“谁拥有该路径的最终决策权并能承担回滚”。如果两个系统都会向同一份 robots.txt 输出规则,你必须先确定一个权威生成器,让其他系统只提交意图、不直接落盘;否则每次冲突都只能靠人工比对,无法形成可重复的处理流程。
拿当前线上文件,按行标注每一段的来源。常见来源包括:CDN 或边缘配置、CMS 插件、发布流水线脚本、运维模板。标注时不要只看注释,注释往往在合并时被丢弃。
一个可执行的判断方法是:把文件按 User-agent 分组,逐组问“这段规则由哪个系统在什么事件后写入”。如果同一组规则在两次发布之间出现不同内容,而发布记录里只有一个系统变更,那这个系统就是当前的事实写入方。这个动作的结果会直接决定下一步——如果写入方不止一个,你面对的是责任归属问题,而不是规则语法问题。
整份 robots.txt 只有一个文件,但规则可以按路径拆分责任。建议把规则分成三类:
划分完成后,为每一类指定唯一责任方。责任方的含义是:只有它能批准该类的最终输出,其他系统只能提交变更请求。这样即使多个系统同时生成规则,合并时也有明确的仲裁顺序。
假设你有一个发布脚本和一个 CDN 配置都会输出 Disallow 规则。可以约定如下裁决顺序:
这套顺序需要写进合并脚本,而不是写在文档里靠人记住。一个假设的例子:发布脚本想放行 /search/,CDN 配置想封锁 /search/。如果搜索目录属于业务目录级且责任方是发布脚本,则最终输出放行;CDN 的封锁意图被记录为待确认项,而不是直接生效。这个动作的结果是:下一次同类冲突不再需要临时开会,脚本会按既定顺序输出并留下变更日志。
唯一责任方确定后,至少验证三件事:
验证时不要只看“文件内容正确”。还要确认责任方之外的系统在下次发布时不会绕过合并逻辑直接覆盖文件。如果存在绕过路径,唯一责任方只是名义上的,实际仍会回到多系统混写状态。
以下条件成立时,应该把责任方从当前持有者切换到另一个系统:
切换时不要直接改文件归属。先让新责任方接管合并脚本的输出权,旧责任方降级为意图提交方,观察一个发布周期后再移除旧写入路径。这样做的结果是:切换过程本身不会产生新的规则冲突,你也能从日志中确认新责任方是否按预期裁决。