唯一责任方应当按“最终写入并发布 robots.txt 或站点地图的系统”来定义,而不是按谁最先提出规则、谁在后台点过按钮来定义。多个系统同时生成网址规则时,冲突往往不在规则本身,而在于没人能说清哪份文件是线上生效版本。把责任绑定到发布动作,才能让分歧变成可核对的证据。
假设一个站点同时有内容系统、路由系统和运维脚本三处会产出网址相关配置。内容系统按栏目输出站点地图,路由系统按页面类型生成 robots.txt 片段,运维脚本在发布时再拼一次。上线后出现两种说法:内容团队说自己的规则已经生效,运维团队说线上文件不是他们最后一次发布的版本。
这时有两种解释都成立。第一种解释是规则内容本身冲突,例如同一路径一处允许抓取、一处禁止抓取。第二种解释是发布链路存在覆盖,后发布的系统把前一个系统的结果整体替换掉,导致“谁生成”和“谁生效”不是同一件事。两种解释的现象可能一样,但处理方式完全不同。
能区分这两种解释的证据,是线上实际返回的文件内容与各系统最后一次输出之间的差异。具体动作是:在发布后立刻抓取线上 robots.txt 和站点地图,保存原始内容,并与各系统各自声称的输出版本逐行比对。如果线上内容等于某一个系统的完整输出,说明是覆盖问题;如果线上内容是多个来源拼接后的混合体,说明是合并顺序或去重逻辑问题。
这个动作的结果会直接决定下一步。若是覆盖问题,责任方应定义为最后执行发布并成功写入线上文件的系统;若是拼接问题,责任方应定义为负责合并逻辑的那一层,而不是提供片段的各个上游。很多团队跳过这一步,直接开会争论“谁该改”,结果每次发布都重复同样的冲突。
定义唯一责任方时,至少要让三件事可以被外部核对:
假设一个例子:路由系统禁止抓取带参数的列表页,内容系统又把同一批列表页放进站点地图。若发布者唯一且冲突顺序明确,那么站点地图生成前应先经过同一套规则过滤,而不是两个系统各自输出后直接上线。这个假设只用于说明比较方法,不代表任何真实站点结果。
责任方确定后,验收不应只看“文件是否存在”,而要看发布后的实际状态是否与预期一致。可以核对线上 robots.txt 是否只包含当前责任方的输出、站点地图中的网址是否都通过了同一套抓取规则过滤、以及发布记录能否对应到具体时间点。需要注意的是,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录,因此验收目标应放在“规则一致且可追溯”,而不是承诺某种收录结果。
如果发布后抓取量或请求量出现变化,也不能单独证明责任方判断正确。变化还可能来自抓取预算调整、外部链接变动或站点整体改版。此时应回到发布记录和线上文件比对,确认变化是否与规则变更在时间上对应,再决定是否需要调整责任方或合并顺序。
出现以下情况时,原来的唯一责任方定义需要重新检查:发布链路新增了一个会写入网址规则的系统;合并逻辑从简单拼接改成按优先级覆盖;或者线上文件开始出现无法对应到任何单一来源的内容。重新定义时,仍然遵循同一条原则:责任跟着发布动作走,而不是跟着规则来源走。这样即使多个系统继续生成候选规则,也能在出现分歧时快速定位到唯一需要核对和修改的那一层。