谷歌标签管理器和优化服务器端实验发送变体

Ste*_*GSD 8 javascript google-analytics google-tag-manager google-optimize

我正在使用 Google 标签管理器容器来管理脚本。我正在尝试执行服务器端优化/分析实验。出于性能原因,我需要服务器端。我已经对 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 -->
Run Code Online (Sandbox Code Playgroud)

我尝试了以下不同的方法来触发要触发的变化。

// 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
}
Run Code Online (Sandbox Code Playgroud)

我在 Google Optimize 或 Google Analytics -> Behaviors -> Experiments 中没有收到任何实验数据。我怎样才能解决这个问题?

我发现与此主题最接近的讨论是herehere,但没有具体的答案。

Mil*_*mek 7

您可以使用 Google 标签管理器中的“要设置的字段”选项在页面加载时设置 Google Analytics 变量。

  1. 在 GTM 中打开您的 Universal Analytics 标签
  2. 点击 Enable overriding settings in this tag
  3. 点击 More Settings > Fields to Set
  4. 创建一个名为 的新字段expId。此字段应包含字母数字实验 id XXXXXXXXXXX
  5. 创建一个名为 的新字段expVar。此字段应包含实验变体编号(原始版本为 0,自定义版本为 1、2、3 等)

重要提示:确保优化标记在分析标记之前触发。

在我的例子中,我Custom JavascriptexpIdexpVar字段使用了一个变量,它使用了一些自定义代码来获取正确的实验 ID 和版本 ID。

我通过查看“分析字段参考”页面找出了字段名称:

https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#expId

https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#expVar

这种方法可能比您自己的答案更受欢迎,因为它不需要触发任何额外的事件。除此之外,您可以在 GTM 中完全配置它。

截图供参考:

在此处输入图片说明


Ste*_*GSD 6

通过显式指定跟踪器 ID 解决。

我使用Google 的 Analytics Debugger Chrome来调试问题,发现 Google 标签管理器 (GTM) 制作了跟踪器 ID,gtm1所以我不得不用它作为前缀。

找出您的跟踪ID,呼叫ga.getAll()[0].get('name')(可能是gtm1gtm2等)。

将我的 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());
}
Run Code Online (Sandbox Code Playgroud)

调用 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));
    }
}
Run Code Online (Sandbox Code Playgroud)