我想要用谷歌标签管理器实现增强型电子商务,并希望为通用分析标签推送一些数据。
我总是在GTM脚本之前创建数据层,但现在我需要使用 dataLayer.push
发送更多数据。
但它不起作用,只有当 dataLayer.push
在GTM脚本开始之前触发时才有效。
例如,这个可以工作:
<script>
<head>
dataLayer = [{
'google_tag_params': {
'ecomm_pagetype': 'category',
'ecomm_category': '{{ $resource->seo->h1 }}',
}
}];
dataLayer.push({
'ecommerce': {
'currencyCode': 'EUR',
'impressions': [
{
'id': '12312',
'price': 24,
'category': 'wfwefwerwerwer',
'position': 2,
'name': 'wfwefwerwerwer',
'brand': 'My Brand',
'list': 'Product List',
}
]
}
});
(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=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');
</script>
</head>
但是如果我在GTM脚本之后使用dataLayer.push,则不起作用,没有数据被发送,也没有报告任何错误。
这对我没有用:
<head>
<script>
dataLayer = [{
'google_tag_params': {
'ecomm_pagetype': 'category',
'ecomm_category': '{{ $resource->seo->h1 }}',
}
}];
(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=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');
</script>
</head>
<body>
//something content html here
<footer></footer>
<script>
dataLayer.push({
'ecommerce': {
'currencyCode': 'EUR',
'impressions': [
{
'id': '12312',
'price': 24,
'category': 'wfwefwerwerwer',
'position': 2,
'name': 'wfwefwerwerwer',
'brand': 'My Brand',
'list': 'Product List',
}
]
}
});
</script>
</body>
window.dataLayer.push
实际上被GTM修补过了,以运行自己的代码。它不再只是一个简单的数组存在于页面上。这就是你后来能够添加到它的原因。在浏览器控制台中键入window.dataLayer.push
,你会发现它是gtm.js中的自定义函数。 - Simon_Weavervar
部分。你可以使用var
,或者将其添加到window命名空间中window.dataLayer
。 - dockeryZ