• #SEO
  • #SSG
  • #Nuxt3
  • #Cloudflare Pages
  • #robots.txt
  • #sitemap.xml
開発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 generatedist/ にそのままコピーされる。

  • 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静的ホスティングはこの制約さえ理解しておけば運用コストが低い。