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

How Can I extract & return a single value (revenue) from GA ecommerce results using javascript

在我的电子商务网站上成功交易后显示的感谢页面的来源 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 将 'revenue' 和 return 的值提取到 GTM 变量中。

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

我不太了解 javascript 或 GA 对象模型,所以我不知道如何以最佳方式提取该值。我已经尝试通过 chrome 控制台,看看我是否可以通过访问 ga 对象来回显该值,但找不到获取它的方法/访问 it.Trying 诸如 console.log ga ('revenue') 和许多变体,但我不明白对象模型如何工作以达到该值。

如何将 'revenue' 和 return 的值访问到 GTM 以用作变量?

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

变量 -> 新增 -> 选择变量类型... -> 数据层变量

输入您的变量名并点击保存。现在你可以在 GTM 中使用这个变量,它可以在任何地方可用,你也可以在你的自定义 HTML 中引用它,如下所示:{{stackO}} 更多信息:https://support.google.com/tagmanager/answer/6106899?hl=en#web

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

dataLayer.push({ 'stackO': 'exampleValue' });

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

不幸的是,我认为您不能将 'revenue' 和 return 的值访问到 GTM 以直接用作变量。这是因为 GA 电子商务没有 return 添加项目的功能。 (没有我知道的)。参考:https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce

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

'revenue': '1.070000',// 总计。

它是硬编码的吗?如果是这样,也许您可​​以直接从 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
});

收入就是您追求的价值。但是要小心,当结构发生变化时,您的代码将停止工作。祝你好运

我找到了使用 innerText 和正则表达式提取它的解决方案,然后获得了值起点的索引 'revenue' 我用它来放置收入数量的值它从一个索引点开始 +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);
    }