Google跟踪代码管理器&优化服务器端实验发送变体

时间:2018-01-22 16:40:41

标签: javascript google-analytics google-tag-manager google-optimize

我正在使用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中收到任何实验数据 - &gt;行为 - &gt;像我一样的实验。我该如何解决这个问题?

我在这个主题上发现的最近的讨论是herehere,但没有具体的答案。

3 个答案:

答案 0 :(得分:4)

通过明确指定跟踪器ID来解决。

我使用Analytics Debugger Chrome by Google来调试问题,发现Google跟踪代码管理器(GTM)将跟踪器标识为gtm1,因此我不得不为此添加前缀。

find out您的智能设备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());
}

调用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));
    }
}

答案 1 :(得分:3)

您可以使用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 JavascriptexpId字段使用了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中完全配置它。

屏幕截图供参考:

enter image description here

答案 2 :(得分:1)

造成这种情况的根本原因似乎是,当您通过跟踪代码管理器设置事件并使用Google Analytics(分析)设置变量时,实验ID和变体不会随您在GTM中设置的事件一起发送。由于某种原因,它只是无法使用您在服务器上设置的实验。

当您将自己的GTM设置为不使用GA设置变量,而是将您的设置分别放在每个GA标签中时,它就会起作用。

我们在两个不同的网站上但在两个不同的GTM容器上都实施了Optimize,GA和GTM的相同实现。一种是使用GA设置变量进行设置,另一种是在每个标签中分别使用GA设置。在具有GA设置变量的一个设置中,初始设置无效,而在另一个设置上却有效。

米兰的回答解决了这个问题。

有了米兰的答案,您不必将实验ID和变体形式放在ga('set', 'exp', ...)中。将它放在数据层中,然后将它们用作变量也应该可以正常工作(尚未对其进行测试)。优点是您不必使用某些特殊的自定义JavaScript来再次获得该ID和变体。