認証が必要なページにAdsenseを貼る場合の注意点


認証が必要なページにGoogle Adsenseを貼り付けた際に発生した問題に対応した備忘録。わりとハマってしまったので書き留めておく。

その問題とは?

認証エラーの例外が山ほど発生するというもの。

状況としては、次のようなWebアプリだった。

  • Rails製Webアプリ
  • 例外が発生するとSlackで通知する(slack_notifier + exception_notification
  • 認証管理はdevise + cancancan
  • ログインしていないと遷移できないページがあり、未ログインでアクセスすると例外AccessDeniedが発生する
  • それらのページ内にAdsenseの広告あり

で、ログイン済の状態でこれらのページにアクセスすると、アプリ自体は予期した通りに動くのだが、Slackに例外が上がってくる。アクセスする度に上がってくるので非常に鬱陶しい。

ページにアクセスする度に例外が・・・
ページにアクセスする度に例外が・・・

もちろんこれは私がSlackを使ってなくても、ログには同じ例外が吐き出されているので誰にでも起こりうる話。

Slackで確認

はじめにこの例外を見たとき、一体自分以外に誰がアクセスしてくるんだ?と思いSlackを確認したが、slack_notifierのデフォルト設定ではUser-agentの値は通知してくれない模様。そこで、application_controller.rbを次のように変更した。

そしてページにアクセスして例外を発生させる。Slackを見てみると、次のように Dataが追加されている。

User-agentが判明
User-agentが判明

Mediapartners-Googleとな? これを早速ググってみると、どうやらGoogle Adsense用のクローラーであり、ページに最適な広告を選定するため、Adsenseが貼られているページにアクセスしてくるらしい。詳しくはコチラ

解決方法

こいつがAccessDenied例外を発生させている原因。Googleのヘルプを読むとrobots.txtでクロールを禁止できるが、禁止すると広告は表示されなくなるらしい。今回の要件としては別に広告を表示する必要もなかったので、robots.txtを編集してみる。・・・がそれでもクロールが止まらない!

その後Googleのヘルプをよくよく読むと、 User-agent: *では、Mediapartners-Googleのクロールは止められないらしい。ちゃんと User-agent: Mediapartners-Googleと指定しなさいと書いてあるじゃないか・・・。

といわけで、次のようにrobots.txtを変更したら、クロールが止まった。

ふー。ハマっちまったぜ。。。ま、普通は管理ページに広告貼る人はあまりいないと思うので、わりとレアなケースだったのかもしれない。

関連する記事


コメントを残す

メールアドレスが公開されることはありません。

*