SEOラボ

SPAサイトはGoogleには映るが AIには映らない

Googlebot・Bingbot・ApplebotはJavaScriptレンダリング対応をevergreen化した。一方、GPTBot・ClaudeBot・PerplexityBotの公式ドキュメントにはJS実行可否の明記がない。

9分で読める2026-05-22

Googlebot・Bingbot・Applebotは2019〜2020年にChromium/Edge/WebKitベースのレンダリングをevergreen化し、JavaScript実行を公式にサポートしている。一方、GPTBot・ClaudeBot・PerplexityBotの公式ドキュメントにはJS実行可否の明記がなく、ファーストペイントのHTMLにコンテンツが載っていないSPA(CSR)サイトの本文は、AIクローラーから見えていない可能性が高い構造になっている。

観察:HTMLが約28KBしかないあるLPに遭遇した

国内のあるノーコードSPAサービスで構築されたランディングページに対して、サーバーから返されるHTMLを生で取得してみた。レスポンスはわずか約28KB、しかも `<body>` の中はほぼ空で、本文・見出し・画像・内部リンクが一切含まれていない。コンテンツはすべてJavaScript実行後にクライアント側で描画される、典型的なCSR(Client-Side Rendering)の構造だった。

観測されたファクト

  • サーバーが返す初期HTMLは約28KB、bodyの可視テキストはほぼゼロ
  • User-AgentをGooglebotに偽装してリクエストしても、返ってくるHTMLは同じ
  • JSON-LD構造化データは一切実装されていない
  • サイトマップに登録されているのは6URLのみ(うちフォーム系3本)

このサイトをCodeQuest.work SEOで診断すると、本文文字数・H1・内部リンク・画像alt等のコンテンツ系項目がほぼ全てゼロ判定になる。診断結果は仕様通りに正しいが、「Googleが実際にどう見ているか」とは乖離する可能性がある。なぜ乖離が起きるのか、そしてその乖離はAIクローラーにも当てはまるのか — ここから検証を始める。

SEOクローラー側はすでに進化していた

「SPAはSEOに不利」という認識は2015年頃から長く語られてきたが、主要SEOクローラーは過去5年間で大きく進化している。3社の公式ステートメントを並べると、JavaScriptレンダリング対応がほぼ標準化されたことが分かる。

Googlebot:evergreen Chromium(2019/05〜)

Google公式の JavaScript SEO Basics は次のように明記している:「Google Search runs JavaScript with an evergreen version of Chromium」。クロール(fetch)の後、リソースに余裕ができた段階でヘッドレスChromiumがレンダリングを実行する2段階インデックス方式。

一次ソース:developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics

Bingbot:Microsoft Edge=Chromium(2019/10〜)

Bing公式ブログより:「By adopting Microsoft Edge, Bingbot will now render all web pages using the same underlying web platform technology already used today by Googlebot, Google Chrome, and other Chromium-based browsers」。実質的にGooglebotと同等のレンダリング能力を持つ。

一次ソース:blogs.bing.com/webmaster/october-2019/The-new-evergreen-Bingbot

Applebot:WebKit (Safari互換)

Apple Support の About Applebot より:「Applebot may render the content of your website within a browser. If JavaScript, CSS, and other resources are blocked via robots.txt, it may not be able to render the content properly」。Safari互換のWebKitでレンダリングするため、Apple Intelligence / Siri / Spotlight向けの本文取得が可能。

一次ソース:support.apple.com/en-us/119829

つまり、SEO(オーガニック検索)の視点だけで見れば、SPA構造でも主要3社のクローラーは本文を読み取れる前提が成立する。問題はここではなく、次のレイヤーにある。

AIクローラー側は「公式に明記していない」

AI検索エンジンが使用する主要クローラーの公式ドキュメントを精査した結果、JavaScript実行可否について明確に記載しているものはなかった。「実行しない」とも「実行する」とも書かれていない、というのが現状である。

クローラー用途JS実行の公式明記
GPTBotOpenAI モデル学習明記なし
OAI-SearchBotChatGPT Search インデックス明記なし
ChatGPT-Userユーザー要求時のリアルタイム取得明記なし
ClaudeBotAnthropic モデル学習明記なし
Claude-UserClaudeユーザー要求時の取得明記なし
Claude-SearchBotClaude検索品質向上明記なし
PerplexityBotPerplexity 検索インデックス明記なし
Perplexity-Userユーザー質問への応答時明記なし

比較対象として、SEOクローラー側はそれぞれの公式ドキュメントに「JavaScript実行のためにChromium / Edge / WebKitを使う」と明示している。AIクローラー側だけが「明記しない」のは、偶然というより構造的な選択と読むのが自然だ。

一次ソース:OpenAI Bots / Anthropic Crawlers / Perplexity Crawlers

「明記なし」をどう解釈するか

公式に書かれていない以上、「実行していない」と断定することはできない。しかし「実行している」と仮定するのも根拠が薄い。事実と推論を分けて整理する。

ファクト(公式ドキュメント由来)

  • GPTBot / ClaudeBot / PerplexityBot のいずれも、レンダリングエンジンに関する明記がない
  • User-Agent 文字列に「Chrome/W.X.Y.Z」のようなブラウザバージョン表記もない
  • Googlebot / Bingbot は2019年に「JS実行のためChromium/Edgeを採用した」と公式にアナウンス済み — 真逆の透明性

推論(断定ではない)

  • ヘッドレスブラウザ起動は1リクエストあたりのコストがHTML取得の数十倍。学習データ収集のような大規模クロールで全URLにJS実行をかけるのは現実的でない
  • ユーザー要求時取得(ChatGPT-User / Perplexity-User)は性質上リアルタイム処理が必要で、JS実行を含む可能性は比較的高い — ただし公式明記なし
  • もし学習用クローラーがJS実行していたら、SEOクローラーと同じく公式に宣言したほうが運営側にもメリットがある(無駄なエラーログ削減・WAFホワイトリスト調整)。それをしていない事実は、JS非対応寄りのシグナルと読める

本記事では「AIクローラーはJSを実行しない」と断定はしない。「公式に明記がなく、コスト構造と運用透明性のシグナルから推論するとJS非対応寄りである可能性が高い」というレベルで扱う。実務判断としては、この不確実性を許容しない方が安全である。

Googleの2段階インデックスも完全な救済ではない

「Googlebotがレンダリングしてくれるから大丈夫」という議論には2つの限界がある。公式ドキュメントから直接引用しながら整理する。

限界1:レンダリングは「リソースに余裕があるとき」に行われる

Google公式:「Once Google's resources allow, a headless Chromium renders the page and executes the JavaScript」。クロール直後ではなく、Googleがリソースを割り当てたタイミング。新規ページのインデックスが遅れる、頻繁な更新が反映されない、といった現象の根本原因はここにある。

限界2:Dynamic Renderingは公式に非推奨化された

Google公式:「Dynamic rendering is a workaround and not a long-term solution for problems with JavaScript-generated content in search engines」。2018年頃に推奨された「Botに対してだけSSR HTMLを返す」手法は、現在では公式にレガシー扱い。今後の解は SSR / SSG / Hydration である。

一次ソース:developers.google.com/search/docs/crawling-indexing/javascript/dynamic-rendering

つまり、Googleですら「JS実行してインデックスはしますが、即時性は保証しません」というスタンスを公式に取っている。日々更新するメディアサイトでCSRを採用する場合、新規記事のインデックスに数日〜数週間の遅延が発生する可能性は常に念頭に置く必要がある。

自サイトが「AIから見えているか」を確認する3つの手順

自分のサイトがクローラー別にどう見えているかは、特別なツールがなくても確認できる。優先度の高い順に3つ紹介する。

1

Search Console「URL検査」→「公開URLをテスト」

Googleがレンダリング後に取得するHTMLとスクリーンショットを公式に確認できる唯一の方法。「HTML」タブで生のレンダリング結果、「スクリーンショット」でビジュアルを照合する。本文がスクリーンショットに映っていなければ、Googlebot第2段階すら失敗している。

2

curl で User-Agent を切り替えてHTMLを比較

`curl -A "Mozilla/5.0 (compatible; GPTBot/1.2; +https://openai.com/gptbot)" https://example.com/` のようにUA文字列を渡し、AIクローラーが見るのと同じ初期HTMLを取得する。bodyに本文が含まれていなければ、JS非実行型のクローラーには見えていない可能性が極めて高い。

3

`site:` 検索で実際のスニペットを観察

Googleで `site:example.com` を検索し、各ページのスニペットが本文から生成されているかを確認する。titleタグやdescriptionだけで埋まっていて、本文の抜粋が出てこない場合、Googleはレンダリング後の本文をうまく取得できていない可能性が高い。

打ち手の選択肢:SSR / SSG / Hydration

CSRを採用していて、Googleには映ってもAIに映らない状態を解消するための選択肢を整理する。Dynamic Renderingは公式に非推奨化されたため除外している。

手法向いているケースAI可視性
SSR(サーバーサイドレンダリング)頻繁に更新・パーソナライズが必要なメディア・アプリ
SSG(静的サイト生成)LP・ブログ・ドキュメントなど更新頻度が中程度のサイト
Hydration(SSR+クライアント復元)インタラクティブだが初期表示も重視するアプリ
プリレンダリング既存SPAの最低限の改修で対応したい場合
Dynamic RenderingGoogle非推奨。新規採用すべきでない非推奨

Next.js App Router(SSR/SSG/ISRの自動切り替え)、Nuxt(SSR)、Astro(SSG中心)、SvelteKit(SSR)あたりが現代の選択肢である。既存のVue/React SPAを丸ごと書き直す余裕がない場合は、最低限プリレンダリングで主要ページのファーストペイントHTMLにコンテンツを載せる対応が現実的な落とし所になる。

なお、ノーコードSPAサービスを使っている場合、テンプレート側がCSR固定で利用者がレンダリング方式を選べないケースがある。その場合、サービス側に対するフィードバックチャネル経由でSSR/SSG対応を要望する以外の打ち手は限定的だ。

CodeQuest.work SEOでの判定の読み方

CodeQuest.work SEOは、Cloudflare Workers環境で動作する初期HTML解析型の診断ツールである。JavaScriptは実行せず、サーバーから返ってきたHTMLをそのまま45項目で評価する。これはBingbotやAIクローラー(公式明記はないが推論レベル)と同等の見え方になる。

シグナルとしての読み方

  • 本文文字数・H1・内部リンク・画像数のいずれも極端に少ない判定 → CSR採用の可能性が高い。SPAサイトを診断したときに「全部ゼロに近い」結果が出たら、判定自体は正しくても「Googleが第2段階で見ているもの」とは別物と解釈する
  • ただし、その「ゼロに近い見え方」こそが AIクローラー・Bingbot第1段階・OGPクローラー・Twitterボット等が見ているもの。SEOスコアが低くなっても、AIO/GEO観点では実態のリスクをそのまま反映していると言える
  • 逆に、CSRサイトでも構造化データ(JSON-LD)・meta description・canonicalタグなど、HTML初期描画時点で読める要素は対応可能。これらは初期HTMLに直接埋め込めるため、最低限のAIO/GEO対策として優先度が高い

SEO診断ツールの結果は「ベンチマーク」ではなく「シグナル」として読むことが本質である。SPAだからスコアが低いのは仕様だが、そのスコアの低さはAIクローラーから見たときの可視性を正直に反映している、と読み替えれば打ち手が見えてくる。

あなたのサイトの初期HTMLをチェック

URLを入力するだけで、JS実行前の初期HTMLを45項目で診断。本文・H1・内部リンクがゼロに近ければCSR採用の可能性が高く、AIクローラーには見えていない可能性があります。

今井政和

この記事を書いた人

今井政和

SEOディレクター / フロントエンド開発者

Web業界20年以上の経験を持つSEOディレクター。CodeQuest.work SEOの開発者。WordPress公式プラグイン「ORECTIC SEO CHECK」作者。著書に「三方良しで勝つ 江戸商人に学ぶ現代WEB戦略」。

@imai_director

よくある質問

SEOクローラーがJS実行できるなら、SPAでも問題ないのでは?
オーガニック検索(Google・Bing・Apple)の流入だけが目的ならその通りです。ただし、Googleでも2段階インデックスの遅延があり、新規ページのインデックスに数日〜数週間かかることがあります。さらに、AIO/GEO観点ではAIクローラー側がJS実行を公式に明記していないため、ChatGPT・Claude・Perplexityからの引用機会を失う可能性が高くなります。SEO観点とAIO観点でリスクの大きさが異なる点が、今のSPA設計の難しさです。
AIクローラーが「実行しない」と公式に書いていないなら、実行している可能性もあるのでは?
可能性として完全には否定できません。本記事でも「実行しない」とは断定していません。ただし、SEOクローラー側はChromium/Edge/WebKit採用を公式アナウンスしてきた一方、AIクローラー側は同等の透明性を示していません。また、ヘッドレスブラウザ実行は単純なHTML取得の数十倍のコストがかかるため、大規模学習データクロールで全URLにかけるのは経済的に困難という構造的な背景もあります。「不確実だが、JS非対応寄りに賭けるのが運用上は安全」というのが現実的な判断です。
Dynamic Renderingはなぜ非推奨になったのですか?
Google公式ドキュメントは「Dynamic rendering is a workaround and not a long-term solution」と明記しています。理由としては、Botとユーザーで異なるコンテンツを返す手法がCloakingと紙一重であること、運用負荷が高いこと、SSR/Hydrationという根本解決手段が一般化したことが挙げられます。新規実装で採用すべきではなく、既存サイトでDynamic Renderingを使っている場合もSSR/SSG/プリレンダリングへの移行が推奨されます。
プリレンダリングとSSGはどう違いますか?
プリレンダリングは既存のSPAをほぼそのままに、ビルド時にヘッドレスブラウザでHTMLスナップショットを生成して配信する手法です。Prerender.io等のサービスやpuppeteerベースの自前実装が代表例です。SSG(静的サイト生成)はNext.js・Astro等のフレームワーク機能として、SSRと統合された形でビルド時にHTMLを生成します。プリレンダリングは「既存SPAへの後付け」、SSGは「最初から組み込まれた仕組み」と理解するのが分かりやすいです。
既存のSPAサイトをSSRに移行するコストが見合わない場合、最低限の打ち手は?
CSRを維持したまま3つのことだけは初期HTMLに埋め込めます。①JSON-LD構造化データ(Article / Organization / BreadcrumbList等)、②title・meta description・canonical・OGPなどの基本メタタグ、③robots.txt / sitemap.xml / llms.txtの設置。これらはJSレンダリング不要で実装でき、AIクローラーが初期HTMLで読める情報量を最低限確保できます。本格的な本文表示はCSRのままでも、メタレベルの情報伝達ができるかどうかでAIO引用率に大きな差が出ます。

関連記事

あわせて読みたい

AI検索対策10

AIO対策のやり方|AI Overviewに引用されるための実践ガイド

Google AI Overview(AIO)に自サイトを引用させるための実践的な対策方法を解説。構造化データ・見出し構造・直接回答・E-E-A-Tの4つの柱と、無料SEO診断ツールによるチェック方法。

続きを読む
AI検索対策6

llms.txtの作り方|AI検索向けにサイト情報を整理する書き方・設置ガイド

llms.txtの書き方・設置手順を解説。Googleは公式に不要としているが、ChatGPT等の他AIからは未表明。低コストの先行施策としての位置づけと実装手順をまとめた設定ガイド。

続きを読む
SEOラボ10

「llms.txtは不要だった」は本当か|Google公式声明の正しい読み方と論理的な穴

「llms.txtは不要だった」という声が拡散している。Google公式は確かに「不要」と明言したが、その対象は生成AI検索に限定された話だ。声明の正しい読み方、不要論3つの論理的な穴、ChatGPTアクセスの実測値・Google自身のサイトへの設置という矛盾をファクトベースで検証する。

続きを読む
SEOラボ10

llms.txtはGEO施策として機能するのか|CDNログ実データで検証する

llms.txtを設置すればAI検索に引用される — 本当か?ChatGPT・Perplexity・ClaudeのCDNログデータと30万ドメイン調査から、llms.txtのGEO効果を3ツール横断で検証した。

続きを読む

あなたのサイトはAIクローラーに映っていますか?

URLを入力するだけで、初期HTMLの可視性を45項目で診断。SPAサイトのAIO/GEOリスクを可視化します。