站内是单页应用,用户点了 12 个路由,GA4 实时报告只显示 1 个 page_view,平均互动时长却到了 6 分钟,页面路径全是落地页。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
gtag('event', 'page_view', {
page_location: location.href,
page_title: document.title
});
gtag 只在初始化时发一次 page_view,history.pushState 不会触发浏览器导航,也不会自动上报。前端路由切换后没有补发事件。这一点先确认清楚,后面就不用反复试。
「pushState page_view」这类改动最怕改一半,回滚脚本先准备好,再动生产。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
具体做法是,在路由变化后手动发 page_view,带上新的 page_location;GA4 配置里把 send_page_view 设成 false,避免重复;首次进入也统一由路由守卫发,别两套逻辑;用调试工具确认每次切换只有一条事件。
改完照着核一遍,连点五个导航后实时报告出现五条 page_view,路径各不相同。
