结论先说:重复触发本身通常不是最危险的问题,危险的是修复时把旧记录覆盖掉。可行的做法是先把“事件发生”和“转化确认”拆成两层记录,修复只改确认层,不删除发生层;这样你才能比较修复前后同一批点击的行为差异。如果重复来自同一用户在同一会话内反复提交,而你的统计口径又按“每次提交都计一次转化”,那么下面这套保留记录的方法会失效,因为问题不在记录层,而在计数口径。
重复触发至少有三种可区分的原因,证据不同,处理动作也不同。
先按业务标识分组,看同一标识下有几条记录、时间间隔和来源标记。能稳定复现的是前端问题,只在特定返回路径出现的是回跳问题,集中在回调侧的是服务端问题。分不清这三类,修复就会打偏。
不要在原表上直接改状态。建议保留一张只追加的事件表,字段至少包含:业务标识、事件时间、来源标记、原始参数、记录版本。修复动作只做两件事:给新记录打上修复后的版本号,给旧记录标注为“修复前,保留”。
这样做的实际结果是:修复上线后,你仍然能按同一业务标识把修复前后的记录并排取出。下一步动作是设定一个观察窗口,比如修复后连续观察若干天,只比较窗口内新产生的业务标识,不把历史重复量混进对比,否则你无法判断修复是否真的减少了重复。
假设例子:某活动页的提交按钮同时绑定了点击和表单提交两个确认动作。修复前,一个业务标识平均产生两条记录;修复后只保留一条。如果直接把旧记录删除再统计,你会得到“重复率归零”的结论,但这个结论只说明数据被删了,不说明触发逻辑被修好了。
三类常见操作会让修复前后的对比失效:一是修复时直接更新旧记录的状态字段,原始时间被覆盖;二是把重复记录物理删除,只留去重后的结果;三是把修复前后的数据合并成一个总数,不再区分版本。
还有一个容易被忽略的反例:如果重复触发来自用户真实多次提交,而业务上每次提交都算一次有效转化,那么“去重”本身就是错的。此时保留全部记录、只修正归因口径,才是正确方向。判断依据是业务标识是否相同——标识相同才谈去重,标识不同就不该合并。
修复上线后,按下面顺序做一次核对:
需要提醒的是,请求量或重复量下降并不能单独证明处理正确,它也可能是上报通道故障、埋点未触发或流量本身减少造成的。要排除这些解释,需要同时核对业务侧的成功单量是否与事件量大致对应。两者都降,问题可能出在采集链路;只有事件量降而业务单量不变,才更接近修复生效。
修复完成后,把“同一业务标识的记录条数”加入常规核对项,比只看总转化数更能提前发现重复回潮。同时保留一份修复说明,写清修复时间、影响范围、保留的旧记录版本。这样下次再出现重复时,你能直接对比两次修复的差异,而不是从零排查。付费广告的转化数据只反映广告带来的行为,与自然搜索结果的排名机制无关,记录修复也不会改变广告本身的投放逻辑。