后台看客服按钮的曝光事件,一个会话里报了 47 次,时间戳全挤在十几秒内,转化率被算成了 0.3%。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,观察器的回调没有取消监听,元素每次进出视口都触发一次。上报函数也没按会话去重,SDK 自带的曝光埋点同时还开着,两边各报一份。
「客服曝光埋点重复」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。改完顺手把文档补一句,省得下次自己重新推一遍。
const io = new IntersectionObserver((list) => {
list.forEach((e) => {
if (e.isIntersecting) { track('cs_widget_view'); io.unobserve(e.target); }
});
});
监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
具体做法是,第一次触发之后立刻取消监听,别让它反复回调;用会话存储记一个标记,同一会话只报一次;先关掉 SDK 自带的埋点,确认数据只剩一份再谈转化率。
最后用这个标准收尾,滚动十几次,曝光事件只上报一条,转化率回到正常量级。
