生活を良くします - 怠惰なプログラミング

読者です 読者をやめる 読者になる 読者になる

生活を良くします-怠惰なプログラミング

外資系でエンジニアをやっています。便利なサービスや商品、プログラミングで作ったものなどを紹介していきます

【Google analytics】プロパティはヒットを受信していません。 への対策

google analyticsがおかしな挙動を示すようになった

ある日を境にセッション数が常にゼロに

はてなブログの簡易アクセス解析でPV数を見ていました。そういえばgoogle analytics入れていたな、と思い出しgoogle analyticsを開いてみることに。

すると11月14日以降のセッション数が急に全て0になっていました。これは何か変だぞ。

ちなみにはてなのアクセス解析という名のアクセスカウントでは人が来てる痕跡が多数ありました。さすがにgoogle のクローラーが高速回転しているとは考えられません。

検索やtwitterを見ている限り、google analyticsで障害が発生しているとも思えず。

考えられる原因は、

  1. analyticsの設定ミス
  2. トラッキングコードのミス


これに絞って原因を探っていくことにします。

エラーメッセージ

20161130200152

プロパティ「生活を良くします - 怠惰なプログラミング」はヒットを受信していません。サイトでまったくセッションが発生していないか、サイトが正しくタグ設定されていない可能性があります。

サイトが正しくタグ設定されているかどうか調べる際は、Google Tag Assistant Recordings が便利です。



通知に何か来ていると思ったら、本質が来ていた。

「サイトでセッションが発生していないか」とありますがセッションは多少ですが、あるはずです。

「サイトが正しくタグ設定されていない可能性があります」おそらくですがこれが原因でしょう。



詳しく原因を見ていくとなんとなく原因らしきものがわかってきました。

Move the tag inside the head.
We have detected that the Google Analytics tracking code is outside of the
section on this page. This decreases the likelihood that the tracking beacon will be sent before the user leaves the page.
One of the main advantages of the asynchronous snippet is that you can position it at the top of the HTML document. This increases the likelihood that the tracking beacon will be sent before the user leaves the page. We've determined that on most pages, the optimal location for the asynchronous snippet is at the bottom of the
section, just before the closing tag.
Solution: Ensure that you add the Google Analytics tracking code onto this page before the closing tag.
出典:Google Analytics Errors - Tag Assistant Help

調べて見るとはてなブログの設定上、google analiticsのコードがheadタグの外に設置されているみたいです。


f:id:what_a_day:20170129095811j:plain


通常はこのはてな設定からアナリティクスを登録します。しかしそうすると自動的にheadの外にコードが設置されるようになっています。これはあまり嬉しくない。

一応ちゃんと動いたりしていますが、googleの公式の見解ではユーザーの情報が正しく記録されない可能性があるみたいです。bodyが読み込まれる前にユーザーがページを離れてしまった場合などがそれにあたります。

ですからgoogleのアドバイス通りちゃんとした貼り方をするならば以下のようになります。どういう理由か不明ですがheadタグの終了直前に置くのがたいていのページにとっては最適らしいです。

<head>

/*htmlコードなど*/

<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','https://www.google-analytics.com/analytics.js','ga');

  ga('create', '自分のトラッキングID', 'auto');
  ga('send', 'pageview');

</script>
</head>

詳しいことはこのページの一番下のセクションで説明しているはずです。

ただこの方法が最適な方法というだけで、はてなブログでの公式のやり方でも一応はちゃんと動いています。たぶんはてなブログ公式のアナリティクス設定が原因だと思うのですが、今でも稀にセッションが確認されていないエラーが出ます。

対処法を実行した後にもエラーが出たのでそういう風に思っています。でもちゃんと動いている?のでheadに追加するのはまだいいかなという感じです。

対処法

答えを先に言うと、自分で設定したフィルタを消した後に「再チェック」を押すと治りました。

Google Tag Assistant Recordings

助言通りにGoogle Tag Assistant Recordingsを使ってみた。

Google Tag Assistant Recordingsとはgoogle analyticsのトラッキングIDが正しく動いているのかを確認するための、chrome拡張の一つです。
(ex)トラッキングID: UA-00000000-0


コイツを使用して自分のページを見ていると、エラーが3つ見つかりました。ただし、なぜか自分のトラッキングIDは正しく動いていて、他のトラッキングIDはエラーを起こしていました。
よく見てみると、「HatenaBlogUserTracker.send」とあり、なぜかはてなブログのアナリティクスのIDが置いてありエラーになっていました

他の人のはてなブログのサイトでも同じようにエラーになっていたため、たぶんこれはあまり問題ではなく、自分のトラッキングIDがエラーになっていなければ問題ないと思われます。

英語で検索

この手のエラーやバグは自分だけに生じているはずがありません。日本語で検索しても解決できそうなページがなかったため、英語で検索することにしました。

プログラミングの仕事をしていると英語で検索することの重要性が身にしみて分かってきます。英語話者人口は日本の人口の15倍ほどありますから、役に立つ情報に出会える機会が増えます。

丸が三つ並んでいるボタンを押すと、ユーザー設定と言う項目でてきます。

f:id:what_a_day:20161130205851p:plain


アカウント情報編集のところに、言語を選択できるタブがあります。ちなみにいつでも変更可能。

20161130210653

これをいじって英語にすれば、先ほどのエラーメッセージも英語になります。


Property 「生活を良くします - 怠惰なプログラミング」 is not receiving hits. Either your site is not receiving any sessions or it is not tagged correctly.



このまま検索に投げます。日本語のタイトルが含まれていると変な結果になるので、 「生活を良くします - 怠惰なプログラミング」の部分を削除して、検索に放り投げます。

日本語で検索してもほとんどヒットしませんでしたが、英語ではかなりの数のトラブルシューティングの例が掲載されていました。これは期待ができそう。

はてなブログではない別のサイトですが、この記事の方法は理にかなっているので効果があると思います。いろいろ試してダメそうだったらこちらに書いてある方法を実行するつもりです。※先に治ったので使わなかった。

forum.webflow.com

この記事の方法をまとめると

  1. 記入したトラッキングIDを削除
  2. head要素に直接、トラッキングコードをコピペ

一番下に詳しく書いておきます。※先に治ったので使わなかった。

フィルタの確認

自分のIPアドレスを除外するフィルタをかけていました。
これの設定を間違えて、「除外」ではなく「一致」にしていると一致しているIPアドレスの活動しか表示されないため、セッション数がゼロになる可能性もあります。

これの設定をいじった次の日あたりからanalyticsがおかしくなっていたので疑っていました。とりあえず怪しいものしかなかったので、全部消して様子を見ることにしました。

でも、これの設定を間違えたところで
「サイトが正しくタグ設定されていない可能性があります」と言うエラーは出ないような気がする。おかしいなあと思いながらもうまく治ってしまった。


[追記]
どうやら正常に動作するようになったように見えるが、なぜか通知一覧からエラー表示が消えてくれない。
ちゃんと動いているから問題はないけどなんか気になる

[追記2016/12/12]
一週間以上、放置しておくと勝手に解決済みになっていました。
f:id:what_a_day:20161212201825p:plain


リアルタイム

Analytics 「管理」→「プロパティ」→「トラッキングコード」に移動します。

20161201004544


ここにテストコードを送信という項目が入っているのでそこを押します。

次にAnalytics 「レポート」→「リアルタイム」に移動します。「ユーザ」という項目のすぐ上です。
これが動いていればもう安心です。具体的にはテストコードを送信しているため、リアルタイムユーザーが0でなければ問題ありません。


20161201010431

analytics_testが送信されていて、なおかつそれをちゃんと受信できている。

普通に動いている。これで無事に終了した。


それ以外の対応方法 ※動作未確認

1.はてなブログ「設定」 → 「詳細設定」 → 「解析ツール」からgoogle analyticsを削除

20161201004048



2.Analytics 「管理」→「プロパティ」→「トラッキングコード」

20161201004544


ここにウェブサイトのトラッキングという項目があり、トラッキングコードが置いてあります。

例:ウェブサイトのトラッキングコード

<head>
/*html  code*/


<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','https://www.google-analytics.com/analytics.js','ga');

  ga('create', '自分のトラッキングID', 'auto');
  ga('send', 'pageview');

</script>
</head>

自分のgoogle analyticsからこのコードをコピーして
「設定」→「詳細設定」→「検索エンジン最適化」→「headに要素を追加」のところにコピペします。

おそらくこれで問題が解決するのではないかなという感じです。自分の場合はこれを試す前に治ってしまったので、今度トラブルが発生した際に試してみます。

headタグ内にanalitics codeを設置するのがgoogleの公式のアドバイスです。

しかし、はてなブログの設定からanalitics codeを登録するとheadタグの外に設置されます。

フィルタを全て消してエラーが消えたからも度々エラーが出てくるので、これもエラーの一因じゃないかなと考えています。


まとめ

  • Search Consoleのエラーを発見して原因を調べた
  • とりあえず再チェックをして原因(らしいもの)を潰せば直る


そのほかのSearch Consoleのエラーについてこちらの記事に書きました。

www.what-a-day.net