開発tax-lpメモ
SSG環境でのSEO基盤整備
前日にSSRからSSGへ移行し、SEO関連の実装を一通り終えていた。今日は実際に検証したところ問題が見つかり、修正した日。
問題の発見
Google Search Consoleで確認したところ、全サブドメインが未インデックス。/robots.txt と /sitemap.xml にアクセスすると404が返っていた。
原因: 前日のSSR構成では server/routes/ で動的に生成していたが、SSGに移行した今の構成ではサーバーサイド処理が動かない。cloudflare_pages_static プリセットでは Workers Runtimeが無効。
解決策: 静的ファイル生成に切り替え
サーバールートを廃止し、デプロイスクリプトのビルド前ステップで静的ファイルとして生成する方式に変更。public/ に置いたファイルは nuxt generate で dist/ にそのままコピーされる。
- robots.txt: デプロイスクリプト内でサブドメインごとにsitemapのURLを埋め込んで生成
- sitemap.xml: コンテンツディレクトリを走査してXMLを生成。ページ種別ごとにpriority/changefreqを設定
nuxt.config.ts にも prerender.routes に /sitemap.xml と /robots.txt を追加。
site.webmanifest の追加
PWA対応の前段階として追加。アイコン画像は未作成でパス指定のみ。
デプロイスクリプトのクリーンアップ改善
連続ビルド時に前の業種のrobots.txt/sitemap.xmlが残る問題に対応。各業種のビルド前に動的生成ファイルを削除してから再生成するフローに変更。
SSG移行時の注意点まとめ
server/routes/やserver/api/のハンドラはSSG環境では動作しない- robots.txt/sitemap.xmlのような静的ファイルはビルド時に生成する
server/middleware/はプリレンダリング時にも実行されるが、Hostがlocalhostになるので環境変数でのフォールバックが必要- Cloudflare Pages では
public/_headersでHTTPヘッダーを制御可能
振り返り
SSRからSSGに移行すると、サーバールートが全て無効になる。動的処理が必要なら外部サービスに委譲する。Cloudflare Pages静的ホスティングはこの制約さえ理解しておけば運用コストが低い。