Google Adsense を触ったことがある人なら、ads.txt未設置の警告文を一度は見たことがあると思います。設置方法の解説はネット上に山ほどあり、それに習ったつもりでいましたが、半年以上警告文を出しっぱなしにしていまいました。
ようやく解決できたので、レアケースとして記録しておきます。
ads.txt について
ads.txtについての説明や設置方法はGoogle公式を参考にしてください。
当ケースの確認方法とか解決方法の要約
条件
該当サイトにおいて常時SSL化を行っている場合
確認方法
http://サイトURL/ads.txtにアクセスし、ads.txtの内容が表示されるか確認する
ads.txtの内容が表示されなかった場合
http://サイトURL/ads.txtにアクセスした際、https://サイトURL/ads.txtへ転送されるように設定する
ads.txtの内容が正しく表示された場合
当ケースには当てはまらない(=問題は他にある)
SSL自動転送化設定が間違っていた
当ケースで警告文が消えなかった理由は、.htaccessファイル内で行っていたSSL自動転送化設定の記述が間違っていたからでした。
SSL自動転送化はサイトURLのhttp://をhttps://に置き換えることです。例えば『http://サイトURL.com』なら自動で『https://サイトURL.com』となります。
このSSL自動転送を行うためには、.htaccessファイルを編集し、サイトのルートディレクトリにアップロードします。
しかし、Google Adsenseの警告文が消えなかったサイトの場合は、以下のような間違った表記をしてしまっていました(赤字が誤り部分)。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}/$1 [L,R=301]
間違った.htaccessファイルをアップロードして『http://テストURL/ads.txt』にアクセスしたところ、『https://サイトURL/ads.txt/ads.txt』に転送され、404 NotFound(ページが見つかりません)と表示されてしまいます。
これを踏まえ、.htaccessファイルを以下のように修正しました。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
結果、『http://テストURL/ads.txt』は『https://テストURL/ads.txt』へ正しく転送されるようになり、adsenseページの警告文も表示されなくなりました。
ads.txtはhttpとhttpsのどちらからもアクセスできるようにする
当ケースと同じようにhttp→httpsへ自動で転送しているサイトは多いかと思います。この場合、ads.txtファイルはhttpとhttpsどちらからもアクセスできるようにする必要があります。
つまり『http://サイトURL/ads.txt』と『https://サイトURL/ads.txt』のどちらもグーグルに認識してもらわなければなりません。
正しく転送設定が行われていれば、グーグルが確認した際にも『http://サイトURL/ads.txt』から『https://サイトURL/ads.txt』へ転送されるため、どちらのケースでもads.txtが存在していると判断されます。
しかし今回の場合、転送設定が間違っていたせいで『http://』でのads.txtファイルが存在しないと見なされ、結果、警告文が表示され続けてしまったというわけです。
設定修正後に警告が消えるまでの時間
当ケースの場合、ads.txtに関する警告文は.htaccess を修正してから一晩で非表示になりました。ただしGoogle公式によれば、ads.txtの反映には数日、最長で1か月はかかるとのことです。それ以上経過してもダメそうなら、なんらかの設定ミスを疑ったほうがよさそうです。
間違っている間のアドセンスはどうだったのか?
警告文は常に表示されていましたが、ads.txtファイルが間違っていた半年以上の間、アドセンス自体は普通に表示されていました。正しく設置し直した後と内容の違いも見つかりません。
解決前に行った一般的な対策
ads.txtの保存用文字コードの確認
ads.txtファイルは文字コードを『UTF-8(BOM)なし』で保存してアップロードする必要があります。対応するエディタにて文字コードを確認し、正しいものであることを確認しました。
.htaccessでads.txtの文字コードを指定
Ads.txtのチェックツールにて『”ISO-8859-1″ は誤った文字コードです。utf-8で作成してください。』とエラーがでたので、.htaccessに以下のコードを追記し、明示的にads.txtの文字コードを指定しました。
<Files ads.txt>
AddType "text/plain; charset=utf-8" .txt
</Files>
ただ当ケースの場合、このコードがなくても警告文は非表示になったので、必須ではないようです。
どうして今回の間違いをしたかをいろいろと考えてみたのですが、そういう説明をしているサイトは見つかりませんし、わざわざ文字列を追加するとも思えず、結局はわからないままでした。解決できたからよかったものの、ads.txt以外のページも間違って転送され続けていたことになるので、ただただ反省するばかりです。