首页 文章

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

提问于
浏览
4

我正在使用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中的任何实验数据 - >行为 - >像我应该的实验 . 我怎样才能解决这个问题?

我在这个主题上找到的最接近的讨论是herehere,但没有具体的答案 .

3 回答

  • 2

    您可以使用Google跟踪代码管理器中的“字段设置”选项在页面加载时设置Google Analytics变量 .

    • 在GTM中打开您的Universal Analytics标记

    • 点击 Enable overriding settings in this tag

    • 点击 More Settings > Fields to Set

    • 创建一个名为 expId 的新字段 . 此字段应包含字母数字实验ID XXXXXXXXXXX .

    • 创建一个名为 expVar 的新字段 . 此字段应包含实验变量编号(原始版本为0,自定义版本为1,2,3等)

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

    在我的例子中,我使用 Custom Javascript 变量用于 expIdexpVar 字段,这些字段使用一些自定义代码来获取正确的实验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

  • 1

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

    我使用Analytics Debugger Chrome by Google来调试问题,发现Google跟踪代码管理器(GTM)将跟踪器ID设为 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));
        }
    }
    
  • 4

    这种情况的根本原因似乎是,当您使用跟踪代码管理器设置事件并使用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和变量 .

相关问题