先给结论:不要急着在代码里把重复触发“压掉”再观察,而应先把修复前的重复样本和修复后的干净样本分开留存。具体做法取决于重复来自前端埋点还是后端回传——前者适合在页面层加去重标识并保留原始事件日志,后者适合在回传链路做幂等处理并单独记录被拦截的重复请求。两种路径的共同点是:修复动作本身要产生一份可对照的时间线,否则你无法判断转化数下降是修复生效还是统计口径变了。
转化事件重复触发的常见来源有两类,对应两种记录策略。
判断依据不是看总数涨了多少,而是看同一业务主键是否对应多条事件。如果连业务主键都没有,先去补一个稳定标识,否则修复前后无法对齐。
很多人的第一反应是先把重复数据删掉再看报表,但这会丢掉唯一的对照基线。正确动作是:
这一步的结果直接决定下一步:如果你不知道修复前按哪种口径统计,修复后就无法解释数字变化。假设修复前某活动一周记录 200 条事件、去重后 150 个主键,那么修复后如果变成 150 条,你只能说明“重复被压掉了”,不能说明“转化真的减少了”。这是假设示例,用于说明对照方法。
去重逻辑不能是静默的。无论前端还是后端,都应让被拦截的重复请求进入一份独立日志,而不是直接丢弃。
这样做的实际影响是:修复后你仍能看到“本来会重复多少次”。如果某天拦截量突然归零,可能是重复问题真的消失了,也可能是埋点标识生成逻辑变了、或回传链路改了——这些都需要结合日志一起看,单看拦截量归零不能证明处理正确。
对比修复前后最可靠的方式是按业务主键做集合比较,而不是看转化总数。
这个动作的结果会告诉你下一步该做什么:交集稳定、差集合理,说明修复没有误伤;如果大量主键消失,说明去重条件过严,需要放宽幂等键或检查标识生成是否稳定。
有两种情况可以简化处理。一是重复触发只发生在测试环境、从未进入正式统计,此时保留测试日志即可,不需要生产基线。二是重复来自第三方回传且对方不提供业务主键,这时你无法做集合对齐,只能退而记录“修复前后每日总量 + 拦截量”,并明确说明该对比只能反映趋势、不能定位到单条转化。这两种例外的共同前提是:你已经确认重复没有污染正式报表,否则仍应保留完整基线。
把修复前的原始样本、修复中的拦截日志、修复后的主键对齐结果三份记录放在一起,才算真正保留了可追溯的修复前后记录。