本当の参照元を取得する方法(その二)トラッキングコードをカスタマイズする

レポートのカスタマイズ

投稿日:2014/6/2 作成者:衣袋 宏美

本当の参照元を取得する方法(その一)「コンバージョン経路」レポートを使う」に続き、本稿では実際のリファラー情報を活用できるためにトラッキングコードの修正を行った事例を紹介します。

前回は実際のリファラー情報をレポート画面で確認できる方法をご紹介した訳ですが、実際のリファラー情報でセグメントしたユーザー行動や成果がどうだったのかが分からなければ、データを有効に活用することはできません。

そこで本稿では、ユニバーサル アナリティクスのカスタムディメンションに実際のリファラー情報を格納することで、実際のリファラーを分析軸(ディメンション)にしてデータを見ることを可能にした例を紹介します。

標準のアナリティクス(非同期ga.js)ではカスタム変数を利用し、ユニバーサル アナリティクス(analytics.js)ではカスタム ディメンションを利用すればよいのですが、本稿ではユニバーサル アナリティクスを中心に紹介します。

 

1.トラッキングコードのカスタマイズ

カスタマイズしたトラッキングコードに関しては、双方のバージョン(非同期ga.jsとanalytics.js)を紹介しますが、実際動作確認したのはユニバーサル アナリティクス版だけなのでご注意ください。当然自己責任でご利用下さい。実際の開発はアナライズネットの村上さんにお願いしましたが、文責は筆者です。

仕様は基本的には下記の通りです(厳密ではありません)。
<非同期ga.js対応版>
・セッション開始時のdocument.referrer情報を取得
・セッション判定はcookieの_utmbによって判定する
・カスタム変数の第1スロットにドメイン部分を値として入力する
・カスタム変数の第2スロットにパスとファイル名部分を値として入力する
・document.referrer情報が無い場合は、どちらの値も「no_ref」とする

<analytics.js対応版>
・セッション開始時のdocument.referrer情報を取得
・セッション判定は自前に作成したcookieによって判定する
・カスタムディメンションの第1スロットにドメイン部分を値として入力する
・カスタムディメンションの第2スロットにパスとファイル名部分を値として入力する
・document.referrer情報が無い場合は、どちらの値も「no_ref」とする

トラッキングコードは最後に記載したので、ご関心があればそちらを見て下さい。自動タグ設定をしたAdWordsと連携している場合や、カスタム キャンペーンのパラメータを使用している場合などについては考慮していません。

 

2.カスタム レポートの作成

標準のアナリティクスを利用している場合は、「ユーザー > カスタム > カスタム変数」レポートがそのまま分析軸として使えるので、セカンダリ ディメンションでカスタム変数(値01)などを指定(図1赤枠部分)してレポート(図1)を見て下さい。

 

図1:「ユーザー > カスタム > カスタム変数」レポート図1:「ユーザー > カスタム > カスタム変数」レポート

 

ユニバーサル アナリティクスの場合、カスタム ディメンションを使ったレポートは標準にはどこにも出てきません。セカンダリ ディメンションでは指定できますが、カスタム レポートを独自に作成するのがよいでしょう。

図2のようにプライマリ ディメンション「ref_domain」(これが実際のリファラー情報のドメイン部分です)を分析軸にしたレポートなどを作成します。「ref_domain」の値(図2赤枠部分)をクリックすると、そのドメイン配下のページ別のレポートにドリルダウンできるものを作成してみました。なお「no_ref」はノーリファラーだった場合の表記です。

 

図2:作成したカスタムレポートの例1図2:作成したカスタムレポートの例1

 

参照元ドメインとページを組み合わせて見るレポートは図3です。カスタム レポートは自由に見たい指標をピックアップできるので、自分の問題意識に応じて作成して下さい。

 

図3:作成したカスタムレポートの例2図3:作成したカスタムレポートの例2

 

重要なことは、このカスタム レポートをすべてが目標達成された「ビュー」に対して作成しても意味がありません。何故ならコンバージョン率100%ですから、その成果指標と組み合わせても意味がありません。このカスタム レポートを通常の目標設定をした「ビュー」に対して作成してデータを見て下さい。図2と図3はそのようにしてあります。

 

3.データの検証

本当の参照元を取得する方法(その一)「コンバージョン経路」レポートを使う」でも取り上げた「コンバージョン > マルチ チャネル > コンバージョン経路」レポートの数値と今回のカスタマイズでレポートした数値を比較してみます。

厳密にはGoogle アナリティクスの集客系レポートの「参照元」の定義と100%一致させていない(自動タグ設定をしたAdWordsと連携している場合や、カスタム キャンペーンのパラメータを使用している場合などについては考慮していませんし)ので、若干の違いがでてくるのは想定されましたが、表1がその結果をまとめたものです。前回の記事でお見せした表に1列加わっただけです。2列目の「カスタムレポートから」という部分がそれです。

今回のカスタマイズの正確性を比較すべき部分は、表1赤枠部分になります。集客系レポートの数値(右端の列「トラフィックレポートから」)より遥かに実際のリファラーに近いデータになっていることが確認できました。

 

表1:実際のリファラーとカスタムレポートの値を比較表1:実際のリファラーとカスタムレポートの値を比較

 

4.カスタマイズしたトラッキングコード

<非同期ga.js対応版>

<script>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-********-*']);
_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);
})();

(function(){

var cookies = getCookies();
var session = cookies['__utmb'];	// 非同期GAのセッションcookie 有効期限30分

if(session) {	// セッション中
	// 何もしない
} else {		// 新規セッション
	var ref = document.referrer;	// リファラ

	if(ref) {								// リファラあり
		//var refs = ref.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/);	// リファラを分解
		var refs = ref.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?(.*)/);	// リファラを分解
		if(document.domain == refs[4]) {	// 同じドメイン
			var ref_domain = 'no_ref';
			var ref_path = 'no_ref';
		} else {							// 異なるドメイン
			var ref_domain = refs[4];
			//var ref_path = refs[5]+refs[6]+refs[8];
			var ref_path = refs[5];
		}
	} else {								// リファラなし
		var ref_domain = 'no_ref';
		var ref_path = 'no_ref';
	}

	_gaq.push(['_setCustomVar', 1, 'ref', ref_domain, 2]);
	_gaq.push(['_setCustomVar', 2, 'ref', ref_path, 2]);
	_gaq.push(['_trackEvent', 'session', 'ref']);
}

function getCookies()
{
	var result = new Array();
	if(document.cookie) {
		var cookies = document.cookie.split('; ');
		for(var i = 0; i < cookies.length; i++) {
			var cookie = cookies[i].split('=');
			result[cookie[0]] = unescape(cookie[1]);
		}
	}
	return result;
}

})();
</script>

<analytics.js対応版>

<script>
  (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-*********-*', 'auto');

(function(){

// UA pageview オプション
var ua_pageview_options = {};

var session_cookie_key = 'uaref_session';	// 自前のセッションcookie名
var session_period = 30;					// セッション有効期限(分)
var session_cookie_val = 'uaref';			// cookieの値

// セッションcookieを取得
var cookies = getCookies();
var session = cookies[session_cookie_key];
setCookies(session_cookie_key, session_cookie_val, session_period);	// セッションcookieを更新

if(session) {	// セッション中
	// 何もしない
	//console.log('in session.');
} else {		// 新規セッション
	//console.log('new session!');

	var ref = document.referrer;	// リファラ

	if(ref) {								// リファラあり
		//var refs = ref.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/);	// リファラを分解
		var refs = ref.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?(.*)/);	// リファラを分解
		if(document.domain == refs[4]) {	// 同じドメイン
			var ref_domain = 'no_ref';
			var ref_path = 'no_ref';
		} else {							// 異なるドメイン
			var ref_domain = refs[4];
			//var ref_path = refs[5]+refs[6]+refs[8];
			var ref_path = refs[5];
		}
	} else {								// リファラなし
		var ref_domain = 'no_ref';
		var ref_path = 'no_ref';
	}

	// リファラのドメインをカスタムディメンションに保存
	ga('set', 'dimension1', ref_domain);

	// リファラのパスをカスタムディメンションに保存
	ga('set', 'dimension2', ref_path);

	// 新規セッション強制スタート
	ua_pageview_options['sessionControl'] = 'start';
}

// UA トラッキングコード
ga('send', 'pageview', ua_pageview_options);

// Cookieを取得
function getCookies()
{
	var result = new Array();
	if(document.cookie) {
		var cookies = document.cookie.split('; ');
		for(var i = 0; i < cookies.length; i++) {
			var cookie = cookies[i].split('=');
			result[cookie[0]] = unescape(cookie[1]);
		}
	}
	return result;
}

// Cookieに保存
/*
key		:名前
val		:値
period	:有効期間(分)
*/
function setCookies(key, val, period)
{
		// クッキー有効期限
		var period_ms = period * 1000 * 60;	// 有効期間msec
		var nowtime = new Date().getTime();
		var clear_time = new Date(nowtime + period_ms);
		var expires = clear_time.toGMTString();

		// クッキーに保存
		document.cookie = key + '=' + escape(val) + "; expires=" + expires;
}

})();
</script>

 

お知らせ