Azure Static Web Apps × Google AdSenseで所有権確認を通すまでにハマったこと
はじめに
Nuxt(SSG)+ Azure Static Web Apps(以下ASWA)で運用しているサイトにGoogle AdSenseを導入しようとしたところ、所有権確認がなかなか通らず苦労しました。 この記事では、ハマったポイントとその解決策をまとめます。同じ構成で困っている方の参考になれば幸いです。
Azure Static Web Apps + Nuxt SSGの構成でAdSense所有権確認を通すために、ads.txtの配信とルートドメインのDNS設定(Cloudflare)のハマりポイントを乗り越えた記録です。
環境
| 項目 | 技術 |
|---|---|
| フレームワーク | Nuxt 4(SSG) |
| ホスティング | Azure Static Web Apps |
| DNS | お名前.com → Cloudflare に移行 |
| ドメイン | akizorasoft.com / www.akizorasoft.com |
ハマりポイント: ルートドメインにアクセスできない
問題
AdSenseに登録できるのはakizorasoft.com(ルートドメイン)のみで、www.akizorasoft.comは登録できない。しかし、akizorasoft.comにはDNSレコードが設定されておらず、Googleのクローラーがサイトにアクセスできなかった。
これにより、ads.txtもルートドメインで配信できず、所有権確認が通らない状態だった。
原因
お名前.comではwww.akizorasoft.comのCNAMEレコードのみ設定しており、ルートドメイン(akizorasoft.com)にはレコードがなかった。
通常、ルートドメインにはCNAMEレコードを設定できない(DNS仕様上の制約)ため、ASWAへのルーティングができなかった。
なぜルートドメインにCNAMEが設定できないのか
DNS仕様(RFC 1034)では、ルートドメイン(Zone Apex)にはSOAレコードやNSレコードが必須であり、CNAMEレコードは他のレコードと共存できないという制約がある。そのため、ルートドメインにCNAMEを設定すると、これらの必須レコードと競合してしまう。
解決策: Cloudflareへの移行
Cloudflare(無料プラン)にDNSを移行し、CNAME Flatteningを利用した。 CNAME Flatteningは、ルートドメインのCNAMEレコードを内部的にAレコードに変換してレスポンスを返す仕組みで、DNS仕様の制約を回避できる。
手順
- Cloudflareにアカウントを作成し、
akizorasoft.comを追加 - お名前.comのネームサーバーをCloudflare指定のNSに変更
- Cloudflare側でDNSレコードを設定
@(ルートドメイン)→ CNAME → ASWAのホスト名www→ CNAME → ASWAのホスト名- TXT → google-site-verification の値を移行
- ASWAのカスタムドメインに
akizorasoft.comを追加 - ASWA側でドメイン検証用のTXTレコードをCloudflareに追加
- 検証完了後、AdSenseの所有権確認を再試行 → 成功
www運用とルートドメイン登録の整理
所有権確認自体はここまでで通りますが、もう一段ややこしいのが「サイトはwwwで運用しているのに、AdSenseに登録するのはルートドメイン」という非対称です。ここを整理しておきます。
このサイトは正規URLをwww側に寄せています。Nuxtの設定でもsite.urlをhttps://www.akizorasoft.comにしており、各ページのcanonicalもwww起点で出力されます。一方、AdSenseに登録したのはルートのakizorasoft.comです。
一見ちぐはぐですが、これで問題ありません。AdSenseの所有権確認と広告配信はドメイン単位で扱われ、ルートドメインを登録すると、その配下(wwwを含むサブドメイン)もまとめて対象になるからです。つまりwwwで運用していても、ルート登録のままでwww.akizorasoft.comに広告を出せます。
ただしSEOの観点では、ルートとwwwの両方が同じ内容を200で返すと重複URL扱いになります。このサイトはDNSでルートもwwwもASWAに向けているため、両ホストとも到達可能です。そこで重複を避けるために、canonicalをwwwに統一してクローラに正規URLを伝えています。
canonicalはあくまでクローラへの「ヒント」です。より確実に正規化したい場合は、ルート→www(または逆)の301リダイレクトで寄せると堅実です。すでにCloudflareを使っているなら、Cloudflareのリダイレクトルールでホスト単位の301をかけるのがASWA単体より手軽です(ASWAの設定はパス単位の制御が中心で、ホスト名での出し分けには向きません)。AdSenseはドメイン単位の扱いなので、どちらに寄せても配信には影響しません。
まとめ
Azure Static Web Apps + Nuxt SSGの構成でAdSenseの所有権確認を通すためのポイントです。
- AdSenseはルートドメインでの登録が必須で、
wwwサブドメインだけでは登録できない - ルートドメインにCNAMEを直接設定できない制約は、CloudflareのCNAME Flattening(無料プラン)で回避できる
- ルートドメインにアクセスできなければ
ads.txtも到達できないので、ルート配信を最優先で確認する - サイトを
wwwで運用していても、AdSenseはドメイン単位で評価されるためルート登録でwww側もカバーされる
ルートドメインの問題はASWAに限らずどのホスティングサービスでも起こりうるため、同様の問題に直面した方はぜひCloudflareを試してみてください。
