我正在使用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 Optimize或Google Analytics中的任何实验数据 - >行为 - >像我应该的实验 . 我怎样才能解决这个问题?
3 回答
您可以使用Google跟踪代码管理器中的“字段设置”选项在页面加载时设置Google Analytics变量 .
在GTM中打开您的Universal Analytics标记
点击
Enable overriding settings in this tag
点击
More Settings > Fields to Set
创建一个名为
expId
的新字段 . 此字段应包含字母数字实验IDXXXXXXXXXXX
.创建一个名为
expVar
的新字段 . 此字段应包含实验变量编号(原始版本为0,自定义版本为1,2,3等)重要提示:确保在分析标记之前触发优化标记 .
在我的例子中,我使用
Custom Javascript
变量用于expId
和expVar
字段,这些字段使用一些自定义代码来获取正确的实验ID和版本ID .我通过查看“Analytics字段参考”页面来确定字段名称:
https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#expId
https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#expVar
此方法可能比您自己的答案更受欢迎,因为它不需要触发任何额外事件 . 除此之外,您可以完全在GTM中进行配置 .
截图供参考:
通过明确指定跟踪器ID解决 .
我使用Analytics Debugger Chrome by Google来调试问题,发现Google跟踪代码管理器(GTM)将跟踪器ID设为
gtm1
,因此我不得不为此添加前缀 .要find out您的跟踪器ID,请调用
ga.getAll()[0].get('name')
(可能是gtm1
,gtm2
等) .将我的setGAExperiment函数更改为以下内容
调用setGAExperimentCX的函数是
这种情况的根本原因似乎是,当您使用跟踪代码管理器设置事件并使用Google Analytics设置变量时,实验ID和变体不会与您在GTM中设置的事件一起发送 . 出于某种原因,它只是没有了解您从服务器设置的实验 .
如果您将GTM设置为不使用GA设置变量,但将设置分别放在每个GA标记中,它确实有效 .
我们在两个不同的网站上实现了Optimize,GA和GTM,但是在两个不同的GTM容器上 . 一个设置了GA设置变量,另一个设置了每个标签中的GA设置 . 在具有GA设置变量的那个上,初始设置在另一个上工作时不起作用 .
Milan's answer solved it.
随着米兰's answer you wouldn' t必须将您的实验ID和变体放在
ga('set', 'exp', ...)
中 . 把它放在数据层中,然后将它们用作变量也应该可以工作我希望(避免't tested it yet). Advantage is that you don't必须使用一些异国情调的自定义JavaScript来再次获得该id和变量 .