history.pushState 似乎导致 gtag.js 再次加载 (SPA)

history.pushState seems to cause gtag.js to load again (SPA)

每次更改页面时,我的 SPA 都会重新加载 GTAG。每个 post 在线都在说我必须让 GTAG 在我的代码中再次加载。所以,我整理了一个小的粗略样本来重现这个问题。我在做什么导致了多重负载?我只注意到它是因为 Chrome 中的 Google Tag Assistant 扩展指出了它 "Multiple installations of Global site tag (gtag.js) detected"。一切似乎都被很好地跟踪了。

<html>
<head>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'GA_MEASUREMENT_ID', {'send_page_view': true});
</script>

<title>Single Page</title>
<script>
function change_page_function(page_nm)
{
    var page = {'page':page_nm};
    history.pushState(page, page_nm, '/'+page_nm);
    gtag('event', 'page_view', {'page_title' : page_nm, 'page_path' : "/"+page_nm});
    //gtag('config', 'GA_MEASUREMENT_ID', {'page_path': page_nm});
}
</script>
</head>
<body>
    <a onclick="change_page_function('One');return false;" href="javascript:void(0);">Page 1</a>
    <a onclick="change_page_function('Two');return false;" href="javascript:void(0);">Page 2</a>
</body>
</html>

在我的真实 SPA 中,如果我删除 history.pushState,它不会加载多个 gtag.js 标签,并且它的行为和跟踪都很好。当然减去漂亮的网址。我也尝试恢复到 Universal analytics 并遇到了同样的问题。如果我将 GTM 添加到此示例中,它也会重复。

问题是 Google Tag Assistant 与单页应用程序一起使用时。 至少在我的情况下。我想说的是,通过查看开发人员控制台中的“网络”选项卡,确保您没有加载 gtag.js 或 js 两次。 https://www.analyticsmania.com/post/multiple-installations-of-google-tag-manager-detected/