来自quora的一个问题:雇用一个数据分析专家的价值在哪里,能否通过自己学习来掌握?

原文链接在这儿:What-is-the-value-of-hiring-a-certified-web-analyst-What-can-they-do-that-I-cant-in-Google-analytics-with-a-tutorial

有一个答案我很喜欢:

It’s easy to hire someone who’s experienced.

It’s not easy to learn a new thing from scratch – it takes a lot of time. It takes practice. It takes patience. There’s a learning curve.

You can teach yourself to do anything. Whether you have the time to do it or not is something you need to think about.

Someone who’s certified in Analytics ideally knows everything about the product. They received a certification because they spent time understanding it at it’s core. It takes a long, long time to do this.

If you have the time to study Analytics, then you probably don’t need to hire anyone.

我尝试翻译了下:

我们很容易雇到有经验的人。

但从头学习新知识却不容易,这需要大量的时间,大量的练习,以及耐心,在这其中有学习曲线的问题。

你可以自学任何事情,但你得想清楚是否有时间来自学。

那些精通数据分析的人知道产品的方方面面,他们成为专家是因为他们花费了时间去学习理解其中的原理,这需要大量的时间。

如果你有充分的时间去学习数据分析,那么或许你不需要雇用任何人了。

我的理解是这样的:

术业有专攻,真正学习掌握一件事,既需要时间也需要兴趣和坚持。专家的价值在于理解原理和提供快捷的解决方案。即使没有充足的预算雇用专家来帮你做事,能和他们做一下深入的交流也是很难得的,提出你的问题,他们告诉你注意点和方向,这样可以避免走弯路。

在网站分析工具这块,就是尽量多接触商业或有特色的产品,学习其解决问题的思路和设计。

网站快速登录功能与分析思路

简介

用户在未登录状态下,执行登录才能做的操作时,通过弹出框的方式提示登录,完成登录后,回到当前页面,完成之前的操作。

这样相比直接转到或弹出登录页面的好处是,不会丢失当前操作的焦点,并且可以在弹出框里放一些引导用户注册的文字宣传。

像豆瓣,如果是搜索引擎用户,在打开小组文章时,会自动弹出,提示引导,所以我们可以把快速登录看着是:登录与引导注册的入口。

用户主要的操作路径

  • 新用户:放弃
  • 新用户:点击注册 -> 完成注册
  • 新用户:点击注册 -> 放弃
  • 老用户:放弃
  • 老用户:完成登录

做为老用户,在需要做:收藏,回复这样的操作,碰到这样的提示框,一般都会登录的。

做为新用户,尝试去注册,并且注册成功的比例则会比较低。尤其是只是浏览内容,并不特别需要参与的新用户。

主要的转化指标

新用户注册转化率 = 注册人数 / 看到登录提示的新用户人数

主要用来比较:各个子站点,不同栏目,不同功能操作,对新用户的吸引程度。也可以通过ab测试来找出最佳的提示文字。

注册流程完成率 = 注册人数 / 点击了:我要注册 的用户人数

方便分析注册流程是否友好,因为新用户已经点:我要注册了,本身是有注册的意向的,这儿的调整会影响整体的注册量。

快速登录功能上线前后的比较

  1. 选择一个子站点,观察在流量稳定的情况下,每日新用户注册量的变化情况。
  2. 观察用户平均页面访问深度,访问停留时间是否有提升。

参数与配置

如何判断新用户其实是有些注意点的,因为弹出快速登录窗口时,用户有可能是老用户,最简单的判断方式是:当前浏览器第一次访问本站点,这个可以读取ga的cookie来判断。

如果要细一些,则再排除掉:弹出登录窗口后,直接完成登录的用户即可。

参数传递:

  • 传递当前站点的:新老用户标记。
  • 传递当前站点的:注册source,方便业务后台统计每日的注册量。

总结

如果网站做的好或不可替代,不管登录提示是:弹出还是转到新页面,用户都会来注册的。

普通的社交型,内容型站点,主要还是希望从优化用户体验,方便用户登录注册的角度来提供这样的功能,以提高整体的注册转化率。

网站转化跟踪基础与思路

任何站点都会有自己的转化目标,如:希望用户访问更多的文章,点击广告,注册,购买下单等。

为了更好的跟踪和度量这些转化,我们需要了解主要的流量类型,转化跟踪方式,以及学会找出最佳的流量来源和不断优化。

流量类型

  • 搜索
  • 引荐
  • 直接
  • 付费

搜索引擎流量

用户在搜索引擎搜索关键字,来到我们的网站。

看主要的搜索引擎和关键字。

引荐流量

用户从其他网站的链接来到我们的网站。

主要的方式:

  1. 交换链接
  2. 推荐引用(网站本身 或 网站的用户,如:新浪新闻,豆瓣)

对于引荐流量,需要看引荐页面,方便分析哪个页面带来的流量和质量最好。

如果子站点多,还可以区分内部引荐站点和外部引荐站点。

也可以把引荐流量中:豆瓣,微博,QQ空间等站点归于社交网络流量,方便分析社交网络对于购买转化的贡献。

直接流量

用户直接输入我们网站的地址,或从移动应用中,打开我们的网站页面。
即跟踪不到来源的流量,都会归于直接流量。

付费流量

一般有2种展现形式:

  1. 搜索引擎付费关键字广告
  2. 展示广告

收费方式有:

  1. 按展示位置和时间收费 cpm
  2. 按点击收费 cpc
  3. 按转化收费 cps

付费广告的跟踪形式:

  1. 简单跟踪方式,在着陆页加:?source=abc 参数
  2. 完整跟踪方式,标记:
    • 广告来源 (如:360,mail)
    • 广告媒介 (如:cpc,edm)
    • 广告系列 (如:夏季新品促销)
    • 广告组 (如:男装,女装)
    • 广告 (如:男装衬衫,女装潮流,女装新品)
    • 关键字 (适用于搜索引擎付费广告,投放的具体关键字,如:连衣裙)

完整标注的好处:

  1. 这部分流量和产生的转化会归于付费渠道,方便算:流量和转化,如:不同流量类型的订单量,客单价。
  2. 方便找出最好的广告形式和最佳的投放位置,关键字等。

付费关键字有多种匹配类型:

  1. 精确
  2. 词组
  3. 广泛

如果是后2种,需要记录:触发的关键字和用户实际搜索的关键字。

转化跟踪

什么是转化?

用户做了某件对我们有价值的事情,如:

  1. 关注了我们的微博
  2. 订阅了邮件
  3. 注册

以及最重要的:订单购买。

对于订单购买的转化,可以有2种方式:

  1. 简单标记转化的次数和转化的价值
  2. 完整记录订单的详细信息,包括:订单的编号,商品分类,商品数量价格,总订单收入,运费等信息,这在GA里,属于电子商务转化

转化率 = 转化次数 / 总访问次数

普通转化:

我们会查看比较不同来源的:注册转化率,订单转化率。
如果一个渠道的转化率远低于全站的平均转化率,则证明这个渠道的价值不高。

转化可以看转化漏斗,如:

  • 注册流程,填表单,关注感兴趣的领域,完成注册。
  • 下单流程:放入购物车,填写收货地址,确认支付。

找出用户在哪一步流失,方便优化对应的步骤。

电子商务转化:

查看比较订单转化率,购买最多的商品类别和明细,比较各个来源的客单价。
有可能某个来源带来的订单量小,但客单价高,这也是有价值的来源。

对于转化,还可以看:

  1. 转化周期
  2. 回访次数
  3. 多渠道路径 (用户的首次,中间,以及最后一次购买转化的来源)

分析思路

用户的转化漏斗

  1. 着陆
  2. 跳出,非跳出
  3. 购买下单
  4. 付费成功

基础流量指标

  1. 访问次数
  2. 跳出率
  3. 每次访问的浏览数
  4. 平均访问持续时间

看流量的数量和质量。

同时还可以看:用户最关注的内容,访问路径。

转化率分析

  1. 看某个来源的总转化率
  2. 看某个来源明细的转化率,如:哪个关键字的转化率高,哪个具体来源页面的转化率高
  3. 看转化率的变化情况,周末的转化率是否比平时高,调整了商品展示或文案后,转化率是否有提高

还可以通过ab测试,找出最优的着陆页设计。

统计代码的变量声明与读取

统计代码会部署在网站的全局页脚,无法保证所有页面都提供了相关的变量和参数,所以统计代码的健壮性非常重要,读取前要检查,必要时指定默认值。

全局变量声明:

var _gaq = _gaq || [];

函数内,全局变量声明:

function foo() {
    window._gaq = window._gaq || [];
}

函数内,读取全局的变量值:

// 如果全局变量没有声明,函数内的局部变量会赋一个默认值,且不会影响全局变量:
function foo() {
    var page_type = window.page_type || "(empty)";
}

检查变量是否已声明:

if (window.page_type == undefined) {

}

if (window["page_type"] == undefined) {

}

if (typeof(page_type) != "undefined") {

}

检查函数是否已声明:

// 考虑到统计代码一般会部署在独立的js文件里
// 所以页面里,调用统计代码里声明的函数,也应该用类似的方式调用
if (typeof(on_reg_succ) == "function") {
    on_reg_succ();
}

网站页面标题的优化

页面标题会体现在:

  1. 搜索引擎的搜索结果上
  2. 用户浏览时的tab页名称
  3. 添加到收藏夹后的收藏名称

不同页面的标题应有差别, 公共部分需要注意,如:

首页为:

纪杨的网站分析笔记

分类页:

站点地图 - 纪杨的网站分析笔记
按年月查看 - 纪杨的网站分析笔记

文章页:

Google Analytics中站内搜索的优化 - 纪杨的网站分析笔记

注意,栏目文章名在前,避免出现:

纪杨的网站分析笔记 - 站点地图

这样的情况,原因是:在chrome这样的浏览器里,页面标题会被截断,如果打开了多篇文章,会无法区分打开的多个tab页面。

如何排查:

  1. 手工排查
  2. Google的站长工具,会告诉你有重复标题的页面地址
  3. 在Google Analytics中,看页面标题列表,点击标题链接,找出用同一标题的不同页面,以及(not set),没有指定标题的情况。

在Track代码中指定页面标题

参见我的这篇文章:_TrackPageview时指定页面标题

如何替换公共的标题文字

例如在我的博客中,页面标题会有公共的文字部分:

“纪杨的网站分析笔记”

添加一个过滤器,按标题,替换公共的标题文字。

filter_replace_title

这样的好处是,可以按清楚的,按标题查看:访问最多的文章,或栏目。

参考:

Google Universal Analytics中跨设备跟踪思路与实现

通用分析衡量协议介绍

基于衡量协议跨多种设备和平台整合数据,利用通用分析中的衡量协议,您可以从任意设备收集数据并将传入的数据发送到您的 Analytics(分析)帐户,这样,您不仅可以跟踪网站中的互动情况,还可以跟踪网站之外的互动情况。另外,利用新版 analytics.js 代码和衡量协议中全新的开发者参考库,您可以了解用户与所有设备(包括智能手机、平板电脑、游戏机甚至数字设备)互动的方式。

跨设备跟踪

背景

用户会在多台电脑和移动设备上访问我们的站点,完成购买转化。 一个常见的场景,用户白天在公司电脑搜索:流量的秘密,来到亚马逊图书介绍页。晚上在家里电脑搜索:亚马逊,然后做了站内搜索,完成购买。 这时如果是基于默认的浏览器Cookie,我们会认为今天有2个访客,其中完成购买转化的访客来源是:搜索引擎,关键字是品牌关键字:亚马逊,购买前的访问次数是:0次,即做为新访客,直接下单购买。 这对于网站流量分析,转化分析,甚至广告投放等,都会造成误导,因为GA中提供的多渠道分析的:转化路径,转化前访问次数,天数等,都是依赖浏览器的唯一访客ID的。

跟踪思路

首先,如果用户没有登录的话,我们是无法完成跨设备跟踪的,假设是登录的情况,我们看一下在UA中的跟踪实现。

在UA跟踪中,只保留最基本的唯一访客ID Cookie,不再依赖客户端Cookie记录:首次访问时间,来源,自定义变量等信息,相关的计算放在了服务器端去做,这就给:跨设备跟踪,跨域跟踪提供了便利,只要能传递:访客ID到多台设备即可。

代码实现

UA的跟踪代码定制是支持指定唯一访客ID的。

相关说明:https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference

ga('create', 'UA-XXXX-Y', {
  'clientId': '35009a79-1a05-49d7-b876-2b884d0f825b'
});

这样的话,最简单的方式是,如果登录用户,就指定唯一访客ID为:用户登录名,或业务系统的用户数字标识,或为了保密,取登录名哈希。

通过这样的方式,记录和跟踪所有登录用户的跨设备访问。

完善与补充

通过指定登录名做为:唯一访客ID,虽然解决了登录用户的跨设备跟踪,但我们在同一个网站域下,还是需要跟踪匿名用户的行为,或匿名用户先访问首页,然后登录,再购买的情况,最简单的方式,我们需要收集2套用户访问数据:全部用户的,登录用户的。

代码实现

在UA中,默认的cookie名是:_ga,但支持指定新的cookie名,即:多个cookie名,多个Tracker。

相关说明:https://developers.google.com/analytics/devguides/collection/analyticsjs/domains

ga('create', 'UA-XXXX-Y', {
  'cookieName': 'new_cookie_name',
  'cookieDomain': 'mynew.domain.com',
  'cookieExpires': 60 * 60 * 24 * 28  // Time in seconds.
});

对于我们的需求,只要这样做即可:

// 加载analytics.js代码
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

// 默认的全站跟踪
ga('create', 'UA-1111-1');
ga('send', 'pageview');

// 判断是否登录,这儿的user_login_name变量值,由网站开发人员负责提供   
if (user_login_name != '') {
    // clientID 指定用户名或用户名数字哈希
    ga('create', 'UA-1111-2', {
      'name': 'login_user',
      'clientId': user_login_name,
      'cookieName': '_ga_login_user'
    });

    ga('login_user.send', 'pageview');
}

这样就互不干扰了。

别的思路与实现:

  1. 只要用户在一台机器上,做了登录操作,就用:登录用户标识 替换唯一访客ID。
  2. 自己记录:登录用户标识与首次访问时的匿名ID的关联,用户在其他设备登录时,就用记录的匿名ID覆盖,这是基于这样的考虑,用户第一次来到网站总是匿名情况,然后完成注册,登录,然后在多台设备登录访问,因为UA并没有默认的后台或API支持,所以实现起来会复杂。

匿名访客ID传递: A:匿名 -> 登录 -> 记录访客与guestID_001 B:匿名 -> 登录 -> 使用:guestID_001 覆盖,以后一直保持,退出登录也保持,直到用别的用户名登录

优点:以后:A,B 两台机器的访问都会关联起来。 缺点:丢掉在B机器,第一次登录前的:来源与页面访问,会计算为:1个匿名的访客,和1个登录的访客的。

总结

新版UA的设计和实现更为灵活,对跨设备访问提供了更好的支持,把数据提交部分的协议也标准化,方便大家的定制和移动App,服务器端数据提交,另外,自定义维度与指标,在业务跟踪与分析时,也更为方便。

Google Universal Analytics中异步跟踪代码实现

新版UA在管理后台提供的跟踪代码是同步的,即需要先加载:analytics.js,再做数据提交。这样会有一些问题,即影响前端性能,也可能导致出错,如按钮事件触发时,analytics.js还没有加载。

// 默认的UA代码
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-xxxx-x', 'jiyang.me');
ga('send', 'pageview');

老板本GA是没有问题的,通过先创建_gaq的全局变量,来支持异步加载:

// 老版GA代码
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-xxxx-x']);
_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);
})();

其实UA是支持异步的,只要稍做调整即可:

// 调整优化后的UA代码

// 创建全局 ga 函数,类似于:var _gaq = _gaq || [];
var ga = ga || function() {(ga.q = ga.q || []).push(arguments)};

// 指定账号,Cookie域名
ga('create', 'UA-xxxx-x', 'jiyang.me');

// 页面浏览数据提交
ga('send', 'pageview');

// 或事件跟踪
ga('send', 'event', 'button', 'click');

// analytics.js 脚本加载放页脚即可
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

总体来讲,UA在代码的定制性,灵活性都要有改善,大家可以先从统计代码的优化开始,逐步把UA用起来。

在Google Analytics中跟踪url hash参数信息

hash 参数提交

网站中的url地址除了主机名,页面,查询参数外,还会有hash锚参数:

http://jiyang.me/search.htm?k=wa#hot=true

  • 主机名(hostname):jiyang.me
  • 页面(pathname):/search.htm
  • 查询参数(search):?k=waconfig
  • 锚(hash):#hot=true

这儿的hash,一般用于页面内的导航跳转,如:打开文章时,跳到参考信息部分。

在Ajax为主的网站中,这儿的hash还可以用于特定的动作,如:商品收藏。

http://jiyang.me/product.htm?id=123#fav

ga在提交页面地址时,默认是不包括hash信息的,这时在GA后台会看到这样的页面列表:

/product.htm?id=123

而不知道有多少商品被收藏。

处理办法是有的,在提交页面地址时,通过虚拟页面的方式附加上hash参数即可。

var full_url = location.pathname + location.search + location.hash; 
_gaq.push(['_trackPageview', full_url]); 

代码中的:location.hash 用来读取hash参数。 参考:

通过hash参数标注广告渠道

在投放广告时,我们会通过utm_source这样的查询参数来标注广告渠道,例如:

http://jiyang.me/about.htm?utm_campaign=blog&utm_medium=ppc&utm_source=google

但有时候,因为服务器端限制或url重写的原因,直接传递这样的查询参数,会导致页面出错,这时可以通过hash的方式传递参数(因为hash参数是浏览器前端处理的,不会提交到后端程序):

http://jiyang.me/about.htm#utm_campaign=blog&utm_medium=ppc&utm_source=google

如果这样做,记得要:

_gaq.push(['_setAllowAnchor', true]);  

即告诉GA,读取hash做为url查询参数。注意这么做时,提交的页面地址仍然不包括hash信息,如果要包含hash参数,还是得用上面虚拟页面的方式来处理。

参考: