我想使用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'
或在事务代码推送后使用单独的脚本标记,然后将该事件用作触发器transactionId
的dataLayer变量,并将其默认为false
,然后使用事件gtm.dom
作为触发器,使用transactionId does not equal false
<的过滤器/ LI>
令人沮丧的是,我打开了GTM预览窗口,它看起来非常像它应该工作。
Message
之后的dataLayer充满了交易数据,并且DOM Ready
事件触发了电子商务标记。这已经持续了好几天,所以不是“数据没有出现在GA 尚未”的情况。我正在使用正确的UA标签,因为两个标签都引用了sasme onstant GTM变量,因为我实时看到自己的pageview标签使用了正确的UA,因此事务标签也是如此。是的,电子商务显然已在视图设置中启用。
答案 0 :(得分:4)
简单地将交易数据推送到数据层不会触发跟踪工作。您需要一个操作(如网页浏览)来获取交易数据并发送。
如果您无法在GTM代码段之前添加数据层,我的建议如下:
trackTrans
。Send Transaction
。您可以为事件类别/操作/标签指定您想要的任何值。more settings
&gt; Ecommerce Features
,启用Enable Enhanced Ecommerce Feature
和Use 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加载页面后动态注入的。
以下是:
dataLayer Variable
引用transactionId
并将其默认设置为false
Custom Event
类型的触发器,将事件设置为gtm.dom
,并将我创建的dataLayer变量的过滤器设置为不等于到false
这可确保页面上的实际事务覆盖该GTM变量中的默认值false,gtm.dom
触发器确保所有代码都已加载。
在GTM实施方面,我们已经对客户进行了不同程度的测试。