Google Analytics部署 电子商务(进阶)

上次写到Google Analytics电子商务部署,主要是简单介绍Google Universal Analytics的基本统计代码,并没有涉及到具体的实施。本文将以主要介绍如何精准的统计到电子商务交易及商品数据。

电子商务场景介绍

电子商务网站的从购物车页面,到下单页面,到订单确认页面,到最终提交订单。整个的交互流程可以大致划为如此:

因此,我们可以看到,订单的真正产生,还是在电子商务网站服务端进行。因此,如果我们想记录到比较准确的交易、订单数据,那么我们必须在订单系统确认了付款成功才能确认订单,发送订单数据。

数据监测方案

因此,我们如果需要利用Google Universal Analytics准确的记录订单,我们现在有两种方式:

1.网站服务端(订单系统)在确认完订单之后,直接向Google Universal Analytics发送订单数据,但是这样做的缺点就是,如果不做专门的部署,我们也很可能丢失用户其他关联数据:

2.网站服务端(订单系统)在确认完订单之后,在支付完成回调页面(返回页面,通常是显示订单成功的页面),动态输出Javascript收数代码,发送交易、订单数据。

代码及案例

下面我们以在订单确认页/订单成功回调页面为例,部署Google Universal Analytics跟踪代码。

背景提示

绝大多数电商网站的交易都是在网站服务端完成的,但Google Analytics的analytics.js是从客户端发送数据到GA服务器的。所以,我们需要在这中间,将服务端与客户端进行一些协调,来发送这些电子商务数据。

大多数电商会在购买完成之后,会返回一个“感谢”页面或者成功订单详情页面。这个页面一般是由网站服务端动态输出的页面。因此,在进行电商统计的时候,我们需要由网站服务端代码,根据实际的交易数据和商品数据,动态输出GA的Javascript跟踪代码。下面,我们以PHP为例:

定义交易和商品数据

我们在服务端存储好交易数据及商品数据:

<?php
// 定义交易数据
$trans = array('id'=>'1234', 'affiliation'=>'Acme Clothing',
'revenue'=>'11.99', 'shipping'=>'5', 'tax'=>'1.29');

// 定义商品数据
$items = array(
array('sku'=>'SDFSDF', 'name'=>'Shoes', 'category'=>'Footwear', 'price'=>'100', 'quantity'=>'1'),
array('sku'=>'123DSW', 'name'=>'Sandles', 'category'=>'Footwear', 'price'=>'87', 'quantity'=>'1'),
array('sku'=>'UHDF93', 'name'=>'Socks', 'category'=>'Footwear', 'price'=>'5.99', 'quantity'=>'2')
);
?>

定义返回的Javascript跟踪代码

同时,也定义好用于返回Google Analytics电子商务跟踪代码的PHP函数:

<?php
// 返回Javascript交易数据跟踪代码的PHP函数
function getTransactionJs(&$trans) {
return <<<HTML
ga('ecommerce:addTransaction', {
'id': '{$trans['id']}',
'affiliation': '{$trans['affiliation']}',
'revenue': '{$trans['revenue']}',
'shipping': '{$trans['shipping']}',
'tax': '{$trans['tax']}'
});
HTML;
}

// 返回Javascript商品数据跟踪代码的PHP函数
function getItemJs(&$transId, &$item) {
return <<<HTML
ga('ecommerce:addItem', {
'id': '$transId',
'name': '{$item['name']}',
'sku': '{$item['sku']}',
'category': '{$item['category']}',
'price': '{$item['price']}',
'quantity': '{$item['quantity']}'
});
HTML;
}
?>

执行数据跟踪

输出电子商务跟踪代码,执行数据统计发送至GA服务器:

<!-- Begin HTML -->
<script>
ga('require', 'ecommerce', 'ecommerce.js');

<?php
// 跟踪交易数据
echo getTransactionJs($trans);

// 跟踪商品数据
foreach ($items as &$item) {
echo getItemJs($trans['id'], $item);
}
?>

ga('ecommerce:send');
</script>

如上所部署,一旦进行交易的时候,客户端与服务端的交互会使交易数据及商品数据在最终才发送至GA服务器,使我们订单监测更为精准。

无法避免的问题

虽说由后端动态输出跟踪代码,理论上来说是非常精准的数据了,但是由于最终统计是在客户端进行,还是会不免有所数据损耗。例如,由第三方网站付款,付款回调成功页面返回较慢,用户直接关闭,或者返回不成功等。这些情况都会导致数据上的损耗。

更精准的方式

如果在这个基础上,一定要一个更精准的方式,那么就只能是由网站服务端在收到交易成功消息的时候,亲自向GA服务器发送订单数据了。当然,经典版Google Analytics并不支持如此操作。新版本的Google Universal Analytics是支持Measurement Protocol,我们是直接可以通过在服务端构造数据请求将数据发送至GA服务器。这其中也有一些细节问题,就暂且不在本篇的讨论范围了。

参考资料:

https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce