当Google Analytics由Google Tag Manager管理时,如何跟踪自定义事件?

12

我最终不得不在我的网站上使用Google Tag Manager,因此Google Analytics现在是其中的一部分。设置完全正确并且正常运行。然而,我曾经可以非常容易地跟踪我的网站上的自定义事件,使用ga()函数:

ga('send', 'event', 'Videos', 'play', 'Fall Campaign');

然而,现在ga()不再被定义; 我在控制台中收到一个错误,ReferenceError: ga未定义。然后我尝试了gtag()方法,但它也无法工作(同样的错误消息):

<code>gtag('event', 'aaa', {
  'event_category' : 'bbb',
  'event_label' : 'ccc'
});
</code>

我如何使用Javascript代码跟踪事件?

明确一点,我不想与Google Tag Manager纠缠。在那里完成任何操作需要点击数百万次。;-) 我只想直接调用Javascript,就像以前一样。


2
我们有很多共同点! - Simon_Weaver
2
对于任何想要设置自定义字段(而不是事件),特别是与广告系列相关的字段,请查看此文章https://www.bounteous.com/insights/2016/09/27/using-fields-set-google-tag-manager/。尝试在代码中实现这一点结果变得过于复杂/甚至不可能。 - Simon_Weaver
2个回答

8

谷歌标签管理器(GTM)默认为每个通用分析标记生成一个随机名称的跟踪器。由于GTM仅创建命名跟踪器,因此不会创建默认(t0)跟踪器。由于没有创建默认跟踪器,因此您必须自己提供跟踪器名称。因此,您需要知道跟踪器名称,或以某种方式查询和引用它们,才能通过直接从JavaScript使用ga()调用使其工作。

有可能为跟踪器使用固定名称,但极不建议这样做。

我有一个推荐的解决方法。您仍然需要进行一些GTM设置,但可以创建一个Google Analytics通用事件分发器标记,稍后可以使用它来发送任何来自JavaScript的分析事件调用。

您的标记设置将类似于以下内容,其中您可以引用数据层中的分析设置和所有与事件相关的变量:

enter image description here

您的事件跟踪代码将如下所示:
dataLayer.push({
  'event': 'GAEvent',
  'eventCategory': 'Videos',
  'eventAction': 'play',
  'eventLabel': 'Fall campaign', 
  'eventValue': undefined,
  'eventNI': true 
});

请注意,建议在dataLayer中始终设置所有相关事件值,即使不需要跟踪任何字符串或值,以便在推送合并期间不会继承早期的dataLayer值。此外,您应根据需要更新非交互标志。您的触发器应匹配event键的值。

2
谢谢您的回答。真是一团糟......这基本上归结为“如果您使用Google标签管理器,您将无法在不为每种JS调用设置大量GTM的情况下进行自定义Javascript跟踪。” :-( - Eric

4

我在标签管理器中创建了一个新的“自定义html”标签。然后我添加了以下分析代码,并将标签设置为在页面加载时触发。这使我能够使用现有的ga调用来触发自定义事件,而不必像其他答案建议的那样通过数据层重新编写所有事件以与通用分析工作。

<!-- Google Analytics -->
<script>
    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
    ga('create', 'UA-XXXXXXXXX-Y', 'auto');
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>
<!-- End Google Analytics -->

那真是相当聪明的。 - Eric
@eric 但这不是完全绕过了标签管理器的通用分析标签吗?那么为什么还要使用标签管理器呢?这肯定意味着您无法添加像kgrg答案中的GA标签。 - Simon_Weaver
我很想完全摆脱标签管理器,但似乎谷歌“强烈”推荐使用它,并且他们的文档也非常偏向于标签管理器。我更愿意在我的代码/程序中全部完成。 - Eric
我知道这已经过时了,但是你是如何实现自定义HTML标签的?我已经与dataLayer.push()斗争了两天,却一无所获。我正在尝试在我们的网站上发生某些事情时发送自定义事件,这可能来自于例如AJAX / SQL返回之类的东西。谷歌文档最多只是基础知识。还有谁会使用onclick = ""呢?谢谢! - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接