唯一责任方应当由“谁掌握最终输出”来决定,而不是由谁先提出规则来决定。更可执行的做法是:把网址规则的生成权收归到一个系统,其他系统只提交数据或配置,不再直接拼装对外可见的网址。若短期无法收权,则必须指定一个系统作为主生成器,其余系统的输出只能作为输入,且要在发布前做一次冲突比对。
多个系统同时生成网址规则,通常不是简单的重复,而是分层冲突。常见有三层:商品或内容系统生成基础路径,营销或活动系统追加参数,前端路由或模板系统再做一次格式化。三层各自都认为自己输出的是最终网址,于是同一件商品可能出现带参数、不带参数、大小写不同、末尾斜杠不同的多个版本。
要定义唯一责任方,先做一次输出归属盘点。把最近一次发布中所有对外可见的网址来源列出来,标注每个来源是“生成”还是“改写”。生成指从无到有拼出完整网址;改写指在已有网址上增删参数、替换域名或调整路径。通常只有一个系统应该处于生成位置,其余都应是改写或只读。若发现两个系统都在生成,责任方冲突就已经成立。
这个盘点不依赖任何平台后台的特定入口,只需要在发布流程里找“谁最后写出链接”这一步。最后写出的那个系统,往往就是事实上的责任方,但它未必是应该承担责任的那个。
如果店铺的类目结构、商品路径和活动规则在较长周期内不频繁变动,优先把生成权集中到一个系统。做法是让其他系统停止拼装完整网址,只输出结构化字段,例如商品标识、类目标识、活动标识,由主生成器统一按模板拼装。主生成器负责处理大小写、末尾斜杠、参数顺序和编码。
这个选择的代价是主生成器会成为发布链路上的单点。它一旦出错,所有对外网址都会受影响。因此需要给它配一个发布前检查:用同一批输入跑一次生成,比对输出是否与上一版一致,差异项必须有人确认。这个动作的结果会直接决定下一步——如果差异只出现在参数顺序,可以放行;如果差异改变了路径本身,就应暂停发布并回到主生成器排查。
如果店铺经常做活动,且不同渠道需要带不同跟踪参数,集中生成会变得僵硬,因为每次活动都要改主生成器。这时可以保留主生成器,但允许渠道系统在明确边界内覆盖。边界要写成规则:渠道系统只能追加白名单内的参数,不能改动域名、路径和大小写;覆盖必须记录来源和生效范围。
这个选择的代价是规则复杂度上升,容易出现“同一个商品在不同渠道下网址不同”的情况。应对方式是给覆盖加一个显式标记,让主生成器知道哪些网址是被覆盖过的。这样在排查收录问题时,能快速区分“这是主生成器的输出”还是“这是渠道覆盖的输出”。
第一步,冻结新增生成点。在收权完成前,不再允许新的系统加入拼装完整网址的行列。第二步,选一个主生成器,把它的输出作为基准。第三步,让其他系统改为提交字段,并保留一段并行期,用并行期的输出来比对差异。第四步,差异收敛后,关闭非主生成器的完整网址输出。
并行期的长度取决于变更频率。变更少时可以短一些,变更多时应覆盖至少一个完整的活动周期。并行期结束时,如果差异仍然存在,不要直接关闭旧输出,而应先确认差异是否属于有意覆盖。有意覆盖保留,无意差异修正。
这个动作的结果会影响后续的排查方式。收权完成后,网址问题只需查主生成器;未收权时,每次排查都要先确认是哪个系统写出的网址。前者排查路径短,后者排查路径长但灵活。
有一种情况不适合强行收权:两个系统分别面向不同搜索引擎或不同渠道,且渠道之间不允许共享网址。这时唯一责任方应按渠道分别定义,而不是全站只留一个。每个渠道内部仍然只允许一个生成器。
还要注意,网址规则统一不等于收录问题自动解决。robots.txt 的抓取限制不等于可靠的索引移除;站点地图不保证收录;HTTPS 不保证安全无漏洞或排名。不同搜索引擎对参数、大小写和末尾斜杠的处理支持情况须分别核查。因此,收权解决的是“网址从哪来”的问题,不是“网址一定被收录”的问题。若收权后抓取量或请求量出现下降,不能单独据此判断处理正确,还要看是否有抓取预算重新分配、页面质量变化或外部链接减少等合理解释。
假设一个场景:某店铺商品系统生成 /item/1001,活动系统生成 /item/1001?from=a,前端模板又统一补上末尾斜杠变成 /item/1001/。三个版本都对外可见。按本文方法,先确认商品系统是主生成器,活动系统只保留白名单参数,前端模板不再改写路径。并行比对后,若发现带参数版本是活动需要的,就保留为显式覆盖;若不需要,就关闭。这个例子的数字仅用于说明比较方法,不代表任何真实店铺的现状。
最终,唯一责任方不是一个头衔,而是一条可验证的规则:对外可见的完整网址,只能由一个系统写出;其他系统的输出必须能被主生成器识别、比对和解释。做到这一点,网址规则冲突才有稳定的收敛方向。