Google AdSense の所有権確認が即エラーになる:独自ドメインが www にリダイレクトしているのが原因だった
ads.txt は正しく置いたのに「サイトの所有権を確認できませんでした」が即表示。審査の時間切れではなく、apexがwwwに飛んでいるのが原因だった。
AdSenseにサイトを追加し、ads.txt で所有権確認をしようとしたら「確認できませんでした」が即座に出る。ads.txt の内容も配置も正しいのに通らないときの話。
事象
- AdSenseに独自ドメインを登録し、確認方法に ads.txt スニペットを選んだ
- 指定された1行をサイトのルートに置き、公開した
- ブラウザや
curlでhttps://ドメイン/ads.txtを開くと中身は正しく返る - それでも「確認」を押すと即座に「サイトの所有権を確認できませんでした」
- 何度押しても同じ。AdSenseコードスニペット方式・メタタグ方式でも同様に失敗
ポイントは 即座に失敗する こと。所有権確認は内容審査と違い、ファイルがあるかをクロールするだけなので、本来は時間の問題で失敗するものではない。即エラーが続くなら構造的に弾かれている。
原因
AdSenseに登録したドメインが apex(example.com) なのに、その apex が www(www.example.com)へ 308 リダイレクト していた。
$ curl -sI https://example.com/ads.txt
HTTP/2 308
location: https://www.example.com/ads.txt
所有権確認では、登録ドメインのURLで 直接 200 が返る ことが必要になる。apexが ads.txt を自分で返さずリダイレクトを返すと、「登録ドメインにファイルが無い」と判定されて弾かれる。ファイル自体は www 側に存在するのに、だ。
多くのホスティング(Vercel等)は apex と www のどちらかを「正(カノニカル)」にして、もう一方をリダイレクトさせる。デフォルトで www 正・apex→www になっていると、apexで登録したAdSenseが弾かれる。
解決策
登録ドメイン(apex)が 直接 200 を返す ようにする。=カノニカルを apex 側へ反転させる。
ホスティングのドメイン設定で:
- apex(
example.com):リダイレクトを外し、本番に直接ぶら下げる(200を返す側にする) - www(
www.example.com):apex への 308 恒久リダイレクトに設定する
反転後に確認する:
$ curl -sI https://example.com/ads.txt
HTTP/2 200 # ← 登録ドメインが直接200ならOK
$ curl -sI https://www.example.com/ads.txt
HTTP/2 308
location: https://example.com/ads.txt
この状態でAdSenseの「確認」を押すと所有権確認が通る。
反転直後にまだ失敗する場合、Googleが前回のクロール結果を保持していることがある。少し時間をおいてから再度「確認」を押してみる。
補足
- どちらをカノニカルにするかは AdSenseの登録ドメインに合わせる のが手っ取り早い。apexで登録したなら apex を200にする
- sitemap.xml / robots.txt に書く絶対URLも、カノニカル側(この場合apex)へ揃えておくと、AdSense・サイトマップ・SEO評価がすべて同じホストに集約される
- ads.txt の中身は
google.com, pub-XXXXXXXXXXXXXXXX, DIRECT, f08c47fec0942fa0(pub IDは自分のもの)
※ 本記事にはアフィリエイトリンクが含まれます。