页面

时间:2016-06-02 17:00:52

标签: google-analytics transactions e-commerce google-tag-manager

我想使用GTM来跟踪电子商务交易。这是针对客户端环境的测试,其中代码可能位于之后 GTM代码段,这就是为什么使用Dom Ready作为事务标记的触发器不可靠的原因。

这是我的测试代码:

<body>
    <!-- Google Tag Manager -->
<script>window.dataLayer = window.dataLayer || [];</script>
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-M4RNT2"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->
<div class="container">
<script>
window.dataLayer = window.dataLayer || []
dataLayer.push({
   'transactionId': '32698',
   'transactionAffiliation': 'Acme Clothing',
   'transactionTotal': 38.26,
   'transactionTax': 1.29,
   'transactionShipping': 5,
   'transactionProducts': [{
       'sku': 'DD44',
       'name': 'T-Shirt',
       'category': 'Apparel',
       'price': 11.99,
       'quantity': 1
   },{
       'sku': 'AA1243544',
       'name': 'Socks',
       'category': 'Apparel',
       'price': 9.99,
       'quantity': 2
   }]
});
</script>
</body>

正如您所看到的,电子商务代码直接来自Google文档here

我确保我正在点击的网页浏览标记有效,我可以在实时视图中看到自己。

问题在于,无论我采取何种措施来触发交易代码,Google Analytics都不会显示任何电子商务交易。

这是我尝试过的:

  • 在事务产品之后立即使用'event': 'eCommerce'或在事务代码推送后使用单独的脚本标记,然后将该事件用作触发器
  • 我在GTM中创建了一个引用transactionId的dataLayer变量,并将其默认为false,然后使用事件gtm.dom作为触发器,使用transactionId does not equal false <的过滤器/ LI>

令人沮丧的是,我打开了GTM预览窗口,它看起来非常像它应该工作。

  • 在上面的尝试1中,它显示了一系列的网页浏览,消息,电子商务DOM就绪,页面加载,其中消息之后的dataLayer正确填充了交易数据,并且eCommerce标记在电子商务事件中触发(即数据位于dataLayer中肯定。
  • 在尝试2中,Message之后的dataLayer充满了交易数据,并且DOM Ready事件触发了电子商务标记。

这已经持续了好几天,所以不是“数据没有出现在GA 尚未”的情况。我正在使用正确的UA标签,因为两个标签都引用了sasme onstant GTM变量,因为我实时看到自己的pageview标签使用了正确的UA,因此事务标签也是如此。是的,电子商务显然已在视图设置中启用。

3 个答案:

答案 0 :(得分:4)

简单地将交易数据推送到数据层不会触发跟踪工作。您需要一个操作(如网页浏览)来获取交易数据并发送。

如果您无法在GTM代码段之前添加数据层,我的建议如下:

  • 将您的代码转换为增强型电子商务格式(下方提供)
  • 添加自定义事件,在这种情况下,它名为trackTrans
  • 在GTM中添加事件标记,标记类似于Send Transaction。您可以为事件类别/操作/标签指定您想要的任何值。
  • 在活动代码中转到more settings&gt; Ecommerce Features,启用Enable Enhanced Ecommerce FeatureUse data layer
  • 将触发器设置为Custom Event,并为值
  • 指定trackTrans
  • 在您的视图设置中,请确保使用增强型电子商务跟踪功能

    dataLayer.push({
       'ecommerce': {
         'purchase': {
           'actionField': {
             'id': 'T12345',                         // Transaction ID. Required for purchases and refunds.
             'affiliation': 'Online Store',
             'revenue': '35.43',                     // Total transaction value (incl. tax and shipping)
             'tax':'4.90',
             'shipping': '5.99',
             'coupon': 'SUMMER_SALE'
           },
           'products': [{                            // List of productFieldObjects.
             'name': 'Triblend Android T-Shirt',     // Name or ID is required.
             'id': '12345',
             'price': '15.25',
             'brand': 'Google',
             'category': 'Apparel',
             'variant': 'Gray',
             'quantity': 1,
             'coupon': ''         
           }]
         }
      },
      'event' : 'trackTrans'
    });
    

根据我上面所描述的,页面将加载,然后将触发一个事件并发送电子商务交易数据。

答案 1 :(得分:1)

根据您对Google文档的引用,您需要

  

将此代码置于上方 Google跟踪代码管理器容器代码段,以便在Google跟踪代码管理器以异步方式触发Google Analytics代码时,数据层已准备就绪。

答案 2 :(得分:1)

我找到了一种让它发挥作用的方法。 Ryan的答案很接近,但我们使用基于事件的触发器的经验充其量只是参差不齐。我现在使用以下设置,基本上保证了GTM的事务拾取,除非代码是在通过JS加载页面后动态注入的。

以下是:

  1. 我创建了dataLayer Variable引用transactionId并将其默认设置为false
  2. 我创建了Custom Event类型的触发器,将事件设置为gtm.dom,并将我创建的dataLayer变量的过滤器设置为不等于false
  3. 这可确保页面上的实际事务覆盖该GTM变量中的默认值false,gtm.dom触发器确保所有代码都已加载。

    在GTM实施方面,我们已经对客户进行了不同程度的测试。