
2020年5月6日
使用Google跟踪代码管理器从数据层提取数据的3种方法
更新:2020年5月6日。 数据层是Google跟踪代码管理器高度依赖的基础。它确保了最大的灵活性,可移植性和易于实施性。 在我的其他博客文章中,我已经解释了它的工作原理以及如何最大程度地利用它。但是,此处并未涵盖所有方面。由于可以使用不同的结构保存数据,因此也应该以不同的方式访问数据。在今天’s blog 发布, I’将介绍3种方法如何从数据层提取数据。
Â
Â
虽然这三种方法都包含可以在Google跟踪代码管理器容器中创建的数据层变量,但它们的设置会有所不同。
如果您读过我的 有关GTM预览和调试模式的指南,您已经知道 资料层 标签是GTM调试控制台中被最低估且完全未被开发的部分,初学者和(尤其是)中级用户已将其忘记。
此选项卡显示将其推送到所选事件的数据层时的确切消息对象,以及消息事务完成后数据层的外观。
换句话说,您可以查看数据层中当前可用的所有数据,以及每次Google跟踪代码管理器事件后可用的值。最好的部分是:每个数据点(推送到数据层)都可以在Google跟踪代码管理器中转换为变量。
目录
#0。在我们继续之前:在GTM中级课程中还将彻底解释该主题
在此博客文章中,您’简要介绍一下JavaScript中的3种数据类型:字符串,对象和数组。但是,如果您想更深入地学习并正确了解它们在GTM中的工作原理,请注册 中级Google跟踪代码管理器课程.

#1访问一级密钥(又称原始值)
您’re probably asking 我为什么给他们打电话“first-level keys”?一世’在本章末尾将对此进行解释。
对于我的WordPress博客,我正在使用 DuracellTomi的GTM插件,每次加载页面时都会推送一些键和值:
- 关键: pagePostType,一个值: 发布
- 密钥:pagePostType2, 值: 单岗位
- 键:pageCategory, 值: google-tag-manager-tips
- 密钥:pagePostAuthor,值: 朱利叶斯·费多罗维奇乌斯(Julius Fedorovicius)
请参见下面的屏幕截图。
借助Google跟踪代码管理器,我可以轻松地将每个变量转换为数据层变量,然后在其他标签中重复使用它们。
假设您要在有人发表评论时发送Google Analytics(分析)事件。对于每个事件,您还希望推送文章作者的全名。这样,您将看到哪些作者推动了最高的读者参与度。
在此示例中,我将不详细介绍如何创建标签,因为我仅演示如何从数据层提取数据并将其转换为变量(在Google跟踪代码管理器中)。
在Google跟踪代码管理器帐户中,您应该转到 变数 并使用以下设置创建一个新的(dlv 代表 数据层变量):
那’是的!保存此变量,刷新预览和调试(P&D)模式,并刷新您的网站’正在努力。然后,您应该在中看到新创建的变量 变数 P的标签&D console.
哦,我差点忘了。您’我可能还在想,为什么我称它为“First-level key”. Well, that’因为所有这四个键都没有父键。让我举例说明。这里’s该示例位于第一级上。
{ pagePostAuthor: 'Julius Fedorovicius' }
和这里’s第二级密钥,因为 pagePostAuthor 是...的后裔 属性 键:
{ 属性: { pagePostAuthor: 'Julius Fedorovicius' } }
在下一章中,我’ll说明如果密钥不在第一层,如何从数据层提取数据。
#2。从子键中提取数据(也称为嵌套字段)
让’s尝试将其尽可能地简化为非技术性的:当键是其他键的后代时,它们称为子键(老实说,’在这个词上找到了各种术语,但是 子键 听起来对非开发人员来说最容易理解)。在下面的示例中,您可以看到 属性 在第一级, pagePostAuthor 在第二。
{ 属性: { pagePostAuthor: 'Julius Fedorovicius' } }
为了获取其值,您应该稍微更改变量中的一项设置(在Google跟踪代码管理器中)。代替 pagePostAuthor,你 should enter attribute.pagePostAuthor 作为数据层变量名称。
如果 pagePostAuthor 也有一把儿童钥匙?你会怎么做?
{ 属性: { pagePostAuthor: 'Julius Fedorovicius': { someOtherKey: 'example' } } }
那’是的。您应该定义该特定键的完整路径: attribute.pagePostAuthor.someOtherKey, 等等… 等等…每个级别均应以一个点分隔。
在数据层中访问子键是很常见的。当有人问我一个例子时,我总是告诉他们有关AJAX侦听器的信息,该侦听器有助于跟踪AJAX表单的提交。
在我的博客文章中 Google跟踪代码管理器AJAX表单跟踪, 一世’ve解释了如何使用AJAX侦听器(由Bounteous提供)。它侦听所有AJAX请求,并将其数据推送到数据层。这里’s an example:
有很多嵌套键。为了从数据层提取数据,您需要’我需要在数据层变量中使用点表示法’s settings, e.g. attribute.response。
Â
Â
#3。从数组成员中提取数据
我正在与开发人员合作实施Google Analytics(分析)电子商务跟踪(标准,未增强)。关注Google’的准则,我要求开发者 推送成功订单’数据到数据层。然后,我可以通过Google跟踪代码管理器中的交易代码获取该事件(及其数据)。
It’开发人员必须遵循准则并使用Google指示的结构来推送数据,这一点非常重要。这里’是他们知识库中的官方示例:
<script> window.dataLayer = window.dataLayer || []; dataLayer.push({ 'transactionId': '1234', 'transactionAffiliation': 'Acme Clothing', 'transactionTotal': 38.26, 'transactionTax': 1.29, 'transactionShipping': 5, 'transactionProducts': [{ 'sku': 'DD44', 'name': 'T-Shirt', '类别':'服装', 'price': 11.99, “数量”:1 },{ 'sku': 'AA1243544', 'name': 'Socks', '类别':'服装', 'price': 9.99, 'quantity': 2 }] }); </script>
“You know what?”, I asked myself, “这是非常有用的信息”. I’d也想将此订单数据推送到其他营销工具’m使用(例如Facebook Pixel)。我最感兴趣的是 价钱,一种 名称和 数量。
因此,我尝试了方法2(来自此博客),但失败了。我用过 transactionProducts.price, transactionProducts.name等等,但是我新创建的数据层变量总是返回 未定义。 所以呢’s wrong?
注意到任何可疑之处吗?在我的标准电子商务示例中(取自Google’s Knowledge Base), transactionProducts has 2 名称钥匙2 价格键等。那么,Google跟踪代码管理器如何知道我感兴趣的值?第一个还是第二个?如果用户购买了5种产品将会怎样?
我们在这里处理的称为 数组。的 transactionProducts 有一个包含两个具有相同键集合的产品的数组: sku,名称,类别,价格,数量。
在Javascript中,如果要提取第一个产品的值’s 价钱,你’d need to use transactionProducts [0]。价格 (索引从0开始),但是Google跟踪代码管理器在这种情况下不支持方括号,因此您’d需要使用点符号,如下所示: transactionProducts.0.price。
在Google跟踪代码管理器中,您的数据层变量应如下所示:
如果阵列中有5个产品,并且您想访问第5个产品的价格,则数据层变量名称应为 transactionProducts.4。价格。 请记住,这里的索引从零开始,因此第一个乘积实际上不是第一个乘积,而是第0个乘积。
从数据层提取数据的最后决定
由于可以使用不同的结构保存数据,因此也应该以不同的方式访问数据。
现在,您知道了如何以3种不同的方式从数据层提取数据。尽管它们都使用相同的数据层变量,但它们的名称不同,具体取决于数据结构–数组,嵌套键或单(第一级)键。
Â
Â
朱利叶斯,谢谢您的这些帖子。我可以使用示例2(谷歌标签管理器ajax表单跟踪)和ajax侦听器提取我需要的数据,但是我不知道如何在Analytics(分析)报告中显示数据。我要提取的数据是在输入字段中输入的邮政编码,我停留在应该触发的最后一步,但是所有选项似乎都不正确
嘿,
1. Zip code is a Personally Identifiable 在 formation (PII) which cannot be stored in Google Analytics. 在 2011 a California State Supreme court ruled that Zip code is a PII. If Google notices that you're sending it, your account will be banned. Learn more how to avoid storing PII //support.google.com/analytics/answer/6366371?hl=en.
2.从数据层提取数据后(通过创建数据层变量),只需在Universal Analytics事件代码的字段(例如事件操作或事件标签)中输入数据即可。在这些字段中,变量必须用大括号{{variableName}}括起来。
3. If you wish to pull the value from web form's input field, Lunametrics have published a tutorial //www.lunametrics.com/blog/2016/09/22/tracking-form-field-values-google-tag-manager/
你好。
谢谢您的留言。很好的信息。
我有一个疑问:我可以在Google跟踪代码管理器中创建dataLayer吗?例如,将dataLayer的代码放在自定义HTML标签内。
有什么办法吗?
换句话说,无需触摸代码即可创建数据层。
谢谢
When GTM loads, it automatically creates a data layer. If you want to push some data into it, ]you can use window.dataLayer.push method to do that (with Custom HTML tag). I've described how 资料层 works in detail here //www.toddblog.net/post/ultimate-google-tag-manager-data-layer-tutorial/.
您还将找到如何将数据推送到数据层。
嗨,我有一个问题:我从GTM自定义html标签推送事件。有没有办法使从此事件中选择值的GTM dataLayer变量获得更新后的值?现在,自定义事件是从表单提交时的此标签触发的,没有页面重新加载,而是在窗口加载之后,因此datalayer变量将是未定义的。有什么办法可以使用dataLayer变量解决此问题?还是最简单的就是使用JS变量?
仅当该信息被推送到数据层时,数据层变量才会开始返回一些值。
>Right now the custom event is fired from this tag on form submit, there is no page reload and it's after window loaded, so the datalayer variable will be 未定义。
如果将“事件”键和一些自定义参数按到数据层,则可以使用数据层变量来检索这些自定义参数。只需在dataLayer.push中包括“事件”键
你好朱利叶斯,
感谢您撰写此博客。对于像我这样的非技术人员来说,它超级有用。我有个问题。
如何从中拉出“ actionField中的选项”变量
dataLayer.push({
'event':'checkout',
'电子商务': {
'查看': {
'actionField':{'step':1,'option':'Visa'},
“产品”:[{
'name':'Triblend Android T恤',
'id':'12345',
'价格':'15 .25',
'brand':'Google',
'类别':'服装',
'variant':'灰色',
“数量”:1
是“ ecommerce.checkout.actionField.option”还是“ ecommerce.checkout.actionField.0.option”?
嘿,这是ecommerce.checkout.actionField.option,因为actionField是一个对象,而不是数组。数组用方括号[]包围,对象用大括号{}包围。
将来为您找到最好的方法是在“预览”和“调试”模式下进行检查。创建一个数据层变量,刷新预览模式,然后转到该dataLayer.push所在的网站。如果未定义变量的值,则说明存在问题。如果您看到正确的值,那么您所做的一切都正确。
嘿,朱利叶斯,好文章!真的很难找到有用的文章。
但是有一个问题:
使用过的“ dataLayer.push({'transactionId'...”不是增强电子商务跟踪的正确选择,或者说我的DataLayer看起来不一样,不仅基于基本交易。在一个项目中,我看到了一个tansaction标签,由于您也在使用数据层而正在运行。但是在“结帐行为分析”中,我看到了我通过gtm定义的步骤,但最后没有任何交易。希望您知道我的意思;)
嘿, that snippet is supported only in the Standard Ecommerce. Enhance Ecommerce require totally different implementation and codes pushed to the data layer. 您 need to push "purchase" event. Here's a guide I always recommend to read //canonicalized.com/enhanced-ecommerce-tag-manager/.
好的文章,对我来说,确实是从简单的数据层使用节约的桥梁...但是,用所有这些数据填充数据层的最佳和最简单的方法是什么?我不认为duraceltomi的插件能走这么远...
嘿,您需要与开发人员合作才能在数据层中拥有该自定义数据。
谢谢...实际上,我发现gtm4wp确实用完整的电子商务数据填充了数据层...这是一个beta功能,但效果很好...
好的文章,对我来说,确实是从简单的数据层使用节约的桥梁...但是,用所有这些数据填充数据层的最佳和最简单的方法是什么?我不认为duraceltomi的插件能走这么远……
嘿,最简单的方法是使用插件(对于WP来说,它仍然是duracelltomi的插件),或者要求开发人员将一些所需的数据推送到数据层。
正是我需要的,谢谢!
辉煌。我确实在努力寻找新标签,但是您对子键的解释解决了这个问题。
谢谢!
感谢Julius,从您的博客中学到了很多东西。保持良好的工作。
朱利叶斯,这真是太好了!假设我不想将数据推送到Google Analytics(分析)中,而是将其推送到Google Sheet电子表格中。我将使用哪种设置将其从GTM推送到该电子表格?有什么想法或文章吗?
如果您只是要求开发人员将数据从服务器推送到连接到Google表格的zapier,那就更加可靠(并在此处避免使用GTN)。或者也许利用谷歌appscript。不幸的是,我在这里没有那么丰富的经验,所以我无法给您更准确的建议。
非常感谢Julius的有用博客文章。我会为您的内容提供建议。
你好
我按照您和其他许多网站的建议在“使用数据层”上打了勾,它没有按我预期的那样工作。我希望所有这些数据(例如产品,名称,类别等)都将自动添加到GA报告中。但是我找不到这些数据。我该怎么办?
谢谢你的帮助。
如果有人点击产品,并且您在数据层中正确设置了产品点击信息的格式,则该单个dataLayer.push的所有数据点最终都会显示在GA中(不是实时的,而是24小时之内。通常,减)。
如果24小时后在GA中看不到任何信息,则很可能是您的dataLayer.push未遵循Google Analytics EE的严格要求。
很棒的工作!您的解释的忠实拥护者。帮助我整合了GTM!
谢谢朱利叶斯,
如果我想从数组中获取所有项目怎么办? (我不知道有多少个物品?)
另外,如何计算篮子值,我可以运行自定义JS函数并进行数学运算?
我设置了一个名为“ funding_value”的变量和一个从表单中提取该值的标签:
<script>
jQuery('[name ="next-step-2"]')。click(function(){
var funding_val = jQuery('#required-funding-amount')。val();
if(parseInt(funding_val)!= NaN)
{
dataLayer.push({'event':'funding_event','funding_value':parseInt(funding_val)});;
}
});
</script>
如何将这个“ funding_value”插入到Facebook转换中:
<script>
fbq('track','Lead',{
值:funding_value
});
</script>
我是javascript的新手,只需要知道如何使此标签实际将funding_value的值插入fbq脚本即可。
嘿,朱利叶斯,在经过数小时的搜索之后,为什么仍找不到我的dataLayer变量,我对此表示非常感谢。非常感谢你
您刚刚获得了新的关注者!