Google analytics 谷歌分析重复交易

Google analytics 谷歌分析重复交易,google-analytics,transactions,duplicates,universal-analytics,Google Analytics,Transactions,Duplicates,Universal Analytics,我正在订单确认页面上使用Universal Analytics: // Create the tracker ga('create', 'UA-XXXXX-Y'); // Fire off a pageview ga('send', 'pageview'); // Include the ecommerce plugin ga('require', 'ecommerce', 'ecommerce.js'); // Initialize the transaction ga('ecommer

我正在订单确认页面上使用Universal Analytics:

// Create the tracker
ga('create', 'UA-XXXXX-Y');

// Fire off a pageview
ga('send', 'pageview');

// Include the ecommerce plugin
ga('require', 'ecommerce', 'ecommerce.js');

// Initialize the transaction
ga('ecommerce:addTransaction', {
             id: '1234abc',     // Transaction ID*
    affiliation: 'Tech Shirts', // Store Name
        revenue: '52.19',       // Total
       shipping: '10',          // Shipping
            tax: '3.22'         // Tax
});

// Add a few items
ga('ecommerce:addItem', {
          id: '1234abc',            // Transaction ID*
         sku: 'TSHIRT-12A',         // Product SKU
        name: 'Analytics Wizard',   // Product Name*
    category: 'Men\'s Shirts',      // Product Category
       price: '12.99',              // Price
    quantity: '1'                   // Quantity
});
ga('ecommerce:addItem', {
          id: '1234abc',            // Transaction ID*
         sku: 'TSHIRT-36B',         // Product SKU
        name: 'Best Developer',     // Product Name*
    category: 'Women\'s Shirts',    // Product Category
       price: '12.99',              // Price
    quantity: '2'                   // Quantity
});

// Send off the transaction
ga('ecommerce:send');
出于某种原因,如果用户刷新页面,分析团队决定记录同一交易两次

鉴于事务ID相同(它显然代表同一事务,那么为什么要复制它?),将同一事务记录两次似乎不合逻辑


这是预期的行为,因为它没有被记录?GA团队真的希望每个用户都必须编写代码来防止重复吗?

这是预期的行为。这使您能够发送负面交易以取消购买。您需要修改页面代码,以便在重新加载时不包含电子商务跟踪

我们实际上编写了一点javascript,它对事务ID进行cookies,并防止它被发送到Google两次。无需开始编写服务器端代码或在所选电子商务平台中修改代码

本质上,只需包含JS,然后围绕GA事务跟踪代码包装一个条件:

<script type="text/javascript">
function checkIsSent(ref) {
    var cookiename = 'gaSaleSent_' + ref;

    var ca = document.cookie.split(';');

    for(var i=0; i<ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1);
        if (c.indexOf(cookiename + '=') != -1){
            return true;
        }
    }

    var d = new Date();
    d.setTime(d.getTime() + (90*24*60*60*1000));
    var expires = "expires="+d.toGMTString();
    document.cookie = cookiename + '=1; ' + expires;

    return false;
}

if(!checkIsSent('YOUR CART ID HERE')){
      PASTE YOUR GOOGLE TRANSACTION TRACKING CODE HERE
}
</script>

功能检查(ref){
var cookiename='gaSaleSent_uu'+ref;
var ca=document.cookie.split(“;”);

对于(var i=0;这听起来像是一个糟糕的设计功能..为什么没有一个单独的方法根据这个想法删除一个事务?我觉得我需要设置DB持久性来防止重复事务是很可笑的。这是一个很好的设计功能。GA电子商务跟踪不是一个面向事务的数据库;它只是一个日志和报告引擎。它旨在让您了解内容对销售的贡献。您不需要将任何内容保存到数据库以防止页面刷新时出现重复事务。您只需要一点JavaScript。这里有很多关于如何在堆栈溢出时使用JavaScript检测页面重新加载的建议。根据定义,您现在没有o从无状态系统转移到有状态系统。你可以将状态存储在cookie中,但如果用户将确认页面添加书签或发送电子邮件并在另一个浏览器上打开,会发生什么情况?防止重复的唯一可靠方法是将状态保存到数据库中。至于它是如何一个精细的设计功能……我认为这是有争议的。事实上,它甚至不是文档ntated意味着大多数用户甚至不会意识到这一点。在任何情况下,我无法想象任何人会喜欢这种方式,而不仅仅是使用添加和删除方法。我甚至无法正确地撤销交易,因为撤销的交易记录在不同的日期,并且只有在包含两个日期的情况下才是净的。您的链接已断开,因此您的代码是虚拟的这似乎不是最好的解决方案。如果任何人都可以从不同的浏览器访问确认页面,那么cookie就不会出现。