标签 Analytics 下的文章

_trackPageview函数是google analytics里一个极其有用的东西,下面来列举一些常见的用法,用来抛砖引玉。

一、跟踪广告(出站链接)
这里的广告是指投放在网站上,链接到其他网站的广告,也就是一个出站链接,在现实用很常见,流行的做法是在使用专门的广告系统,加上一个点击跳转,来统计广告的点击量,其实使用_trackPageview函数就可以做到这一点。
假设网站上有一个banner广告,是链接到了某一个网游的注册页面,那么在设置出站链接的时候,可以这么写:

这里实际上是给网站虚拟了一个url,也就是/advertise/banner/advertisersite.com,这样点击这个广告,跳转到了网游的注册页面,会被记录为一个PV,有多少个PV也就自然是点击了多少次广告。需要注意的是,对与这个虚拟路径的规划一定要合理,否则在统计多个广告的时候会很混乱,我建议使用分类+目标站点+时间的方式管理。
在flash广告里同样可以使用这个函数,如下:
on(release) { getURL("javascript: pageTracker._trackPageview ('/advertise/banner/advertisersite.com');"); getURL("http://www.advertisersite.com"); }

二、文件下载
除了使用_trackEvent函数来统计文件被下载之外,可以使用_trackPageview来统计,原理与统计广告是一样的,举例说明,假设有一个mp3文件下载数量需要统计:

这样每次下载这个mp3,就会被记录为访问一个虚拟路径的PV。

三、js事件
js事件也可以用_trackPageview函数来统计,主要用于统计点击和tab结构的切换,例如统计点击事件:

记录 rollover 事件:

Google Analytics提供了强大的API来跟踪搜索引擎,下面用鲜果网的自定义代码来说明,打开鲜果网的首页,能看到这样一段代码:

var t = _gat._getTracker("UA-9142976-1");t._addOrganic("baidu","word");t._addOrganic("soso","w");t._addOrganic("3721","name"); t._addOrganic("yodao","q");t._addOrganic("vnet","kw");t._addOrganic("sogou","query");t._addIgnoredOrganic("鲜果"); t._addIgnoredOrganic("鲜果网");t._addIgnoredOrganic("xianguo");t._trackPageview();return t; } catch(err) {}

虽然google analytics默认已经能识别很多搜索引擎,但是在必要的时候我们依然需要自定义代码来识别一些小型的搜索引擎。这里鲜果使用了_addOrganic(),它的格式是这样的:

_addOrganic(newOrganicEngine, newOrganicKeyword)
newOrganicEngine是一个string,标识搜索引擎的名字
newOrganicKeyword也是一个string,标识传递搜索关键词的那个参数

比如t._addOrganic("yodao","q"),这是用来定义有道搜索的,先看看有道搜索“hello”的时候,是怎样传递参数的:
http://www.youdao.com/search?q=hello&btnIndex=&ue=utf8&keyfrom=web.index
t._addOrganic("yodao","q")
yodao是指有道搜索
q是指传递“hello”给搜索引擎的那个参数

同样的,其他自定义项就好理解了,不过看起来鲜果这个代码不是最新的,有写搜索引擎的newOrganicKeyword不对。鲜果在代码中还用到了_addIgnoredOrganic(),这是用来忽略关键词的。用户可能在搜索框中直接输入网址或者网站名(也可能是误操作),比如输入了“www.xianguo.com”,这些关键词是不需要被监控的。
t._addIgnoredOrganic("鲜果网")
就是忽略了“鲜果网”这个关键词,当然,通过“鲜果网”这个关键词过来的PV还是会被计算。

同样有用的还有_addIgnoredRef(),这个方法用于忽略Referrer,比如一个网站使用了双域名,那么在统计报告中,不同域名件的跳转会被计为Referrer,这时候可以使用_addIgnoredRef()来忽略其中一个域名,保证在“Referring Sites”也就是来源网站中不再计算双域名的情况,_addIgnoredRef()不会影响计算PV。格式如下:
pageTracker._addIgnoredRef("www.sister-site.com");

众所周知,Google Analytics不是实时的,数据需要等待一段时间才能看到,所以在统计代码修改之后,不能很快知道是否能达到想要的效果。
Google Analytics的原理是请求一个1x1的gif小图,带上各种参数,就是下面这样

http://www.google-analytics.com/__utm.gif?utmwv=4&utmn=769876874&utmhn=example.com&utmcs=ISO-8859-1&utmsr=1280x1024&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=GATC012%20setting%20variables&utmhid=2059107202&utmr=0&utmp=/auto/GATC012.html?utm_source=www.gatc012.org&utm_campaign=campaign+gatc012&utm_term=keywords+gatc012&utm_content=content+gatc012&utm_medium=medium+gatc012&utmac=UA-30138-1&utmcc=__utma%3D97315849.1774621898.1207701397.1207701397.1207701397.1%3B...

根据不同的浏览器,需要使用不同的调试工具,很多IT从业者都使用firefox+firebug的组合,确实不错,不过在调试Google Analytics时,我推荐使用Live HTTP Headers这个插件,在实际的测试中,firebug有可能会来不及获取HTTP Header信息。
http://livehttpheaders.mozdev.org/installation.html

在IE下,则使用fiddler2,这个软件是微软人员开发的,相当强大。

opera也有一个HTTP Headers饰件。

在开启获取HTTP Header的工具后,可以刷新页面,然后清除掉索取的所有消息,再单独测试某一处的代码,尤其是自定义代码之后。如果代码部署没有问题,就能抓到上面那种信息了。

google的中文帮助里提供了是用_setVar()的方法,具体请看下面的链接:
http://www.google.com/support/analytics/bin/topic.py?hl=cn&topic=11004

实际上,google还提供了一个更高级的方法,请看下面这个项目:
http://code.google.com/p/gaforflash/

Flash不是我熟悉的领域,所以不敢妄言,大体上,是把提供的源码加到自己的flash里就行了。

下面是google给出的示例:

Flash

Flex

这里是事件跟踪是指Event Tracking,意思比鼠标事件跟踪广泛,先看看都能统计到什么:
1、Flash内容,比如flash站点和flash动画,甚至flash游戏都可以。
2、嵌入式AJAX
3、网页小饰件
4、文件下载
5、数据或文件的载入时间

这里用到的是_trackEvent()方法,用法如下:
_trackEvent(category, action, optional_label, optional_value)
category (必填)
这个是标注想统计项目的分类
action (必填)
这个是分类下的具体行为
label (可选)
可以理解为对action的一个描述,可选
value (可选)
这个是一个整数型的字段,通常用于统计下载次数或者载入时间

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

用音乐站来说明_trackEvent()的用法:
pageTracker._trackEvent("music", "Play", "日光倾城"); pageTracker._trackEvent("music", "Pause", "日光倾城"); pageTracker._trackEvent("music", "Stop", "日光倾城");
music是category,play是action,日光倾城是label(这里是歌名),放在链接上是这样的:
播放 暂停 停止
如果加载在播放器的按钮上,就能统计到用户试听《日光倾城》这首歌时的行为。

如果是统计MP3文件被下载的信息,就是这样写:
下载
这里加入了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脚本加载时间等等。
函数如下:
TimeTracker(opt_buckets_array)
返回一个新的时间跟踪器
_recordStartTime(opt_time)
记录开始时间
_recordEndTime(opt_time)
记录结束时间
_setHistogramBuckets(buckets_array)
定义柱状图刻度,默认是[100, 200, 300, 400, 500, 1000, 1500, 2000, 2500, 5000]
_getTimeDiff()
计算时间差
_track(tracker, opt_event_object_name, opt_event_label)
使用_track()需要保证之前已经记录了开始时间和结束时间
tracker是指google analytics在被统计页面已经实例化的一个跟踪项,比如pageTracker
opt_event_object_name是定义TimeTracker()统计数据出现在报告中的名字,默认是“TimeTracker”
opt_event_label是描述这个TimeTracker()的,为了在报告中更容易找到

google给出的运用示例:
Latency Tracking Demo

定义柱状图的示例:
// somewhere at the top of the page var timeTracker = new TimeTracker(); timeTracker._recordStartTime(); // page load and setup // now when the page is done loading... timeTracker._recordEndTime(); // Specify your own histogram "action" values timeTracker._setHistogramBuckets([10, 20, 50, 100, 500, 1000]); // assuming pageTracker is called from _gat._getTracker(account) timeTracker._track(pageTracker);

MouseOverTracker()
用户在一个PV里可能会多次触发onMouseOver()事件,这样统计到的数据水分很多,使用这个库就可以只统计第一次onMouseOver()事件而忽略掉后续的。
函数如下:
MouseOverTracker(tracker)
返回一个新的跟踪器,tracker是可选参数,需要是已经在页面中实例化的跟踪项,比如pageTracker
_trackMouseOver()
这个方法第一次被调用的时候,一个onMouseOver()事件被记录,后续操作不记录

示例:
// We want to track mouse overs on a video unit that has the element id "myVideoUnit". // assuming pageTracker is called from _gat._getTracker(account) var mouseOverTracker = new MouseOverTracker(pageTracker); document.getElementById("myVideoUnit").onMouseOver = mouseOverTracker._trackMouseOver;