我如何提取&使用javascript从GA电子商务结果返回单个值(收入)

时间:2017-05-16 18:19:47

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

在我的电子商务网站上成功进行交易后显示的感谢页面源代码中,Google Analytics ecommerce.js插件会写入以下内容:

    <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
            m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

    ga('create', 'UA-123456789-1', {'cookieDomain': 'http://www.example.com/'});
    ga('require', 'displayfeatures');
    ga('send', 'pageview');


    ga('create', 'UA-1234567-9', 'auto', { name: 'merchantTracker' });
    ga('merchantTracker.require', 'displayfeatures');
    ga('merchantTracker.send', 'pageview');


    Thirdparty.Event.subscribe('google.analytics.trackPageView', function(url) {
        ga('send', 'pageview', url);


        ga('merchantTracker.send', 'pageview', url);

    });
</script>

<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
                    $('.recommendation-box .in-popup a').click(function(e) {
                    e.preventDefault();
                    window.open(
                        this.href,
                        "sharing",
                        "width=650,height=500,resizable=no,location=no,menubar=no,scrollbars=no,status=no"
                    );
                });

            ga('require', 'ecommerce');                ga('ecommerce:addItem', {
                    'id': '11377927',// Transaction ID. Required.
                    'name': 'Test Product',// Product name. Required.
                    'category': 'Adult',// Category or variation.
                    'price': '1.0000000000',// Unit price.
                    'quantity': '1'// Quantity.
                });        ga('ecommerce:addTransaction', {
            'id': '11377927',// Transaction ID. Required.
            'affiliation': 'My Site',// Affiliation or store name.
            'revenue': '1.070000',// Grand Total.
            'tax': '0'// Tax.
        });
        ga('ecommerce:send');
});
//]]>

</script>

我想使用Google跟踪代码管理器和JavaScript来提取“收入”的值并将其返回到GTM变量中。

这是在第三方平台上,我无法访问后端源代码,这就是为什么我在看GTM,这使我能够在thankyou页面上使用JS代码(我有一个GTM容器设置和工作已经在网站上的其他javascript)

我不太了解javascript或GA对象模型所以我不知道如何提取该值的最佳方法。我已经尝试过,通过Chrome控制台,看看我是否可以通过访问ga对象来回显这个值,但却找不到获取/访问它的方法。讨论诸如console.log ga('revenue')之类的东西和许多变化但我不明白对象模型是如何达到这个价值的。

如何访问“收入”的值并将其返回给GTM以用作变量?

2 个答案:

答案 0 :(得分:0)

要将值推送到GTM,您需要先在GTM中设置dataLayer变量:

变量 - &gt;新 - &gt;选择变量类型... - &gt;数据层变量

enter image description here

输入您的变量名称,然后点击保存。现在您可以在GTM中使用此变量,它将随时可用,您也可以在自定义HTML中引用它,如下所示:{{stackO}} 有关详细信息:https://support.google.com/tagmanager/answer/6106899?hl=en#web

要从您的网站为此变量添加值,只需将变量推送到GTM,例如:

dataLayer.push({ &#39; stackO&#39;:&#39; exampleValue&#39; });

了解更多信息:https://developers.google.com/tag-manager/devguide

不幸的是,我认为你无法获得“收入”的价值。并将其返回给GTM以直接用作变量。这是因为电子商务并没有提供返回添加项目的功能。 (不,我知道)。参考:https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce

我只能建议尝试找出该值的来源?

&#39;收入&#39;:&#39; 1.070000&#39;,// Grand Total。

它是硬编码的吗?如果是这样,也许你可以直接从HTML中获取它。

根据您的评论,理论上您可以使用以下代码:

    var x = document.head.innerText;
    var revenue=x.substring(x.lastIndexOf("'revenue'")+12,x.lastIndexOf("// Grand Total") - 2);
//assuming you name your dataLayer variable "revenue" in GTM you can push it like this:
dataLayer.push({
'revenue' : revenue
});

收入是您追求的价值。但要保持谨慎,当结构变得严峻时,你的代码就会停止工作。祝你好运

答案 1 :(得分:0)

我制定了解决方案,使用innerText和regex提取它,然后获得了值&#39;收入&#39;的起点的索引。我用它来设置从指数点+12空格开始的收入数的值。 我提取了8个小数点的值,因为我永远不会高于9999.999美元的价值订单,而且我不需要超过3个小数位的值,所以这应该是我的要求的安全范围。

我在自定义javascript类型的GTM变量中使用了此代码,然后在需要的重定向像素标记中包含该变量。

console.log条目仅用于测试,但我现在已从实时变量代码中删除。

 var content = document.head.innerText;
    var query=/'revenue': '\d+.\d+',/;
    if (content.search(query) > -1 ) {
    var resultquery = (content.search(query))
    var revenue = (document.head.innerText.substring(resultquery+12, resultquery+20))
    console.log (revenue)
    return revenue;

    } else {
      console.log(false);
    }