先定一条硬规则:同一时间只允许一个服务商拥有生产环境的写入权,另一个只做只读审查和方案提交。如果两边都必须动手,就按页面或目录切分责任区,并在改动前把责任区写成可核对的清单;否则后一次发布很容易把前一次改动整段覆盖,而且从页面上看不出是谁改的。
条件一:两边改的是同一批模板、同一批URL,只是优化思路不同。这种情况下不要让两边轮流上线,应选一个主执行方,另一方转为建议方。主执行方负责改代码和发布,建议方提交带URL、带位置、带理由的修改单,由主执行方判断是否采纳。这样做的代价是建议方失去直接操作权,但换来的是每次线上变化都能追溯到唯一一次发布。
条件二:两边改的是不同目录或不同语言版本,边界清楚。这种情况下可以并行,但必须先把责任区写死,例如一方只负责/products/下的页面,另一方只负责/news/下的页面,共享的头部、底部、导航、robots文件、站点地图归主执行方统一管理。边界一旦落到路径上,覆盖风险就从“谁改了什么”变成“谁越界了”,核对起来容易得多。
第一个动作是建立改动登记。每次上线前记录:改动日期、责任方、影响URL范围、改动类型(标题、正文、内链、结构化数据、跳转)、发布方式。这份登记不需要复杂工具,一张共享表格就够用。它的作用是让下一次改动前能查到“这个URL上周被谁动过”,而不是靠记忆判断。
第二个动作是做改动前后的快照。对关键URL保存标题、描述、H1、正文首段、内链数量的文本副本,发布后再取一次。如果发现某次发布后前一次改动的痕迹消失,就能立刻定位到是覆盖而不是效果波动。这里要注意:快照只能证明页面文本变了,不能单独证明是哪个服务商造成的,还需要和改动登记的时间戳对照。
第三个动作是约定发布窗口。两个服务商不要在同一时间段内各自发布。可以约定主执行方在周一、周三发布,建议方只在周二提交修改单,周四由主执行方统一处理。窗口分开之后,即使出现问题,也能把范围缩小到某一个时间段的某一次发布。
发现某个页面的优化痕迹消失,不要立刻断定是对方覆盖。先核对三件事:该URL是否在两次发布之间被重定向或合并;模板是否被整体替换导致局部改动丢失;缓存或CDN是否还在返回旧版本。这三种情况的处理方式完全不同,重定向要改跳转规则,模板替换要回滚模板,缓存问题只需等刷新或主动清理。
如果三项都排除,再对照改动登记和快照时间戳,确认是后一次发布覆盖了前一次。此时的动作是:暂停建议方的提交,由主执行方从最近一次可用快照恢复,再把两边的修改合并成一份清单重新发布。恢复之后要更新责任区说明,把容易冲突的模板或共享组件明确划给一方。
假设甲服务商改了产品列表页的标题模板,乙服务商在同一周改了同一个模板的内链结构。如果乙后发布且基于的是旧模板,甲的标题改动就会消失。核对方法是:看改动登记里两次发布的时间顺序,再看快照里标题文本是否回退到更早版本。若确认覆盖,下一步不是互相指责,而是把标题模板和内链结构拆成两个可独立发布的改动点,并规定模板类改动必须由主执行方合并后一次发布。
如果网站规模很小,只有几十个页面,且两个服务商改的是完全不同的页面,可以不做复杂的责任区划分,但仍要保留改动登记和发布窗口。反过来,如果网站有大量由模板生成的页面,或者共享组件被多个目录引用,就必须把共享部分收归一方,否则覆盖会反复出现。例外情况是紧急修复,例如线上出现严重错误需要立即回滚,此时可以由在场的一方先处理,事后补登记并通知另一方,但这种情况不应成为常态。