AIクローラーはあなたのサイトを読めるのか?JavaScriptなしの342のローンチサイトを調査しました
ほとんどのAIクローラーはJavaScriptを実行しません。私たちは最近ローンチされたプロダクトサイト365件に、彼らと同じ方法でリクエストを送りました。読み込まれた342件のうち10件に1件が、タイトルと説明はあるものの本文テキストがほとんどないページを返しました。私たちが測定した内容、それが起こる理由、そしてあなたのサイトでできる2分間のチェック方法です。

**2026年10月、私たちはJavaScriptを実行しないクローラーのように、aat.eeでローンチされた365件のプロダクトサイトにリクエストを送り、返ってきたHTML内のテキストを数えました。HTTP 200で応答した342件のうち、37件(10.8%)は本文テキストが50語未満でした。そのほとんどはタイトルとメタディスクリプションを備えていたため、リンクプレビューでは問題なく見えますが、コンテンツ自体はJavaScriptの実行後にしか届きません。**同じ37ページを実際のブラウザで読み込んだところ、読み込みが完了した30件のうち23件は150語以上を表示しました。
これが重要なのは、ChatGPT、Claude、Perplexityの背後にあるクローラーがJavaScriptを実行しないことが観測されているからです。プロダクトの説明がレンダリング後のページにしか存在しない場合、これらのシステムはそれを目にすることがないかもしれません。以下では、数値、原因、そして自分のサイトで2分で実行できるチェック方法を紹介します。
どのクローラーがJavaScriptを実行するか
OpenAI、Anthropic、Meta、ByteDance、Perplexityは、自社のクローラーがJavaScriptをレンダリングするかどうかを公表していません。入手できる最良の証拠は、2024年12月のVercelとMERJによる調査です。調査対象となった主要なAIクローラーはどれもJavaScriptをレンダリングしませんでした。OpenAIのOAI-SearchBot、ChatGPT-User、GPTBot、AnthropicのClaudeBot、Meta-ExternalAgent、ByteDanceのBytespider、PerplexityBotです。ChatGPTとClaudeのクローラーはJavaScriptファイルをダウンロードしましたが(それぞれリクエストの11.50%と23.84%)、実行はしませんでした。Googlebotのインフラを使うGeminiはレンダリングしました。AppleBotも同様でした。
GooglebotはJavaScriptをレンダリングしますが、別のステップで行います。GoogleのJavaScript SEOガイドによると、ページはキューに入れられ、「Googleのリソースが許せば、ヘッドレスChromiumがページをレンダリングし、JavaScriptを実行する」とされています。それでもGoogleはサーバーサイドレンダリングやプリレンダリングを推奨しています。なぜなら「ユーザーとクローラーの両方にとってウェブサイトが速くなり、すべてのボットがJavaScriptを実行できるわけではない」からです。
この調査は1回の観測であり、ほぼ2年前のもので、クローラーの挙動は予告なく変わる可能性があります。それでも現時点で最良のデータであり、どの企業もこれを否定していません。
測定方法
- サンプル: 監査前120日間にaat.eeでローンチされたプロダクトから無作為に抽出した400件のプロジェクトURL。ホスト名ごとに1つのURLを残し、プロダクト自身のサイトではなくGitHub、アプリストア、Hugging Faceを指す14件のリンクを除外した結果、365サイトが残りました。342件がHTTP 200を返し、以下の数値の基礎となっています。
- リクエスト: 各サイトに1回のGETリクエスト。OpenAIの
OAI-SearchBotトークンを含むユーザーエージェントを使用し、リダイレクトを追跡し、JavaScriptは実行しません。 - 測定:
<script>、<style>、<noscript>、<template>、<svg>要素を除去した後の、表示される本文テキストの語数。また、HTMLにタイトル、メタディスクリプション、canonicalリンク、JSON-LD、<h1>が含まれているかどうかも記録しました。 - 限界: 取得したのは創業者が提出したURLのみで、通常はホームページです。リクエストはOpenAIのIP範囲ではなく自社ネットワークから送信したため、検証済みクローラーを別扱いするサイトでは異なる内容が返される可能性があります。scriptタグ内のテキストはカウントしていません。Vercelの調査は、JSONなど初期HTMLに埋め込まれたデータは「インデックスされる可能性がある」と指摘しているため、一部のフレームワークでは私たちのカウントはクローラーが得るものを過小評価しています。以下の空ページのほとんどは、コンテンツが別のJavaScriptバンドルに存在するシングルページアプリであり、調査によればこれらのクローラーはバンドルをダウンロードするものの実行はしません。
結果
| 生のHTML内の本文語数 | サイト数 | 342件に占める割合 |
|---|---|---|
| 20未満 | 35 | 10.2% |
| 20〜49 | 2 | 0.6% |
| 50〜149 | 3 | 0.9% |
| 150〜399 | 23 | 6.7% |
| 400以上 | 279 | 81.6% |
中央値のサイトは約1,180語を返したため、ほとんどのローンチサイトは良好な状態です。問題は集中しており、37サイトのほぼすべてが本文にほとんど何も持っていません。
**ヘッドは埋まっていて、ボディは空です。**37件の薄いページのうち、36件に<title>があり、34件にメタディスクリプションがありました。<h1>があったのはわずか4件、リンクが5つ以上あったのもわずか4件でした。このHTMLを読むクローラーは、プロダクト名と1行のキャッチコピーを学ぶだけで、機能、価格、対象ユーザーについては何も分かりません。
**1つのパターンでほとんどが説明できます。**37件のうち30件は空の<div id="root">または<div id="app">を配信し、ページ全体をブラウザで構築していました。これはViteやCreate React Appで作られたシングルページアプリのデフォルトです。12件はViteビルドでした。対照的に、サンプル中の165件のNext.jsサイトのうち薄かったのはわずか1件でした。Next.jsはデフォルトでサーバー上でページをレンダリングするため、コンテンツは最初のレスポンスに含まれます。
**テンプレートが漏れています。**37件のうち16件には、Create React Appのデフォルトのメタディスクリプション「Web site created using create-react-app」がまだ残っていました。この16件は3つの投稿者アカウントが類似プロダクト群をローンチしたもので、合計を膨らませています。これらを除くと、薄いページの割合は326件中21件、つまり6.4%です。それでもおよそ16件に1件のローンチに相当します。
ブラウザではコンテンツは存在する
次に、37件の薄いページをヘッドレスChromiumで読み込み、loadイベント後5秒待ってから、表示されるテキストを再度数えました。30ページが読み込みを完了しました。7件は3回の試行後にタイムアウトしました。
| JavaScript実行後の本文語数 | サイト数(30件中) |
|---|---|
| 150以上 | 23 |
| 50〜149 | 2 |
| 50未満 | 5 |
中央値のページは、生のHTMLで0語から、レンダリング後は約475語になりました。つまり、これらのサイトのほとんどではコピーは存在し、ブラウザの訪問者には見えています。ただ、サーバーが送るHTMLには含まれておらず、レンダリングしないクローラーが読むのはその部分だけです。50語未満にとどまった5件は、ログイン画面、空白でレンダリングされたページ、そして非常に短い3ページでした。これらはクローラーだけでなく、誰にとっても薄いページです。
副次的な発見:一部のボット保護はクローラーもブロックする
3つのサイトは、私たちのOAI-SearchBotリクエストにHTTP 403で応答し、同じリクエストをChromeのユーザーエージェントで送ると200で応答しました。そのうち2件はCloudflareのチャレンジ(cf-mitigated: challenge)を返しました。どのrobots.txtもAIクローラーを拒否していなかったため、所有者はおそらくブロックするつもりはなかったのでしょう。
これだけでは、OpenAIの実際のクローラーがブロックされているかどうかは分かりません。Cloudflareのようなボット保護はIPアドレスで検証済みボットを識別でき、私たちのリクエストはOpenAIのものではありませんでした。これは確認する理由として捉えてください。Cloudflareを使っている場合は、ダッシュボードのAIクローラーとボットファイトの設定を確認し、robots.txtの内容と一致していることを確かめてください。
自分のサイトを2分でチェックする
-
クローラーと同じ方法で取得する。
UA='Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot)' curl -sL -A "$UA" -o raw.html -w '%{http_code}\n' https://yoursite.com grep -c 'a sentence from your hero section' raw.htmlUA='Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot)' curl -sL -A "$UA" -o raw.html -w '%{http_code}\n' https://yoursite.com grep -c 'a sentence from your hero section' raw.html200以外のステータスは通常、クローラーがコンテンツの代わりにエラーページやチャレンジページを受け取っていることを意味します。カウントが0なら、その正確な文がHTMLに含まれていません。マークアップが長い文を分割する可能性があるため、短いフレーズを選んでください。
-
**JavaScriptなしでページを見る。**Chrome DevToolsでコマンドメニューを開き(Ctrl+Shift+PまたはCmd+Shift+P)、「Disable JavaScript」を実行してリロードします。表示されるものは、おおよそレンダリングしないクローラーが読む内容です。
-
**Googleは別途確認する。**Search ConsoleのURL Inspectionは、GooglebotがレンダリングしたHTMLを表示します。これはGoogleについてのみ分かることです。
-
**ホームページだけでなく、価格ページと機能ページでも繰り返す。**これらはアシスタントがプロダクトを説明するために必要なページです。
スタック別の修正方法
| スタック | サーバーがデフォルトで送るもの | 修正 |
|---|---|---|
| ViteまたはCreate React AppのSPA | 空のルート<div> | マーケティングルートをビルド時にプリレンダリングするか、サーバーまたはビルド時にHTMLをレンダリングするフレームワークに移行する |
| React Router v7 | モードによる | 公開ルートにはサーバーレンダリングまたはprerenderを備えたフレームワークモードを使う |
| Next.js App Router | サーバーレンダリングされたHTML。ページはServer Components | マウント後にデータを取得するクライアントコンポーネントの外に主要なコピーを保つ |
| Nuxt、SvelteKit | サーバーレンダリングされたHTML | 公開ページでSSRが無効化されていない(ssr: false)ことを確認する |
| Astro、Framer、Webflow、Wix、WordPress | 静的またはサーバーレンダリングされたHTML | 通常は問題ない。ボット保護と、コピーがスクリプトで読み込まれていないことを確認する |
何を使っていても当てはまる3つのルールがあります。
- **事実を最初のレスポンスに入れる。**つまり、プロダクト名、何をするか、誰向けか、価格、主要なリンクを、サーバーが返すHTMLに含めることです。
- **ボットにも人と同じページを配信する。**Googleは、クローラー向けに別途プリレンダリングしたバージョンを配信する動的レンダリングを「回避策であり、推奨される解決策ではない」と呼んでいます。MicrosoftのGEOガイドはこう述べています。「レンダリングされたDOMに、消費者が見るのと同じ事実が含まれていることを確認する。ボットに異なるHTMLを配信してはならない。」
- **
<head>で止めない。**優れたタイトルと説明はリンクプレビューには役立ちます。しかし、クローラーがプロダクトを説明するには十分ではありません。
FAQ
Googleはクライアントレンダリングされたコンテンツを見ますか? 通常は、最終的には見ます。Googlebotはページをレンダリング用にキューに入れ、ヘッドレスChromiumでJavaScriptを実行します。これはGoogle検索とGeminiをカバーします。AI Overviewsの補助リンクになるには、ページは「インデックスされ、スニペット付きでGoogle検索に表示される資格がある」必要があるため、レンダリングが遅い、または失敗するとそこで損をする可能性があります。ただし、これはChatGPT、Claude、Perplexityをカバーしません。これらのクローラーはレンダリングしないことが観測されています。
空の<div id="root">はランキングのペナルティですか?
いいえ。何もペナルティを与えません。コストは、レンダリングしないクローラーが読むものが何もないため、ページを引用したり説明したりできないことです。
サイトに良いメタディスクリプションがあります。それでは不十分ですか? それはクローラーに1文を与えるだけです。プロダクトが何をするか、あるいは代替品とどう比較されるかを尋ねられたアシスタントには、本文コピー(機能、価格、ユースケース)が必要です。
アプリを作り直す必要がありますか? 通常は不要です。公開ページ(ホーム、価格、機能、ドキュメントページなど)をプリレンダリングすれば十分です。ログイン後のアプリはクライアントレンダリングのままで構いません。
これを修正すればChatGPTに引用されますか? 誰も約束できません。読めることは前提条件です。引用されるかどうかは、あなたについて他の情報源が何を言っているか、そしてあなたのページが質問にどれだけうまく答えているかによります。残りはAI検索最適化プレイブックで扱っています。
関連記事
- 2026年創業者のためのAIクローラーガイド:robots.txt、llms.txt、引用
- AIクローラーログの読み方:GPTBotが実際にリクエストするもの
- ウェブサイトローンチチェックリスト
- GEOに関する7つの主張をGoogle自身のドキュメントと照合する
出典
- VercelとMERJ:The rise of the AI crawler(2024年12月)
- Google Search Central:Understand JavaScript SEO basics
- Google Search Central:Dynamic rendering as a workaround
- Google Search Central:AI features and your website
- Next.js:Server and Client Components
- Microsoft Advertising:From discovery to influence: a guide to GEO
- aat.ee:ローンチされた365件のプロダクトサイトの生HTML監査(342件を分析)、2026年10月
aat.eeのすべてのプロダクトには、サーバーレンダリングされた永続的なリスティングページが付くため、あなた自身のサイトがクローラーに対応する前でも、クローラーはプロダクトの説明を読むことができます。プロダクトを投稿する、またはリスティングオプションをご覧ください。