如何获取clientId并存入自定义维度,这个问题之前困扰了我很久,主要看了这几个地方:1、2、3,都未能成功。以下这种方法通过配合事件跟踪成功过,如我的这个淘宝关键词排名查询网站中运用的就是这个方法(直接使用貌似不凑效):
function(){
var client = ga.getAll()[0].get('clientId');
return client;
}
今天刚好有空再研究了下Google Tag Manager,看到宏已经支持了第一方cookie,这下简单很多了。因为客户ID是存储在名为_ga的第一方cookie中的,形如:_ga=GA1.2.1232495606.1396280517(你可以在console中输入:document.cookie查看),其中GA1应该是Universal Analytics的版本号,而2则是域名的层级,比如二级子域名的话则为3,1232495606.1396280517这个一般统称为clientId,也即上面方法的出来的client。不过,再行拆分的话,其中1232495606这个是唯一身份标识,而1396280517这个则是首次访问的时间戳。(详细介绍)
了解了这个cookie的意思之后,我们便可以对这个数据进行拆分和存储了。我们存储这个信息的主要作用在于唯一身份识别与辨识,同时配合首次访问时间我们可以了解访客的忠诚度和推广效果。不过,由于UA存储的cookie值十分有限,只有上面说到的2个,不像ga.js那样,存储了3个时间戳、访问次数、来源媒介广告系列等信息。我们暂且就先用这2个好了,大多数情况下也够用了,至于其他的维度,我们可以也通过其他的方法来实现。
如果你懂英文、理解能力不错并且对GTM非常熟悉的话,直接看这个gist文件就好了:ua clientid tracking。
下面通俗地解释下这几个步骤:
代码一:
function() {
try {
return .split(".")[2];
} catch(e) {
console.log("No Universal Analytics cookie found");
return "n/a";
}
}
代码二:
function() {
try {
var init_time = new Date(.split(".")[3] * 1000)
var init_time = init_time.getFullYear()+"-"+(init_time.getMonth()+1)+"-"+init_time.getDate()+" "+init_time.getHours()+":"+init_time.getMinutes()+":"+init_time.getSeconds();
return init_time;
} catch(e) {
console.log("No init_timestamp cookie found");
return "n/a";
}
}
另外,需要注意的是:如果用户只访问过一次网站并且本次为你设置代码后的第一次,那么将在自定义维度的对应字段中显示为n/a,你可以根据情况设置为会话级别或者访客级别的自定义维度。最终我们可以生成类似如下的报告: