【2025年版】JavaScript SEO徹底解説|SPAのレンダリング問題とSSR/SSG/ISRで解決する実務手順

JavaScript SEOの本質は、検索エンジンがHTMLを確実に取得・理解できる状態をつくることです。 SPA(シングル ページ アプリケーション)はUXに優れる一方で、SR(クライアント サイド レンダリング)のみだと、取得タイミングや実行制約によりインデックス遅延/欠落が発生しやすくなります。
本記事では、代表的なレンダリング方式(SSR:サーバー サイド レンダリング/SSG:静的サイト生成/ISR:インクリメンタル スタティック リジェネレーション)の選び方と、実務で必須のチェックリストをまとめます。
用語の整理(カタカナ読み付き)
- SPA(シングル ページ アプリケーション)
1つのHTMLを起点にJSで画面を切り替えるアーキテクチャ - CSR(クライアント サイド レンダリング)
ブラウザ上でJSがHTMLを組み立てる方式 - SSR(サーバー サイド レンダリング)
サーバーでHTMLを生成し配信、初回からHTMLが存在 - SSG(静的サイト生成)
ビルド時にHTMLを生成してCDN等から配信 - ISR(インクリメンタル スタティック リジェネレーション)
公開後に必要なページだけ静的再生成 - プリレンダリング
ボット向けに事前描画済みHTMLを返す仕組み(中長期的にはSSR/SSGへの移行が推奨)
なぜSPAはインデックス問題を起こすのか
- 取得タイミング依存
CSRはJS実行後にDOMが出現するため、取得時点でHTMLが薄い場合がある - レンダリング制約
エラー・タイムアウト・リソースブロックで主要コンテンツが生成されない - リンク不可視化
onclick等のJS依存リンクは<a href>と比べて発見されにくい - URL一意性の欠如
ハッシュルーティング(#)のみではページが別URLとして扱われない - メタ/構造化データの遅延注入
CSR後に差し替えると取得されないリスク
対策の基本は、初回レスポンス時点で意味のあるHTMLを返す構成(SSR/SSG/ISR)を採用し、クローラブルなリンクと一意なURLを提供することです。
レンダリング方式の選び方(意思決定ガイド)
SSR(サーバー サイド レンダリング)
- 向いている:更新頻度が高い、会員制・検索結果ページなど動的性が強い
- 注意:サーバー負荷増→キャッシュ戦略(HTMLキャッシュ/Edge/TTFB短縮)が鍵
SSG(静的サイト生成)
- 向いている:コーポレート・ブログ・LPなど更新頻度が中程度~低い
- 注意:ビルド時間と発行フロー。多数URLではISRと併用検討
ISR(インクリメンタル再生成)
- 向いている:大量URLで一部のみ頻繁更新(ニュース/商品/在庫)
- 注意:再生成のタイミングとキャッシュ整合性、ステール表示のUX設計
フレームワーク例: Next.js / Nuxt / SvelteKit / Astro など(SSR/SSG/ISRに対応)。
検索に強いURLとリンク設計
- History APIを使うルーティング(パスベース)。
#依存のハッシュは回避 - 各ビューは固有のURLを持ち、自己参照canonicalを出力
<a href="/path">を基本に。onclickのみは避ける- フィルター/並び替えのURLパラメータ設計(不要な無限組合せはnoindex/正規化)
- パンくず・関連リンクで内部リンク網を明示
メタ情報と構造化データの出力戦略
- 初回HTMLにtitle/description/meta robots/OGP/Twitterを出力(CSR差し替え前提にしない)
- JSON-LD(構造化データ)はサーバー出力が原則。CSR注入は未取得リスク
- 多言語はhreflangの相互参照をテンプレートで担保
- 重複/ファセットはcanonicalで正規化し、必要に応じて
noindex
パフォーマンス最適化(Core Web Vitals連携)
- LCP(ラージェスト コンテントフル ペイント)
ヒーロー画像のpreload、適切なfetchpriority、CDN - INP(インタラクション トゥ ネクスト ペイント)
コード分割、遅延ロード、サードパーティ削減、長いタスク分割 - CLS(キュムレイティブ レイアウト シフト)
画像/広告/iframeにサイズ予約、フォントの表示戦略 - JS配信
type="module"+defer、不要バンドル除去、リソースヒント(preload/prefetch)
プリレンダリングとダイナミックレンダリング
- プリレンダリング
ビルド時に静的HTMLを生成(SSG/ISRと概念的に近い) - ダイナミックレンダリング
ボット検出で事前描画HTMLを返す回避策(中長期はSSR/SSGへ移行推奨) - 採用時は等価コンテンツ・安定運用・遅延/エラー検知を徹底

デバッグ&監視チェックリスト
- URL検査(Search Console)
ライブテストでレンダリング後HTMLとスクリーンショットを確認 - ページソース vs レンダリング後DOM
初回HTMLに主要コンテンツがあるか - ネットワーク/コンソールエラー
リソース403/404、CSP、JS例外 - リンク発見性
<a>のhrefで遷移できるか、無限スクロール時のフォールバック - 構造化データ
リッチリザルトテストで検証(テンプレート出力を前提) - ステータスコード
ソフト404/リダイレクト連鎖を排除 - クロール統計
クロール頻度・取得サイズ・レンダリング待ちを定期監視
ヘッドレスCMS(WordPress)とSPAの実務
- 構成
WordPress(データ管理)+フロント(Next.js等) - 出力
SSG/ISRで投稿・固定ページ・カテゴリ一覧を静的生成、更新はWebhookで再ビルド - メタ
タイトル/ディスクリプション/JSON-LDはテンプレートでサーバー出力 - 画像
最適化(WebP/AVIF)とsrcset/sizes、LCP対象はpreload - 計測
GSCのインデックス状況+Core Web Vitals/GA4/ログで効果を継続評価
実装プロセスとKPI
- 監査
現在の出力がCSR依存か、初回HTMLに主要コンテンツがあるかを確認 - 方式選定
SSR/SSG/ISRをURL特性ごとに割り当て(例:記事=SSG/ISR、検索=SSR) - テンプレ設計
URL・canonical・メタ・JSON-LD・パンくずをサーバー出力 - パフォーマンス
コード分割、画像最適化、キャッシュ/Edge/CDN設計 - 検証
URL検査(ライブ)・リッチリザルトテスト・ログで取得状況を確認 - 運用
ビルド/再生成の自動化(Webhook)、アラート(5xx/ビルド失敗/CLS悪化)
目安KPI
- 重要テンプレートの初回HTML文字数>レンダリング後との差が小さい
- 対象URLのインデックス率の改善(4〜8週比較)
- Core Web Vitals良好URL比率の上昇(LCP/INP/CLS)
- 自然検索のクリック数/掲載順位の改善、記事タイプでの顕著な向上
まとめ
JavaScript SEOの勝ち筋は明快です。 ①初回HTMLで意味のあるコンテンツを返す(SSR/SSG/ISR) ②クローラブルなURLとリンク ③メタ/構造化データはサーバー出力 ④Core Web Vitalsで体験品質を底上げ。 この4点を押さえれば、SPAでも安定して検索評価を獲得できます。
株式会社マスタープランでは、SPAのSEO監査→方式設計(SSR/SSG/ISR)→テンプレ実装→高速化→計測運用まで一気通貫で支援します。
ご希望の方は、お気軽にご相談ください。

