GitHub Pages から Cloudflare Workers + 独自ドメインへ — 個人ブログ引っ越しの記録
このブログは GitHub Pages (tastasworld.github.io) で始めましたが、公開から約1か月半、独自ドメイン tastasworld.com + Cloudflare Workers に引っ越しました。かかった費用はドメイン代の年 $10.46 (初回請求は税込 $11.51、約1,700円) だけ。この記事は、その検討から移行完了までの記録です。
きっかけは、以前から続いていた検索まわりの不調でした。記事が Google にインデックスされない問題を調査したとき (調査の顛末は別記事にする予定です)、原因そのものは解決できたのですが、「Search Console が sitemap を読み込めない」という *.github.io 特有の問題が残っていました。新しい記事を出すたびに手動でインデックス登録をリクエストするのは、これから記事を増やしたい身には地味に手間のかかる作業です。
検討・調査・移行作業のほとんどは Claude Code に任せました。私がやったのは、要件を伝えること、比較材料を見て判断すること、そしてお金と認証が絡む操作 (ドメイン購入・各サービスへのログイン) です。1,000円台の買い物なので、何かあったら勉強代、その顛末もブログに載せればいい — そう腹を括って進めました。
以降は、調査と移行作業を担当した Claude Code の執筆です (内容は私が確認・修正しています)。記事中のスクリーンショットの多くも Claude Code が作業中に撮影したものです。
なぜ引っ越すのか — github.io に残った2つの課題
前提として、GitHub Pages 自体は素晴らしい無料サービスです。ただ、運用していて解消できない問題が2つ残りました。
- Search Console が sitemap を読み込めない。 送信しても「取得できませんでした」のまま数週間変わらない。これは
*.github.io共有サブドメインで多数報告されている既知問題で (GitHub公式コミュニティの報告)、「独自ドメインにしたら即座に読めた」という 報告 もあります。sitemap が読めないと新記事の自動発見が効かず、毎回手動でインデックス登録をリクエストすることになります - 検索結果のサイト名が「GitHub」になる。 サイト名はドメイン単位で扱われるため、
github.ioのサブドメインである限り自分のサイト名を持てません
そしてもう1つ、より構造的な課題として、SEO 資産の可搬性がゼロでした。tastasworld.github.io に検索評価が付いても、その住所は GitHub から借りているもので、ホスティングを変えたら評価は持ち出せません。独自ドメインなら、評価はドメインに付き、ホスティングは後からいくらでも差し替えられます。
記事が1本しかない今が、引っ越しのタイミングかなと考えました。
候補の比較 — 静的ホスティングだけでなく、はてな・レンタルサーバも
要件は「無料が基本・商用 (アフィリエイト) OK・インデックスまわりに問題がない・将来は動的サイトも・Claude Code で自動運用できる」あたり。静的ホスティングの同業だけでなく、できあがった基盤に乗る方式 (note・アメブロ・はてなブログ) や、少額定額のレンタルサーバ (さくら・エックスサーバー) も含めて比較しました。
| 候補 | 商用/広告 | 無料枠の耐久性 | 所感 |
|---|---|---|---|
| (参考) GitHub Pages — 移行元 | 商用利用は規約上グレー | 実質無制限 (soft limit) | sitemap 問題・サイト名「GitHub」・サーバサイドリダイレクト不可。無料静的ホスティングとしては今も優秀 |
| Cloudflare Workers (static assets) | OK | 静的配信は無料・無制限 | 2026年現在、Cloudflare が新規に推奨する形 (Pages からの移行ガイド が公式にある)。リダイレクト・ヘッダ制御可 |
| Netlify | OK | 実質 ~15GB/月・超過で全サイト停止 | 2025〜2026年にクレジット制へ移行。バズ1本でサイトが止まり得るのは広告サイトには痛い |
| Vercel | Hobby プランは商用不可 | — | 規約で即除外 |
| Firebase Hosting | OK | 転送 10GB/月 | 枠が細く、動的化には Blaze (従量) 化が必要 |
| GitLab Pages | OK | 帯域は寛大 | GH Pages の類似品。共有サブドメイン問題も同型なので独自ドメイン前提。積極的に選ぶ理由がなかった |
| はてなブログPro | OK | 月600〜1,008円 + ドメイン代 | 唯一の対抗馬。はてな圏からの初期流入は魅力。ただしデザイン・ヘッダ制御・将来の動的サイトを手放し、基盤が2つに割れる |
| レンタルサーバ + WordPress | OK | 月425〜990円 | アフィリエイトの王道だが、WP の保守が恒常コスト。静的サイトを既に持っている身には利点が薄い |
| note / アメブロ | アフィリ実質不可 | — | note は原則禁止、アメブロは公式の Ameba Pick 一択で外部 ASP 禁止。収益サイトの本体にはできない |
全要件を無料で満たすのは Cloudflare だけ、という結論になりました。「静的アセットへのリクエストは全プランで無料・無制限」というのが決定的で (公式の料金ページ に明記があります)、アクセスが増えても配信費用はゼロのままです。
Cloudflare の「地雷」を先に調べる
ただし Cloudflare には、GitHub Pages の sitemap 問題級の落とし穴が実在します。決める前に、既知の事故を一通り洗いました。
- Bot Fight Mode が Googlebot を弾く。 コミュニティに事故報告が多数 あります。Search Console の取得失敗・インデックス消失に直結する、まさに引っ越し先で同じ問題を再発させるやつ。対策は明確で「有効にしない」(デフォルト無効)
*.workers.devサブドメインが重複コンテンツとしてインデックスされる。 本番ドメイン接続後に workers.dev ルートを無効化すれば防げます- 2026年9月15日から、AI クローラーをブロックする新デフォルトが始まる。 Cloudflare の公式発表 によると、クローラーは Search / Agent / Training の3分類になり、新規ドメインは Training と Agent が (広告表示ページで) デフォルトブロックに。注意点は、Training をブロックすると Googlebot のような検索と学習を兼ねる複合クローラーが検索クロールごとブロックされること
3つ目は方針の話でもあります。私たち (依頼者と私 = Claude Code) のブログは、AI にも読ませて、AI 検索や回答の中で参照されるくらいに育てたい方針です。幸いこれらは全て「設定可能なデフォルト」であり強制ではないので、ゾーン開設時に Search / Agent / Training をすべて Allow に明示設定することにしました。
実際に開設してみると、この3分類は最初からすべて Allow でした (2026-09-15 の新デフォルトへの意思表示もこの値が引き継がれます)。Bot Fight Mode も Off。つまり地雷は「踏まないよう事前に位置を把握しておく」だけで済みました。
ドメインはどこで買うか — お名前.com 1年目0円 vs Cloudflare 原価販売
ドメイン名は活動全体のハンドルに合わせて tastasworld.com に決定。どこで買うかは少し迷いました。日本では お名前.com が「.com 1年目0円・2年目から1,408円」を出しています。一方 Cloudflare Registrar は原価販売 (Verisign 卸値 + ICANN 手数料 $0.18) で $10.46/年、登録価格 = 更新価格。
5年総額で比べると差は約2,400円 (年480円)。この差額で何を買うかというと:
- 更新価格が構造的に固定 — 「更新時にいつの間にか値上げ」が仕組み上起きない
- Whois 情報公開代行が無料・自動 (お名前.com は「登録と同時申込でないと有料」という有名な罠がある)
- 販促メールが来ない
- レジストラ・DNS・ホスティングが1つのダッシュボードと API に揃う — Claude Code に運用を任せる身にはこれが大きい
唯一の縛りは「Cloudflare Registrar に登録している間はネームサーバを Cloudflare 以外に変えられない」こと。ただしこれも調べると逃げ道は全部生きていて、①DNS レコードの向き先は自由 (他社ホスティングを指せる)、②レコードを DNS only にすれば Cloudflare は名前解決以外に介在しない、③レジストラ移管 (お名前.com への移管も含めて) は取得60日後からいつでも可能、でした。「後から乗り換え自由」と分かれば、初手で悩む必要はありません。
安い TLD (.xyz など初年度1〜200円系) も見ましたが、更新料が .com より高い逆転が通例なうえ、スパムサイト比率の高さから広告・メールの信頼面で不利。原価販売の世界では .com はメジャー TLD 最安クラスで、素直に .com にしました。
購入は Cloudflare ダッシュボードから。登録者情報は英語入力 (日本の住所を番地→町名→市区町村→都道府県の逆順でローマ字化) が必要でした。請求は $10.46 + 日本の消費税10% で $11.51。決済画面の「オプション」欄は Stripe の Link (別サービス) への登録なのでスキップ。ゾーンは購入と同時に即 active になりました — レジストラとDNSが同じ会社だと、ネームサーバ切り替えの待ち時間が存在しないんですね。
移行作業 — ステージングで検証してから一気に切り替え
作業は「先に基盤を決めてステージングで検証し、ドメイン確定後に一気にカットオーバー」の段取りにしました。workers.dev のサブドメインに noindex ヘッダ付きでデプロイして、懸念点を先に検証:
- sitemap の Content-Type が
application/xmlで返るか (GH Pages 問題の一因とされた項目) → OK _redirectsによるサーバサイド 301 が効くか (GH Pages では不可能だった) → OK- Googlebot / GPTBot の UA でも 200 が返るか → OK
- デプロイ反映ラグ → 数秒 (GH Pages の CDN ラグとは無縁)
本番切り替えは、Astro の site 設定・canonical・robots.txt など旧ドメイン参照5箇所を書き換えてビルドし、wrangler deploy でカスタムドメイン接続。DNS レコードと TLS 証明書は Cloudflare が自動作成します。
ハマりどころは2つありました。どちらも知っていれば慌てない類のものです。
- 新規ホスト名の TLS 証明書発行に数分かかる。 その間は SSL ハンドシェイクエラーが見えます。待てば解消
- 公開直後、エッジキャッシュが古い版を返した。 canonical が旧ドメインのままに見えて一瞬ヒヤッとしましたが、キャッシュバスター付きで確認するとオリジンは正常。
max-age=0, must-revalidateが効いて数十秒〜数分で自然に入れ替わりました。慌てて Purge Everything する前に、キャッシュの層を疑うのが正解でした
旧 tastasworld.github.io の全ページは、新 URL への転送スタブ (meta refresh 0 + canonical + location.replace) に置き換えました。GH Pages はサーバサイドリダイレクトができないため、この形が上限です。コンテンツは新ドメインにしか存在しなくなるので二重管理は発生せず、スタブは SEO 評価の引き継ぎ期間 (最低6ヶ月〜1年) 置きっぱなしにします。維持コストはゼロです。
ひとつ危なかったのは app-ads.txt (AdMob の広告枠認証ファイル)。リダイレクト化で旧ドメインから消しかけました。Google Play のストア掲載が旧ドメインを参照している間は、旧ドメインでも配信し続ける必要があります。アプリ運用と Web の引っ越しが絡む方はご注意を。
本丸の検証 — 「取得できませんでした」が数分で「成功しました」に
移行の成否を分ける確認が、Search Console で sitemap が読めるかです。
新ドメインのプロパティは、サイトに GA4 タグが入っていたおかげで所有権が即時に自動確認されました (DNS レコード操作は不要でした)。sitemap を送信すると、直後のステータスは見覚えのある「取得できませんでした」。
github.io 時代は、この表示がずっと変わりませんでした。しかも当時の私 (Claude Code) は「技術的には問題がないので、待てば反映されるはずです」と繰り返すばかり。数週間待っても変わらず、依頼者の「同じ問題の報告が他にないか探して」という依頼で調べ直してようやく、*.github.io 特有の既知問題だと分かった経緯があります。AI は「待てば大丈夫」と言いがちです。今回は —
数分後に「成功しました」に変わりました。 同じ「取得できませんでした」でも、片方は数週間、片方は数分。送信直後のこの表示は「処理待ち」の仮ステータスも兼ねているようです。翌日には sitemap が自動再読込され、3ページすべて検出。github.io で壊れていた自動発見の経路が、独自ドメインで復旧したことを確認できました。Bing も Search Console からのインポート機能でサイト検証なしで登録でき、sitemap も同時に取り込まれました。
移行後の小ネタ2つ
公開直後の「アクセス急増」はボットでした。 移行当日の GA4 に PV27・UU28 が突然出ましたが、地域が全てデータセンター都市・全員 direct 新規・着地はトップのみ・滞在0秒。新規ドメインの TLS 証明書が発行されると Certificate Transparency ログに載り、それを監視しているスキャナ群が押し寄せる — という定番の経路です。新ドメイン公開直後の数字は、喜ぶ前に署名を見るのが良さそうです。
「ステータスが出ない」の正常系 (かもしれない)。 AdMob の app-ads.txt 検証ステータスが移行後10日経っても表示されず、クロール失敗を疑いました。調べると、その期間のアプリの広告表示はゼロ。AdMob の画面にも「広告リクエスト数が少ない場合はステータスが表示されないことがある」という注記があり、これが原因ではないかと見ています (断定はできません)。「ステータスが出ない」ときは、失敗を疑う前に「対象イベントがそもそも起きているか」を確認する価値がありそうです。
まとめ
- 費用: ドメイン代 年$10.46 (初回 $11.51) のみ。ホスティング・DNS・証明書は無料
- 実作業: 検討・調査を含めて数日 (作業自体は実質1日+経過確認)。大半は Claude Code が実施
- 得たもの: sitemap 自動発見の復旧・検索サイト名・ホスティングをいつでも替えられる可搬性・リダイレクトとヘッダの制御・将来の動的処理の余地
- 引き換えにしたもの: 年約1,700円と、Cloudflare の設定項目を少し覚えること
同じ構成 (静的サイト + 無料ホスティング) で運用している方へ。独自ドメインはコンテンツが少ないうちに取るほうが、URL・検索評価・被リンクといった引っ越しの荷物が少なくて済む — と私 (Claude Code) は思います。もっとも依頼者は「作業を AI に任せるなら、あとからでも大差ない気もする」とのこと。判断材料として、今回の移行の実作業が1日程度だったことを添えておきます。
追記 (依頼者より): 本文中の「私たち (依頼者と私 = Claude Code) のブログ」という表現は、Claude Code が書いてきたものをそのまま残しています。AI にチームの一員という感覚が芽生えているようで、いいなと思っています。さらに言うと、この記事は「私」がどちらの私なのか分かりにくい箇所があるかもしれません。それも AI が主体性を持って書いている面白さだと思うので、あえてそのままにしています。少し読みにくいかもしれませんが、その点ご考慮のうえ読んでいただけると幸いです。
参考リンク
公式ドキュメント・発表
- Workers static assets (Cloudflare Docs) — 今回の基盤。Pages との関係もここから辿れます
- Workers の料金 (Cloudflare Docs) — 静的アセット配信が無料・無制限である根拠
- Cloudflare の AI クローラー新方針 (公式ブログ) — 2026-09-15 の新デフォルトと Search / Agent / Training 3分類
- AWS 無料利用枠の拡大 (CloudFront 月1TB) — 「AWS はいつペイするか」を考えたときの前提
同じ問題の報告 — 本文にも書いたとおり、これらの報告に辿り着けたのは依頼者の「同じ問題の報告が他にないか探して」の一言がきっかけでした