初回訪問ユーザーへ「参照元/メディア」と「初回訪問の年月日」をカスタム変数にセットする方法
2013年06月21日
ライター:畑岡 大作

ユーザーがサイトへ初めて訪問した時に、そのユーザーへカスタム変数として「参照元/メディア」と「初回訪問の年月日」をセットするJavaScriptを用意してみました。
これを利用すると初回訪問時の流入要因別にその後の行動をセグメントしたり、またカスタム変数なので他のセグメントと掛け合わせることもできます。

10/3追記:Web担当者Forumにて、活用事例を記事にしていただきました。こちらもご参考ください。
「初回訪問日」と「参照元」をGAのカスタム変数にセットしてコーホート分析をするには?(第71回)

  1. どういうJavaScriptなの?
  2. JavaScriptのコード

どういうJavaScriptなの?

今回ご紹介するのは、ユーザーの初回訪問時に、そのユーザーへ対して、流入元や年月日の情報をカスタム変数としてセットするJavaScriptです。
流入元などの情報についてはGoogleアナリティクスのレポートでも普通に見ることができますが、カスタム変数としてセットしますのでセグメントとして利用しやすく、またカスタムセグメントなどでの利用が容易になり、値として初回訪問の年月日も持ちますので、その情報も活用することができるようになります。

参照元/メディアがセットされたカスタム変数の画面 こういう感じに表示されます。

具体的なロジックとしては、Googleアナリティクスのcookieがないユーザーを初回訪問と見なして、Googleアナリティクスがcookieを生成し終わったタイミングで、そのcookieに入っている情報を基にカスタム変数としてセットさせます。

ですので、実際にカスタム変数へセットするデータは、Googleアナリティクスがユーザーのcookieに保存した参照元とメディアの情報になります。
そのため、正確にはGoogleアナリティクスで計測・表示されるデータとは異なる場合がありますので、目安としてご利用ください。

JavaScriptのコード

以下が、初回訪問ユーザーへカスタム変数として参照元/メディアなどをセットするJavaScriptになります。
なお、今回は5番のカスタム変数としてセットしていますが、必要に応じて何番にセットするかは変更してご利用ください。

<script type="text/javascript">
if(document.cookie.indexOf('__utma') < 0){
//初回訪問のページロード時はGAのcookieがないので、GAタグが実行されcookieが生成されるまで若干ウェイト
window.setTimeout("setReffererCustomVar()", "1500")
}

function setReffererCustomVar() {
if(document.cookie.indexOf('__utma') >= 0){
//---- 初期化
var sendValue;
var sendDate = new Date();

//---- cookieの取得
if (document.cookie) {
var cookies = document.cookie.split("; ");
for (var i = 0; i < cookies.length; i++) {
var str = cookies[i].split("=");
var utmgclidFlag = false;
if (str[0] == '__utmz') {
for (var l = 1; l < str.length; l++) {
if(str[l].indexOf('utmcsr') >= 0){
var utmcsr_value = unescape(str[l+1]).split('|');
}
if(str[l].indexOf('utmgclid') >= 0){ //アドワーズ自動連携
var utmcsr_value = unescape(str[l+1]).split('|');
utmgclidFlag = true;
utmcsr_value[0] = 'google';
}

if(str[l].indexOf('utmcmd') >= 0){
var utmcmd_value = unescape(str[l+1]).split('|');
if(utmgclidFlag){
utmcmd_value[0] = 'cpc';
}

}
}
break;
}
}
}

//---- 送信データの取得
//日付(現在年月日)
yy = sendDate.getYear();
mm = sendDate.getMonth() + 1;
dd = sendDate.getDate();
if (yy < 2000) { yy += 1900; }
if (mm < 10) { mm = "0" + mm; }
if (dd < 10) { dd = "0" + dd; }
sendDate = yy + '/' + mm + '/' + dd;

//参照元(utmcsr)
sendValue = utmcsr_value[0];

//メディア(utmcmd)
sendValue += ' / ' + utmcmd_value[0];

//文字数削減
sendValue = sendValue.substr(0, 100);

//---- データ送信
_gaq.push(['_setCustomVar', 5, sendValue, sendDate, 1]);
_gaq.push(['_trackEvent', 'setCustomVar5', '初回訪問時の参照元取得', '', 0, true]);
}
}
</script>

大きな注意点としては、カスタム変数をセット(_setCustomVar)しても、その後に_track~~を実行しない限りデータが送信されないため、上記のコードでは最後に_trackEventを発行する形にしています。
ここは_trackPageviewなどに変えても問題ありませんので、_trackEventと_trackPageviewで都合のよい方をご利用ください。

9/25追記:「アドワーズ自動連携時に非対応である」また「非インタラクションを有効にしないと離脱率の計算がおかしくなる」というご指摘をいただき、上記コードを対応版に修正しました。変更箇所は上記コード内の赤字箇所となります。
前者のご指摘についてはロジック的にはutmgclidというcookieがある場合にアドワーズ自動連携と見なし、自動的にgoogle / cpcとなるように調整しています。また、後者のご指摘については_trackEventで設定する値を変更しました。