本記事は生成AIと共同で執筆しています。事実関係は可能な範囲で公式ドキュメント等と照合していますが、誤りが含まれている可能性があります。重要な判断を行う前にご自身でも一次情報をご確認ください。

概要

大学・財団・自治体などの組織ドメイン(例: example.or.jp)のDNSは、組織側の既存プロバイダで管理されていることが多く、個々のプロジェクトのために「ネームサーバーをCloudflareに移してください」とは頼みづらいものです。

それでも、Cloudflare Pagesでホストしているサイトなら、組織側にCNAMEレコードを1本追加してもらうだけで、xxx.example.or.jp のようなサブドメインを無料枠で割り当てられます。ゾーン移管もネームサーバー変更も不要です。

本記事は、この構成が可能かどうかをCloudflare公式ドキュメントでファクトチェックした結果のまとめです(2026年7月時点)。あわせて、混同しやすい WorkersとPagesのカスタムドメイン仕様の違い(ここが罠)も整理します。

結論: 3つのパターンの可否

パターン無料枠での可否
① サブドメインだけをCloudflareのゾーンとして登録する(Subdomain setup)Enterpriseプラン限定
② ドメイン全体(apex)をCloudflareに移管する✅ 可能だが、組織の全DNSレコード移行 + ネームサーバー変更が必要で重い
Cloudflare Pagesのカスタムドメイン + 外部DNSにCNAME 1本可能(推奨)

① Subdomain setupはEnterprise限定

Cloudflareには、apexドメインとは独立にサブドメインを別ゾーンとして管理する「Subdomain setup」という機能がありますが、プラン別の availability は Free / Pro / Business が No、Enterpriseのみ Yes です。「無料枠でサブドメインのゾーンだけ持ち込む」は不可能です。

③ Pagesの外部DNSカスタムドメインは公式サポート

Pages公式ドキュメントに明記されています。

If you do not want to point your nameservers to Cloudflare, you must create a custom CNAME record to use a subdomain with Cloudflare Pages.

(ネームサーバーをCloudflareに向けたくない場合、CNAMEレコードを作成することでサブドメインをCloudflare Pagesで使える)

ただしサブドメイン限定です。apexドメイン(example.or.jp そのもの)をPagesに割り当てるには、そのドメインがCloudflareアカウント上のゾーンであることが必須と明記されています。

手順

前提: サイトはCloudflare Pagesにデプロイ済み(<project>.pages.dev で稼働中)。

1. Cloudflare側: カスタムドメインを先に登録する

ダッシュボード → Workers & Pages → 対象プロジェクト → Custom domains → 「Set up a custom domain」で xxx.example.or.jp を追加します。ゾーンがCloudflare外にあるため「CNAMEレコードを追加してください」という指示が出て、検証待ち状態になります。

注意: 順序が重要です。公式ドキュメントに、ダッシュボードでの登録前にCNAMEだけ向けると名前解決に失敗し522エラーになると明記されています。必ずCloudflare側の登録を先に済ませてから、DNS管理者に依頼してください。

2. 組織側: CNAMEレコード1本の追加を依頼

DNS管理者への依頼内容はこれだけです。

xxx.example.or.jp.  CNAME  <project>.pages.dev.

レコードが引けるようになるとCloudflareが自動検証し、SSL証明書も自動発行・自動更新されます。反映はDNS伝播しだいで、通常は数分〜数時間です。

3. (事前確認)CAAレコードの有無

対象ドメインにCAAレコード(証明書発行元を制限するレコード)がある場合、Cloudflareが使う認証局(Pages公式ドキュメントの例示では letsencrypt.orgpki.googssl.com。CAの構成は変わりうるのでSSL/TLS側のCAAドキュメントも参照)の発行を許可してもらう必要があります。事前に確認しておくと手戻りがありません。

dig CAA example.or.jp +short

何も返らなければCAA制限はなく、追加の依頼は不要です。

補足

  • カスタムドメイン追加後も <project>.pages.dev は生き続けます。正規URLを一本化したい場合は _redirects でのリダイレクトや <link rel="canonical"> で対応できます。
  • カスタムドメインは無料枠でもプロジェクトあたり最大100個まで付けられます。

罠: この構成ができるのはPagesだけ(Workersは不可)

「Cloudflareのカスタムドメイン設定は難しい・ゾーン必須」という印象があるとしたら、それはおそらくWorkersの仕様です。Workers vs. Pagesのcompatibility matrixで両者は明確に区別されています。

Custom domains outside Cloudflare zones可否
Workers
Pages

同ページの注記にも明記されています。

Unlike Pages, Workers does not support any domain whose nameservers are not managed by Cloudflare.

(Pagesと異なり、WorkersはCloudflareが管理していないネームサーバーのドメインを一切サポートしない)

つまり外部DNSからのCNAMEでカスタムドメインを付けられるのはPagesだけです。

これが効いてくるのが「新規プロジェクトはWorkers推奨」という近年の流れとの兼ね合いです。CloudflareはWorkersにStatic Assets機能を追加して以降、新機能をWorkers側にのみ投入しており、PagesからWorkersへの移行ガイドも用意されています。しかし外部DNS + サブドメインという要件がある場合、Workersに移行するとこの構成が成立しなくなります。一般論の「Workers推奨」を鵜呑みにせず、Pagesに留まるのが正解のケースです。

SSRはPagesでも動く(ただしフレームワークアダプタの動向に注意)

「Pagesは静的サイト専用」も古い理解で、Pages Functions(実体はWorkersと同じランタイム)によりSSRが動きます。

課金面の注意点(公式のFunctions pricingより):

  • 静的ファイルへのリクエストは無料・無制限("Requests to static assets are free and unlimited")
  • SSR(Functions)を通るリクエストはWorkersと共通の無料枠(10万リクエスト/日)を消費

大半が静的配信のサイトなら余裕ですが、全ページSSRの場合はこの枠を意識する必要があります。

ただし、フレームワーク側のアダプタはWorkersへ移りつつあり、SSRの選択肢は狭まっています(2026年7月時点):

フレームワークPagesでのSSR
Next.jsnext-on-pages は非推奨・リポジトリはアーカイブ済み(2025年9月)。後継のOpenNextWorkers専用(静的エクスポートならPagesで可)
Astro@astrojs/cloudflare v13(Astro 6)でPagesサポートを廃止、Workers専用に
Nuxt🟡 cloudflare_pages プリセットは残るがレガシー扱い(推奨はWorkersモジュール)
SvelteKitadapter-cloudflare がWorkers/Pages両対応を継続

つまり「外部DNSのサブドメイン + SSR」を両立したい場合、現時点で安心して選べるのはSvelteKit、もしくはPages Functionsを直接書く構成です。サイトの大半を静的生成にしてSSRを最小限に抑える設計なら、この問題自体を小さくできます。

まとめ

  • 組織ドメインのDNSを動かせなくても、Pagesならサブドメインを無料で割り当てられる(外部DNSにCNAME 1本)
  • サブドメインだけのゾーン持ち込み(Subdomain setup)はEnterprise限定
  • 必ずCloudflare側のカスタムドメイン登録を先に(逆順だと522エラー)
  • CAAレコードは dig CAA <domain> +short で事前確認
  • 外部DNSカスタムドメインはPages限定でWorkersは不可。「新規はWorkers推奨」の流れがあっても、この要件があるならPagesに留まる
  • SSRもPages Functionsで動くが、フレームワークアダプタはWorkersへ移行が進む(Next.js・AstroはWorkers専用化。Pages両対応を維持しているのはSvelteKit)

参考