utmvの使いどころ

Google Analticsのお勧め機能として、アドバンスドセグメントがある。計測されたセッションをいろんな属性の持つデータ(数字なら以上や以下、文字列なら正規表現まで)で分類して、レポートに反映させられる。解説本とかだと、この説明が中心だったりもする。

ただ、その属性はGoogleが予め用意したものである(Eg: 新規セッション、訪問回数、検索キーワードとか、ディメンジョンやメトリクスにあるもの)。その中で一つ、APIで自分の手で属性の値を設定できるものがある。それが、ユーザ定義、utmvの値。

これは、javascript で、pageTracker._setVar(“hogehoge”); と代入することで、__utmvクッキーの値をsetするもの。

これで、レポート側では、その値が反映される。

image

その後、アドバンスドセグメントに追加すれば、

image

ユーザ属性を対比して、actionable な解析ができるかもしれない。

前置きが長くなったけど、

ユーザ定義にはどのような値をセットしていけばいいのだろう?

1. 他のサイトの様子を見る。

自分のブラウザのcookieの__utmvを見てみると、login, logout,member,guest, experiments, ホスト名(referrer?), 使用言語、これらの組み合わせ、などなど、、など。

会員制のサイトなどでは、loginしてるかどうかをみてるようだ。(loginしてしまえば、あとは別の解析ツールの出番なのかもしれない)。ホスト名(referrer?)を記録しているところは、campaignの最初の値をsetしているのかもしれない。utmzで記録するcampainでは、直前の流入元しか原則的に記録しないので、その対策かもしれない。

2009/11/23 utmzの話でした。混同して書いてしまいました。ごめんなさい。
* nooverride=1を付けて流入した場合は、utmvのsourceは更新されない。(しかし、他人のリンクURLを変更などできない。自分の管理するものにしか適用できない)

2. 一つの方法として、ユーザ定義を外部流入計測に利用する

上で書いたように、Google Analytisでの campaignのcreditは直前の流入元に与えられ、それまでの値は消去される。(utmzの話)

だが、サイトの目標として設定するコンバージョンの多くは、複数回の訪問で起こる事が多く、複数の流入元を経由する可能性がある。google analyticsの仕様では計測できない。

で、google analyticsの良い記事が載っているサイトで Stuff More Than One Value into GA’s User Defined Segmentという記事を見た。(下のコードでは、ここのコードもそのままコピペしてる)

ここでは、utmvの値を積み上げる方式を提案してる(古い記事(2008/04)なので、今は違う方式があるのかもしれないが、、、)

とりあえず、これをまねした簡単な例として、referrerを積み上げる方式をやってみる。上記の記事のコメントのやりとりの中ででているもの

  1. utmvがundefinedなら、referrerをいれる。
  2. utmvの値にreferrerが含まれてなければ、referrerを加える。
  3. utmvの値にreferrerがあれば、そのまま。

これを発展させていくと、utmzの処理と似たものになっていく(当たり前か、、campaignの処理をしてるのだから)

なので、utmzの値(campaignの訪問回数)もいれると、より良いデータになるけど、余裕のある時にやることにする。

以前のgoogle analytics 外部へのリンクを計測する | Google,アクセス解析のコードと合わせて、コードを下に書く。ユーザ定義のデータは汚くなるし、ブラウザ上のレポートでは、固まった情報として見られないかもしれないけど、apiなりexcelへのコピペで見ることはできるようになると思う。

元のコードから、dummyで trackerを作る部分ののぞいた。superSetVarTracker = _gat._getTracker(“UA-1-1″)の部分が元のコードにはある。あとコード貼り付け時に、execをEXECCと書き直した。(ここのレンタルサーバの制限による)

timerID = setInterval(function(){
if(document && jQuery && _gat){
//                        console.log("start");
get_outbouund_link();
init_ga();
clearInterval(timerID);
timerID = null;
}
},500);

//referrerや、profileページを見た場合には、superSetVarする。それ以外は通常の_trackPageview
function init_ga(){
window.pageTracker = _gat._getTracker("UA-188512-12");
if(!!document.referrer && !document.referrer.match(/^https?:\/\/wp\.slash\-reader\.com/)){
superSetVar(document.referrer);
}else if(document.location.pathname == "/profile"){
superSetVar("seen_profile");
}else{
pageTracker._trackPageview();
}
}

//外部リンクへのイベントに、trackPageviewイベントをhookする
function get_outbouund_link(){
try{
as = jQuery("div.entry-content a");
var ret = [];
for(var i=0,L=as.length;i
if(!as[i].href.match(document.location.host)){
ret.push(as[i]);
}
}
for(var i=0,L=ret.length;i
jQuery(ret[i]).bind("click",
function(){
pageTracker._trackPageview("/virtual/" + this.href);
pageTracker._trackEvent("eternal_link", "getout", this.href, 2);
}
);
}
return true;
}catch(err){
//console.log(err);
return false;
}
}

// I(abc-analytics.com) copied the code below from http://www.lunametrics.com/blog/2008/04/17/stuff-more-than-one-value-in-gas-user-defined-segment/
// "standard" read cookie function  (copied from Prusak's gwo_write.js)
function read_cookie(cookie_name) {
var my_cookie=""+document.cookie;
var ind=my_cookie.indexOf(cookie_name);
if (ind==-1 || cookie_name=="") return "";
var ind1=my_cookie.indexOf(';',ind);
if (ind1==-1) ind1=my_cookie.length;
return unescape(my_cookie.substring(ind+cookie_name.length+1,ind1));
}

function superSetVar(appendValue) {
var getVar = read_cookie('__utmv');       // read the __utmv cookie
hasValue = getVar.indexOf(appendValue);   // does the cookie already have the value we want to append?
if ( hasValue == -1 ) {                   // if the new value is not already in the cookie
removePrefix = /^.*\.(.*)/.EXECC(getVar);  //  __utmv cookie has the format 12345678.cookieValue - remove the ## prefix
if (removePrefix && removePrefix[1]) {
newVar = removePrefix[1] + appendValue; // append the value
}else{
newVar = appendValue;                 // this will execute if the cookie was not already set.
}
pageTracker._setVar(newVar);                   // call _setVar with the new value
}else{
pageTracker._trackPageview();
}
}

function unSetVar(removeValue){
var getVar = read_cookie('__utmv');         // read the __utmv cookie
hasValue = getVar.indexOf(removeValue);     // does the cookie have the value we want to remove?
if ( hasValue != -1 ) {                     // if the value is in the cookie then . . .  otherwise, there is nothing further to do.
removePrefix = /^.*\.(.*)/.EXECC(getVar);  // __utmv cookie has the format 12345678.cookieValue - remove the ## prefix
if (removePrefix && removePrefix[1]) {    // if we remove the prefix then. . .
//
var re = removeValue + '[^/]*';
re = new RegExp(re,'g');
newVar = removePrefix[1].replace(re,""); // newVar = removePrefix[1] MINUS removeValue
superSetVarTracker._setVar(newVar);                   // call _setVar with the new value
}

}
}
This entry was posted in ANALYTICS and tagged . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">