邵珠庆の日记 生命只有一次,你可以用它来做很多伟大的事情–Make the world a little better and easier


27月/12

Google Analytics高级应用系列教程[用户行为跟踪]

发布在 邵珠庆

用户行为跟踪

Google Analytics的默认代码已经提供了很多预置的变量,可以获取到用户的浏览器、系统、分辨率等等数据,通过自定义代码,还能获取到很多其他的数据。下 面介绍的进阶方法比较有意思,可以用于统计tab结构或者ajax,这里用到的是_setVar()方法。

加入我有一个常见于音乐网站首页的tab结构,tab标题是国语专辑、英文专辑、日韩专辑,默认显示的国语专辑,通过鼠标点击tab切换,可以显示其他分类的专辑,结构大致如下:


  1. <ul id="albumTab"> 
  2.   <li><a href="#">国语专辑</a></li> 
  3.   <li><a href="#">英文专辑</a></li> 
  4.   <li><a href="#">日韩专辑</a></li> 
  5.   <li><a href="#">其他专辑</a></li> 
  6. </ul> 

 

这里页面是不会刷新的,所以默认代码就无法知道用户是否浏览了其他分类的专辑,作为一个网站管理者,一定想知道有多少用户点击了tab切换,只需要做如下修改:

 


  1. <ul id="albumTab"> 
  2.   <li><a href="#" onClick="pageTracker._setVar('Chinese album');">国语专辑</a></li> 
  3.   <li><a href="#" onClick="pageTracker._setVar('English album');">英文专辑</a></li> 
  4.   <li><a href="#" onClick="pageTracker._setVar('jk album);">日韩专辑</a></li> 
  5.   <li><a href="#" onClick="pageTracker._setVar('other album);">其他专辑</a></li> 
  6. </ul> 

 

同样的方式,我们也是用于统计用户点击了什么链接,通常给游客和注册用户显示的菜单是不同的,通过给不同用户组的链接加上统计,就能知道有多少不同类型的用户访问网站,也能知道那些链接是用户最爱点的。

27月/12

Google Analytics高级应用系列教程[事件跟踪]

发布在 邵珠庆

事件跟踪

这里是事件跟踪是指Event Tracking,意思比鼠标事件跟踪广泛,先看看都能统计到什么:

  1. Flash内容,比如flash站点和flash动画,甚至flash游戏都可以。
  2. 嵌入式AJAX
  3. 网页小饰件
  4. 文件下载
  5. 数据或文件的载入时间

这里用到的是_trackEvent()方法,用法如下:


  1. _trackEvent(category, action, optional_label, optional_value)   

 

  1. category (必填)这个是标注想统计项目的分类
  2. action (必填)这个是分类下的具体行为
  3. label (可选)可以理解为对action的一个描述,可选
  4. value (可选)这个是一个整数型的字段,通常用于统计下载次数或者载入时间

 

如果部署了时间跟踪,在google analytics的报告里还有一个字段叫做Implicit Count(隐式计数),这个是统计交互行为的,比如点了10次某个按钮,点一次算一次,类似PV,这个值需要根据不同的部署去理解。

 

用音乐站来说明_trackEvent()的用法:

 


  1. pageTracker._trackEvent("music""Play""日光倾城"); 
  2. pageTracker._trackEvent("music""Pause""日光倾城"); 
  3. pageTracker._trackEvent("music""Stop""日光倾城"); 

 

music是category,play是action,日光倾城是label(这里是歌名),放在链接上是这样的:

 


  1. <a href="#" onClick="pageTracker._trackEvent("music", "Play", "日光倾城");">播放</a> 
  2. <a href="#" onClick="pageTracker._trackEvent("music", "Pause", "日光倾城");">暂停</a> 
  3. <a href="#" onClick="pageTracker._trackEvent("music", "Stop", "日光倾城");">停止</a> 

 

如果加载在播放器的按钮上,就能统计到用户试听《日光倾城》这首歌时的行为。

 

如果是统计MP3文件被下载的信息,就是这样写:

 


  1. <a href="#" onClick="pageTracker._trackEvent('Downloads', 'MP3', '日光倾城', downloadTime);">下载</a>  

 

这里加入了value,每次在MP3文件被下载完之后,时间会以秒为单位计入value,在报告里用downloadTime表示,加上 Implicit Count,就能计算出平均每次下载时间,同理,可以用于记录flash动画的播放。需要注意的是第四个参数是整数型。

 

扩展运用

 

这里介绍两个js库:

 

TimeTracker() :http://code.google.com/apis/analytics/samples/time-tracker.js

 

MouseOverTracker() :http://code.google.com/apis/analytics/samples/mouseover-tracker.js

 

它们需要额外加载到被统计页面。

 

TimeTracker()主要有两个特性:1、记录持续时间;2、生成柱状图

 

如果不自定义代码,使用TimeTracker()会创建一个叫做“TimeTracker”的分类,记录开始和结束时间,计算时间差并发送给 google analytics形成报告,用柱状图显示平均时间等数据。用处非常广泛,比如监听页面平均加载时间、视频加载时间、flash界面加载时间或是嵌入式 js脚本加载时间等等。

 

函数如下:

 


  1. TimeTracker(opt_buckets_array) //返回一个新的时间跟踪器 
  2. _recordStartTime(opt_time) //记录开始时间 
  3. _recordEndTime(opt_time) //记录结束时间 
  4. _setHistogramBuckets(buckets_array)
  5. //定义柱状图刻度,默认是[100, 200, 300, 400, 500, 1000, 1500, 2000, 2500, 5000] 
  6. _getTimeDiff() //计算时间差 
  7. _track(tracker, opt_event_object_name, opt_event_label)
  8. //使用_track()需要保证之前已经记录了开始时间和结束时间 

 

  • tracker是指google analytics在被统计页面已经实例化的一个跟踪项,比如pageTracker
  • opt_event_object_name是定义TimeTracker()统计数据出现在报告中的名字,默认是“TimeTracker”
  • opt_event_label是描述这个TimeTracker()的,为了在报告中更容易找到

 

google给出的运用示例:

 


  1. <html>   
  2. <head>   
  3. <title>Latency Tracking Demo</title>   
  4. </head>   
  5. <body>   
  6. <script type="text/javascript" src="http://www.google-analytics.com/ga.js"></script>   
  7. <script type="text/javascript" src="http://www.example.com/scripts/time-tracker.js"></script>   
  8. <script type="text/javascript">   
  9. var timeTracker = new TimeTracker();   
  10. var pageTracker = _gat._getTracker("UA-1735986-1");    
  11. </script>   
  12. <input type="button" value="Start Timer" onclick="javascript:timeTracker._recordStartTime();"/>   
  13. <input type="button" value="Stop Timer" onclick="javascript:timeTracker._recordEndTime();"/>   
  14. <input type="button" value="Track!" onclick="javascript:timeTracker._track(pageTracker, undefined, 'Manual Test');"/>   
  15. </body>   
  16. </html> 

 

定义柱状图的示例:

 


  1. // somewhere at the top of the page 
  2. var timeTracker = new TimeTracker(); 
  3. timeTracker._recordStartTime(); 
  4.  
  5. // page load and setup 
  6.  
  7. // now when the page is done loading... 
  8. timeTracker._recordEndTime(); 
  9.  
  10. // Specify your own histogram "action" values 
  11. timeTracker._setHistogramBuckets([10, 20, 50, 100, 500, 1000]); 
  12.  
  13. // assuming pageTracker is called from _gat._getTracker(account)  
  14. timeTracker._track(pageTracker); 

 

MouseOverTracker()

 

用户在一个PV里可能会多次触发onMouseOver()事件,这样统计到的数据水分很多,使用这个库就可以只统计第一次onMouseOver()事件而忽略掉后续的。

 

函数如下:


  1. MouseOverTracker(tracker) 
  2. //返回一个新的跟踪器,tracker是可选参数,需要是已经在页面中实例化的跟踪项,比如pageTracker 
  3. _trackMouseOver() 
  4. //这个方法第一次被调用的时候,一个onMouseOver()事件被记录,后续操作不记录 

 

示例:

 


  1. //  We want to track mouse overs on a video unit that has the element id "myVideoUnit". 
  2. // assuming pageTracker is called from _gat._getTracker(account)  
  3.  
  4. var mouseOverTracker = new MouseOverTracker(pageTracker); 
  5. document.getElementById("myVideoUnit").onMouseOver = mouseOverTracker._trackMouseOver; 
27月/12

Google Analytics高级应用系列教程[跨域跟踪]

发布在 邵珠庆

跨域跟踪

从今天开始一个介绍Google Analytics进阶运用的系列日志,其实没有多少技术含量,主要内容来自http://code.google.com/apis/analytics/docs/index.html,不过其中部分的用词与说法与官方不太一样。

首先,要清楚以下几点:

  1. Google Analytics用document.domain定义一个网站的cookies
  2. 独立的域名意味着独立的访问者和流量数据,也就是说,在只使用Google Analytics默认代码的情况下,即使是访问不同的二级域名,都会被单独计算
  3. 独立的域名并不一定是不同的内容
  4. 子目录使用主域名的cookies

ps:本系列的ID都是google文档中的,想使用的话请更换成自己的。

只统计一个子目录

假如我有一个网站www.example.com,还有一个网店www.example.com/myStore/,我只想统计网店的访问数据,需要用到_setCookiePath()方法,统计代码这么写:


  1. var pageTracker = _gat._getTracker("UA-12345-1"); 
  2. pageTracker._setCookiePath("/myStore/"); 
  3. pageTracker._trackPageview(); 

这是因为cookie路径设置为您的子目录,而不是根目录www.example.com

统计同域名下连个子目录

假如我有一个网店,还有一个购物车

www.example-commerce-host.com/myStore/

www.example-commerce-host.com/myCart/

想统计他们的访问数据,需要用的_cookieCopyPath()方法,统计代码这么写:


  1. var pageTracker = _gat._getTracker("UA-12345-1");  
  2. pageTracker._setCookiePath("/myStore/");  
  3. pageTracker._cookiePathCopy("/myCart/");  
  4. pageTracker._trackPageview();  

这样就是设置了一个特殊的cookie,由第一个目录提供,也就是myStore目录,这些cookie数据会被复制到myCart目录cookie中

统计A域名及B域名的一个子目录

这是我认为比较有用的应用方式。

假如我有一个网店,使用的是第三方的购物车,这时候需要设定主次,一般自己的是主,第三方的东西是次。统计代码这么写:

主:www.example-petstore.com


  1. var pageTracker = _gat._getTracker("UA-12345-1"); 
  2. pageTracker._setAllowLinker(true); 
  3. pageTracker._setAllowHash(false); 

次:www.example-commerce-host.com/petStoreCart


  1. var pageTracker = _gat._getTracker("UA-12345-1"); 
  2. pageTracker._setDomainName("none"); 
  3. pageTracker._setAllowLinker(true); 
  4. pageTracker._setAllowHash(false); 

_setAllowLinker()方法是为了让目标网站读取到post过来的数据和cookie,但是这样还不够,还需要用到_linkByPost()方法,将网店的cookie通过HTTP POST传到购物车,因此,在网店的表单里需要这样修改:


  1. onSubmit="pageTracker._linkByPost('www.example-commerce-host.com/petStoreCart/begin.php');" 

当然网店的相关链接也要改为这样的:


  1. <a href="pageTracker._linkByPost('www.example-commerce-host.com/petStoreCart/legalTerms.php');">购物车</a> 

还有js形式的写法,用到_link方法


  1. <a href="www.example- commerce-host.com/petStoreCart /legalTerms.php" onclick="pageTracker._link(this.href); return false;"& gt;购物车</a> 

统计主域名及其二级域名

类似这样的:

www.example-petstore.com

dogs.example-petstore.com

cats.example-petstore.com

统计代码这么写:


  1. var pageTracker = _gat._getTracker("UA-12345-1"); 
  2. pageTracker._setDomainName(".example-petstore.com"); 
  3. pageTracker._trackPageview(); 

用_setDomainName方法设定主域名

统计多域名及二级域名

这是一种混杂的情况,基本上是前两种情况相加,统计代码要这么写:

主:www.example-petstore.com


  1. var pageTracker = _gat._getTracker("UA-12345-1"); 
  2. pageTracker._setDomainName(".example-petstore.com"); 
  3. pageTracker._setAllowLinker(true); 
  4. pageTracker._setAllowHash(false); 

如果有表单指向了其他域名,需要用_link()方法和_linkByPost()方法将cookie传到其他域名去,用法上面已经写过了。如果表单指向的是二级域名,就不一定要使用_link()方法和_linkByPost()方法了,因为已经设定了主域名。

次:dogs.example-petstore.com


  1. var pageTracker = _gat._getTracker("UA-12345-1"); 
  2. pageTracker._setDomainName(".example-petstore.com"); 
  3. pageTracker._setAllowLinker(true); 
  4. pageTracker._setAllowHash(false); 

同样的,如果有表单指向了其他域名,需要用_link()方法和_linkByPost()方法将cookie传到其他域名去

其他域名:www.my-example-blogsite.com


  1. var pageTracker = _gat._getTracker("UA-12345-1"); 
  2. pageTracker._setDomainName("none"); 
  3. pageTracker._setAllowLinker(true); 
  4. pageTracker._setAllowHash(false); 

统计框架(iFrame)

假如想把框架中的www.my-example-iframecontent.com数据传到父一级www.example-parent.com的窗口中去,需要用到_getLinkerURL()方法,用js读取框架,统计代码要这么写:


  1. var iframe = document.getElementById("myIFrame"); 
  2. iframe.src = pageTracker._getLinkerUrl(http://www.my-example-iframecontent.com/); 
238月/11

收集的一些主流网站的GA代码

发布在 邵珠庆

豆瓣首页、豆瓣读书:
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-7019765-1']);
_gaq.push(['_addOrganic', 'baidu', 'word']);
_gaq.push(['_addOrganic', 'soso', 'w']);
_gaq.push(['_addOrganic', '3721', 'name']);
_gaq.push(['_addOrganic', 'yodao', 'q']);
_gaq.push(['_addOrganic', 'vnet', 'kw']);
_gaq.push(['_addOrganic', 'sogou', 'query']);
_gaq.push(['_addIgnoredOrganic', '豆瓣']);
_gaq.push(['_addIgnoredOrganic', 'douban']);
_gaq.push(['_addIgnoredOrganic', '豆瓣网']);
_gaq.push(['_addIgnoredOrganic', 'www.douban.com']);
_gaq.push(['_setDomainName', '.douban.com']);
_gaq.push(['_trackPageview']);
_gaq.push(['_setVar', '224']);

(function() {
    var ga = document.createElement('script');
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    ga.setAttribute('async', 'true');
    document.documentElement.firstChild.appendChild(ga);
})();
</script>

携程首页、国内机票:
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
        var pageTracker = _gat._getTracker("UA-3748357-1");
        pageTracker._setDomainName("ctrip.com");
        pageTracker._addOrganic("soso", "w");
        pageTracker._addOrganic("sogou", "query");
        pageTracker._addOrganic("yodao", "q");
        pageTracker._initData();
        pageTracker._trackPageview();
} catch(e){;};
</script>

麦包包首页

<script type="text/javascript">

//ga
var _ga_username = '{if $globals.user_login}{$globals.user_info.username}{else}非会员{/if}';
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
google_analytics();
function google_analytics(){
try {
var pageTracker = _gat._getTracker("UA-10586344-1");
pageTracker._addOrganic("baidu","word");
pageTracker._addOrganic("soso","w");
pageTracker._addOrganic("3721","name");
pageTracker._addOrganic("yodao","q");
pageTracker._addOrganic("vnet","kw");
pageTracker._addOrganic("sogou","query");
pageTracker._addIgnoredOrganic("麦包包");
pageTracker._addIgnoredOrganic("mbaobao");
pageTracker._addIgnoredOrganic("www.mbaobao.com");
pageTracker._setVar((isset(_ga_username) ? _ga_username : '非会员'));
pageTracker._trackPageview();

$('#a_add_favorites').bind("click", function()
{
pageTracker._trackEvent("网站操作", "收藏网站");
});
} catch(err) {
setTimeout(function(){
google_analytics();
}, 1000);
}
}

</script>

敦煌网首页、商品详情页:
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-425001-1");
pageTracker._setDomainName(".dhgate.com");
pageTracker._setAllowHash("false");
pageTracker._trackPageview(location.pathname + location.search + escape(location.hash));
} catch(err) {}</script>

京东首页、商品详情页:
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-2176661-1");
pageTracker._setDomainName("360buy.com");
pageTracker._addOrganic("soso", "w");
pageTracker._addOrganic("sogou", "query");
pageTracker._addOrganic("yodao", "q");
pageTracker._trackPageview();
</script>

走秀网首页、商品详情页:
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-9540643-1");
pageTracker._initData();
pageTracker._setDomainName(".zoshow.com");
pageTracker._setAllowLinker(true);
pageTracker._trackPageview();
</script>

篱笆网首页:
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-5496041-1");
pageTracker._setDomainName("liba.com");
pageTracker._initData();
pageTracker._trackPageview();
</script>

篱笆网商品详情页:
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-5496041-1");
pageTracker._setDomainName("liba.com");
pageTracker._initData();
pageTracker._trackPageview(location.pathname + decodeURI(location.search));
</script>

钻石小鸟:
<script type="text/javascript" src="http://www.google-analytics.com/ga.js"></script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-97277-13");
pageTracker._addOrganic("soso","w");
pageTracker._addOrganic("sogou","query");
pageTracker._addOrganic("youdao","lq");
pageTracker._initData();
pageTracker._setDomainName(".zbird.com");
pageTracker._trackPageview();
</script>

博客大巴首页:
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-2120146-1");
pageTracker._initData();
pageTracker._trackPageview();
document.onclick = function(e) {
e = e || event;
var el = e.target || e.srcElement;
if (el.tagName=='A' && e.button == 0 && el.href.match("http:\/\/") && el.target=="_blank") {
pageTracker._trackPageview("\/ad/" + window.location.href.replace("http:\/\/www.blogbus.com/", "") + el.href.replace("http:\/\/", "\/"));
        }
}
</script>

博客大巴频道页、文章页、文章列表页:
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-1649222-2");
pageTracker._addOrganic("baidu","word");
pageTracker._addOrganic("baidu","wd");
pageTracker._addOrganic("soso","w");
pageTracker._addOrganic("vnet","kw");
pageTracker._initData();
pageTracker._trackPageview();
} catch(err) {}</script>

博客大巴注册、登录页:
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-2120146-17");
pageTracker._trackPageview();
} catch(err) {}</script>

博客大巴搜索列表页:
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-2120146-11");
pageTracker._trackPageview();

天极网:

<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var _ga = _gat._getTracker("UA-11613621-1");
_ga._setDomainName(".yesky.com");
_ga._addOrganic("soso","w");
_ga._addOrganic("3721","name");
_ga._addOrganic("yodao","q");
_ga._addOrganic("vnet","kw");
_ga._addOrganic("sogou","query");
_ga._trackPageview();
} catch(err) {}</script>

酷讯网:

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-4247795-5']);
  _gaq.push(['_setCustomVar','1','{$username}','{$cu_ip}','2']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga
.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>