Google 跟踪代码管理器和优化服务器端实验发送变体
Google Tag Manager & Optimize Server-Side experiment sending variation
我正在使用 Google 跟踪代码管理器容器来管理脚本。我正在尝试执行服务器端 Optimize/Analytics 实验。出于性能原因,我需要服务器端。我已经使用 GTM/Optimize 容器进行了客户端实验。
这是我的 GTM 代码:
window.dataLayer = window.dataLayer || [];
....
<!-- Google Tag Manager -->
<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=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXXXX');</script>
<!-- End Google Tag Manager -->
我尝试了以下不同的方法来触发要触发的变体。
// These fn get called only once GA exists via setTimeout. They get called correctly.
// I've setup the experimentTrigger via GTM container and it triggers correctly to Analytics.
function setGAExperiment1(_expIdvId){
// Matches ga('set', 'exp', '$experimentId.$variationId');
// https://developers.google.com/optimize/devguides/experiments
ga('set', 'exp', _expIdvId);
dataLayer.push({'event': 'experimentTrigger', 'exp': _expIdvId }); // to trigger data send of exp
// I receive the experimentTrigger event with 'exp' value on Analytics but not any experiment data into Optimize/Analytics.
}
function setGAExperiment2(_expIdvId){
// Matches ga('set', 'exp', '$experimentId.$variationId');
// https://developers.google.com/optimize/devguides/experiments
ga('set', 'exp', _expIdvId);
ga('send', 'event', 'experiment', 'view'); // to trigger data send of exp
}
我在 Google 优化或 Google 分析 -> 行为 -> 实验中没有收到任何实验数据。我该如何解决这个问题?
通过明确指定跟踪器 ID 解决。
我使用 Analytics Debugger Chrome by Google 来调试问题,发现 Google 跟踪代码管理器 (GTM) 生成了跟踪器 ID gtm1
,所以我不得不用它作为前缀。
要 find out 您的跟踪器 ID,请调用 ga.getAll()[0].get('name')
(可能是 gtm1
、gtm2
等)。
将我的 setGAExperiment 函数更改为以下内容
function setGAExperimentCX(_expId, _vId){
ga('gtm1.set', 'exp', _expId.toString() + '.' + _vId.toString());
// this forces the above exp set to be sent to GA, you can name the event whatever you want with whatever values you want
ga('gtm1.send', 'event', 'Experiment', 'Trigger', _expId.toString() + '.' + _vId.toString());
}
调用setGAExperimentCX的函数是
function performNewCartExp(_vId) {
if (typeof ga == "undefined") {
if (_performNewCartExp != undefined) { clearTimeout(_performNewCartExp); }
_performNewCartExp = setTimeout(function () { performNewCartExp(_str); }, 250);
} else {
setGAExperimentCX('XXXXXXXXXXX', parseInt(_vId, 10));
}
}
您可以使用 Google 跟踪代码管理器中的 'Fields To Set' 选项在页面加载时设置 Google 分析变量。
- 在 GTM 中打开您的 Universal Analytics 代码
- 点击
Enable overriding settings in this tag
- 点击
More Settings > Fields to Set
- 创建一个名为
expId
的新字段。该字段应包含字母数字实验 ID XXXXXXXXXXX
。
- 创建一个名为
expVar
的新字段。此字段应包含实验变体编号(原始版本为 0,自定义版本为 1、2、3 等)
重要提示:确保优化标签在分析标签之前被触发。
在我的例子中,我为 expId
和 expVar
字段使用了一个 Custom Javascript
变量,它使用一些自定义代码来获取正确的实验 ID 和版本 ID。
我通过查看 'Analytics Field Reference' 页面找出了字段名称:
https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#expId
https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#expVar
此方法可能优于您自己的答案,因为它不需要触发任何额外事件。除此之外,您可以在 GTM 中完全配置它。
截图供参考:
这的根本原因似乎是当您使用跟踪代码管理器设置事件并使用 Google 分析设置变量时,实验 ID 和变体不会与您在 GTM 中设置的事件一起发送。出于某种原因,它只是没有接受您从服务器设置的实验。
当您将 GTM 设置为不使用 GA 设置变量但将您的设置分别放在每个 GA 标签中时,它确实有效。
我们在两个不同的网站上有相同的优化、GA 和 GTM 实现,但在两个不同的 GTM 容器上。一种是使用 GA 设置变量进行设置,另一种是在每个标签中分别设置 GA 设置。在带有 GA 设置变量的一个上,初始设置不起作用,而在另一个上却有效。
米兰的回答解决了。
有了 Milan 的回答,您就不必将实验 ID 和变体放在 ga('set', 'exp', ...)
中。将它放在数据层中,然后将它们用作变量也应该可以正常工作(我还没有测试过)。优点是您不必使用一些异国情调的自定义 javascript 来再次获取该 ID 和变体。
我正在使用 Google 跟踪代码管理器容器来管理脚本。我正在尝试执行服务器端 Optimize/Analytics 实验。出于性能原因,我需要服务器端。我已经使用 GTM/Optimize 容器进行了客户端实验。
这是我的 GTM 代码:
window.dataLayer = window.dataLayer || [];
....
<!-- Google Tag Manager -->
<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=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXXXX');</script>
<!-- End Google Tag Manager -->
我尝试了以下不同的方法来触发要触发的变体。
// These fn get called only once GA exists via setTimeout. They get called correctly.
// I've setup the experimentTrigger via GTM container and it triggers correctly to Analytics.
function setGAExperiment1(_expIdvId){
// Matches ga('set', 'exp', '$experimentId.$variationId');
// https://developers.google.com/optimize/devguides/experiments
ga('set', 'exp', _expIdvId);
dataLayer.push({'event': 'experimentTrigger', 'exp': _expIdvId }); // to trigger data send of exp
// I receive the experimentTrigger event with 'exp' value on Analytics but not any experiment data into Optimize/Analytics.
}
function setGAExperiment2(_expIdvId){
// Matches ga('set', 'exp', '$experimentId.$variationId');
// https://developers.google.com/optimize/devguides/experiments
ga('set', 'exp', _expIdvId);
ga('send', 'event', 'experiment', 'view'); // to trigger data send of exp
}
我在 Google 优化或 Google 分析 -> 行为 -> 实验中没有收到任何实验数据。我该如何解决这个问题?
通过明确指定跟踪器 ID 解决。
我使用 Analytics Debugger Chrome by Google 来调试问题,发现 Google 跟踪代码管理器 (GTM) 生成了跟踪器 ID gtm1
,所以我不得不用它作为前缀。
要 find out 您的跟踪器 ID,请调用 ga.getAll()[0].get('name')
(可能是 gtm1
、gtm2
等)。
将我的 setGAExperiment 函数更改为以下内容
function setGAExperimentCX(_expId, _vId){
ga('gtm1.set', 'exp', _expId.toString() + '.' + _vId.toString());
// this forces the above exp set to be sent to GA, you can name the event whatever you want with whatever values you want
ga('gtm1.send', 'event', 'Experiment', 'Trigger', _expId.toString() + '.' + _vId.toString());
}
调用setGAExperimentCX的函数是
function performNewCartExp(_vId) {
if (typeof ga == "undefined") {
if (_performNewCartExp != undefined) { clearTimeout(_performNewCartExp); }
_performNewCartExp = setTimeout(function () { performNewCartExp(_str); }, 250);
} else {
setGAExperimentCX('XXXXXXXXXXX', parseInt(_vId, 10));
}
}
您可以使用 Google 跟踪代码管理器中的 'Fields To Set' 选项在页面加载时设置 Google 分析变量。
- 在 GTM 中打开您的 Universal Analytics 代码
- 点击
Enable overriding settings in this tag
- 点击
More Settings > Fields to Set
- 创建一个名为
expId
的新字段。该字段应包含字母数字实验 IDXXXXXXXXXXX
。 - 创建一个名为
expVar
的新字段。此字段应包含实验变体编号(原始版本为 0,自定义版本为 1、2、3 等)
重要提示:确保优化标签在分析标签之前被触发。
在我的例子中,我为 expId
和 expVar
字段使用了一个 Custom Javascript
变量,它使用一些自定义代码来获取正确的实验 ID 和版本 ID。
我通过查看 'Analytics Field Reference' 页面找出了字段名称:
https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#expId
https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#expVar
此方法可能优于您自己的答案,因为它不需要触发任何额外事件。除此之外,您可以在 GTM 中完全配置它。
截图供参考:
这的根本原因似乎是当您使用跟踪代码管理器设置事件并使用 Google 分析设置变量时,实验 ID 和变体不会与您在 GTM 中设置的事件一起发送。出于某种原因,它只是没有接受您从服务器设置的实验。
当您将 GTM 设置为不使用 GA 设置变量但将您的设置分别放在每个 GA 标签中时,它确实有效。
我们在两个不同的网站上有相同的优化、GA 和 GTM 实现,但在两个不同的 GTM 容器上。一种是使用 GA 设置变量进行设置,另一种是在每个标签中分别设置 GA 设置。在带有 GA 设置变量的一个上,初始设置不起作用,而在另一个上却有效。
米兰的回答解决了。
有了 Milan 的回答,您就不必将实验 ID 和变体放在 ga('set', 'exp', ...)
中。将它放在数据层中,然后将它们用作变量也应该可以正常工作(我还没有测试过)。优点是您不必使用一些异国情调的自定义 javascript 来再次获取该 ID 和变体。