第2の人生の構築ログ

自分の好きなことをやりつつ、インカムもしっかりと。FIRA60 (Financial Independence, Retire Around 60) の実現を目指します。SE を生業としていますが、自分でプログラミングしながら自分が欲しいと思うアプリケーションを作ることが楽しみです。旅行と温泉、音楽と読書は欠かすことができません。

AdSenseの要注意警告「ads.txt ファイルが含まれていないサイト」にはてなブログで対応する

Google AdSense に以下のワーニングがでるようになりました。

f:id:dr_taka_n:20190603212042p:plain

要注意 - ads.txt ファイルが含まれていないサイトがあります。収益に重大な影響が出ないよう、この問題を今すぐ修正してください。

「要注意」となっておりますが、さてこれは対応必須なのでしょうか。また、はてなブログでこれを設定することはできるのでしょうか。

ちなみに、このワーニングに気づいてこのサイトを確認したところ、PC/Mac といったデスクトップでのページに広告が入らないようになっていました。スマートフォンの方はこれまで通り広告が入っています。広告が表示されていない理由がこのワーニングのads.txtの問題なのかはわかりません。とりあえず気になりますので、対応してみようと思います。

前提としまして、現在このサイトは、はてなブログ Pro で独自ドメインを使った運用となっています。

まず、はてなの FAQ には以下のようにあります。

最近よくあるお問い合わせ

はてなブログで ads.txt を配信する方法はありますか

「要注意 - ads.txt ファイルが含まれていないサイトがあります。収益に重大な影響が出ないよう、この問題を今すぐ修正してください。」 というエラーが表示されるようになったというお問い合わせをいただいております。

現在のところ、はてなが提供しているドメイン ( *.hatenablog.com 等) か独自ドメインを設定しているブログかに関わらず、ads.txt を配信する機能は提供していません。

多くの方が利用されているGoogle AdSense ads.txtに関するヘルプにも記載してあります通り、ルートドメインにファイルを設置することができない場合はads.txtを使用する必要はありません。また、現時点のAdSenseの仕様やその他の広告業界動向を鑑みてもads.txtがない場合に広告が配信されなくなるケースは極めて限定的と判断しています。

はてなブログが提供するドメインのルートドメインでも現在のところ ads.txt を設置する予定はありません。これはユーザー様のGoogle AdSenseの広告配信に影響をださないための措置です。

また、独自ドメイン設定をご利用の場合には、ご自身で zone apex (ルートドメイン) にサーバを用意していただき ads.txt を配信することで対応可能です。ただし、この方法についてははてなでサポートすることができません。何卒ご了承ください。

はてなブログ - お問い合わせ - はてな

また、直接問い合わせてもみましたが、同じ回答でやはり提供する予定はないようです。

ということで、独自対応します。
何をやればよいかと言いますと、以下に記載があります。

support.google.com f:id:dr_taka_n:20190604221423p:plain

  1. google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0 という内容の記載された ads.txt を用意する。
  2. このファイルを example.com/ads.txt の URI で参照できるようにする。

ですね。

このサイトは、www 無し(zone apex (ルートドメイン))でのアクセスがあった場合は、はてなのホストではなく、個人的に管理している別のサーバにアクセスするよう DNS で設定しています。アクセスされたサーバでは、はてなのホストに www を付けて転送します。

このような設定になっている理由は、www 無し(zone apex (ルートドメイン))でのアクセスを許容したいのですが、はてなで独自ドメインを使う場合は CNAME を行う必要があります。www 無し(zone apex (ロートドメイン)) のレコードへの CNAME は設定できないのですね。そのための対応です。

この設定は以前記載した以下の記事の対応のところを参照ください。

www.morelife.work

今回の対応としては、www 無し(zone apex (ルートドメイン))でads.txtにアクセスした際(morelife.work/ads.txt)に Google の指定してるコンテンツを返せればよいので、 www 無し(zone apex (ルートドメイン))のリクエストを受付ているサーバに ads.txtを置き、morelife.work/ads.txt へのアクセスだけはそのサーバにおいた ads.txt を参照させ、それ以外はこれまで通り www 有りに転送するようにしておきます。

さて、前回の設定により nginx の設定は以下の設定となっています。

server {
  listen      80;
  server_name morelife.work;
  return      301 http://www.morelife.work$request_uri;
}

これに先に記載した要件を追加します。location ディレクティブで操作します。

server {
  listen      80;
  server_name morelife.work;
  location / {
    return      301 http://www.morelife.work$request_uri;
  }

  location /ads.txt {
    root   /usr/share/nginx/html;
  }
}

morelife.work/ads.txt でアクセスしてきた時だけ、ローカルのファイルにアクセスさせます。それ以外は www を付けてリダイレクトさせます。

設定反映後、確認します。ホスト名でアクセスします。

$ curl -v morelife.work
* Rebuilt URL to: morelife.work/
*   Trying 000.000.000.245...
* TCP_NODELAY set
* Connected to morelife.work (000.000.000.245) port 80 (#0)
> GET / HTTP/1.1
> Host: morelife.work
> User-Agent: curl/7.54.0
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.11.1
< Date: Tue, 04 Jun 2019 12:39:10 GMT
< Content-Type: text/html
< Content-Length: 185
< Connection: keep-alive
< Location: http://www.morelife.work/

これまで通り転送されており、問題なしです。念のため、別の URI でも試しておきます。

$ curl -v morelife.work/entry/2019/04/21/hatenablog-pro-and-google-adsense
*   Trying 000.000.000.245...
* TCP_NODELAY set
* Connected to morelife.work (000.000.000.245) port 80 (#0)
> GET /entry/2019/04/21/hatenablog-pro-and-google-adsense HTTP/1.1
> Host: morelife.work
> User-Agent: curl/7.54.0
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.11.1
< Date: Tue, 04 Jun 2019 12:39:49 GMT
< Content-Type: text/html
< Content-Length: 185
< Connection: keep-alive
< Location: http://www.morelife.work/entry/2019/04/21/hatenablog-pro-and-google-adsense

大丈夫ですね。

では、今回ターゲットとなるmorelife.work.ads.txt はどうでしょうか。

$ curl -v morelife.work/ads.txt
*   Trying 000.000.000.245...
* TCP_NODELAY set
* Connected to morelife.work (000.000.000.245) port 80 (#0)
> GET /ads.txt HTTP/1.1
> Host: morelife.work
> User-Agent: curl/7.54.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: nginx/1.11.1
< Date: Tue, 04 Jun 2019 12:40:39 GMT
< Content-Type: text/plain
< Content-Length: 59
< Last-Modified: Tue, 04 Jun 2019 12:33:58 GMT
< Connection: keep-alive
< ETag: "5cf66536-3b"
< Accept-Ranges: bytes
< 
google.com, pub-0673245750xxxxxx, DIRECT, f08c47fec0942fa0
* Connection #0 to host morelife.work left intact

OK です。はてなのホストに転送されずに、ローカルに用意した ads.txt を参照しています。

これで様子をみます。

2019/08/03 後記

記載するのをうっかりしておりました。 ここに記載した対応を行った後、しばらくしてこのワーニングは表示されなくなっています。