Webアプリケーションのレンダリング方式は、検索エンジンからの評価を大きく左右します。SPA(Single Page Application)で構築したサイトが検索結果に表示されない、SSR(Server Side Rendering)を導入したのにCore Web Vitalsが悪化した――こうした問題の多くは、レンダリング方式ごとのSEO特性を正しく把握していないことが原因です。
2025年12月にはGoogleがJavaScript SEOに関するドキュメントを3件更新し、SPAにおけるcanonical URLやエラーページの扱いに新たな注意点が追加されました。さらに、GPTBotやClaudeBotといったAIクローラーはJavaScriptを実行できないため、SSR/SSGの重要性は従来以上に高まっています。
レンダリング方式の全体像
Webページをブラウザに表示するまでの処理をどこで・いつ実行するかによって、レンダリング方式は大きく4つに分類されます。
| 方式 | 正式名称 | HTMLの生成場所 | 生成タイミング |
|---|---|---|---|
| CSR(SPA) | Client Side Rendering | ブラウザ | ユーザーアクセス時 |
| SSR | Server Side Rendering | サーバー | ユーザーアクセス時 |
| SSG | Static Site Generation | サーバー | ビルド時(事前) |
| ISR | Incremental Static Regeneration | サーバー | ビルド時+一定間隔で再生成 |
CSRとSSRは「リクエストのたびにHTMLを生成する」点で共通しますが、その処理主体がブラウザかサーバーかで異なります。SSGとISRは「事前にHTMLを生成しておく」アプローチですが、ISRはコンテンツの鮮度を保つ仕組みを備えています。
CSR(SPA)の仕組みとSEOへの影響
CSRでは、サーバーはほぼ空のHTMLファイルとJavaScriptバンドルを返します。ブラウザがJavaScriptを実行し、DOMを構築してページの内容を画面に表示します。
<!-- CSR/SPAの場合、サーバーが返すHTML -->
<!DOCTYPE html>
<html>
<head><title>My App</title></head>
<body>
<div id="root"></div> <!-- 中身は空 -->
<script src="/bundle.js"></script>
</body>
</html>
このアプローチではページ遷移時にHTMLの再読み込みが不要なため、操作感はネイティブアプリに近くなります。一方、SEOの観点では以下の問題が発生します。
Googlebotの処理遅延
Googlebotは2段階でページを処理します。まずHTMLをクロールし、次にヘッドレスChromiumでJavaScriptをレンダリングします。GoogleのMartin Splitt氏がChrome Dev Summit 2019で明らかにしたデータによると、クロールからレンダリング完了までの中央値は約5秒です(出典: Onely)。Google公式ドキュメントでは「数秒かかる場合があるが、それ以上かかることもある」と記載されています(出典: Google Developers)。
ただし、これはレンダリングキューの待ち時間であり、実際のインデックス完了までにはさらに時間がかかります。SEO調査会社Onelyの検証では、JavaScriptに依存するページの5〜50%が、サイトマップ送信から2週間後もインデックスされないままだったと報告されています(出典: Onely)。
AIクローラーはJavaScriptを実行しない
2025年以降、検索体験に大きな変化をもたらしているのがAIクローラーの台頭です。Vercelの調査によると、GPTBotの月間リクエスト数は約5億6,900万件、ClaudeBotは約3億7,000万件に達しています(出典: Vercel)。
GPTBotやClaudeBotはJavaScriptを実行する能力を持っていません。CSR/SPAで構築されたサイトでは、これらのクローラーは空の<div id="root"></div>しか取得できず、コンテンツをまったく認識できません。AI検索(ChatGPT検索、Claude検索など)からの流入を獲得するためには、サーバー側でHTMLを生成する方式が不可欠です。
2025年12月 Google公式ドキュメントの更新
2025年12月15日〜18日にかけて、GoogleはJavaScript SEOに関する3つの重要なドキュメント更新を行いました。
1. canonical URLの扱い SPAでJavaScriptによりcanonical URLを書き換える場合、初期HTMLにはcanonicalタグを記述しないことが推奨されるようになりました。クロール時とレンダリング後でcanonical URLが異なると、Googleが誤ったURLをインデックスする可能性があるためです(出典: Search Engine Journal)。
2. エラーページのHTTPステータスコード SPAのクライアントサイドルーティングで404ページを表示する場合でも、HTTPステータスコードとして200を返すのではなく、正しく404を返す必要があります。200ステータスで返されたページは「レンダリングキューに送られない可能性がある」とGoogleは明記しています。
3. noindexディレクティブの挙動
Googlebotがnoindexタグを検出した場合、レンダリングとJavaScriptの実行をスキップすることがあります。JavaScriptでnoindexを解除する実装は「期待どおりに動作しない可能性がある」と警告されています。
SSR(サーバーサイドレンダリング)の仕組みとSEO特性
SSRでは、ユーザーのリクエストごとにサーバー上でReactやVueのコンポーネントを実行し、完成したHTMLをブラウザに返します。ブラウザはまず静的なHTMLを表示し、その後JavaScriptを読み込んでインタラクティブな機能を有効化します(この処理をハイドレーションと呼びます)。
ユーザー → サーバー → HTMLを生成 → ブラウザに送信
↓
HTMLを表示(即座に閲覧可能)
↓
JSを読み込み → ハイドレーション
↓
インタラクティブに操作可能
SEOにおける強み
- クローラーが完成したHTMLを直接取得できる:Googlebotのレンダリングキュー待ちが不要になり、インデックス速度が向上します
- AIクローラーにもコンテンツを配信できる:JavaScriptを実行しないGPTBotやClaudeBotにも完全なHTMLが提供されます
- 動的なメタ情報をページごとに生成できる:
<title>タグやOGPタグをリクエスト時にサーバー側で挿入するため、ページごとに最適化された検索結果の表示が可能です
考慮すべき点
- サーバー負荷が高い:リクエストごとにHTML生成を行うため、アクセス数に比例してサーバーリソースが必要になります。CDNエッジでSSRを実行するエッジレンダリングで負荷を分散する方法もあります
- TTFB(Time to First Byte)が長くなりやすい:サーバーの処理時間がレスポンスに直結するため、重い計算や外部API呼び出しがあるとTTFBが悪化します
- ハイドレーション不一致:サーバーで生成したHTMLとクライアント側のJavaScriptが生成するDOMにずれがあると、画面のちらつきやエラーが発生します
SSG(静的サイト生成)の仕組みとSEO特性
SSGでは、ビルド時にすべてのページのHTMLを事前に生成し、CDNから配信します。ユーザーのリクエスト時にはサーバーサイドの処理が一切発生しないため、最も高速なレスポンスを実現できます。
SEOにおける強み
- LCP(Largest Contentful Paint)が最も良好:事前生成された静的HTMLをCDNから配信するため、レスポンス速度が非常に速く、Core Web VitalsのLCPスコアが有利になります
- サーバー負荷がほぼゼロ:CDNキャッシュからの配信のため、大量アクセスにも耐えられます
- クローラーとの相性が最も良い:完全なHTMLが常に存在するため、Googlebot・AIクローラーの両方に最適です
考慮すべき点
- コンテンツの更新にビルドが必要:記事の修正やデータの変更を反映するたびにビルドを実行する必要があります
- ページ数が多いとビルド時間が長大化する:数万ページ規模のサイトでは、ビルドに数十分〜数時間かかる場合があります
- リアルタイム性のあるコンテンツには不向き:在庫数やユーザーごとのパーソナライズなど、リクエスト時点のデータを反映する必要がある場合には適しません
ISR(インクリメンタル静的再生成)
ISRは、SSGの高速配信とSSRの動的更新を組み合わせた方式です。ビルド時に静的HTMLを生成しつつ、一定の再検証間隔(revalidate)を設けることで、バックグラウンドで最新コンテンツへの再生成を行います。
// Next.js App RouterでのISR設定例
// app/blog/[slug]/page.tsx
export const revalidate = 3600; // 1時間ごとに再検証
export default async function BlogPost({ params }) {
const post = await getPost(params.slug);
return <article>{post.content}</article>;
}
ユーザーはキャッシュ済みの静的ページにアクセスするため表示は高速で、次のリクエストをトリガーにバックグラウンドで再生成が実行されます。ECサイトの商品ページやニュースサイトのように「頻繁に更新されるが、数分〜数時間の遅延は許容できる」コンテンツに適しています。
React Server Components(RSC)の登場とSEOへの影響
2025年以降のフロントエンド開発で注目されているのが、React Server Components(RSC)です。従来のSSRとは異なるアプローチでサーバーサイド処理を実現します。
SSRとRSCの違い
| 項目 | 従来のSSR | React Server Components |
|---|---|---|
| レンダリング対象 | コンポーネントツリー全体 | サーバーコンポーネントのみ |
| クライアントへのJS送信 | 全コンポーネントのJSを送信 | サーバーコンポーネントのJSは送信しない |
| ハイドレーション | ツリー全体をハイドレーション | クライアントコンポーネントのみ |
| ストリーミング | 対応(フレームワーク依存) | React Suspenseと統合 |
RSCでは、データ取得やレイアウトなどの処理をサーバーコンポーネントとして実装し、ボタンやフォームなどのインタラクティブな部分だけをクライアントコンポーネントとして実装します。サーバーコンポーネントのJavaScriptはブラウザに送信されないため、バンドルサイズが削減され、INP(Interaction to Next Paint)スコアの改善につながります(出典: react.dev)。
現時点でRSCをプロダクション環境で安定して利用できるフレームワークはNext.jsのApp Routerが事実上の主要な選択肢です。
レンダリング方式のSEO比較
各レンダリング方式のSEO関連特性を整理します。
| 評価軸 | CSR(SPA) | SSR | SSG | ISR |
|---|---|---|---|---|
| Googlebotの認識 | レンダリング後に認識(遅延あり) | 即座に認識 | 即座に認識 | 即座に認識 |
| AIクローラーの認識 | 不可 | 可能 | 可能 | 可能 |
| LCP(初期表示速度) | 遅い | 中程度 | 最速 | 最速(キャッシュ有効時) |
| TTFB | 速い(空HTMLのため) | 遅くなりやすい | 最速 | 最速(キャッシュ有効時) |
| コンテンツの鮮度 | リアルタイム | リアルタイム | ビルド時点で固定 | 再検証間隔で更新 |
| サーバー負荷 | 低い | 高い | 最も低い | 低い |
| ページ単位のmeta最適化 | 困難(JS依存) | 容易 | 容易 | 容易 |
Core Web VitalsとRenderingの関係
Googleはページエクスペリエンスの指標としてCore Web Vitalsを検索ランキングに反映しています。2024年3月にFID(First Input Delay)がINP(Interaction to Next Paint)に置き換わり、現在の3指標と基準値は以下のとおりです。
| 指標 | 意味 | 良好 | 要改善 | 不良 |
|---|---|---|---|---|
| LCP | 最大コンテンツの表示時間 | 2.5秒以下 | 2.5〜4.0秒 | 4.0秒超 |
| INP | 操作に対する応答時間 | 200ms以下 | 200〜500ms | 500ms超 |
| CLS | レイアウトのずれ量 | 0.1以下 | 0.1〜0.25 | 0.25超 |
レンダリング方式によって各指標への影響が異なります。
- LCP: SSGとISRが最も有利です。静的HTMLをCDNから配信するため、サーバーの応答時間がほぼゼロになります。SSRはサーバー処理時間が加算されるため、API呼び出しが多いページではLCPが悪化する可能性があります
- INP: CSR/SPAは大量のJavaScriptをクライアントで実行するため、メインスレッドが長時間ブロックされ、INPが悪化しやすい傾向があります。RSCを採用するとクライアントに送信するJavaScript量が削減されるため、INPの改善が期待できます
- CLS: SSRやSSGでは初期HTMLに正しいレイアウト情報が含まれるため、後からコンテンツが読み込まれて画面がずれるCLSの問題が起きにくくなります。CSR/SPAではデータ取得後にDOMが大きく変化するため、CLSが悪化しやすくなります
主要フレームワークのレンダリング対応状況
2026年2月時点の主要フレームワークの対応状況を比較します。
| フレームワーク | ベースライブラリ | CSR | SSR | SSG | ISR | RSC | 特徴 |
|---|---|---|---|---|---|---|---|
| Next.js 15 | React | 対応 | 対応 | 対応 | 対応 | 対応 | 全方式をルート単位で切替可能。Turbopackによる高速ビルド |
| Nuxt 4 | Vue | 対応 | 対応 | 対応 | 対応(ISG) | 非対応 | @nuxtjs/seoモジュールでSEO設定を一括管理 |
| Astro 5 | 非依存 | 対応 | 対応 | デフォルト | 非対応 | 非対応 | ゼロJSがデフォルト。Islands Architectureで必要な部分だけ動的化 |
| SvelteKit | Svelte | 対応 | 対応 | 対応 | 非対応 | 非対応 | コンパイル時最適化によるバンドルサイズ最小化 |
| Remix | React | 非対応 | デフォルト | 非対応 | 非対応 | 非対応 | SSR特化。ネストルーティングでデータ・CSS・モジュールを並列プリフェッチ |
(出典: Next.js公式ブログ、Nuxt公式ドキュメント、Astro 5リリースノート)
フレームワーク選定のポイント
Reactベースのアプリケーションを構築する場合、Next.js 15がRSC対応も含めて最も選択肢が広くなります。Reactエコシステムとの親和性も高く、ルートごとにCSR・SSR・SSG・ISRを使い分けられる柔軟性があります。
Vueベースで開発する場合はNuxt 4が標準的な選択です。useSeoMetaコンポーザブルにより、型安全なメタデータ管理が組み込みで提供されています。
コンテンツ中心のサイト(ブログ、ドキュメント、コーポレートサイト)で、JavaScriptの使用を最小限に抑えたい場合はAstro 5が適しています。デフォルトでゼロJavaScriptの静的HTMLを生成し、インタラクティブな部分だけを「Island」として個別にハイドレーションするアプローチを取ります。
サイトの種類から選ぶレンダリング方式
サイトの特性に応じた推奨レンダリング方式を整理します。
| サイトの種類 | 推奨方式 | 選定理由 |
|---|---|---|
| ブログ・メディアサイト | SSG or ISR | コンテンツの更新頻度が低〜中程度。SEO最重要。ISRなら更新も自動反映 |
| ECサイト(商品一覧・詳細) | ISR or SSR | 在庫・価格の反映が必要。ISRの再検証間隔で多くのケースに対応可能 |
| ECサイト(カート・決済) | CSR | ログイン後の操作でありSEO不要。リアルタイムな状態管理が必要 |
| コーポレートサイト | SSG | 更新頻度が低くSEOを重視。ビルド時間も短い |
| ダッシュボード・管理画面 | CSR | 検索インデックス不要。リアルタイムデータの操作が中心 |
| SNS・コミュニティ | SSR | ユーザー投稿が頻繁に更新される。パーソナライズされた表示が必要 |
| ドキュメントサイト | SSG(Astro推奨) | 大量のページを高速配信。JavaScriptは最小限で済む |
| ニュースサイト | ISR | 速報性とSEO両立。5〜60分程度の再検証間隔で運用 |
1つのサイト内でも、公開ページはSSG/ISR、管理画面はCSRというように、ルートごとに方式を使い分けるのが現在の主流です。Next.jsやNuxtではこのハイブリッドアプローチが標準的にサポートされています。
ダイナミックレンダリングの廃止とその代替策
以前はSPA向けのSEO対策として、クローラーにだけサーバーレンダリング済みHTMLを返す「ダイナミックレンダリング」が推奨されていました。Googleは現在、このアプローチを非推奨と明確に位置づけています。
Googleの公式ドキュメントでは「ダイナミックレンダリングは回避策であり、JavaScriptで生成されたコンテンツの問題に対する長期的な解決策ではない」と記載されています。エラーが発生しやすく、サーバーの複雑性を増加させ、インデックスの不整合を招くリスクがあるためです(出典: Google Developers)。
代わりに推奨されているのは以下の3つです。
- SSR:サーバーサイドでHTMLを生成し、すべてのクライアントに同一のコンテンツを配信する
- SSG:ビルド時にHTMLを生成し、CDNから配信する
- ハイドレーション:静的HTMLとクライアントサイドJavaScriptを組み合わせる
いずれもクローラーと一般ユーザーに同じHTMLを配信するため、クローキングのリスクがなく、メンテナンスコストも低く抑えられます。
よくある疑問
SPAでもGoogleにインデックスされますか?
Googlebotはヘッドレスchromiumを搭載しており、JavaScriptを実行してSPAのコンテンツを認識できます。ただし、レンダリングキューでの待ち時間が発生するため、インデックスまでの時間がSSR/SSGと比べて遅くなります。また、GPTBotなどのAIクローラーはJavaScriptを実行できないため、AIベースの検索サービスには表示されません。
SSRを導入すればSEOは万全ですか?
SSR自体はクローラビリティを確保する手段であり、SEOの一要素に過ぎません。コンテンツの品質、内部リンク構造、構造化データ、ページ速度(Core Web Vitals)など、他の要因も総合的に評価されます。SSRを導入したうえで、サーバーの応答速度やハイドレーションの整合性にも注意を払う必要があります。
SSGとISRはどちらを選ぶべきですか?
更新頻度が月に数回程度であればSSG、日に数回〜数時間ごとの更新があるならISRが適しています。SSGは手動でビルドを実行する運用が必要ですが、ISRは再検証間隔を設定すればバックグラウンドで自動的にコンテンツが更新されます。ページ数が数万を超える大規模サイトでは、ビルド時間の観点からもISRが実用的です。
まとめ
レンダリング方式の選択は、サイトのSEOパフォーマンスに直結します。押さえるべきポイントは3つです。
- CSR/SPAは検索エンジン対策には不利:Googlebotのレンダリング遅延に加え、AIクローラーにはコンテンツがまったく見えません。公開ページにCSRを使用する場合は、SSRまたはSSGへの移行を検討する価値があります
- SSG/ISRがSEOには最も有利:事前に完成したHTMLをCDNから配信するため、クローラー認識・表示速度の両面で優れています。コンテンツの更新頻度に応じてSSGかISRを使い分けてください
- 1サイト内で方式を使い分けるのが現在の標準:公開ページはSSG/ISR、動的な機能はSSR、ログイン後の画面はCSRといったハイブリッド構成が、Next.js 15やNuxt 4では標準的にサポートされています
2025年12月のGoogle公式ドキュメント更新やAIクローラーの急増を踏まえると、JavaScriptに依存した描画を公開ページで使い続けることのリスクは高まる一方です。フレームワークの選定とレンダリング方式の設計を、SEO戦略の初期段階から組み込むことが検索流入の確保に直結します。