GA: Custom Variableを使う(応用編)
実施例 December 8th, 20092010/01/24 追記
この記事の方法は、レポートでも上手く活用できてません。
また、nameとvalueに値を積んでいくのは、keyとvalueで、64byteまでという制限にも引っかかり易いので、よくない方法だと分かりました。
そういう事を了承して、以下を読んで下さい。
タイトルに応用編が付くのは、getXKeyなど、内部的なapi?を使ってるからです。ある日、突然動かなくなる可能性もあるので、毎日checkが必要です。
さて、先週末までにCustom Variableが全てのGoogle Analytcsユーザに導入されたようです。
Custom Variableを使えば、アクセス解析運用の柔軟性が増します。
と言うことで、試してみました。
CustomVariableでの値の設定の仕方は?
pageTracker._setCustomVar(slot, key, value, scope)という形です。
slotは、1-5までの数字を割り当てます。(レポート側で、この番号がアドバンスセグメントの項目に出てきます。)
key, valueは、好きな文字列を。(keyは、nameという名称の時もあります。同じです)
scopeは、設定した値がどれだけ生き延びるかです(デフォルト設定は3のpage-level)
- 1だと、user-levelで、cookieに値が書き込まれ、ユーザー単位で管理が可能です。
- 2だと、session-levelで、そのセッションをラベル付けします。(セッション内で、複数回、値を設定していくと、上書きされます)
- 3だと、page-levelです。ページ単位でラベル付け。使いどころ?Googleのお話では、特定条件でページをカテゴライズすると。
繰り返しますが、slotは5つまで使えます。(上書きはできます)
今回は、ユーザレベルに的を絞ります。
ここでは、トラフィックについての値を割り当ててみます。
- トラフィックでの分類をしながら
- keyに流入元を、valueに日付をいれます。
具体的には、
keyには、drssrs…という感じで、d:direct, r:referrer, s:検索エンジンと場合分けして、文字列を足します(セッション開始時に)。
valueには、-20091001-20091102-20091127という感じで日付を足していきます。
そして、単純にsetCustomVarだと、値が毎回上書きされてしまうので、追記する形をとります。(応用編にした理由です)
公式APIと言っていいのか不明なメソッドですが、以下のようメソッドを追加してやって、
pageTracker._mySetOrPushCv = function(slot, key, value, scope){
this._initData();
var strName = this._getXKey("8", slot) || "";
var strValue = this._getXKey("9", slot) || "";
this._setCustomVar(slot, strName+"-"+key, strValue+"-"+value, scope);
};
pageTracker._mySetOrPushCV(2, source, “20091207″, 1)
pageTracker._trackPageview();
とします。
トラフィックの場合分けですが、ga.jsの内部の判定を利用できればいいのですが、難しそうなので、手元で簡易に判定します。
c = document.cookie;
if(!(/_utmb/).test(c) || !(/_utmc/).test(c)){
var trfc = !document.referrer ? "d" :
(/https?:\/\/.*\.(google|yahoo)\.(com|co\.jp)/).test(document.referrer) ? "s" : "r";
pageTracker._mySetOrPushCv(2, trfc, d, 1);
}
utmcとutmbで新規セッションの判別をして、document.referrerで、直接、リンク、検索エンジンに場合分けします。
最後にまとめて、コードを載せます。
これで、コード側の設定を終わりです。レポート側の話に移ります。
回数でセグメント
アドバンスセグメントで、
変な値(%…)が入ってますが、昔の失敗した値です。無視して下さい(消すコードは下の全コードに入れます。)。
また、Keyの値を見せるために完全一致にしてますが、正規表現で{-.}{3,}という感じで3回以上の訪問などと設定します。
リピータは、来訪3回以上もあるので、だぶりになるのに注意。後、api側の設定の不備の可能性もあるので、鵜呑みにはできないです。
日付でセグメント
ここまでは、回数でみたわけですが、customVariableのvalueの方での設定には日付をいれたので、
例えば、-2009120[1-3]などで正規表現で引っ張れば、
12月1ー3日に訪問したユーザのセッションが見られる。4日移行はセッションが一回しかないですが、このサイトへの継続的な訪問者がいないという事ですね。
ここまでで、訪問回数と訪問日でセグメントしたのですが、一応、流入別にkeyの値を入れて、日付をいれているので、流入元+日付でのセグメントも可能なはずです。データが貯まれば、してみたいです。
まとめ
customVariableを使って流入元を追記しました。それをレポート側のアドバンスセグメントで振り分けの設定をして、レポートをみました。keyに流入元、値には日付をいれました。これで、日付を元にしたセグメントが可能になりました。また、今回は流入元だけにしましたが、goalなどを設定して、conversionした場合にkeyをゴール名などで設定して、値を日付にしてもいいと思います。
以下、設定のコピペです。(property-idは変えてます)
var GA_me = function(){
var pageTracker = _gat._getTracker("UA-XXXXXX-xx");
//if(/a/[-1]=='a')console.log(pageTracker);
var c = document.cookie;
var d = (function(){
var date = new Date();
var y = date.getFullYear().toString();
var m = (1+date.getMonth());
m = m < 10 ? "0"+m.toString() : m.toString();
var day = date.getDate();
day = day < 10 ? "0"+day.toString() : day.toString();
return y + m + day;
})();
pageTracker._mySetOrPushCv = function(slot, key, value, scope){
this._initData();
var strName = this._getXKey("8", slot) || "";
var strValue = this._getXKey("9", slot) || "";
strName.replace(/\%2\d*B/, "-");
strValue.replace(/\%2\d*B/, "-");
this._setCustomVar(slot, strName+"-"+key, strValue+"-"+value, scope);
};
if(!(/_utmb/).test(c) || !(/_utmc/).test(c)){
var trfc = !document.referrer ? "d" :
(/https?:\/\/.*\.(google|yahoo)\.(com|co\.jp)/).test(document.referrer) ? "s" : "r";
pageTracker._mySetOrPushCv(2, trfc, d, 1);
}
//the page pathname of the goal you set
if((/^\/profile$/).test(document.location.pathname)){
pageTracker._mySetOrPushCv(1, "g_"+"profile", d, 1);
}
pageTracker._trackPageview();
}
var _gaq = _gaq || [];
_gaq.push(GA_me);
(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);
})();
Google Analytics アクセス解析
March 10th, 2010 at 9:45 pm
かなり参考になります!すごいですね。
1点教えて欲しいです。
getXKeyの「”8″slot “9″slot」っていうところの仕様がよく分からず。
具体的には、___utmaの2つ目のをJSからアクセスしたいのですが、どうやって引っ張り出せるものやら。
現状、cookieから取って来ているのですが、初回のアクセス時や複数ドメイン時にあまりエレガントなソースにならず。。
っていうか、やりたいことは、utmvにそのままを叩き込みたいと思っているだけなのですが。
それで、複数アクセスだろうが、複数ドメインだろうが、どういう分析もできるようになるかなと思っていて。
よろしくお願いします!
March 10th, 2010 at 10:47 pm
Yujiさん、こんにちは。
utmaの二番目は、訪問者IDそのものですよね。
http://wiki.abc-analytics.com/cookie/utma
サイトのポリシーとも絡みますが、apiには当然ないので、javascriptそのもので引っ張るしかないです。
getXkeyは、utmvのname部分を取得するものですが、この記事のあと、上手く動かなくなりました。
* _setCustomVar(index, name, value, scope)とする。
api側でも、用意されているのは、valueを取得するものだけです
utmvにそのまま叩き込む場合は、setCustomVarでいいと思います。初回訪問時には、cookieのutmaの値が作られてから、セットするのがいいと思うので、pageTracker._initData();としてから、操作すればいいと思います。試してないですが、、
March 11th, 2010 at 10:31 am
そうです。訪問者のIDです。
initdataでクッキーに登録されるのですね。助かりました。initdataした後に、クッキーを見てutmaの2番目を抽出およびsetCustomVarをしたところ、無事、期待通りの動きをしてくれました。
March 11th, 2010 at 1:48 pm
質問してくれると、いろいろと考えるきっかけになるので、今後も気軽に質問して下さい。
僕の理解は、半知半解かもしれませんが、これはblogなので、質問がきっかけで、僕の理解が進めばもうけものです。