CakePHPで携帯サイト向けのGoogle Analyticsを利用する

投稿日:

携帯サイトのアクセス解析と言うと国産の「うごくひと2」辺りが秀逸だったりするんですが、Google Analytics でも携帯サイトの解析が出来るようなので試してみました。

が、そもそも Google が提供している PHP のコードが微妙だったり、埋め込み先が CakePHP だったりで結構苦戦したので、そのあたりの注意点なんかを書いていこうと思います。

基本的には Analytics の管理画面でコードを取得してそれをページに埋め込むと言う手順で、殆ど PCサイトの場合と同じなのですが、携帯サイトの場合には ga.php と言うライブラリを別途ダウンロードしてサーバーに置く必要があります。

まぁ、でも基本的には Google の言うとおりにやれば良いはずだろうと言う感じで作業開始。

まず、Analytics のトラッキング コードの設定で対象を「携帯サイト」にすると手順が示されます。

「解析するすべてのページの最初の <html> タグの直前に貼り付けます。」という事で案内されたコードが以下のコード。

<?php
  // Copyright 2010 Google Inc. All Rights Reserved.
 
  $GA_ACCOUNT = "MO-******-*";
  $GA_PIXEL = "/ga.php";
 
  function googleAnalyticsGetImageUrl() {
    global $GA_ACCOUNT, $GA_PIXEL;
    $url = "";
    $url .= $GA_PIXEL . "?";
    $url .= "utmac=" . $GA_ACCOUNT;
    $url .= "&utmn=" . rand(0, 0x7fffffff);
    $referer = $_SERVER["HTTP_REFERER"];
    $query = $_SERVER["QUERY_STRING"];
    $path = $_SERVER["REQUEST_URI"];
    if (empty($referer)) {
      $referer = "-";
    }
    $url .= "&utmr=" . urlencode($referer);
    if (!empty($path)) {
      $url .= "&utmp=" . urlencode($path);
    }
    $url .= "&guid=ON";
    return str_replace("&", "&", $url);
  }
?>


で次に、「トラッキングするすべてのページの </body> タグの直前に貼り付けます。」として示された事が以下のコード。

<?php
$googleAnalyticsImageUrl = googleAnalyticsGetImageUrl();
echo '<img src="' . $googleAnalyticsImageUrl . '" />';?>

そして、最後に以下の様に ga.php をルートディレクトリに置くように指示されます。

ファイルをルート ディレクトリにコピーします
https://ssl.gstatic.com/analytics/20110823/mobile/ga.php をダウンロードしてウェブサーバーのルート ディレクトリ("/")に保存してください。ルート ディレクトリでのサーバーサイド コードの実行が許可されていることを確認してください。


と言う事で、この通りに設定して行きます。

組み込み先が CakePHP なので、まずはダウンロードした ga.php を webroot に置きます。

で、/views/layouts/mylayout.ctp の様な使っているレイアウトを修正して html タグの出力前と body の終了タグ直前に上記のコードを書いていく訳ですが、私の場合は /views/elements/ に ga_head.ctp と ga_foot.ctp と言うファイルを作ってそれぞれコードを記述し、レイアウトから $this->element('ga_head') のような感じで呼び出して使いました。

他にも、ヘルパーとして登録する方法などもあるようですので、自分のやりやすい方法でやればいいと思います。


でとりあえず、実行してみると以下の様なエラーが発生します。

Notice (8): Undefined index: HTTP_REFERER

良く見ればわかるんですが、12行目~14行目の部分はこの書き方だと Notice エラーが出てしまいますね。

$referer = $_SERVER["HTTP_REFERER"];
$query = $_SERVER["QUERY_STRING"];
$path = $_SERVER["REQUEST_URI"];

まぁ、本運用環境だと Notice エラーを出力しない場合も多いと思うので実害はないかもしれないですが、一応以下のように修正。

$referer = isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : '';
$query = isset($_SERVER["QUERY_STRING"]) ? $_SERVER["QUERY_STRING"] : '';
$path = isset($_SERVER["REQUEST_URI"]) ? $_SERVER["REQUEST_URI"] : '';

で、再度実行するも動きません。


携帯版の動作としては、</body> の直前に img タグを埋め込んで解析する方法のようですが、その部分が x になってしまいます。

出力されたソースを見て見ると以下の様な感じで何か変です。
必要な情報が含まれていない感じで、突然 ? で始まってるので、当然イメージじゃないのでエラーになってる感じ。

<img src="?utmac=&utmn=1371249491&utmr=-&utmp=%2F&guid=ON" />

これは CakePHP が原因なのかはよく分かりませんが、googleAnalyticsGetImageUrl 内の global宣言が効いてなさそうだなぁっと。
なので、以下の様な感じで googleAnalyticsGetImageUrl の中で変数を宣言する事にしました。

  function googleAnalyticsGetImageUrl() {
//  global $GA_ACCOUNT, $GA_PIXEL;
    $GA_ACCOUNT = "MO-*******-*";
    $GA_PIXEL = "/ga.php";
 
    $url = "";
    
    	・
    	・
    	・
    	
  }

と言う事で、これで一応エラーは無くなりましたし、トラッキングも開始されたようです。

個人的には googleAnalyticsGetImageUrl の return str_replace("&", "&", $url); 部分が気になって仕方が無いんですが、変にいじるとおかしくなりそうなので、暫く様子を見ようと思います。

まぁ、何にしても携帯解析はどうかなぁ・・・
って感じですね。

何で global 宣言で変数を呼んでるのかも良く分からないし、動作確認とかしてるのか怪しいですね。

更新日: