🐙

Vercel × Route53 でドメイン「wwwあり」を正解にする理由

に公開

「ドメインは短い方がクールだ」

そう思って、個人開発のサイトではこれまで https://example.com のような「wwwなし(ネイキッドドメイン)」を好んで使っていました。しかし、ブログ(Astro Starlight + Vercel)を構築し、Google AdSenseやSearch Consoleの設定を進める中で、その認識を改めることになりました。

今回は、Vercel環境においてなぜ「wwwあり」が推奨されるのか、そしてAstroの設定でハマりやすい サイトマップの罠について共有します。

Vercelからの「提案」

AWS Route53 で取得したドメインを Vercel に接続したときのことです。
Vercelのダッシュボードには、親切にも次のような推奨設定が表示されていました。

  • www.indigo165e83.com -> Primary
  • indigo165e83.com -> Redirect to www...

「え、逆じゃない? 短い方をメインにしたいんだけど」と最初は思いました。しかし、Vercelの公式ドキュメントやアーキテクチャを調べていくと、これには明確な技術的理由があることがわかったのです。

Anycast IP と CNAME の違い

結論から言うと、Vercel(というか多くのCDN)においては、サブドメイン(www)の方がパフォーマンスと耐障害性に優れています。

wwwあり(CNAMEレコード)

www を使う場合、DNSレコードは CNAME で設定し、値は cname.vercel-dns.com になります。
これにより、Vercel側がトラフィックを動的に制御し、ユーザーから最も近いエッジサーバーへ最適にルーティングしてくれます。

wwwなし(Aレコード)

一方、ネイキッドドメインを使う場合、DNSの仕様上 CNAME が使えない(ことが多い)ため、Aレコード で固定IPを指定する必要があります。
Vercelの場合、ここで指定するのが 76.76.21.21 という Anycast IP です。

これも十分に高速なのですが、固定IPである以上、CNAMEを用いた柔軟なトラフィック制御に比べると、Vercelの持てるポテンシャルを100%引き出しにくいという側面があります。

「見た目のシンプルさ」を取るか、「インフラ的な最適解」を取るかのトレードオフですが、私は後者(wwwあり)を選びました。

Astro設定ファイルの落とし穴

DNSの設定(AWS Route53)とVercelのリダイレクト設定を完了し、「これで完璧だ」と思っていました。
しかし、Google Search Console にサイトマップを送信したところ、 「インデックス登録されない」「AdSenseの審査が進まない」 という問題が発生しました。

原因は、私のローカルのコード、astro.config.mjs にありました。

// 修正前の astro.config.mjs(NG)
export default defineConfig({
  site: 'https://indigo165e83.com', // wwwがない!
  // ...
});

Webサーバー(Vercel)側では「wwwありが正義(Primary)」として動いているのに、Astroが自動生成する sitemap-index.xml の中身は、設定ファイルに従って https://indigo165e83.com/... (wwwなし)のURLをリストアップしていたのです。

Googleロボットがサイトマップを見る(wwwなしのURLが書いてある)そのURLにアクセスするVercelが「wwwあり」にリダイレクトするGoogleロボット「おっと、リダイレクトされた。正規URLがどっちかわからないぞ」これが評価を下げる要因になっていました。

正しい設定のまとめ

この問題を解決するために行った設定は以下の3点です。これでサイトマップ、実アクセス、DNSの全てが「wwwあり」で一本化されました。

  1. AWS Route 53 の設定ルートドメインへのアクセスも取りこぼさないよう、Aレコードも正しく設定します。レコード名タイプ値備考wwwCNAMEcname.vercel-dns.comメインの経路(空欄)A76.76.21.21Anycast IP (リダイレクト用)
  2. Vercel の設定Domains設定画面で www.indigo165e83.com を Primary に設定。
  3. Astro の設定(忘れがち!)astro.config.mjs の site プロパティを、実際に運用するURLと完全に一致させます。
// 修正後の astro.config.mjs(OK)
export default defineConfig({
  site: 'https://www.indigo165e83.com', // wwwをつける
  integrations: [sitemap(), ...],
});

まとめ

「たかがwww、されどwww」。

モダンなホスティング環境では、DNSの設定ひとつでパフォーマンスが変わりますし、SEOに直結します。

もしVercel環境をお使いであれば、ドメインに「wwwあり」を検討してみるのもよいと思います。

Discussion