Google Analytics Web+App 事件配置:错误 'gtag is not defined'

Google Analytics Web+App event config: Error 'gtag is not defined'

我正在尝试为网站设置 Google Analytics App+Web 的电子商务事件配置。参考文档 here.

因为电子商务配置有很多自定义代码,我不能使用通用的 GA App+Web webevent 模板,所以我在这种情况下使用自定义 HTML-tag。

作为第一次测试,我尝试触发以下简单事件:

<script>

  gtag('event', 'blabla', {
  'test_param1': 'test_value_1'
});

</script>

但是,事件没有正确发送到 GA;相反,在控制台中返回以下错误:

未捕获的引用错误:未定义 gtag

重现见下页:https://www.hema.nl/mooi-gezond/make-up/make-up-accessoires/toilettassen-1/toilettas-11830901.html

附加信息:

有谁知道出了什么问题,为什么会出现控制台错误以及为什么事件没有发送到 GA?

问题原因已找到。问题似乎是,如果 App+Web 基本设置是使用 GTM App+Web 基本模板标签完成的,则 gtag() 不起作用。相反,应该首先将事件推送到 GTM 数据层,然后使用 GTM App+Web 事件模板将事件发送到 Google Analytics。

非常感谢 Gino(在 Merkle 工作)解决了这个问题!

简答

除了 GTM GA App+Web 代码之外,您还需要添加以下代码来定义 gtag():

<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
</script>

长答案

根据官方文档 (https://developers.google.com/analytics/devguides/collection/ga4),这是您应该包含在站点中的代码:

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

  gtag('config', 'MEASUREMENT_ID');
</script>

检查带有此标签的网站后,我发现 GTM 已注入第一行,这足以使分析工作正常进行。但它没有添加其他行,其中一些有效地将 gtag 全局函数定义为“语法糖”,用于将内容推送到分析数据层。

就我个人而言,我觉得这真的很奇怪,因为使用 GTM 是向网站添加 Google 分析最规范的方法,而且它是由同一家公司提供的。

在我的例子中 Uncaught ReferenceError: gtag is not defined 是由 uBlock/adblock 开启引起的。

如果接受的答案不起作用,我认为值得测试。

如果您使用的是 Google 跟踪代码管理器,则 gtag 功能不存在。按照本指南 create custom events

基本上你使用的代码是

dataLayer.push({event: 'event_name'});

然后您在 GTM 中为 GA4 事件设置了一个代码。使用您想在 Google 分析中看到的事件名称。对于触发器,使用自定义事件。在这里,在事件名称中,使用您在代码中使用的名称 event_name

我发现这是由于 AD Blocking Extensions 添加到我的 chrome

2022年答案:

对于在您的 SPA/Angular/React 应用中同时使用 GA4 gtag 和 GTM(Google 跟踪代码管理器)苦苦挣扎的每个人,您应该做下一步:

  • 不要使用built-in GTM 的“Google Analytics:GA4 配置”标签配置
  • do 使用“自定义 HTML”GTM 标签以及 Google Analytics 中的 gtag JS 代码,即
<!-- 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');
</script>

之后,您可以按照预期在代码中使用 gtag,一切都应该有效。不需要整个 Firebase 之类的东西。可能你需要

gtag('config', 'GA_MEASUREMENT_ID', {
  send_page_view: false
});

禁用自动 page_view 跟踪。