YSS

Write Less & Do More

谈谈Google Analytics

简介

目前Google Analytics有两种类型的统计代码:analytics.js 和 ga.js

在基本功能点上两者都差不多,但analytics.js的配置性更强。

ga.js和analytics.js的很大差别在于ga.js很多东西都是放入到前端页面去做的,但是analytics.js则可以在Google Analytics中的管理去配置。

Google给的一个区别:

analytics.js vs ga.js

那些个Cookie

ga.js重度依赖于cookie。这跟两者的实现是分不开的。

analytics.js中的cookie

Cookie名 过期时间 描述
_ga 2 years 用于区分用户

ga.js中的cookie

Cookie名 过期时间 描述
__utma 2 years 用于区分用户和会话(对应GA中的唯一身份)
__utmb 30mins 用于检测是否新的会话(对应GA中的访问次数)
__utmc end of browser session - Not used in ga.js
__utmz 6 months 存储来源和活动(对应GA中的来源)
__utmv 2 years 存储自定义变量的数据。(对应GA中的自定义变量)

由于目前的业务统计需要,我们都将使用并可能长期使用ga.js。

ga.js配置

var _gaq = _gaq || [];
// 设置账号,其中UA-43949337后的-1需要根据不同项目设置不一样的值
_gaq.push(['_setAccount', 'UA-43949337-1']);
 
// 设置自然搜索源。
// 为什么要设置呢?因为google提供的搜索源,不符合国情。
// 具体可以看:https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingTraffic#searchEngine
_gaq.push(['_addOrganic', 'm.baidu', 'word']);
_gaq.push(['_addOrganic', 'wap.baidu', 'word']);
// 这里是设置前一个搜索词
_gaq.push(['_addOrganic', 'Baidu', 'bs']);
_gaq.push(['_addOrganic', 'www.soso', 'w']);
_gaq.push(['_addOrganic', 'wap.soso', 'key']);
_gaq.push(['_addOrganic', 'www.sogou', 'query']);
_gaq.push(['_addOrganic', 'wap.sogou', 'keyword']);
_gaq.push(['_addOrganic', 'so.com', 'q']);
// 这里是设置前一个搜索词
_gaq.push(['_addOrganic', 'so.com', 'pq']);
_gaq.push(['_addOrganic', 'youdao', 'q']);
 
// 如果我们有多个子域的话,建议加上这句。
// 在现在的情况下是必须加这句的
_gaq.push(['_setDomainName', 'domain.com']);
 
// 发送浏览量,当然还有很多其他的东西。
// 在有些场景下,需要更换现在的URI,那只要这样:_gaq.push(['_trackPageview', '/xxx/xx']);
_gaq.push(['_trackPageview']);

GA Event监听

GA Event一般用来统计点击量,是一个非常实用的方案。 也是最最常用的布点方式。

Google Analytics还专门有一个事件流呢?!

// 可能的HTML代码片段:
// <a href="xxx" gaevent="ft/logo"><span>logo</span></a>
var GA = {
    // 初始化跟踪GA统计事件
    trackGAEvent: function () {
        // 这块最最好使用框架内部定义的事件代理
        $(body).on('click', '[gaevent]', function() {
            GA.sendGA.apply(null, this.getAttribute('gaevent').split('|'));
        });
    },

    // 供Js调用的发送GA统计事件方法
    sendGA:function() {
        var arrTrack = ['_trackEvent'],
            attrs = [].slice.call(arguments);

        if (attrs.length === 1) {
            // InnerLink & Click 是默认的事件类别和操作
            arrTrack.push('InnerLink', 'Click', attrs[0]);
        } else {
            arrTrack = arrTrack.concat(attrs);
        }
        _gaq.push(arrTrack);
    }
};

加载位置

以前我们可能对应GA初始化的地方或者说何时去加载,会有很多疑惑。

这里我给出一个说明:

因为blog的需要,当然也为了防止GA数据统计的正确性,我们需要把ga.js放到第一位进行异步加载。