2026年5月24日

2026年5月24日

CDN導入時のDNS設定:ルートドメインのCNAME問題とCNAMEフラット化・ALIASの使い方

CDNを導入すると「cdn-provider.example.net にCNAMEを向けてください」と案内されますが、example.com のようなルートドメイン(ゾーンの頂点、apex)にはCNAMEを置けません。この問題の解決策が、DNSサービス側で行うCNAMEフラット化(CNAME flattening)や ALIAS / ANAME レコードです。この記事では、なぜルートにCNAMEを置けないのか、解決策の選び方、設定後の確認方法、WordPress側で合わせて見直す点を説明します。

なぜルートドメインにCNAMEを置けないのか

CNAMEは「この名前は別の名前の別名です」と宣言するレコードで、DNSの仕様上、同じ名前にほかのレコードと共存できません。ところがルートドメインには、ゾーンを成立させるためのSOAレコードとNSレコードが常に存在し、多くの場合はMX(メール)やTXT(SPF、ドメイン所有確認)も置かれています。そのため example.com にCNAMEを書くことは規格上許されません。

一部の管理画面では入力できてしまうことがありますが、そうした設定はリゾルバーによって解釈が分かれ、メールが届かない、TXTによる所有確認が通らないといった問題の原因になります。

一方、www.example.com や cdn.example.com のようなサブドメインには通常ほかのレコードがないため、CNAMEをそのまま設定できます。

解決策は4つ

ルートドメインでCDNを使いたいときの選択肢は、おおむね次の4つです。

方法 仕組み 向いている場面
CNAMEフラット化 DNSサービスがCNAMEの先を解決し、結果のIPアドレスをAレコードとして返す Cloudflare をDNSに使っている
ALIAS / ANAME フラット化と同じ考え方を独自のレコード型として提供 DNSimple、DNS Made Easy、NS1 など対応サービスを使っている
Route 53 のエイリアスレコード AWSのリソース(CloudFront、ロードバランサー等)を指す特殊なレコード AWSのCDNやロードバランサーを使っている
wwwを正規URLにする ルートは www へ301リダイレクトし、www にCNAMEを設定 DNSサービスを変えたくない、どのCDNでも使える方法にしたい

前の3つは、利用者のリゾルバーにはAレコード(とAAAAレコード)として見えるため、ルートに置いてもMXやTXTと共存できます。対応状況、レコード型の名称、料金体系はサービスごとに異なり、変わることもあるため、利用中のDNSサービスの公式ドキュメントで確認してください(2026年10月現在)。

CNAMEフラット化の注意点

フラット化やALIASは便利ですが、通常のCNAMEとは動きが違う点があります。

CDNの拠点選択が粗くなることがあるDNSで利用者の地域を判断して近い拠点のIPを返すタイプのCDNでは、フラット化するとCNAMEの先を解決するのは利用者のリゾルバーではなくDNSサービス側になります。その結果、利用者から遠い拠点のIPが返る可能性があります。エニーキャスト方式で同じIPを全世界に広告しているCDNではこの影響は小さくなります。CDN側のドキュメントで、ルートドメインでの利用時の推奨構成を確認してください。

TTLと更新のタイミングCDN側がIPアドレスを変えても、DNSサービスがフラット化した結果をキャッシュしている間は古いIPが返ります。サービスによってはTTLを自分で選べないこともあります。

Cloudflareのプロキシ有効時は別の話Cloudflare でプロキシ(オレンジの雲)を有効にしたレコードは、CloudflareのIPが返り、Cloudflare自体がCDNとして動きます。フラット化が意味を持つのは、Cloudflare をDNSとしてだけ使い、ルートを外部のCDN(CloudFront など)に向ける場合です。外部CDNの前段でCloudflareのプロキシを重ねると、キャッシュや証明書の管理が二重になり、問題の切り分けが難しくなります。

手順1:CDN側で独自ドメインと証明書を設定する

DNSを向ける前に、CDN側で example.com(と www.example.com)を独自ドメインとして登録し、そのドメインのSSL証明書を用意します。多くのCDNでは、証明書の発行時にドメインの所有確認のためのCNAMEやTXTを追加するよう求められます。このレコードを先に追加して証明書の発行を済ませてから、トラフィックを向けるのが安全な順番です。証明書が用意できていない状態でDNSだけ切り替えると、訪問者に証明書エラーが表示されます。

あわせて、CDNがコンテンツを取りに行く先(オリジン)を決めます。ルートドメインをCDNに向けたあとで、オリジンにも example.com を指定すると、CDNが自分自身に問い合わせてしまいます。origin.example.com のようなオリジン専用のホスト名を作り、サーバーのIPを指すAレコード(CDNを経由しない設定)にしておくのが一般的です。オリジン側のWebサーバーは、CDNから届く Host ヘッダー(通常は example.com)で応答できるようにします。

手順2:DNSレコードを設定する

設定前に、現在のDNSレコードをエクスポートするか画面を記録してバックアップし、ルートのAレコードのTTLを前日までに短くしておきます。

Cloudflare をDNSとして使い、ルートを外部CDNに向ける場合の例は次のとおりです。

タイプ   名前              内容                         プロキシ
CNAME    example.com       dxxxxxxxx.cloudfront.net     DNSのみ
CNAME    www               dxxxxxxxx.cloudfront.net     DNSのみ
A        origin            203.0.113.10                 DNSのみ
MX       example.com       mail.example.com(優先度10)

Cloudflare ではルートにCNAMEを入力すると、自動でフラット化した応答になります。Route 53 と CloudFront の組み合わせなら、ルートにAレコードのエイリアスを作り、エイリアス先に CloudFront のディストリビューションを選びます(IPv6を有効にしている場合はAAAAのエイリアスも作ります)。

wwwを正規URLにする方法を選ぶ場合は、www にCNAMEを設定し、ルートはWebサーバーやレジストラの転送機能で https://www.example.com/ へ301リダイレクトします。ルートへのHTTPSアクセスもリダイレクトするには、ルート側にも証明書が要ります。

手順3:応答とCDN経由の配信を確認する

# ルートドメインはAレコードとして返るか(CNAMEがそのまま見えないか)
dig example.com A +noall +answer
dig example.com CNAME +short

# MXやTXTが消えていないか
dig example.com MX +short
dig example.com TXT +short

# CDNを経由しているか(CDN固有のヘッダーが付くか)
curl -sI https://example.com/ | grep -i -E "x-cache|via|server|cf-cache-status"

フラット化が効いていれば、dig example.com A にはIPアドレスが返り、CNAMEの問い合わせには何も返りません。CDNを経由しているかは、レスポンスヘッダーで判断します。CloudFront なら x-cache、Cloudflare なら cf-cache-status といったヘッダーが付くのが目安です。ヘッダーの種類はCDNごとに異なるので、利用中のサービスの資料で確認してください。

WordPress側で見直すこと

DNSとCDNの設定に合わせて、WordPress側も確認します。

  • サイトURL:ルートと www のどちらを正規URLにするかを決め、「設定」→「一般」のWordPressアドレスとサイトアドレス(または wp-config.php の WP_HOME と WP_SITEURL)をそれに合わせます。変えると管理画面に入れなくなることがあるため、事前にデータベースのバックアップを取ってください。
  • 記事内のURL:正規URLを変えた場合、本文中の古いURLは自動では変わりません。WP-CLI の wp search-replace を --dry-run 付きで実行して影響を確認してから置き換えます。
  • キャッシュから外すページ:管理画面(/wp-admin/)、ログインページ、ログイン中のユーザーのページ、カートや会員ページはCDNでキャッシュしない設定にします。ログイン中かどうかは wordpress_logged_in_ で始まるクッキーで判断できます。
  • 混在コンテンツ:CDN経由でHTTPS配信にしたあと、画像やCSSが http:// のままだとブラウザが警告を出したり読み込みを止めたりします。

まとめ

  • ルートドメインにはSOA・NS・MXなどがあるため、規格上CNAMEを置けません。
  • 解決策は、CNAMEフラット化、ALIAS / ANAME、Route 53 のエイリアス、www を正規URLにしてルートはリダイレクト、の4つです。
  • フラット化はCDNの拠点選択やTTLの扱いが通常のCNAMEと異なるため、CDN側の推奨構成を確認します。
  • CDN側で証明書を先に用意し、オリジン専用のホスト名を作ってから、DNSを切り替えます。
  • 切り替え後は dig でAレコードとMX・TXTを、curl -I でCDN経由の配信を確認し、WordPressのURL設定とキャッシュ除外も見直します。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲