今度こそ、Google AnalyticsからGoogleMobile-botを除外する

 前回前々回と、「携帯からのアクセスもどれくらいあるのか」知りたいと、Google Analyticsを使える様に設定していた。モバイルクローラまで、解析結果に出てしまうので、改めて調べ直して、対応させた。

最初に調べておくもんだよ…写真:FreeDigitalPhotos.net

最初に調べておくもんだよ…

 携帯のアクセス解析を細かくやりたければ、うごくひと等の携帯電話専用のサービスを使えばいいと思う。今回は、細かな分析よりもサイト全体のアクセスを見たいので、別のサービスを使わずにGoogleにまとめておこうと考えて、試行錯誤していた次第。

以前から、どうして?と思っていた点

 携帯電話のアクセス解析に限った話ではないが、Googleのアクセス解析には、モニタの解像度や色数まで出てくる。httpのアクセスログは、そんな情報を送っていないので、JavaScriptで取っているのだろうとは思っていたけど、何となく、どうやっているのだろうと思っていた。

 urchinTracker()で何をやっているかは、携帯版Google Analyticsで滞在時間とか検索ワードとか – Archivaで、分かり易く解説されているので、詳しくはそちらを見てもらうとして、要は、JavaScriptを使って得られた情報をパラメータとしてくっ付けて「http://www.google-analytics.com/__utm.gif」を呼び出している。そうすると、リクエストを受け取ったサーバで、パラメータを保存して、解析できるという仕組みになっている。これがAnalyticsの実体。

 つまりは、Javascriptを使わなくても、__utm.gifを要求する時にパラメータを直接渡してやれば、解析結果に反映されるという仕組み。なので、ここで紹介するようなPHPに限らず、Perlなどの言語でも同じ事ができる。

パラメータについてはGoogleの説明がTroubleshooting the Tracking Code – Google Analytics – Google Codeで読めるから、特に秘密情報という訳でもない。

じゃあ、どうするの?と考えた点

 前回までは、PCのクローラはGoogle側で解析時に除外しているはずと思うので、IPアドレスで設定して除外してしまえると考えていて、できなかった。原因は、ブログ側でPHPからリクエストすると、元のクローラのアドレスではなく、ブログサーバからのアクセスになってしまうからだろうと思う。

 そうすると、今度は単純に、こちらで用意するPHP側で、クローラか否かを判定して、クローラの場合は、__utm.gifを呼び出さない様にする事にした。そこで、PHPでモバイル向けクローラを判定する関数(ke-tai.org)の方法を基に、判定部分を追加した。

 変更したのは、Baiduのモバイルクローラ、BaiduMobaiderを追加した点と、判定部分にfor文が入っているので、クローラを頻度の高そうな順に並び替えた。BaiduMobaiderは、Googleの次に多いので配列の2番目に配置した、後は頻度が高そうな順に適当に並べた(当サイトの場合)。

ちょっと、機能を追加した?点

 もう一つ、改良したのは、記事タイトルの追加。元のPHPコードでは、Google Analyticsに残る記事タイトルが全て「-」になっているので、この部分をWordPressのプラグイン ktai styleの関数 ks_title()を呼び出して、エンコードしたものを渡す様にした。

変更部分は、変数に $var_title = urlencode(ks_title()); を追加して、
$urchinUrl = urchinUrl = ‘http://www.google-analytics.com/__utm.gif?utmwv=1&…(以下略)の引数で該当する箇所、&utmdt=- を &utmdt=’.$var_title.’ として、引き渡す部分。

コード全体はこんな感じ。

<?php
/* google analytics for mobile */
//*** クローラ判定
function isCrawler()
{
    $crawler_arr = array(
        'Googlebot-Mobile',
        'BaiduMobaider',
        'Y!J-SRD',
        'Y!J-MRD',
        'moba-crawler',
        'mobile goo',
        'LD_mobile_bot',
        'froute.jp'
    );

    foreach ($crawler_arr as $val) {
        if (false !== strpos($_SERVER['HTTP_USER_AGENT'], $val)) {
            return true;
        }
    }

    return false;
}

if( !isCrawler() ){
	//Start
	$var_utmac = 'UA-00000000-0';			//Google AnalyticsのID
	$var_utmhn = 'example.com';			//解析するサイトのドメイン
	$var_utmn = rand(1000000000,9999999999);	//random request number
	$var_cookie = $session; 			//cookie number
	$var_random = rand(1000000000,2147483647);	//number under 2147483647
	$var_today = time(); 				//today
	$var_referer = $_SERVER['HTTP_REFERER']; 	//referer url
	$var_uservar = $storeinfo['storeid']; 		//user defined variable
	$var_utmp = $_SERVER['REQUEST_URI']; 		//request uri
	$var_title = urlencode( ks_title() );		//page title 

	$urchinUrl = 'http://www.google-analytics.com/__utm.gif?utmwv=1&utmn='.$var_utmn.'&utmsr=-&utmsc=-&utmul=-&utmje=0&utmfl=-&utmdt='.$var_title.'&utmhn='.$var_utmhn.'&utmr='.$var_referer.'&utmp='.$var_utmp.'&utmac='.$var_utmac.'&utmcc=__utma%3D'.$var_cookie.'.'.$var_random.'.'.$var_today.'.'.$var_today.'.'.$var_today.'.2%3B%2B__utmb%3D'.$var_cookie.'%3B%2B__utmc%3D'.$var_cookie.'%3B%2B__utmz%3D'.$var_cookie.'.'.$var_today.'.2.2.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B__utmv%3D'.$var_cookie.'.'.$var_uservar.'%3B';

	$header = '';

	//Set the language to that of the client so analytics can track it.
	if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
		$header = 'Accept-language: '.$_SERVER['HTTP_ACCEPT_LANGUAGE'].'\r\n';
	}

	//Set the user agent to that of the client so analytics can track it.
	if (!empty($_SERVER['HTTP_USER_AGENT'])) {
		$header = 'User-Agent: '.$_SERVER['HTTP_USER_AGENT'].'\r\n';
	}

	$opts = array( 'http'=>array( 'method'=>'GET', 'header'=>$header ) );
	$handle = fopen($urchinUrl, 'r', false, stream_context_create($opts));
	$test = fgets($handle);

	fclose($handle);
}
else{	//clower
	return false;
}
?>

今度こそ、上手くできた

 二日程、走らせてみた所、クローラの除外はうまく行っている様子。

 変更してからのPV数をブラウザ別に見ると、Docomoとauからのアクセスが合わせて10%弱になる。iPhoneはSafariに含まれるので、ここでは現れてこない。Softbankからのアクセスが無いのは、Yahoo!モバイルのクローラが来ておらず、ヤフー携帯の検索対象になっていないからだろう。OS別を見ると、iPhoneが10%前後、Docomoが4%強、auが4%弱といった感じ。この二日に限って言えば、Winodows版のSafariやChromeを使ってアクセスしてくる人の方が少ないくらいだ。それらのアクセスが、携帯と同じ位か、より少ないという傾向は、ここ2日に限った話ではないと思う。

 ここの所、MacやiPhoneの事を多く書いているので、iPhoneからのアクセスが多くなる傾向が出ているのだと思うけれど、他キャリアの携帯からもアクセスがあるので、やはり携帯からのアクセスは自分が予想していた以上に多く来ている。

 一方で、モバイル クローラの除外をする前も含めて見ると、iPod、Android、PSP、Nokiaからのアクセスもあるから、携帯電話以外のモバイル機器でも、ブラウザを使って情報を得るのが一般化しているのだなと思う。加えて、件数は多くないものの、ブラウザとしてNetfrontの名前も挙って来ているので、自分が考えていた以上にいろんな機器が使われているようだ(Netfrontは、ニンテンドーDS、PHSや情報家電等に幅広く搭載されているブラウザだそう)。

 最後に、特に携帯向けのサイトでなくても、全体で見ると数%〜10%位、iPhoneを入れると20%くらいはアクセスがあるようなので、WordPressの様にプラグインで対応できたり、携帯からアクセスした時に上手く表示されるようなデザインだったりする場合は、アクセス解析をして、どのくらい見られているかが判る様にしてみると面白いと思う。

こちらの記事もあわせてどうぞ:

コメントする

メールアドレスを元にアイコンを自動生成する Identiconを使っています。

| カテゴリ:Webツールを使う |