AIクローラーはJavaScriptをレンダリングしない——自身の11の本番サイトを監査した
著者は自身の11の本番サイトを監査し、GPTBotやClaudeBotなどのAIクローラーがJavaScriptを実行しないため、クライアントレンダリングされたSPAがほぼ見えなくなっていることを発見(10語未満しか提供していない)。ビルド時プリレンダリングにより、それらのサイトは5~8語から1,442~3,048語に改善。問題の原因、影響、修正方法、チェック用スクリプトを詳述。
『ジャーナル』より・2026年7月27日
あなたのサイトはAIクローラーを歓迎している。私のサイトは彼らにたった6語しか提供していなかった。
GoogleのクローラーはJavaScriptを実行する。ChatGPTのクローラーは実行しない。私はその違いが11の本番サイトにどれだけのコストをもたらしているかを測定した——そのうち3つは不可視だった。
著者:Maasi J. Smith博士・9分で読める・2026年7月27日公開
重要なポイント
AIクローラーはJavaScriptを実行しない。GPTBot、ClaudeBot、PerplexityBotは生のHTMLを一度読み取って終わりだ。GooglebotはJavaScriptをレンダリングするが、彼らはしない。
したがって、クライアントレンダリングされたシングルページアプリケーションは彼らにとって不可視である——ランキングが低いのではなく、不可視なのだ。
私は11の本番サイトを測定した。3つはAIクローラーに10語未満しか提供していなかった。これら3サイトのrobots.txtは完璧で、明示的にクローラーを招待していた。
私はビルド時プリレンダリングで3つすべてを修正した:5→1,442、6→3,048、8→3,021語。レンダラーは午後でできた。しかし、それより悪いものを出荷するのを防ぐガードにはもっと時間がかかった——そしてそのすべてが実際のバグを捕捉した。
あなたは約4秒で任意のサイトをチェックできる。スクリプトは以下にあり、私の言葉を信じるよりも自分のサイトで実行してほしい。
2分でわかる要約
私はコンテンツの問題だと思っていた
先週、私はChatGPTに、別居中の親が裁判所に提出できるコミュニケーション記録を必要とするアプリを勧めてもらおうとした。私はまさにその製品を構築していた。それは数ヶ月前から稼働していた。しかし、それは出てこなかった。
私はコンテンツの問題だと思った。ブログ記事が足りない、バックリンクが足りない、いつものやつだ。
実際は配管の問題だった。私のサーバーはAIクローラーに空の部屋を送っていた。
メカニズム
実際に何が起きているか
今やインターネットには2種類のクローラーが存在し、全く異なる動作をする。
GooglebotはヘッドレスChromeを実行する。ページをフェッチし、JavaScriptを実行し、フレームワークがDOMを構築するのを待ち、結果をインデックスする。これがシングルページアプリケーションがGoogleで10年も生き残ってきた理由だ。
AIクローラー(GPTBot、OAI-SearchBot、ClaudeBot、PerplexityBot、CCBot)はそれをしない。1回のHTTPリクエストを発行し、返ってきたHTMLを解析して去る。レンダリングなし。再試行なし。待機なし。
GoogleのクローラーはJavaScriptを実行する。ChatGPTのクローラーは実行しない。このたった1つの違いが、AIアシスタントがあなたの製品を推奨できるかどうかを決める。
これは推測ではない。5億回以上のGPTBotフェッチの分析では、JavaScript実行の証拠はゼロだった。クローラーログの研究では、GPTBotが約11.5%のリクエストでJavaScriptファイルをダウンロードし、ClaudeBotが約23.8%でダウンロードするが、どちらも実行されたことは観測されていない。ファイルを取得するが、開かないのだ。
つまり、あなたのマーケティングページがReactやVueのアプリで、起動後に空のシェルしか表示しない場合、AIアシスタントがあなたの会社について知っているのは、タイトルタグとメタディスクリプションだけだ。
それだけだ。それが全体のコーパスだ。
監査結果
自分のサイトで見つけたもの
私は8つの消費者製品、1つのB2Bプラットフォーム、1つのWeb3マーケットプレイス、1つのスタジオサイトを運営している。4行のスクリプトを書き、11すべてに向けてコーヒーを淹れに行った。戻ってきて見たものはこれだ:
(2026年7月27日、GPTBotユーザーエージェントを使用して測定。スクリプトは以下——検証してください。)
サイト提供語数判定
FamilyCare.Help5不可視
CoParent.Help6不可視
PostPilot.Help8不可視
Inmigrante.Help2,479良好
FamilyCare Facility2,523良好
Nexaria Digital2,276良好
ExamPilot.Help2,212良好
Zari.Help2,178良好
PayLess.Help2,116良好
Smith App Studio2,120良好
ProfilePhoto.Help1,561良好
3つの製品。5、6、8語。
ここで一番こたえた。私はこれら3サイトのrobots.txtを見に行き、そこに問題があると思った。ところが代わりに見つけたのはこれだ:
AIアシスタントと回答エンジン——発見可能性のために明示的に歓迎
User-agent: GPTBot User-agent: OAI-SearchBot User-agent: ChatGPT-User User-agent: ClaudeBot User-agent: PerplexityBot User-agent: Google-Extended User-agent: CCBot Allow: /
完璧だ。3サイトすべてが有効なllms.txtも提供している。すべてに正規タグ、Open Graph画像、Twitterカード、JSON-LD構造化データが含まれている。
私はレッドカーペットを敷き、7カ国語で歓迎のサインを印刷し、それをすべて空の部屋に向けていた。
良好と判定された8サイトはマーケティングが優れているわけではない。単にサーバーサイドでレンダリングされるフレームワークで構築されているだけだ。それがすべての違いだ。2年間の製品開発が、その発見可能性をある午後に下したビルド時の決定に委ねられていた。
なぜ今なのか
昨年より今年のほうが重要な理由
2024年にはこれを無視することも合理的だった。今はできない。測定可能な3つの理由がある。
1つ目:ランキングと引用が切り離された。Seer InteractiveはChatGPT、Perplexity、AI Overviewsで5,000以上のURLを分析し、Google上位結果とAI引用ソースの重複が約70%から20%未満に低下したことを発見した。GoogleのランキングはもはやAIでの可視性の代理指標ではない。これらは独立した2つの配信チャネルであり、それぞれ異なるメカニズムを持つ。
2つ目:AIアシスタントは圧倒的にブランド自身のサイトを引用する。YextはChatGPT、Gemini、Perplexity全体で680万の引用を分析し、86%がブランド管理ソースからのものであることを発見した。あなたの製品について最も引用されるソースはあなた自身であるべきだ。6語しか提供していなければ、その表面積をデフォルトで放棄していることになる。
3つ目:製品発見は移行している。人々はもはや「ベストな共同養育アプリ」を検索して10の青いリンクを比較しない。彼らはアシスタントに尋ね、推薦リストを受け取る。あなたがそのリストにいなければ、検討対象から外れており、第2ページも存在しない。
llms.txtができることとできないこと
ここでは注意したい。これについては自信満々のナンセンスがたくさんあるからだ。
llms.txtは提案された慣習だ:ドメインルートにあるプレーンテキストファイルで、言語モデル向けにサイトを要約する。安価で、静的で、サーバーから提供され、私はあなたも持つべきだと思う。
しかし、これはこの問題の修正ではない。採用が一貫していない任意の慣習であり、どのクローラーのインデックスでも実際のページを置き換えるものではなく、重要なのは——私のサイトにはすでにあったのだ。3つの不可視サイトすべてが完璧なllms.txtを提供していたが、それは彼らを救わなかった。110語の要約はサイトの代わりにはならないからだ。
llms.txtを名刺として扱え。便利だ。しかし建物ではない。
自分でやる
4秒で自分のサイトをチェックする
以下がスクリプトだ。URLをGPTBotとしてフェッチし、スクリプト、スタイル、コメント、タグを除去し、実際に残っているものをカウントする——つまりクローラーが実際に読むものだ。
(スクリプト省略)
実行:
chmod +x ai-visibility.sh ./ai-visibility.sh https://yoursite.com/ https://yoursite.com/pricing
結果の読み方。これらの閾値は判断基準であり、標準ではない——しかし私がテストしたすべてのサイトで有効だった:
語数意味
200未満クライアントレンダリング。AIアシスタントはタイトルタグだけを知っている。
200~600部分的。おそらくハイブリッドアプリか、実際のコンテンツを遅延ロードするページ。
600以上サーバーサイドレンダリング。クローラーは実際の議論を取得している。
2つの正直な注意点。第一に、語数は実質の代理であって尺度ではない——2000語のナビリンクと法的テンプレートは2000語の価値ではない。第二に、perlはmacOSとLinuxに付属している;WindowsではGit BashまたはWSLを使用せよ。
修正方法
どう修正するか
努力順に並べる。上の方から始めて数字が動いたら止める。
マーケティングルートをプリレンダリングする。ViteやCRAアプリでは通常半日の変更で、最も効果の高い修正だ。ビルド後のステップでヘッドレスブラウザがルートをクロールし、実際のHTMLファイルをディスクに書き出す。アプリは今まで通り動作し続ける;サーバーはJavaScriptが起動する前に渡すものを持つだけだ。
マーケティングサイトをサーバーサイドレンダリングするフレームワークに移行する。Next.js、Astro、Remix、Nuxt。もし再構築しているなら、これが耐久性のある答えだ。ただし、公開ページにのみ必要であり、ログイン後のページはクライアントレンダリングのままで問題ない——クローラーはそれらを見るべきではないからだ。
マーケティングサイトをアプリから分割する。過小評価されている。yourdomain.comの静的サイトとapp.yourdomain.comのアプリにより、完全なクロール可能性と高速なマーケティングサイトが得られ、ルーティング問題のカテゴリ全体が除去される。
動的レンダリングに手を出さない。ユーザーエージェントに基づいてボットと人間に異なるHTMLを提供することはかつて標準的なアドバイスだった。それは脆弱であり、クローキングのリスクがあり、プリレンダリングはユーザーエージェント検出を誰にも信頼させることなく同じ問題を解決する。
次に安価なことをする。すべてのサイトマップをBing Webmaster Toolsに送信する——ChatGPTの検索はBingのインデックスに依存しており、これはほぼ誰もやらない20分の作業だ。ArticleとFAQPageスキーマを追加する。実際のllms.txtを置く。見出しを質問として書き、最初の文で答える——それがAIシステムが実際に抽出する単位だからだ。
結果
私がしたこと
3サイトすべてにプリレンダラーを構築した。差分はこれだ:
サイト以前以後
FamilyCare.Help51,442
CoParent.Help63,048
PostPilot.Help83,021
約270ページが実際のHTMLとして出荷されるようになった。200語の閾値を下回るものはゼロだ。
予想外だった3つのこと、それらが実際の教訓だ:
単純なバージョンは静かに事態を悪化させた
最初の実用的なバージョンは54ページを書き出したが、すべてがトップページのタイトルを持っていた。各ルートのメタデータが適用されるのを固定500ms待っていたが、4つの並行ヘッドレスタブの下では時々適用されていなかったのだ。54のURLが1つのタイトルを持つことは重複コンテンツだ。タイトルを差分チェックしたから気づいた。
プリレンダリングが無から正規タグのバグを生み出した
HTMLシェルはrel="canonical" href="/"をハードコードしていた。クローラーが1つのファイルしか取得しないときは無害だ。しかしすべてのルートが独自のファイルになると、各ページが2つの正規タグを出荷する——1つは正しく自分自身を指し、もう1つはトップページだと主張する。これはプリレンダリングなしより悪く、私たちのブログの1つは以前にまったく同じバグでデインデックスされていた。
ビルドは誰も気づいていなかった壊れたページを発見した
PostPilotの/platformsページは、独自のタイトル、ディスクリプション、正規タグを一度も設定していなかった——常に汎用のトップページメタデータを提供していた。他のすべての公開ページにはあった。シングルページアプリでは違いを探さなければ見えないため、何も表面化しなかった。
正直なまとめ:プリレンダリングは簡単な部分だった。ガードが仕事だ。これを行うなら、レンダラーを書く前にビルドを失敗させるチェックを書け——私のチェックはすべて実際の何かを捕捉した。
最初の2回の本番デプロイも直接失敗した。ビルドイメージにChromeがなく、その後それを実行するシステムライブラリもなかったからだ。どちらの失敗も誰にも届かなかった:スクリプトは問題があれば非ゼロで終了するため、前の動作しているデプロイがそのまま稼働し続けた。これが、警告ではなく厳密に失敗するビルド時ガードの論拠だ。
よくある質問
AIクローラーはJavaScriptを実行しますか?
いいえ。GPTBot、ClaudeBot、PerplexityBotは生のHTMLを取得し、JavaScriptを実行しません。5億以上のGPTBotフェッチの分析では、JavaScript実行の証拠は見つかっていません。Googlebotは例外で、ヘッドレスChromeエンジンを使用してJavaScriptをレンダリングします。
ChatGPTは私のReactウェブサイトを見られますか?
コンテンツがサーバーサイドでレンダリングされるかプリレンダリングされている場合のみ。そうでなければ、ChatGPTはタイトルタグとメタディスクリプションだけを見ます。
(AIコスト制御のため、原文は切り詰められています。)