「ReactやVue.jsで作ったサイトがインデックスされない」
「SPAはSEOに不利って本当?」
「JavaScriptサイトのSEO対策はどうすればいい?」
現代のWebサイトでは、React、Vue.js、Angularなどのフレームワークを使用したJavaScriptサイトが主流になっています。しかし、JavaScriptに大きく依存したサイトは、適切な対策を行わないとSEOで不利になる可能性があります。
Googlebotは進化してJavaScriptをレンダリングできるようになりましたが、完璧ではありません。特にSPA(シングルページアプリケーション)では、クローラビリティやインデックスの問題が発生しやすいです。
本記事では、JavaScriptサイトのSEO対策を徹底解説します。Googlebotのレンダリングの仕組み、SSR(サーバーサイドレンダリング)、プリレンダリングなど、JavaScript SEOに必要な知識を網羅的にお伝えします。
JavaScriptとSEOの関係
まず、JavaScriptとSEOの関係を理解しましょう。
現代のWebサイトとJavaScript
JavaScriptの役割として、インタラクティブなUI/UXの実現、動的なコンテンツの表示、シングルページアプリケーション(SPA)の構築、リッチなユーザー体験の提供などがあります。
主要なフレームワークとして、React(Facebook/Meta)、Vue.js、Angular(Google)、Next.js(Reactベース)、Nuxt.js(Vue.jsベース)などがあります。
JavaScriptサイトのSEO課題
主な課題として、コンテンツがJavaScript実行後にしか表示されない、クローラーがコンテンツを認識できない可能性、レンダリングに時間がかかる、リンクやナビゲーションの問題、メタデータの動的生成の問題などがあります。
GooglebotのJavaScript対応
歴史として、2015年以前はJavaScriptをほぼ実行できなかった、2015年以降、JavaScriptのレンダリング能力が向上、2019年、Evergreen Googlebot(常に最新のChromium)をリリースなどがありました。
現在の状況として、GooglebotはChromiumの最新バージョン相当のレンダリング能力を持つ、ほとんどのJavaScriptを実行可能、ただし、レンダリングには追加のリソースと時間が必要などがあります。
GooglebotのJavaScriptレンダリングの仕組み
GooglebotがJavaScriptサイトをどのように処理するかを解説します。
2段階のプロセス
Googleは、JavaScriptサイトを2段階で処理します。
第1段階:クロールとして、URLにアクセス、HTMLをダウンロード、CSSやJavaScriptファイルをダウンロードなどを行います。
第2段階:レンダリングとして、JavaScriptを実行、最終的なDOM(Document Object Model)を生成、コンテンツを抽出してインデックスなどを行います。
レンダリングキューの問題
重要なポイントとして、クロールとレンダリングは同時ではない、レンダリングはリソース集約的なため、キューに入れられる、レンダリングまでに数時間〜数日かかる場合がある、この遅延がインデックスの遅れにつながるなどがあります。
Web Rendering Service(WRS)
概要として、GoogleのJavaScriptレンダリング専用サービス、ヘッドレスChromiumを使用、最新のWeb APIをサポートなどがあります。
制限として、リソース(CPU、メモリ)の制限、タイムアウトの制限、一部のAPIはサポートされないなどがあります。
JavaScript SEOの問題点
JavaScript SEOで発生しやすい問題点を解説します。
問題1:コンテンツがインデックスされない
原因として、JavaScriptの実行エラー、レンダリングのタイムアウト、必要なリソースがブロックされているなどがあります。
確認方法:サーチコンソールのURL検査ツールでレンダリング結果を確認
問題2:リンクが認識されない
原因として、aタグを使用していない(onClick などでの遷移)、href属性がない、JavaScriptで動的に生成されるリンクなどがあります。
対策:標準的なaタグとhref属性を使用
問題3:メタデータの問題
原因として、タイトルやメタディスクリプションがJavaScriptで動的に設定、初期HTMLに含まれていないなどがあります。
対策:SSRで初期HTMLにメタデータを含める
問題4:遅延読み込みの問題
原因として、スクロールしないと表示されないコンテンツ(Lazy Load)、Intersection Observerでの遅延読み込みなどがあります。
対策:重要なコンテンツは初期表示に含める
問題5:クライアントサイドルーティングの問題
原因として、SPAでURLが変わってもサーバーにリクエストが行かない、History APIを使用したルーティングなどがあります。
対策:各URLに直接アクセス可能な設計にする
JavaScript SEOの基本対策
JavaScript SEOの基本的な対策を解説します。
対策1:重要なコンテンツはHTMLに含める
原則として、最も重要なコンテンツは初期HTMLに含める、JavaScriptなしでも基本的なコンテンツが表示される、メタデータ(title、description)は初期HTMLに含めるなどがあります。
対策2:標準的なHTMLリンクを使用
正しい実装:
<a href=”/page”>リンクテキスト</a>
避けるべき実装:
<div onClick=”navigate(‘/page’)”>リンクテキスト</div>
<a onClick=”navigate(‘/page’)”>リンクテキスト</a>(hrefなし)
対策3:robots.txtでリソースをブロックしない
重要として、CSS、JavaScript、画像などのリソースをブロックしない、Googlebotがレンダリングに必要なファイルにアクセスできるようにする、robots.txtの設定を確認などがあります。
対策4:エラーハンドリング
対策として、JavaScriptエラーが発生してもコンテンツが表示されるようにする、エラー境界(Error Boundary)の実装、重要な機能の段階的な強化(Progressive Enhancement)などがあります。
対策5:適切なステータスコード
重要として、存在しないページは404を返す(ソフト404を避ける)、リダイレクトは適切なステータスコードで実装、サーバーサイドでステータスコードを制御などがあります。
SSR(サーバーサイドレンダリング)
SSRについて詳しく解説します。
SSRとは
SSR(Server-Side Rendering)とは、サーバー側でJavaScriptを実行し、完成したHTMLをクライアントに送信する手法です。
仕組み:
- ユーザー/クローラーがページをリクエスト
- サーバーでJavaScriptを実行
- 完成したHTMLを生成
- HTMLをクライアントに送信
- クライアントでJavaScriptが「ハイドレーション」
SSRのSEOメリット
メリットとして、初期HTMLにすべてのコンテンツが含まれる、Googlebotがレンダリングを待つ必要がない、インデックスの遅延が発生しにくい、レンダリングエラーのリスクが低減などがあります。
SSRの実装方法
Next.js(React)として、getServerSideProps関数でSSRを実装、各ページでサーバーサイドでデータを取得、SEOに最適化されたフレームワークなどがあります。
Nuxt.js(Vue.js)として、asyncData / fetchでSSRを実装、サーバーサイドでのデータ取得が容易、Vue.jsプロジェクトのSSR標準ソリューションなどがあります。
Angular Universalとして、Angularの公式SSRソリューション、Expressサーバーと統合などがあります。
SSRの注意点
デメリットとして、サーバーの負荷が増加、各リクエストでレンダリングが必要、インフラコストの増加、キャッシュ戦略が重要などがあります。
SSG(静的サイト生成)
SSGについて解説します。
SSGとは
SSG(Static Site Generation)とは、ビルド時にHTMLを事前に生成しておく手法です。
仕組み:
- ビルド時にすべてのページのHTMLを生成
- 静的ファイルとしてホスティング
- リクエスト時は生成済みのHTMLを返す
SSGのSEOメリット
メリットとして、完全に静的なHTMLでSEOに最適、ページ速度が非常に高速、サーバー負荷が低い、CDNとの相性が良いなどがあります。
SSGに適したサイト
適しているケースとして、ブログ・メディアサイト、ドキュメントサイト、コーポレートサイト、ポートフォリオサイト、更新頻度が低いサイトなどがあります。
適していないケースとして、頻繁に更新されるコンテンツ、ユーザーごとに異なるコンテンツ、リアルタイム性が必要なサイト、ページ数が非常に多いサイトなどがあります。
SSGのツール
主なツールとして、Next.js(getStaticProps)、Nuxt.js(Static Site Generation)、Gatsby(React)、Hugo、Jekyll、Astroなどがあります。
ISR(Incremental Static Regeneration)
ISRについて解説します。
ISRとは
ISR(Incremental Static Regeneration)とは、静的ページを一定時間ごとにバックグラウンドで再生成する手法です。Next.jsで導入されました。
仕組み:
- ビルド時に静的HTMLを生成
- 一定時間(revalidate)経過後のリクエストで再生成をトリガー
- 再生成中は古いページを表示
- 再生成完了後、新しいページに切り替え
ISRのメリット
メリットとして、SSGの速度とSSRの鮮度を両立、すべてのページを再ビルドする必要がない、大規模サイトでもスケーラブル、SEOとパフォーマンスの両立などがあります。
ISRの実装(Next.js)
例:
export async function getStaticProps() {
const data = await fetchData();
return {
props: { data },
revalidate: 60, // 60秒ごとに再生成
};
}
プリレンダリング
プリレンダリングについて解説します。
プリレンダリングとは
プリレンダリングとは、クローラーなどのボットに対してのみ、事前にレンダリングされた静的HTMLを返す手法です。
仕組み:
- ユーザーエージェントを判定
- ボット(Googlebot等)の場合、プリレンダリングされたHTMLを返す
- 通常のユーザーの場合、SPAを返す
プリレンダリングのメリット
メリットとして、既存のSPAを大幅に変更せずに対応可能、クローラーに最適化されたHTMLを提供、実装が比較的容易などがあります。
プリレンダリングの注意点
注意として、Googleはクローキング(ユーザーとボットに異なるコンテンツを表示)を禁止、プリレンダリングは許容されているが、コンテンツが同一であることが条件、異なるコンテンツを表示するとペナルティのリスクなどがあります。
プリレンダリングのツール
ツールとして、Prerender.io、Rendertron(Google)、Puppeteer、自作のプリレンダリングサービスなどがあります。
ハイドレーション
ハイドレーションについて解説します。
ハイドレーションとは
ハイドレーション(Hydration)とは、サーバーで生成された静的HTMLに、クライアント側でJavaScriptを「注入」してインタラクティブにするプロセスです。
仕組み:
- サーバーがHTMLを生成して送信
- ブラウザがHTMLを表示(この時点では静的)
- JavaScriptが読み込まれる
- ReactなどがDOMにイベントハンドラをアタッチ
- ページがインタラクティブになる
SEOへの影響
ポイントとして、Googlebotは静的HTMLを認識できる、ハイドレーション前のHTMLがインデックス対象、ハイドレーションによる表示変更は最小限にするなどがあります。
ハイドレーションの問題
よくある問題として、サーバーとクライアントでのHTML不一致、ハイドレーションエラー、パフォーマンスへの影響などがあります。
フレームワーク別のSEO対策
主要なフレームワーク別のSEO対策を解説します。
React
課題として、素のReact(Create React App)はクライアントサイドレンダリング、初期HTMLにコンテンツが含まれないなどがあります。
対策として、Next.jsを使用(推奨)、react-helmetでメタデータを管理、React Server Componentsの活用などがあります。
Vue.js
課題として、Vue CLIで作成したプロジェクトはSPA、初期HTMLにコンテンツが含まれないなどがあります。
対策として、Nuxt.jsを使用(推奨)、vue-metaでメタデータを管理、SSRの実装などがあります。
Angular
課題として、デフォルトでクライアントサイドレンダリング、複雑なアプリケーションが多いなどがあります。
対策として、Angular Universalを使用、プリレンダリングの実装などがあります。
Next.js(推奨)
特徴として、SSR、SSG、ISRをサポート、SEOに最適化されたフレームワーク、自動的なコード分割、画像最適化などがあります。
SEO機能として、next/headでメタデータを管理、next/imageで画像を最適化、getStaticProps / getServerSidePropsでデータ取得、App Routerでのメタデータ管理などがあります。
Nuxt.js(推奨)
特徴として、SSR、SSG、ISRをサポート、Vue.jsのSEO最適化フレームワーク、自動ルーティング、NuxtMetaでメタデータを管理などがあります。
JavaScript SEOの確認方法
JavaScript SEOが正しく実装されているか確認する方法を解説します。
サーチコンソールのURL検査ツール
手順:
- サーチコンソールにログイン
- URLを入力して検査
- 「公開URLをテスト」をクリック
- 「テスト済みのページを表示」→「スクリーンショット」で確認
確認項目として、Googlebotが見ているページのスクリーンショット、HTML、レンダリングされたDOM、リソースの読み込み状況、JavaScriptエラーなどがあります。
モバイルフレンドリーテスト
手順:
- Google Mobile-Friendly Testにアクセス
- URLを入力
- レンダリング結果を確認
リッチリザルトテスト
手順:
- Googleリッチリザルトテストにアクセス
- URLを入力
- 構造化データとレンダリング結果を確認
Chrome DevTools
確認方法として、「ソースを表示」で初期HTMLを確認、「検証」でレンダリング後のDOMを確認、JavaScript無効化でのテスト、ネットワークタブでリソースの読み込みを確認などがあります。
Lighthouse
確認項目として、SEOスコア、パフォーマンススコア、アクセシビリティ、ベストプラクティスなどがあります。
JavaScript SEOのベストプラクティス
JavaScript SEOのベストプラクティスをまとめます。
コンテンツに関するベストプラクティス
実践すべきこととして、重要なコンテンツは初期HTMLに含める、メタデータ(title、description)はSSRで生成、構造化データは初期HTMLに含める、テキストコンテンツを十分に含めるなどがあります。
リンクに関するベストプラクティス
実践すべきこととして、標準的なaタグとhref属性を使用、内部リンクはクローラブルに、History APIを使用する場合も各URLにアクセス可能に、サイトマップを作成して送信などがあります。
リソースに関するベストプラクティス
実践すべきこととして、CSS、JavaScriptをrobots.txtでブロックしない、重要なリソースは遅延読み込みしない、リソースのサイズを最適化、CDNを活用などがあります。
パフォーマンスに関するベストプラクティス
実践すべきこととして、コード分割で初期ロードを軽量化、不要なJavaScriptを削除、画像の最適化、Core Web Vitalsの最適化などがあります。
JavaScript SEOに関するよくある質問(FAQ)
JavaScript SEOに関するよくある質問にお答えします。
Q1. SPAはSEOに不利ですか?
A. 適切な対策を行えば不利ではありません。
ただし、対策なしのSPAは確かにSEOで問題が発生しやすいです。SSRやプリレンダリングを導入することで、SEOの問題を解決できます。
Q2. Next.jsやNuxt.jsを使えばSEOは大丈夫?
A. 大幅に改善されますが、自動的に最適化されるわけではありません。
適切なメタデータの設定、構造化データの実装、サイトマップの作成など、基本的なSEO対策は引き続き必要です。
Q3. GooglebotはすべてのJavaScriptを実行できますか?
A. ほとんどのJavaScriptを実行できますが、100%ではありません。
タイムアウト、リソース制限、特定のAPIの非対応などにより、一部のJavaScriptは実行されない場合があります。
Q4. レンダリングの遅延はどのくらいですか?
A. 数秒〜数日まで幅があります。
サイトの規模、クロールの優先度、Googleのリソース状況によって異なります。重要なコンテンツは初期HTMLに含めることで、この遅延の影響を最小化できます。
Q5. Create React AppでSEOは可能ですか?
A. 難しいですが、不可能ではありません。
プリレンダリングサービスを使用するか、Next.jsへの移行を検討することを推奨します。
Q6. JavaScriptフレームワークを使わない方がSEOには良い?
A. 必ずしもそうではありません。
適切に実装されたJavaScriptサイト(特にNext.js、Nuxt.js)は、SEOにおいても問題ありません。ユーザー体験の向上とSEOは両立可能です。
まとめ:JavaScript SEOで検索エンジンに正しく認識されるサイトを作ろう
本記事では、JavaScriptサイトのSEO対策について解説しました。最後に、重要なポイントをまとめます。
JavaScriptサイトの主な課題
コンテンツがJavaScript実行後にしか表示されない、レンダリングの遅延、リンクやメタデータの問題などがあります。
主な対策
SSR(サーバーサイドレンダリング)の導入、SSG(静的サイト生成)の活用、プリレンダリングの実装、重要なコンテンツは初期HTMLに含めるなどがあります。
推奨フレームワーク
Next.js(React)、Nuxt.js(Vue.js)がSEOに最適化されており推奨されます。
JavaScript SEOは複雑に見えますが、適切なフレームワークを選択し、基本的な対策を行えば、SEO対策と優れたユーザー体験を両立できます。本記事で紹介した方法を参考に、検索エンジンに正しく認識されるJavaScriptサイトを構築してください。
関連記事として、クローラビリティを高める方法、インデックス登録されない原因と対処法、Googleサーチコンソールの使い方も合わせてご覧ください。
JavaScript SEOのトラブルシューティング
JavaScript SEOでよくある問題とその解決方法を解説します。
問題:ページがインデックスされない
確認手順:
- サーチコンソールのURL検査ツールでスクリーンショットを確認
- コンテンツが正しく表示されているか確認
- JavaScriptエラーがないか確認
- robots.txtでリソースがブロックされていないか確認
解決策として、SSRの導入、JavaScriptエラーの修正、リソースのブロック解除、コンテンツを初期HTMLに含めるなどがあります。
問題:メタデータが認識されない
原因として、メタデータがJavaScriptで動的に設定されている、SSRでメタデータが含まれていないなどがあります。
解決策として、Next.jsのnext/headを使用、Nuxt.jsのuseHeadを使用、SSRでメタデータを初期HTMLに含めるなどがあります。
問題:遅延読み込みコンテンツがインデックスされない
原因として、Lazy Loadでスクロールしないと表示されないコンテンツ、Intersection Observerでの遅延読み込みなどがあります。
解決策として、重要なコンテンツは初期表示に含める、無限スクロールの場合はページネーションも提供、構造化データでコンテンツを明示などがあります。
問題:クライアントサイドルーティングで問題が発生
症状として、内部リンクがクロールされない、直接URLにアクセスするとエラーなどがあります。
解決策として、サーバー側でルーティングを設定(フォールバック)、各URLに直接アクセス可能にする、標準的なaタグとhref属性を使用などがあります。
Core Web VitalsとJavaScript
JavaScriptがCore Web Vitalsに与える影響と対策を解説します。
LCP(Largest Contentful Paint)への影響
問題として、JavaScriptの実行が完了するまでコンテンツが表示されない、大きなJavaScriptバンドルがレンダリングをブロックなどがあります。
対策として、SSRで初期HTMLにコンテンツを含める、コード分割で初期ロードを軽量化、重要でないJavaScriptは遅延読み込み、画像の最適化などがあります。
FID/INP(First Input Delay / Interaction to Next Paint)への影響
問題として、メインスレッドをブロックするJavaScript、ハイドレーション中のインタラクション遅延などがあります。
対策として、長いタスクを分割、Web Workersの活用、ハイドレーションの最適化、不要なJavaScriptの削除などがあります。
CLS(Cumulative Layout Shift)への影響
問題として、JavaScriptで動的にコンテンツが追加される際のレイアウトシフト、遅延読み込み画像によるシフトなどがあります。
対策として、画像にwidth/height属性を設定、動的コンテンツ用のスペースを確保、スケルトンスクリーンの使用などがあります。
ヘッドレスCMSとJavaScript SEO
ヘッドレスCMSを使用する場合のJavaScript SEO対策を解説します。
ヘッドレスCMSとは
概要として、コンテンツ管理とフロントエンドが分離されたCMS、APIでコンテンツを取得、フロントエンドは自由に構築可能などがあります。
主なヘッドレスCMSとして、Contentful、Strapi、Sanity、Prismic、microCMS(日本製)などがあります。
SEOの考慮点
課題として、コンテンツがAPIから動的に取得される、フロントエンドでのレンダリングが必要などがあります。
対策として、SSR/SSGを使用してコンテンツを事前にレンダリング、Next.jsやNuxt.jsと組み合わせる、ビルド時にAPIからデータを取得してHTMLを生成などがあります。
推奨構成
構成例:ヘッドレスCMS(Contentful等)+ Next.js + Vercel
メリットとして、コンテンツ管理の柔軟性、SEOに最適化されたフロントエンド、高速なパフォーマンス、スケーラビリティなどがあります。
JavaScript SEOの最新トレンド
JavaScript SEOの最新トレンドを解説します。
React Server Components
概要として、React 18で導入された新機能、サーバーでのみ実行されるコンポーネント、クライアントに送信するJavaScriptを削減などがあります。
SEOへの影響として、サーバーでレンダリングされるためSEOに有利、パフォーマンスの向上、Next.js 13以降のApp Routerで採用などがあります。
Edge Rendering
概要として、CDNのエッジ(ユーザーに近いサーバー)でレンダリング、低レイテンシー、グローバルなパフォーマンス向上などがあります。
プラットフォームとして、Vercel Edge Functions、Cloudflare Workers、Deno Deployなどがあります。
Streaming SSR
概要として、HTMLを部分的にストリーミング、Time to First Byteの改善、ユーザー体験の向上などがあります。
Partial Hydration / Islands Architecture
概要として、必要な部分だけをハイドレーション、JavaScriptの削減、パフォーマンスの向上などがあります。
採用フレームワークとして、Astro、Qwik、Fresh(Deno)などがあります。
JavaScript SEOのチェックリスト
JavaScript SEOを実装する際のチェックリストを紹介します。
基本チェック
□ 重要なコンテンツは初期HTMLに含まれているか
□ メタデータ(title、description)はSSRで生成されているか
□ 標準的なaタグとhref属性を使用しているか
□ robots.txtでJS/CSSをブロックしていないか
□ 各URLに直接アクセス可能か
□ 404ページは正しいステータスコードを返すか
パフォーマンスチェック
□ JavaScriptバンドルサイズは最適化されているか
□ コード分割を実装しているか
□ 不要なJavaScriptを削除しているか
□ 画像は最適化されているか
□ Core Web Vitalsのスコアは良好か
テストチェック
□ サーチコンソールのURL検査でレンダリング結果を確認したか
□ モバイルフレンドリーテストを実施したか
□ Lighthouseでテストしたか
□ JavaScript無効化でのテストを実施したか
JavaScript SEOに関する追加FAQ
JavaScript SEOに関する追加の質問にお答えします。
Q. SSRとSSGのどちらを選ぶべき?
A. コンテンツの更新頻度で決めます。
頻繁に更新されるコンテンツ → SSR、更新頻度が低いコンテンツ → SSG、両方が混在 → ISRまたはハイブリッドを検討してください。
Q. Vercel、NetlifyなどのホスティングはSEOに影響する?
A. 直接的なSEOへの影響はありません。
ただし、これらのプラットフォームはSSR/SSGのサポート、CDN、パフォーマンス最適化に優れており、間接的にSEOにプラスの影響を与えます。
Q. シングルページアプリケーション(SPA)からNext.jsへの移行は難しい?
A. 規模によりますが、段階的な移行が可能です。
Next.jsは既存のReactコンポーネントを再利用できるため、移行のハードルは比較的低いです。ページ単位での段階的な移行も可能です。
Q. Bingなど他の検索エンジンもJavaScriptをレンダリングできる?
A. Bingもある程度JavaScriptをレンダリングできますが、Googleほど高度ではありません。
Googleに最適化していれば、他の検索エンジンでも概ね問題ありませんが、SSRを使用するのが最も安全です。
Q. WordPressのヘッドレス化はSEOに影響する?
A. 適切に実装すれば問題ありません。
WordPressをヘッドレスCMSとして使用し、Next.jsなどでフロントエンドを構築する場合、SSR/SSGを使用すればSEOに影響はありません。
まとめ:JavaScript SEOで検索エンジンに正しく認識されるサイトを作ろう
本記事では、JavaScriptサイトのSEO対策について徹底解説しました。
JavaScriptサイトの主な課題
コンテンツがJavaScript実行後にしか表示されない、レンダリングの遅延、リンクやメタデータの問題などがあります。
主な対策
SSR(サーバーサイドレンダリング)の導入、SSG(静的サイト生成)の活用、プリレンダリングの実装、重要なコンテンツは初期HTMLに含めるなどがあります。
推奨フレームワーク
Next.js(React)、Nuxt.js(Vue.js)がSEOに最適化されており推奨されます。
JavaScript SEOは複雑に見えますが、適切なフレームワークを選択し、基本的な対策を行えば、SEO対策と優れたユーザー体験を両立できます。本記事で紹介した方法を参考に、検索エンジンに正しく認識されるJavaScriptサイトを構築してください。
関連記事として、クローラビリティを高める方法、インデックス登録されない原因と対処法、Googleサーチコンソールの使い方も合わせてご覧ください。