2025/12/11
Vercel から Cloudflare Pages へ移行した具体的な手順とハマりポイント【後編】
Vercel から Cloudflare Pages へ移行した具体的な手順とハマりポイント【後編】
前編では、Vercel から Cloudflare Pages に移行しようと考えた理由や、移行先の候補を比較して最終的な方針を決めるまでの検討ログを整理しました。
後編では、その方針に沿って実際に行った作業内容と、途中でハマったポイント、移行後の確認と Vercel 側の跡片付けまでを記録しておきます。
全体の流れ
実際の作業は、次のような段階に分けて進めました。
- Cloudflare に [my-project] を登録する
- お名前.com のネームサーバーを Cloudflare 指定のものに変更する
- Cloudflare Pages で GitHub リポジトリ(Astro)を接続してビルドする
https://[my-project].pages.dev/で動作確認するwww.[my-project]の CNAME を Vercel → Cloudflare Pages に切り替える- 移行後の表示やリダイレクト、HTTPS設定を確認する
- Vercel 側からカスタムドメインとプロジェクトを削除する
順番に詳しく見ていきます。
手順1: Cloudflare にドメインを追加
1-1. [my-project] を Cloudflare に登録
まずは Cloudflare のダッシュボードから、ブログで使っているドメインを登録しました。
- Cloudflare にログイン
- 「Add a domain」または「Connect a domain」を選択
[my-project]を入力して進む- DNS レコードのスキャン方法は、推奨の Quick scan for DNS records を選択
- AI クローラーに関する設定は、今回は 「Block AI training bots on all pages」 を選択
1-2. インポートされた DNS レコードの確認
Cloudflare が自動で既存の DNS レコードを取り込んでくれるので、一覧画面で内容を確認しました。
ポイントは次の1点だけです。
CNAME www → (Vercelのホスト名)
この時点では まだ本番環境を変えたくない ため、レコードはすべてそのままにして「Continue」で次に進みました。
手順2: お名前.com のネームサーバーを Cloudflare に切り替え
2-1. Cloudflare が提示するネームサーバーを確認
ドメイン追加の最終ステップで、Cloudflare が
xxxx.ns.cloudflare.comyyyy.ns.cloudflare.com
といった形で、2つのネームサーバー名を表示します。
これが、今後 [my-project] で使用するべきネームサーバーです。
2-2. お名前.com 側で設定変更
続いて、お名前.com の管理画面でネームサーバーを切り替えました。
- お名前.com にログイン
- ドメイン一覧から
[my-project]を選択 - 「ネームサーバーの設定」画面を開く
- 「他のネームサーバーを利用」などの項目を選択
- Cloudflare が提示した 2 つのネームサーバーを入力
- 設定を保存
これで DNS の権威は Cloudflare に移りましたが、レコードの中身はまだ Vercel を向いたままなので、この段階では本番サイトは引き続き Vercel 上で動いている状態です。
手順3: Cloudflare Pages に Astro のサイトをデプロイ
3-1. Workers & Pages から Pages プロジェクトを作成
次に、Cloudflare Pages 側にブログのプロジェクトを作成しました。
- Cloudflare ダッシュボードの左メニューから 「Workers & Pages」 を選択
- 右上の 「Create application」 をクリック
- 最初は Workers の作成画面が表示されるので、画面下部にある
「Looking to deploy Pages? Get started」 をクリック
ここが少し分かりづらく、最初は Workers 側の設定だけが見えて戸惑いました。
Pages の入口は画面下のリンクから入る必要があります。
3-2. GitHub リポジトリを接続
Pages のウィザードに入ったら、Git リポジトリを接続します。
- 「Import an existing Git repository」を選択
- プロバイダとして GitHub を選ぶ
- 初回は GitHub 側で「Cloudflare Workers and Pages」アプリのインストールを求められるので、
- 対象アカウントを選択
- (ブログ用リポジトリ)にアクセス権を付与
- 「Save」で確定
- Cloudflare のダッシュボードを再読み込みすると、リポジトリの一覧に
[my-project]が表示されるようになった
一度ダッシュボードをリロードしないとリポジトリ一覧が出てこなかった点は、実際にハマりポイントでした。
3-3. ビルド設定(Astro)
リポジトリを選択すると、ビルド設定の画面に移ります。
今回、Vercel 側では次のような設定になっていました。
- Framework: Astro
- Build Command:
npm run build - Output Directory:
dist
そのため、Cloudflare Pages でも同じ設定をそのまま写しました。
- Project name:
[my-project] - Production branch:
main - Framework preset: Astro
- Build command:
npm run build - Build output directory:
dist - Root directory: 空欄(リポジトリ直下に Astro プロジェクトがあるため)
入力が完了したら 「Save and Deploy」 を押し、ビルドが完了するのを待ちました。
3-4. https://[my-project].pages.dev/ で動作確認
ビルドが成功すると、Cloudflare Pages から
https://[my-project].pages.dev/
という URL が発行されます。
ここで、次の項目を一通り確認しました。
- トップページが表示されるか
- 記事一覧・記事詳細が開けるか
- 画像が崩れていないか
- CSS や JavaScript が正しく読み込まれているか
- 404 ページが期待どおりの挙動になっているか
このタイミングでは本番ドメインにはまだ触っていないので、
安心して動作確認に集中できました。
手順4: www.[my-project] を Cloudflare Pages に向ける
4-1. Custom domains に www.[my-project] を追加
Pages での動作確認が取れたので、本番ドメインを紐付けます。
- Cloudflare ダッシュボード → 「Workers & Pages」
[my-project]プロジェクトを選択- 「Custom domains」タブを開く
- 「Set up a custom domain」をクリック
- 入力欄に
www.[my-project]と入力して追加
このとき、Cloudflare が既存レコードとの違いを比較する画面を表示してきます。
- Existing record:
CNAME www → (Vercelのホスト名) - New record:
CNAME www → [my-project].pages.dev
ここで 「Activate domain」 を押すと、Cloudflare が DNS レコードを書き換え、www.[my-project] の向き先が Vercel から Cloudflare Pages に切り替わります。
4-2. DNS レコードの確認
念のため、DNS タブで内容を確認しました。
- Type: CNAME
- Name: www
- Content:
[my-project].pages.dev - Proxy: オレンジの雲(Proxied)
この状態になっていれば、www.[my-project] は Cloudflare Pages を向いている と判断できます。
手順5: 移行後の確認結果
本番ドメインの切り替え後、次のような確認を行いました。
5-1. 表示内容の一致
- シークレットウィンドウ
- スマホのモバイル回線
などを使って、
https://[my-project].pages.dev/https://www.[my-project]/
を両方開き、表示内容が一致していることを確認しました。
キャッシュの影響を避けるため、普段使っていないブラウザや回線で確認しておくと安心です。
5-2. HTTPS とリダイレクト
Cloudflare 側の設定も合わせて確認しました。
- SSL/TLS → Overview
- 適切なモード(Full など)になっているか
- Edge Certificates
- Always Use HTTPS: ON
- Automatic HTTPS Rewrites: ON
また、ルートドメインから www へのリダイレクトも Cloudflare の Redirect Rules で設定しました。
- 条件: Host equals
[my-project] - アクション:
https://www.[my-project]/$1に 301 リダイレクト
これで、https://[my-project] にアクセスしても、自動的に https://www.[my-project] に統一されるようになりました。
手順6: Vercel 側の跡片付け
Cloudflare Pages で問題なく動作していることを確認したあと、Vercel 側も整理しました。
6-1. カスタムドメインの削除
- Vercel にログイン
- 該当プロジェクト([my-project])を開く
- Settings → Domains を開く
www.[my-project]/[my-project]が残っていれば、それぞれ Remove
これで、Vercel 側からはカスタムドメインが切り離されます。
6-2. プロジェクトの削除
続いて、プロジェクト自体も削除しました。
- プロジェクトの Settings → General を開く
- 画面下部の Danger Zone にある「Delete Project」を実行
- 指示どおりにプロジェクト名を入力して削除を確定
削除後、旧URL(*.vercel.app)にアクセスすると、Vercel の 404 ページが表示されることを確認しました。
作業時のハマりポイントまとめ
今回の移行で引っかかった部分をまとめておきます。
1. Workers & Pages の UI で Pages の入り口が分かりづらい
- 「Create application」から進むと、最初は Workers 向けの画面が出てくる
- Pages のウィザードは、画面下部の「Looking to deploy Pages? Get started」から入る必要がある
最初にここに気づけず、しばらく Workers 側の設定を見てしまいました。
2. GitHub 連携後すぐにリポジトリ一覧が出てこない
- GitHub で Cloudflare Workers and Pages アプリをインストールし、リポジトリへのアクセス権も付与した
- それでも最初は Cloudflare 側でリポジトリ一覧が空のままだった
この場合は、Cloudflare ダッシュボードを一度リロードしたところ、正しくリポジトリ一覧が表示されました。
同じ現象が出た場合は、ブラウザの再読み込みや再ログインを試してみる価値があります。
3. DNS 反映の確認は別ブラウザ・別回線で行った方が安全
ブラウザや ISP のキャッシュの影響で、
- 自分の環境だけ旧 Vercel 版が見えている
- 実際にはすでに Cloudflare 版に切り替わっている
というズレが発生する可能性があります。
そのため、確認時には次のような方法を使いました。
- シークレットウィンドウ
- 普段使っていないブラウザ
- スマホのモバイル回線
まとめ
今回、Astro + Vercel で運用していたブログを、Cloudflare Pages + Cloudflare DNS の構成へ移行しました。
- DNS とホスティングを Cloudflare に集約できたことで、設定の窓口がシンプルになった
- Astro の静的サイトであれば、Build 設定もほぼそのまま移せた
- Vercel 側のプロジェクトやドメインもきれいに片付けられ、構成を頭の中で把握しやすくなった
同じように Vercel で静的サイトを運用していて、Cloudflare Pages への移行を検討している人にとって、今回の手順とハマりポイントの記録が少しでも参考になればと思います。