标签归档:Google-Analytics

SkyGlue—用GA标记用户生成点击流

skyglue  最早看到SkyGlue这个工具是在Cloga博客的文章,后来经过jasseyyang的推荐,向SkyGlue的cindy申请开通了博客GA账号的试用。经过一段时间的使用,现在来简单介绍一下SkyGlue这个工具。

  SkyGlue是Google Analytics的一个扩展工具,基于对网站中唯一访客的识别和标记,自动追踪网站的事件监控,记录用户操作的点击流数据。SkyGlue同样是通过JS页面标记进行安装部署,不过前提是你已经部署了GA的代码,因为SkyGlue其实是对GA标记的扩展。SkyGlue的JS会自动判断并监控页面的可交互按钮和链接,包括输入框、视频、图片等,监控用户的交互操作,并将结果通过事件追踪(Event Tracking)的函数提交给GA。

  SkyGlue提供的功能,主要是为了弥补GA本身存在的一些缺陷:

1、  GA用cookie标识访客,但是无法查看每个访客的信息和访问行为;

2、  GA用cookie标识访客,无法真正识别到用户,如果使用用户注册ID会更加准确;

3、  GA用Event Tracking可以定制监控用户的交互事件,但如果需要定制大量的用户交互,设置过于繁琐;

4、  无法追踪用户的生命周期,特别是对于跨Visit的分析和转化计算,比较无能为力;

5、  无法区分用户个体行为,使针对用户行为的细分和分析变得困难;

6、  GA大部分数据基于前后的页面浏览串联,对于页面中相同链接的点击操作未做区分,对站外链接的点击未做监控。

  来看一下SkyGlue的报表页面截图,用户的列表里面显示了自动生成的用户ID、来源、国家、城市及在所选时间段内的总访问数和页面浏览量:

 skyglue-users

  点击每个Userid就可以进入该用户的点击流数据,按照操作的时间排序,如:

skyglue-events

  上图是在SkyGlue网站的User Report上查看数据,报表会对用户操作做下分类,包括Pageview和Click,Click显示了用户通过点击哪个链接或者图片进入了页面,Pageview则显示了进入的页面的URL。同样在Google Analytics里面也可以在Event的报表中查看这些细节数据,对于SkyGlue的具体功能和使用这里不详细介绍,有兴趣的朋友可以去他们的网站查看。(这篇文章主要是看到SkyGlue这个工具能够弥补GA的一些功能缺陷,而且完全基于GA本身进行扩展,无论是工具的实现和一些细节设置都有许多可取之处,当然也因为cindy的邀请,希望将他们的工具在国内做些介绍,所以只是想介绍一下这个工具的功能和对分析的帮助,没有任何广告的意思,如果不喜欢的可以忽略这篇文章。另外,SkyGlue是需要收费的)

  SkyGlue提供的功能在分析上体现的价值主要两方面:一是使针对独立访客的分析成为可能二是使针对客户操作细节的分析成为可能

  首先,GA是不提供用户的点击流数据的,也就是我们无法区分每个用户去观察用户的操作步骤,GA的数据都是经过一定维度聚合的,这样就丧失了对独立用户进行分析的可能性。通过SkyGlue的扩展,对访问网站的每个访客做了标记(类似GA的cookie,自动生成一个字符串来标识访客,同时可以标记注册用户的UserId,注册登录后可以在Track registered users里面设置网站的注册登录页面及相应的表单元素的名称),这样GA就具备了每位访客维度的数据,不仅可以观察每个访客在一个访次(Visit)内的浏览和操作情况,更重要的是可以跟踪访客的整个生命周期的行为,合并多个Visits分析每位用户行为,同时针对用户特定行为的过滤和细分也成为可能。最常见的就是我们要分析那些访问深度(Depth)很长的用户,他们到底是频繁穿梭于各类导航索引页面一直迷失,还是真正在浏览他们感兴趣的内容;或者用户如果未在一次访问中完成转化,那么有没有可能在之后继续访问并完成转化,他们在转化前做了什么?同时可以分析每位用户的忠诚度指标和生命周期价值的体现。

  然后就是操作细节,从图中我们可以看到SkyGlue对用户操作的记录是非常完整的,不仅有Pageview,同时包含了用户点击链接(动作包含“A”关键字)的链接名或者点击图片(动作包含“img”关键字)的图片名,如果是站外链接会有“outbound”标记进行区分,还有输入标记“INPUT”等,这就一次性解决了GA中隐藏的一系列问题:无法区分指向相同链接的点击、无法监控站外链接的点击等。这些对网站用户体验的分析优化是非常有用的,具体可以参考博客中关于点击情况分析和用户体验分析的文章。另外,SkyGlue在自动识别监控可交互页面元素的基础上也支持自己定制需要监控的页面事件,可以在登录进去之后的Customize Event Tracking添加新事件的监控或者变更现有事件。

  既然SkyGlue解决了一些GA的局限性,具备了使用的价值,同时也给使用带来了一些复杂性。SkyGlue基于标识用户之后使用GA的事件监控生成了用户的点击流数据,输出了大量的细节数据,这些数据细到用户的每一步点击和输入操作,对于观察分析而言就没有GA本身的聚合数据那么直观了,所以就需要更多地结合过滤和细分的方法去处理和定制数据,SkyGlue提供了一些定制的报表,结合Event Tracking对Category=>Action=>Label的钻取,让我们可以更加有效地去做些分析。但GA的优势就在于使用的灵活性和可定制性,对于那些DIY能力强的人来说,细节数据往往能够给他们带来更加丰富的分析视角,所以如果你喜欢自己捣腾下GA的话,也可以试试SkyGlue这个工具。

了解网站页面的点击情况

  有时候我们需要了解网站页面中各链接的点击情况,尤其是网站的首页和一些中间页,这对网站的内容编排、用户体验优化都能起到很好的指导作用。Google Analytics的老版本有Site Overlay(网站覆盖图)的功能,可以查看网站首页的点击分布情况,新版本将这个功能重新命名为In-Page Analytics,可以在Content模块中查看,下面是我的博客的一张使用截图:

Google-In-Page-Analytics

  如图所示,GA的In-Page Analytics用气泡的形式显示了页面中每个可点链接的点击转化率(CTR, Click Through Rate),这里页面中各链接的点击转化率是通过页面链接的点击次数除以页面浏览次数计算得到的,用来表现用户在浏览当前页面的时候更倾向去往哪些下一页面,具体的点击次数会在鼠标移动到相应链接后显示。

  其实使用GA的In-Page Analytics不仅可以观察页面中各链接点击情况,还可以观察页面当前显示部分的点击占比,比如上图该页面显示部分的点击占比为1-41%=59%,图中最下方显示还有41%的点击是在当前显示部分的下方。这个功能其实可以告诉我们一些非常有用的信息,用户在浏览页面的时候更倾向于在哪一屏发生点击?因为目前大部分网站的页面都不会在一屏就结束,用户浏览完整的内容往往需要使用鼠标的滚轮或者进行下拉,那么大部分用户到底会关注到页面第几屏的内容,这个功能每一屏的点击占比分布可以告诉我们一些线索。

  先解释一下这里“一屏”到底是一个什么概念,这里一屏主要指用户在打开页面不进行下拉时所能显示的页面长度部分,这跟电脑的显示器和屏幕分辨率有关,比如我的博客首页在我的笔记本上打开大概显示4屏多一点,在分辨率较低的显示器下面可能需要显示的屏数就会增加,需要更多的下拉;而分辨率高的显示器一屏内能够显示的页面更长,可能就不再需要4屏。

  用户浏览页面的内容是有局限性的,并且用户对内容的兴趣和耐心也是有限的,用户往往只会重点关注一下子就映入眼帘的内容,所以页面的前面部分一定会有更多的用户关注,而随着不断下拉,后面部分的内容的关注度逐步减少,我们可以根据In-Page Analytics上面提供的数据来看看这个局部减少的过程:

page-click-distribution  根据我的博客首页的点击分布情况,超过60%的点击发生在第一屏,第二屏基本上占据了30%左右的点击,第三屏在6%-7%,下面所有剩下了几屏仅有2%-3%的页面点击占比,我们可以使用点击热图分析得到类似的页面点击分布情况。可能有人会说你的博客大部分的链接都集中在第一屏和第二屏,之后几屏的链接数量都比较少,所以点击占比前面两屏很高也是说得过去的,有一定的道理,但即使博客的第一屏和第二屏有近似密度的可点击链接,可以看到第二屏的点击量相比第一屏还是出现了大幅的衰减,另外可以通过点击热图等工具看看页面每一屏的无效点击数,基本可以看出分布的情况也大概符合上面的规律,逐屏大幅下降,在3屏之后寥寥无几。

  如果你细心关注过国内外的各个门户网站,可以看到国内外门户网站页面长度的设计存在明显的差异。可以尝试去上下Yahoo!主站、BBC、CNN等国外主流门户,基本上这些网站的首页长度设计在3-4屏;再看看国内的几个门户,网易5屏、腾讯接近6屏、新浪更是恐怖的8屏(都是基于我自己的笔记本上显示)。所以如果大部分用户浏览网站的习惯跟我的博客使用Google In-Page Analytics上面分析得出的结果相符,那么国内门户的首页后面几屏的内容基本都成为了摆设,因为100个人里面只有2-3个人会关注到这些内容。

  在之前的工作中分享“如何有效提升内容曝光点击率”也提到过类似的问题,必须格外重视首页第一屏的内容质量和呈现方式,因为这部分的内容将主导网站内容的曝光点击率。很明显,一个网站的首页浏览量大概占据了全站的20%到30%(因网站设计而异),而首页的第一屏又占据了首页60%以上的关注度,所以可以看到首页第一屏对整个网站而言是何其的重要。

categories-and-tags-click  当然,In-Page Analytics功能另外一个重要的用户就是分析各内容列表或模块的点击情况,如下图的博客侧边栏“分类目录”和“标签”两个模块的点击情况:

  如左图所示,用户显然更喜欢通过“分类目录”查看博客的内容,用户最喜欢点击哪些分类?有点出乎我的意料,“数据分析方法”和“网站分析工具”两个目录更受欢迎,想必大家都喜欢阅读和学习下工具和方法方面的内容,以后尽量多整理一些这方面的内容。 :)

  新版V5版的Google Analytics的In-Page Analytics不仅仅支持网站首页的点击情况统计,在Content模块Site Content的Pages我们可以看到上方的“Navigation Summary”标签旁边有“In-Page”标签,GA已经支持了所有页面的点击分布图,而且都是免费的,你只要在选择相应页面后点击这个“In-Page”标签就可以进行查看。

  每个页面有了点击分布情况的统计,这样对于页面各个模块或列表的效果评估就变得简单很多,正如我之前的文章——优化相关内容推荐介绍的是使用“Navigation Summary”来评估相关内容推荐模块的点击效果,这里就可以尝试使用In-Page Analytics来分析数据表现:

  右图是《T检验和卡方检验》这篇文章下方的“相关文章”推荐模块的点击情况,可以看到推荐的5篇文章都获得了不错的点击转化率,但显然排在第2位的《提升用户满意度》这篇文章的数据还不够给力,或许用户不喜欢点击这类内容看上去会比较空的标题。

related-content-click  图中有个细节不知道各位有没有注意到,“相关文章”的推荐模块只是上部分,下面还有两个链接分别指向上一篇和下一篇发布的文章,而刚好“下一篇:比较测试的设定和分析”是跟相关文章推荐模块有重复的,而这里显示的点击转化率都为5.7%,其实在In-Page Analytics这个功能里面页面中的相同链接GA是不进行分辨的,也就是GA只认URL为标识,不区分这个URL链接在页面中的位置,大概的统计逻辑应该是一个页面中链接的点击次数为referral是该页面的链接URL的浏览次数Pageviews,所以一个页面中重复链接中输出的点击率应该是根据所有相同链接点击总数计算得到了,数值是完全一致的。比如《比较测试的设定和分析》这篇文章的链接在《T检验和卡方检验》文章页面会有3个地方出现,包括图中的那两处还有右侧边栏的引导到下一篇的链接,这3处地方显示的点击转化率是这3处发生点击的总和计算得到的,数值是完全一致的。

  GA的这个处理方式给针对某个模块点击效果的评估造成了一定的困难,因为点击次数无法区分是否来源于那个模块,或者是由于其他相同链接的点击带来。当然,解决方案还是有很多,可以为模块的链接加上参数,如“相关文章”模块的链接都带上?from=related-content,也可以使用GA的事件追踪(Event Track)和虚拟页面(Virtual Page)这两种方式,具体参考用户点击与网站目标中的介绍。

  文章的内容虽然一般是在周末整理编辑的,但因为周一大家都比较忙,所以选择在周二或周三发布出来,希望大家有时间可以仔细看下。 ;)

多维交叉分析

cross-analysis  我们在进行数据分析的时候,大部分时间都在使用趋势分析、比较分析、细分分析这三类方法,但其实还有一个方法我们也会经常使用——交叉分析,尤其是在排查数据异常的问题时,交叉分析就能展现其强大的威力。另外要跟大家说声抱歉的是博客的更新频率可能没有那么频繁了,但是尽量每个月至少能发布一篇,希望文章的质量有所保证,还是欢迎大家留言讨论,能够发起一些有趣的话题,一起拓展在网站数据分析方面的思路。

什么是交叉分析? 

  交叉分析是指对数据在不同维度进行交叉展现,进行多角度结合分析的方法,弥补了独立维度进行分析没法发现的一些问题。

  交叉分析以多维模型和数据立方为基础,也可以认为是一种特殊的细分方式,但跟细分的概念有点差异,如果有兴趣可以先阅读下之前的文章——数据立方体与OLAP。细分的方法更多的是基于同一维度的纵深展开,也就是OLAP中的钻取(Drill-down),比如从月汇总的数据细分来看每天的数据,就是在时间维度上的细分,或者从省份的数据细分查看省份中各城市的数据,是基于地域维的下钻。交叉分析不再局限于一个维度,就像数据立方体与OLAP文章中的立方体,是基于不同维度的交叉,时间维、地域维和产品维交叉在一起分析每个小立方的数据表现,可以通过OLAP的切片(Slice)和切块(Dice)操作查看例如上海市在3月份的电子产品的销售情况,这会帮助我们发现很多在单个维度中无法发现的问题。所以,交叉分析是基于不同维度横向地组合交叉,而不是细分在同一维度的纵向展开。

交叉分析的展现形式

  交叉分析涉及多维度的组合,虽然图表和表格都可以进行展现,但因为图表所能表达的数据有限,且比较不容易把多个维度的交叉关系展现出来,在交叉分析中不太常用,通常以表格为主。我们平常在看的表格通常被叫做二维表,一般第一列放置一个维度,如日期,表头罗列各类指标(其实所有指标也可以被认为是一种特殊的维度——指标维),这样行列的两个维就组成了最常见的二维表。二维表可以进行扩展,进而展现更加丰富的维度:

pivot-table-layout

  如上图就是典型的基于表格的多维度交叉分析的布局,在行列中分层次放置多个维度,如果我们只显示一个指标,那么这里的指标维就没有显示的必要了。其实Excel的数据透视表(Pivot Table)就是交叉分析的利器,我在数据的报表和报告这篇文章中提到过数据透视表,这里还是基于那篇文章截图的原始数据,如果我们将各维度按照上面的布局形式进行展现的话,会是怎么样的效果: 

excel-pivot-table

  看起来还不错,显示的信息非常丰富,左边包含了以天为单位时间维和产品维,可以使用展开按钮进行汇总和展开,就像是细分的操作;上面的表头部分分两层罗列了地域维和指标维,Excel的透视表提供了丰富的设置,默认展现基于各个维度的汇总数据,让我们可以从“总-分”的角度观察数据,这对数据分析非常有用。假如我们使用上面的透视表进行交叉分析发现数据是否存在异常?

  使用从总体到细节的分析方法,首先可以从查看每天销售额和转化率的汇总数据开始,折叠产品维之后观察最右侧的指标汇总列就可以看到每日汇总数据;如果某一天的销售额或转化率出现了大幅的下滑,我们就可以结合各种维度寻找问题的原因,就是基于各种维度的细节数据,展开产品维观察当天的哪类产品销售出现了问题,然后结合地域维的交叉数据,可以定位哪类商品在哪个省份的销售出现了问题,这样就有效地将问题定位到了细节的层面,能够更好地发现问题,进而解决问题。所以交叉分析其实正是体现了分析“分而析之”的本意。

  上面的方法一般是比较常用的基于问题的分析方法,但我们很少可以一次就定位到问题,往往我们会根据推测多次查询数据库或查看Dashboard上的各类报表来定位问题。而结合透视表的交叉分析,我们使用一张报表就快速地定位了问题所在,从总体到细节,逻辑非常清晰,问题的定位也非常准确和到位,所以合理地利用交叉分析可以帮助我们更加高效地排查问题。

交叉分析的基础

  这里不得不再说一下交叉分析基于的底层基础数据模型,因为如果没有设计好底层的数据模型,上层的交叉分析是很难实现的,或者多维的交叉受到限制而使分析存在局限性。

  从技术层面来看,交叉分析基于多维模型,数据的维度越丰富,所能实现的交叉也越丰富和灵活,通过各种交叉分析能够更加有效地发现问题;但相应的,如果要尽可能地丰富各维度的交叉分析,对基层模型的要求也就越高。所以如何设计好数据的底层模型非常关键,还是引用数据立方体与OLAP文中的那个数据立方看个简单的例子:

data-cube

  如果一张网站分析的报表只包含以月度为单位的日期维和相应的指标,那么数据的存储就是每个月一条记录,但显然这种高度聚合的数据不利于分析,我们需要构建如上图的数据立方体来获取更加细节的数据。用数据立方来拓展数据细节有两种方向,一类是纵深拓展,也就是基于一个维度的细分,比如将一个月细分到每一天,那么一条记录将会被拓展成30条;还有一种是横向的拓展,就是多个维度的交叉,就像上面立方中添加了产品维和地域维。这样存储的数据就从原本单一的时间维度扩展成了时间、产品和地域三个维度,也就是三维立方体所能展现的形式,当然维度可以继续扩展,四个五个直到N个,理论上都是可行的,这里只要以三个维度进行举例就可以。对于数据存储而言,横向的拓展与纵深拓展的影响是一样的,记录数都是以倍乘的方式增长,假设这里产品维是产品大类,有20个产品大类,再加上32个省份或直辖市,那么经过纵深和横向拓展之后,原先每月的1条记录就变成了:

1 × 30 × 20 × 32  =  19200

  而我们在构建多维模型的时候很多维度中包含的数据量绝对不像上面例举的那么小,想象一下网站的商品或者页面的数量可能是成百上千甚至成千上万的,那么一旦以倍乘的形式扩展之后,数据量就会一下子剧增。虽然丰富的多维立方能够给分析带来便利,但也同时给数据的存储和查询带来的压力。

  所以,更加丰富和灵活的分析需求的实现基于更加复杂的多维模型或者数据立方,同时会带来更大的系统开销。Google Analytics很好地权衡了灵活的数据分析与复杂数据模型之间的关系,这也是Google Analytics强大功能的基本保障,GA的高级细分(Advanced Segments)和自定义Dashboard是其他同类免费网站分析工具所无法比拟的,这也正是为什么我们将GA划分到网站数据分析工具,而其他的大部分只能算作网站数据统计工具的原因。而GA正是基于其构建的强大的底层数据模型和高效的数据计算和响应能力,使很多分析功能可以得到扩展,其中很多就涉及交叉分析,这里截图了其中的两个功能,Secondary DimensionPivot

GA-secondary-dimension

  Google Analytics新版本增加了很多令人心动的功能,Secondary dimension的功能从老版本得到了延续,上图在Content模块的Page报表中选择了流量来源作为第二维度,这样我们就可以查看每个页面的流量是从何而来,每个流量来源在该页面的数据表现,同时可能还可以发现一些有趣的现象,比如某些页面的流量基本都是一个来源带来的,比如我的博客的某些文章基本都是通过搜索引擎进来的,而另外一些文章基本通过直接流量带来。

GA-pivot

  在GA的各类报表中可以在右上角选择展现的形式,最后的一种就是Pivot,Pivot的形式对表格的表头进行了扩展,可以分层次放置另外的维度,如上图还是使用了页面与流量来源的交叉,将Source维度放到了指标的上方。同时GA支持在两个维度的基础上最多选择两个度量Metric,我这里选择了Pageviews和Bounce Rate,来衡量每个页面中各类流量来源所带来的“量”和“质”,同样对于分析非常有价值。

  多维的交叉分析我们在日常中潜移默化地经常会用到,交叉分析对于问题的排查和定位额外有效,所以我们需要想办法用更好的形式去展现数据,以便于更有利于进行交叉分析,其实这里介绍的透视表的方式是最常用的,也是比较好用的,但这类方式太少,不知道大家有没有其他更加有效的交叉分析展现方式。

用户点击与网站目标

——基于Google Analytics的应用

click-and-goal    用户在网站的行为其实无非就是输入和点击,而点击又是最常见的行为,其实用户行为分析一大部分就是在分析用户各种各样的点击行为。我们可以通过各种途径来监控用户点击行为,同时各类网站分析工具都相继提供了丰富的事件监控功能,来满足不断发展变化的网站交互。刚好我的博客需要监控某些用户点击行为,并且要将这些点击行为设置成网站目标,所以这里跟大家分享一下我的实现步骤。

用户点击对你的网站重要吗?

  首先需要明确的是我们是否有必要去监控用户的点击行为,或者说用户点击对网站分析是否有价值?网站中有些按钮完全是交互或者浏览的需要,对于分析并不是那么重要,但显然有些按钮对于网站分析有着至关重要的作用,比如电子商务网站的“放入购物车”、“购买”、“支付”等按钮的点击;微博网站的“关注”、“发布微博”等按钮;视频网站的“播放”、“暂停”等按钮。通过统计和分析这些按钮的点击数据,我们可以对用户的这些对网站产生关键影响的行为了如指掌。

  我们需要去统计这些重要的用户点击,但也不是所有的这些点击都需要进行额外的设置,当点击跳转到一个新的页面时就会有新的Pageview产生,这类点击我们就不需要另外进行监控。但某些点击,比如Ajax架构的点击交互,或者是Flash中的点击按钮,抑或是出站的按钮或链接点击,这类行为不会产生新的页面浏览行为,也就不会有Pageview的记录,那么如果刚好这些点击像上面说的对网站来说是重要的,我们就必须对其进行监控和统计。

  以我的博客为例,对于我的博客而言,通过右方侧边栏最上方的5个按钮可以对博客进行订阅或关注,用户的这些行为对于我而言是十分有价值的,因为至少用户开始对我的博客内容感兴趣了,我需要知道每天有多少用户会尝试去点击这些按钮(无论点击的结果如何,因为最终的结果超出了监控的范围,无法追踪 =_=” ),其实通过Google Analytics就能简单地统计到这些点击数据。

Google Analytics的点击监控统计

  Google Analytics中监控点击一般通过事件追踪(Event Track)虚拟页面(Virtual Page)两种方式。我原先使用的是事件追踪的方法,因为事件追踪是GA专门为这类用户行为量身定制的,可以设置类别(Category)、行为(Action)、标签(Label),甚至可以为每个事件定义它的价值(Value),所以对于各类时间的分类汇总非常方便,比如我在RSS订阅中加入onClick=”_gaq.push(['_trackEvent', 'Feed&Follow', 'Feed', 'RSS']);”类别为Feed&Follow,行为为Feed,标签是RSS,另外设置邮件订阅的标签为为Email,关注的3个按钮的动作为Follow,再根据标签区分类别,这样就可以非常方便的看到汇总和细分的数据了(注意我这里使用的是异步代码,使用前请先看一下自己网站的GA代码类型,具体设置可以参考蓝鲸的文章——Google Analytics功能篇—事件追踪):

Event-Track-Drilldown

  但事件追踪有一个局限性就是无法设置为网站目标,熟悉Google Analytics的朋友都知道GA的目标只能是三种类型:页面浏览(URL Destination)、停留时间(Time on Site)、每次访问页面数(Pages/Visit)。所以如果我要将我的博客的订阅和关注的点击作为网站的目标,在GA中通过事件追踪的方式就没法实现了,就需要通过设置虚拟页面的方式,详细操作也可以参考蓝鲸的Google Analytics功能篇—虚拟页面,这里来说一下我的设置:

点击类型 追踪代码
RSS订阅 onClick=”javascript: _gaq.push(['_trackPageview', '/virtual/feed/rss']);”
Email订阅 onClick=”javascript: _gaq.push(['_trackPageview', '/virtual/feed/email']);”
关注Twitter onClick=”javascript: _gaq.push(['_trackPageview', '/virtual/follow/twitter']);”
关注Buzz onClick=”javascript: _gaq.push(['_trackPageview', '/virtual/follow/buzz']);”
关注新浪微博 onclick=”javascript: _gaq.push(['_trackPageview', '/virtual/follow/sina']);”

  但是设置虚拟页面后会出现另外一个问题,就是导致Pageviews的增加,因为虚拟页面也会被算到页面浏览量中去,所以还需要进行另外一步操作——添加过滤器,下面来看一下过滤器(Filter)的添加,及如何将点击行为设置为网站目标。

将点击设置为网站目标

  首先来看一下通过上面的设置后在Google Analytics的报表上显示的结果:

虚拟页面统计

  虚拟页面在数据展现其实与普通的页面浏览并没有区别,也是在Content模块中,可以在Top Content报表中查看,根据我上面的设置可以直接filter出包含“virtual”的页面统计:

content-virtual

  同时,根据上面虚拟页面的URL结构,也可以使用Content Drilldown中按层次一次向下展开,可以同时查看各类汇总数据和细分数据,详细介绍参考前一篇文章——让URL更适合分析。这样依次展开的顺序为:virtual=>feed=>feed的各子项,virtual=>follow=>follow的各子项,十分清晰。

设置网站目标

  因为虚拟页面已经将点击转变成了页面浏览,因此可以将这些行为设置成网站目标了:

Feed&Follow-Goal

  这里的目标类型(Goal Type)选择URL目标(URL Destination),我在这里使用了正则表达式进行匹配,将所有/virtual/feed或follow/开头的URL设置成目标,同时设置该目标的价值(Value)为10(对于博客而言,这类点击价值较高,同时博客还设置了其他的目标,价值相对低一些),这样按确定就设置完成了,可以在报表上查看每天的目标转化率(Conversion Rate)和价值了。

添加过滤器

  因为使用虚拟页面监控点击行为将点击当做了页面浏览统计,因此会导致网站的Pageviews虚高,我们需要将这些虚拟页面的浏览量从网站的Pageviews统计中过滤掉,所以需要用到Google Analytics的过滤器功能。首先要新建一个配置文件(Profile),这一步是必需的,因为一旦在配置文件中加入过滤器后不符合条件的数据就会直接被剔除,无法找回,所以我们必须保留一个最原始的配置文件以查看未过滤的虚拟页面的统计情况。我这里只要用到预定义过滤器(Predefined filter)中的排除子目录即可,详细的设置参见下图:

virtaul-filter

  只要把所有以/virtual/开头的子目录的流量过滤,然后把新建的配置文件放到下方右侧“已选择的配置文件”的区域即可,非常简单方便,之后你就可以从你新建的配置文件中看到“干净”的网站Pageviews的统计了。不过需要注意的是,因为在这个配置文件中虚拟页面被过滤,所以上面设置的目标只能通过查看原配置文件的报表中才能看到。

  最后总结一下,网站的点击行为统计对于某些网站的分析而言是十分重要的,基于Google Analytics的点击事件追踪可以通过事件追踪和虚拟页面两种方式,如果你单纯为了统计点击事件发生的情况(当然不一定是点击,同样适用于其它事件),那么时间追踪是非常不错的选择,如果你要将点击最为网站目标,那么就需要通过虚拟页面的方式了。我的博客也是刚换过来,大家也可以自己动手试试。

让URL更适合分析

url-optimization   网站的存在离不开URL,URL与网站内容形影不离。URL用于唯一地标识网站的页面、内容或资源的“位置”,所以很多时候它只是被看做一种识别码,就像是商品上的条形码,对于用户来说,这些识别码是没有任何意义的,用户不需要关心它们到底代表着什么。但对于网站分析而言,URL并不只是网站内容的识别码这么简单,其实它可以在分析过程中发挥更大价值。

URL与网站内容

  URL由协议、域名、请求地址三部分组成,完整地URL唯一确定了一个请求的资源,可以是页面、内容模块、文件或多媒体资源等。对于网站而言,URL的用处是对资源的唯一定位,所以方式可以有很多,用资源的唯一描述(资源名称或简称等),资源的唯一识别码(ID、数字标记等),也可以是动态参数,这样就导致了各网站的URL会存在很大的差异。

  比如浏览网易首页=>体育频道=>意甲=>米兰新闻,它们的URL依次为 http://www.163.com/=> http://sports.163.com/=> http://sports.163.com/yj/=> http://sports.163.com/special/00051NSK/moremilan.html,其实对于用户而言对于前三个页面的URL还可以读懂,而最后一个可能就难以理解了;而在去看一下淘宝的URL,在进入首页后点击任一一个商品分类,可能展现出来的URL就已经很难读懂了。

  无论怎么样,这些URL对于网站而言都是有效的,因为它们都能做到唯一地识别网站的内容,既然如此,那么是不是URL就不再需要进行另外的整理设计了呢?还是先看看URL在网站分析中扮演着怎样的角色。

URL在网站分析中的用处

  我们知道,在网站分析中一般都是用页面的URL地址来唯一地标识一个页面(当然现在GA上也有根据页面标题显示的报表,但是网站的页面标题是可以重复的,所以无法“唯一标识”),我们根据URL地址来查看该页面的Pageviews、Unique Pageviews、Exit Rate等。但不知道大家有没有发现Google Analytics的Content模块下还有一张有趣的报表——Content Drilldown(内容下钻,关于下钻的概念可以参考文章——数据立方体与OLAP),这张报表中的Page列就像是一个树形结构可以不断地向下展开直到底层节点,其实在GA的其他报表上也有类似的下钻功能,比如Visitors—Browser Capabilities—Browsers这张报表也支持从浏览器类型到浏览器版本的下钻操作。

  也许你看了页面下钻的报表后,已经有点理解为什么URL的设计会对网站分析产生影响,下面就来看一下我的博客的实例:

  顶部导航中的“文章专题推荐”中分类罗列的一些相应的文章,并且在该页面下还根据文章分类设置了4个子页面:“电子商务分析”、“网站用户分析”、“用户体验分析”、“其他文章推荐”,URL也是按照页面的层次结构进行设计的,如下图:

GA-content-drilldown

  所以Google Analytics页面下钻的实现方式是将页面的URL根据”/”进行切分,从左向右分级存放,同时将下一层的数据向上汇总到上一层,这样报表上既可以查看每个页面的数据,也可以查看根据URL的结构向上逐层汇总的聚合数据。这对网站分析是十分有用的,因为我们同时获得了细分数据和汇总数据,从而可以从不同的数据粒度上进行分析。也许你会说不就是将同一类型的页面的数据加起来吗,在分析的时候自己加一下就行,也许上面例子中的2层并且只有4个子页面是很好处理,但如果网站页面超过3层,每层可能会有上百个子页面,那么如果没有这类下钻功能就会变得难以应付了。

  可能有的朋友会问,那有没有不通过URL来区分个页面类型和层级的?如果你是用第三方工具,就需要进行额外的设置来让网站分析工具可以识别和区分你的网站页面,比如在页面上加入Google Analytics的自定义参数(Custom Variables)区分页面类型,但是如果无法自动添加这类JS代码的话,那么对于一个页面繁多的网站这个工作量就会相当庞大。如果你用自己的分析工具或者基于网站数据仓库,也许你需要维护一张页面的维表,可以包括[页面ID,页面URL,页面描述,上级页面,页面层级]这些属性,从而建立起具有层级关系的页面结构树,当然如果你的网站时常变动,那么要维护这张维表也是一件十分头疼的事情。

  下面就以我的博客作为实例来说明下URL结构设计对于网站分析的影响是如何体现的。

我的博客的URL设计

  得益于Wordpress这个强大的开放内容管理系统,让博客的URL定制变得不再复杂。Wordpress的后台控制界面中提供了“固定链接设置”的功能,用户可以根据自己的需要设计适合自己网站的URL结构,比如我的博客的固定链接是/%category%/%postname%/,也就是/文章分类/文章名/,可以再来看一下我之前一篇文章——优化网站信息架构中的我画的Wordpress的简要信息架构图:

Wordpress-IA

  通过上图结合我的URL结构设置,可以理解为我将信息架构中的一个分支——分类目录——作为URL结构设计的主依据,这样做有什么好处?在GA的页面钻取的分析报告中我既可以查看每篇文章的数据,同时可以查看每个文章分类的汇总数据:

GA-category-drilldown

  图中左侧的数据对应我的博客侧边栏分类目录中每个分类的汇总数据,右侧的数据对应“网站定量分析(web-quantitative-analysis)”分类下面各文章的细分数据。同时,当用户使用博客侧边栏的各索引(根据分类目录、文章标签、日期归档)时,Wordpress也提供了非常友好的URL结构,比如分类目录用了/category/分类名、文章标签用了/tag/标签名、日期归档用了如/2010/09/这类年月的结构来罗列相应的文章列表,这样就可以在GA中同样可以使用跟上面一样的下钻来分析有多少用户试图使用这些功能来索引博客文章,并且查看了哪些分类、标签或者日期归档,有兴趣的朋友可以到自己的Google Analytics上面试试。

  这是我的博客的URL设计,每个网站可以根据自身的特点和需要设计适合自己的URL结构,从而有效地简化和提升网站分析中页面数据的细分和汇总。

总结

  层次清晰、结构规范的URL不但可以为网站分析节省更多的工作量,同时可以提高URL的可读性,有效地提升对搜索引擎的友好度,增加网站SEO的效果。而清晰的URL结构需要基于对网站信息架构的系统有效的梳理,一旦做好了这些,一定会让网站建设的各个方面都受益匪浅。

  需要注意的是,URL的设计和规则需要在网站开发阶段就进行明确定义,写入相关的设计规范和文档中,因为一旦网站上线后要想再对URL的结构进行调整将会是一件极度麻烦并且得不偿失的事情。

  中秋节在江南阴雨绵绵的天气中度过,接下来马上又是7天的长假,提前祝大家度过一个Happy的国庆假期!

优化相关内容推荐

——让用户更容易地找到需要的信息4

  博客之前的一篇文章——优化网站导航设计,介绍了如何评价网站导航功能及基于分析的优化。但后来才发现其中遗漏了Google Analytics上一个很实用的功能——Navigation Summary,字面上翻译是“导航概要”,但似乎用“页面上下游”(百度统计上的称呼,拿过来先借用下)分析更加贴切。它能够很好地分析网站导航的实现度(说得直观点就是导航功能上的有效点击或操作),下面就来介绍下这个功能。

更好地衡量导航实现度

  先看一下我的“文章专题推荐”这个导航索引页面的在GA的Navigation Summary报表(该功能在Content模块的Top Content标签下面):

featured-topics-navigation-summary

  从上图可以看到页面被浏览的次数(图中标注1),有多少的比例的Visits是从站外进入这个页面开始访问网站的(图中标注2),有多少的比例的Visits是从网站内部的页面跳转到这个页面的(图中标注3),有多少的比例的Visits在浏览的该页面后离开了网站(图中标注4),有多少比例的Visits从该页面进入了网站的其他页面(图中标注5,4和5部分现在貌似数据有点问题);同时列出了网站内部前10名的上游页面(浏览该页面之前用户所在的那个页面,图中标注6)和下游页面(浏览该页面后紧接着浏览的下一个页面,图中标注7),及它们各自所占的百分比。这里需要注意的是有时会在上游页面和下游页面出现与选择页面相同的URI地址,比如你选择首页(/)进行分析,上游页面和下游页面也出现了首页地址(/),这个主要是刷新操作引起的,GA会把页面刷新统计到Pageviews里面。

  通过上面这个功能,我们就不再需要通过导航页面的离开率(Exit Rate)来粗略估计有多少的Visits留在了网站并可能点击了导航页面的链接。并且通过Navigation Summary我们不仅可以看到有多少Visits从导航页直接离开了,而且可以通过分析导航页的下游页面更加准确地衡量有效点击率,排除那些刷新、返回或者调到其他非导航列表页的操作,将那些导航页面中的链接的点击率(%Clicks)相加,就是该导航页面的有效点击转化(CTR),也就是该导航功能的实现度指标了。以上表为例,排除返回首页(/)、页面刷新(/featured-topics/)及跳转到非导航页面中的页面(/about/、/site-map/等)这些点击,将剩下的实现了导航功能的有效点击率相加就是该导航功能的实现度,可惜GA上的上下游页面都只能显示前10个。

  上面是对前一篇关于优化导航设计的内容的补充,其实页面的上下游分析是一种很有效的网站分析方法,不仅可以用于分析导航实现度,下面介绍一下它的另外一种应用——相关内容推荐效果分析。

网站的相关内容推荐

related-content  博客之前的一篇文章——优化网站信息架构中介绍了大部分的网站可能都是基于树形结构来进行购建的,但是原始的树形结构本身存在一个问题就是叶子节点(或者说是网站的内容节点)之间没有直接的联系,也就是用户无法从一个底层的内容页直接跳转到另外一个底层内容页,需要返回首页或者中间导航索引页面才能进入其他的内容页面,从那篇文章的树形架构图中也有体现,底层页面之间没有直接相连的线条。所以很多网站都会在内容的结尾或侧边栏提供相关内容的推荐,比如亚马逊、淘宝等电子商务网站产品页面会有同类别、同价位的产品推荐,或者是用户在购买该产品的同时也购买了的产品推荐,豆瓣上的书籍、音乐、电影页面也提供了相关内容的推荐。

  这些功能很多都是基于内容相关度的算法来实现的,之前的文章——向上营销、交叉营销与关联推荐介绍过基于用户行为的关联推荐方法。其实很多博客也有类似的功能,即每个文章结尾的相关文章,下图是我的博客的电子商务网站RFM分析这篇文章的相关文章列表:

rfm-related-posts

  我是用Wordpress的插件——Yet Another Related Posts Plugin来实现这个功能的,按照插件的介绍,它是通过计算文章的标题、正文、标签和分类的相关度选取排名前几的显示到页面上。这个功能很棒,它打通了文章页面之间的通道,也许用户在看完一篇文章之后还想浏览下相关的文章,那么相关内容推荐就提供了很好的途径,用户不需要再回退到内容的检索页面,直接点击就行,帮助用户更加方便、快速地定位到想要寻找的信息上。

相关内容推荐效果分析

  网站中的相关内容推荐功能很多都是借助机器算法来自动生成的,所以从某种层度上来说,算法一定会存在优劣,我们需要通过分析来评估功能的实现效果,从而不断地对算法进行优化。而基于用户浏览行为的分析是评估功能实现效果的最有效的方法,所以网站分析又有了用武之地了,上面介绍的Google Analytics上的Navigation Summary就是非常适合用来分析相关内容推荐效果的工具。这里还是以电子商务网站RFM分析这篇文章的上下游页面分析为例看看我使用的这个插件的效果到底怎样:

rfm-navigation-summary

  从上下游页面的列表中查看那些来源于内容页面和去往其他内容页的比例,其中哪些页面的流入和流出的比例最高,然后再与网站相关内容推荐列表中的排名进行比较,这样就能反应网站功能的相关性与用户眼中的相关性是否一致,从而检验功能的实现效果。

  如果进行算法调整,那么同样可以用该方法检验算法调整前后的上下游页面转化比例,从而衡量在算法调整后相关内容推荐功能是否真正得到了优化。而我们要做的就是通过不断优化相关内容推荐的算法使网站内容的相关度排名与用户对内容的预期相关性尽量达成一致,这样才会使页面上显示的相关内容就是用户想要寻找的内容,从而满足用户的需求。

  这里需要注意几个问题:

  1. 也许一个内容页面里面会有不止一处的相关推荐模块,或者会有多处出现其他内容页的链接,在GA的报表上提供的是所有流入流出的总和,所以如果只是评测某一推荐模块的效果,需要区分该模块中的链接,也许加URL参数会是一个解决方案。
  2. 注意数据的时间区间与网站内容的变化带来的相关内容推荐的变化。Google Analytics上默认的时间区间是前一个月,你可以选择合适的区间来进行分析和比较,注意网站内容的更新对相关内容推荐带来的影响。
  3. 有些相关内容间的推荐并不是双向的,比如在购买MP3的页面推荐耳塞,而在购买耳塞的页面可能并不会去推荐MP3,所以有时有必要对上游页面和下游页面分开分析,注意转化的方向性。

  上面就是我想到的Google Analytics的Navigation Summary功能的两个应用实例,你是不是还想到了更多的应用,欢迎分享你的观点。

优化网站内部搜索

——让用户更容易地找到需要的信息2

optimize-site-search  关于如何让用户更容易地找到需要的信息,上一篇文章中介绍了使用优化网站信息架构的方式,这篇文章主要介绍的是通过优化站内搜索的方式来帮助用户找到需要的信息。

  站内搜索已经成为目前几乎所有网站必不可少的一块功能,尤其在内容丰富的网站中,当用户有目的地寻找目标内容但又无法直接从首页或导航页中直接找到时,这时用户就会求助于站内搜索。

分析站内搜索的意义

  分析站内搜索最常见的就是分析用户的搜索短语或者关键词,通过关键词了解用户的需求,但是某些基于搜索后的用户操作和行为分析分析往往更有价值;站内搜索的意义主要包括以下几点:

细化用户需求

  用户在站内搜索的关键词往往与站外搜索有较大区别,比如用户可能会通过Google搜索“ThinkPad笔记本”,但当用户进入某个销售笔记本电脑的电子商务网站时,他们通过站内搜索的往往就是诸如“ThinkPad X200”,所以从站内搜索分析得到的关键词往往更能体现用户更细节层面的需求。

发现用户最关注的内容

  这是一种最直观的分析结果意义的体现,即通过查看站内搜索关键词的排名或者热门程度来了解用户在你的网站上最关注于哪些信息,往往这些排名靠前的关键词所涉及的内容就是网站的核心价值,因为用户期望看到更多的关于这些方面的内容。

寻找用户的潜在需求

  很明显,站内搜索并非每次都会有结果,用户的需求是多样的,而网站的内容是有限的。如果用户通过站内搜索未找到结果或者没有后续操作,或者一直翻页直到离开,那么就说明用户没有找到他们需要的信息。而这些没有结果或没有操作的关键词就变成了用户可能的潜在需求,也许你该考虑下是不是该提供一些相关的内容来充实你的网站。

站内搜索的分析度量

  那么为了体现以上的几个意义,应该如何分析站内搜索?也许站内搜索不仅是搜索短语或者关键词的排名,我们应该同时关注用户搜索行为的后续操作,也就是用户是不是真正通过站内搜索找到了他们需要的信息,所以在分析站内搜索的时候我们需要关注一些相关的度量。先看看Google Analytics上站内搜索的分析度量:

GA-Site-Search-Metrics

搜索访问次数(Visits with Search)

  这个很好理解,就是使用了站内搜索的访问数(Visits)。

唯一搜索总次数(Total Unique Searches)

  这个应该理解为每个Session搜索唯一关键词的总次数之和,同一个session中多次搜索同一个搜索关键词只会被记为一次,可以被用于根据搜索短语的细分度量。

结果页面浏览数/搜索次数(Results Pageviews/Search)

  也就是平均每次搜索后浏览搜索结果列表页面数。

搜索退出率(Search Exits)

  搜索退出,即搜索后立即退出了网站,搜索操作是用户该次浏览的最后一个操作;那么搜索退出率就是搜索退出访问数/总搜索访问数。

搜索改进率(Search Refinements)

  当用户完成一次搜索后又进行了另一次的搜索,我们就可以定义后一步搜索是改进搜索;那么搜索改进率就是改进搜索的次数/总的搜索次数。

搜索后平均停留时间(Time after Search)

  每次搜索后用户在网站的停留时间(如果一个访问有多次搜索,则前几次搜索都是每相邻两次搜索的间隔时间,最后一次搜索是从搜索到用户离开网站的时间)的总和/搜索访问数。

搜索后平均浏览页面数(Search Depth)

  每次搜索后用户浏览的页面数(如果一个访问有多次搜索,则前几次搜索都是每相邻两次搜索间浏览的页面数,最后一次搜索是从搜索到用户离开网站前浏览的页面数)的总和/搜索访问数。

  站内搜索的分析度量可能还有很多,还需要关注搜索关键短语的排名情况(Top Key Phrases),或者搜索结果列表的页面覆盖图(search results page overlay),这个可以更好地帮你了解搜索关键词在结果页面的曝光和点击情况。

评估站内搜索的效率

  有了上述的度量,我们就可以分析和评价站内搜索的效率。

站内搜索利用率

  这个比较容易评价,只要将用到搜索的访问数/网站的总访问数,就是站内搜索的利用率。

站内搜索的有效性

  这是对站内搜索来说比较重要的一个分析,即站内搜索到底有没有很好地实现它的功能。主要通过搜索退出率、搜索改进率和平均浏览搜索结果页面数这3个度量来评价,退出率和改进率越低,同时平均浏览搜索结果页面数越少,那么说明站内搜索越有效,效率越高。

站内搜索的效果

  主要通过搜索后平均停留时间和平均浏览页面数来评价站内搜索的效果,但这些因素往往不是站内搜索功能呢个本身所能控制的,站内搜索只是帮助用户更好地匹配搜索关键词跟网站内容的关系,帮助用户找到相关的内容,至于之后用户对内容的兴趣如何还得看网站本身的内容质量。

站内搜索的价值

  当评估价值时,不得不提到的几个网站分析度量:转化率(Conversion Rate), 任务完成度(Task Completion), 目标达到率(Reach Object)。

  对于电子商务网站而言,这个评价较为简单,因为电子商务网站的目标比较单一——利润,所以只要分析用户每次搜索的订单转化率、交易完成率,及每次搜索所能获取的收益等就可以用于评估内部搜索对于网站的价值,当然你还能根据搜索的关键词进行细分,看看哪些关键词为你带来的最大的收益。

  如果网站没有明确而单一的目标,那么评价内部搜索的价值就会有些困难,但是如果你在Google Analytics上设置的网站目标,那么问题就会简单得多,Google Analytics会根据你设置的目标帮你计算出每次搜索到达目标的次数,目标的转化率及平均每次搜索的目标价值(如果你为每个目标设置了价值指数的话)。

GA-Site-Search-Goal

优化站内搜索

  通过分析站内搜索,我们可以根据以上各度量的结果对网站的搜索功能进行针对性的优化。

优化结果排序

  当网站的平均浏览搜索结果页面数偏高时,我们需要关注下是不是站内搜索的结果排序存在问题。我们可以看到很多网站的搜索结果提供了排序选择功能,这里看一下Wordpress网站的插件搜索页面:

Wordpress-plugins-search

  这里提供了5中搜索结果排序方式可供选择:相关性、最高评分、最新发布、最近更新和最热门插件,但发现即使提供了这么多种排序方式,我有时还是搜索不到自己想要的插件,也许我会想要对结果进行相关性和最高评分的组合排序。

  但优化结果排序最关键的还是对默认排序的优化,用户在点击搜索按钮之后都会愿意看到结果列表中显示的是最符合搜索预期的内容,也就是他最感兴趣的内容,那么对于他找到自己想要的信息当然是最有力的。所以,尽量减少用户的多余操作(自己选择合适的排序方式),一开始就帮用户做到最好。

优化信息设计

  信息设计是指对信息的分类、整理和罗列的过程,对于一个内容丰富、分类繁多的网站而言,提供系统清晰的信息设计,可以让信息的检索事半功倍。

  我们分析搜索改进度量的时候,如果发现用户的搜索改进一般都是在区分信息的分类或者改进关键词的细节表述,那么这时候可以考虑为用户提供搜索结果筛选的功能,如太平洋上面提供了极为丰富的信息筛选功能:

pconline-search

同义词与结果推荐

  用户在输入搜索关键词的时候有时会拼写错误,或者用户可能输入的是模糊定义的短语,这些可以直接分析站内搜索关键词搜索改进等来确认你的网站用户是不是普遍存在这类行为,所以我们需要为用户提供一些关键词的改进建议及结果的推荐,下面是我在淘宝中输入“诺记亚”进行搜索时它为我提供的搜索建议:

taobao-nokia-search

  所以,站内搜索可以说是一个比较复杂的功能,尤其是想把它优化的更好的时候,所以很多大的公司有专门的团队来研究和改进站内搜索功能。建议在优化站内搜索的时候考虑使用网站分析的方法让优化的工作具有更加明确的目标和方面,同时通过比较优化前后网站分析中相应的度量,可以为优化的效果提供有力的量化参考指标。

NoJS的网站数据统计

No JavaScript  目前主流的网站分析工具都是通过JavaScript来实现数据的获取的,如Google Analytics就是通过在网页中嵌入一段JS代码,当该网页被浏览时,JS代码被加载,就会向Google Analytics的数据收集服务器发送用户浏览该网页的相应数据,包括时间、IP、页面URL、Session、Cookie等信息,Google Analytics后台通过处理和计算这些收集到的数据,将每天的网站统计结果展示在WEB报表上。

  但是不是所有的页面都支持JS的,让我开始关注到这个问题的原因就是博客的Feed页面。我发现我的博客在AWstats上统计到的数据显示我的Feed页面是我的博客中PV最高的页面,如下图:

AWStats-Feed

  但是在Google Analytics的Content统计中却找不到Feed页面的任何数据,当然AWStats是通过网站日志实现统计的,包括搜索引擎爬虫和RSS订阅器的抓取记录,PV偏高也可以理解;但除了搜索引擎爬虫和RSS订阅器外,用户也会浏览Feed页面,GA即使无法统计到网络爬虫,但没有Feed页面的任何统计数据也是不正常的,最后终于找到了问题所在,也许大家都已经想到了,Feed页面其实是以XML的形式存在的,其中无法嵌入JS代码,于是GA上无法统计到相关的数据。也许我们在其他地方也会遇到此类无法加载JS代码的统计情况,于是我开始寻找不使用JavaScript实现使用Google Analytics实现统计的方法……

  Google Analytics without Javascript(简称 NoJSStats)是一款使用 Google Analytics 的第三方统计工具,部署在Google App Engine上授权免费使用,通过在页面嵌入一个1像素的图片来统计页面流量,主要用于在不支持 Javascript 的环境下使用 Google Analytics 统计服务。

NoJSStats的用途

  • 统计不支持JS的手机浏览器的访问;
  • 统计“禁用JS”功能的浏览器的访问;
  • 统计第三方平台上的访问流量,如非独立博客、淘宝店铺、论坛等;
  • 统计博客的 Feed 访问;
  • 统计 Email 的打开和浏览情况(这个对掌握直邮营销的效果很有用)。

NoJSStats的使用

  如果你喜欢翻墙,可以直接参考上面的NoJSStats页面链接。NoJSStats的使用十分简单,就是在你想要统计的页面或者模块中嵌入一个1像素的透明图片即可,不会影响正常的页面展现和浏览。图片的URL链接地址是:

http://nojsstats.appspot.com/你的GoogleAnalytics账号/网站主页URL

  比如我的博客的图片获取链接是:

http://nojsstats.appspot.com/UA-13232982-1/webdataanalysis.net

  你可以在想要获得统计数据的地方嵌入该图片,如:

网页HTML:<img src=”http://nojsstats.appspot.com/UA-123456/mywebsite.com” />

论坛:[img]http://nojsstats.appspot.com/UA-123456/mywebsite.com[/img]

CSS:body{ background: url(“http://nojsstats.appspot.com/UA-123456/mywebsite.com”); }

  如果你的网站使用SSL加密,那么请使用以下的图片链接:

httpS://nojsstats.appspot.com/UA-123456/yourwebsite.com

  使用NoJSStats可以统计博客Feed的文章被浏览的情况,只要修改Wordpress的主题目录下的functions.php的文件,加入如下代码:

<?php
add_filter('the_content', 'google_analytics_for_feed',99);
function google_analytics_for_feed($content){
    if (is_feed()) {   //只在feed输出中嵌入图片
        $content.= '<img src="http://nojsstats.appspot.com/UA-13232982-1/webdataanalysis.net" alt="" />';
    }
    return $content;
}
?>

  我们可以在Google Analytics的报表上面看到Feed页面的相关统计数据了:

NoJS-GA-FeedStat

  这里需要注意的是上面这段代码实现了在Feed中的每篇文章内容的最后添加了透明图片,所以当任何一篇文章被展示时,Google Analytics上面就会增加一个Pageview,所以这里的Pageview不能认为是页面被浏览次数,而是浏览的文章总数。当一个页面或某个RSS阅读器中显示5篇Feed模板上的文章时,那么该页面被浏览一次其实Pageviews就会加5。同时网络爬虫和RSS的抓取不会发送图片请求,所以不会被统计在内,所以通过NoJSStats统计得到的数据基本可以认为是用户的浏览行为,并且包括用户从RSS阅读器阅读文章或其他网站从Feed上转载文章的浏览情况,这些数据对于博客而言都是十分具有参考价值的。

NoJSStats的实现机制

  通过上面的介绍和使用,也许大家已经意识到了NoJSStats的实现机制就是网站分析中点击流数据获取的方式之一——Web Beacons,即在页面中嵌入一个1像素的透明图片,当该页面被浏览时,图片就会被请求加载,于是在后端的服务器日志中就会记录该图片的请求日志,如打开我的博客首页,右上角的Logo图片就会被请求,这样就可以获得如下的日志记录:

60.216.235.23 – - [09/May/2010:15:09:12 +0800] “GET /wp-content/themes/cordobo-green-park-2/img/logo.png HTTP/1.1″ 200 35715 “http://webdataanalysis.net/” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)”

  请求类型是GET,请求的资源就是该图片的URI,而后面的referrer中记录了我的博客的首页URL,即用户浏览的页面(关于网站日志格式的相关资料可以参考我之前的一篇文章——WEB日志格式),所以只要统计出现这类图片请求的日志记录就能获得嵌入图片的各页面被浏览的情况,Web Beacons就是通过这种方式来获取用户的浏览数据的。需要注意的是,Web Beacons方式是无法获取浏览的来源页面信息的,除非在图片的URI请求中带上referrer的参数,类似.gif?ref=www.google.com。

  而NoJSStats还有一点让我比较迷惑的就是既然没有JS的支持,同时referrer字段又被浏览的当前页面占据,那么就无法区分用户浏览的session,也就是无法实现Visits的统计,但直接打开http://nojsstats.appspot.com/UA-13232982-1/webdataanalysis.net这个链接(很奇怪,这个没有被屏蔽),发现Google使用了URL重写,实际的请求地址是:

src=http://www.google-analytics.com/__utm.gif?utmwv=1&amp;utmn=80790672&amp;utmsr=-&amp;utmsc=-&amp;utmul=-&amp;utmje=0&amp;utmfl=-&amp;utmdt=-&amp;utmhn=webdataanalysis.net&amp;utmr=&amp;utmp=&amp;utmac=UA-13232982-1&amp;utmcc=__utma%3D82610576.209757388.1273508397.1273508397.1273586810.2%3B%2B__utmb%3D82610576%3B%2B__utmc%3D82610576%3B%2B__utmz%3D82610576.1273586810.2.2.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B__utmv%3D82610576.122.234.62.66%3B

  后面带了一大堆的参数,不知道这里面有没有将session和Cookie的信息写进去,希望对这方面有所研究的朋友能够解答我的疑问。