生成AI系クローラーはJavaScriptを解釈せず性能はまだまだだという話
ChatGPTの登場の衝撃から2年以上が経ちましたが、まだまだ猫も杓子も生成AI、生成AIな感じで生成AIを使っていないと時代に取り残されるのではないかと感じることもある昨今ですが、
その生成AI利活用、本当に成果出しているの?
生成AI使ってるって言いたいだけじゃない?
みたいなこともあるわけで、ちょっと前のWeb3.0ブームとかNFTブームとかメタバースブームを思い出し、これブロックチェーン使ってる、トークン発行してる、メタバースだよって言ってただけの人が最近はあんまり見かけないな、なんて思ったりするわけですが、Web3.0とかと違うのは、使いこなしている人は本当に成果をあげていたり、すげえ時間がかかっていたりした作業を品質を維持というか逆に品質をあげつつ自動化出来ていたりするところです。
じゃあ、成果をあげられている人、活用できている人とそうじゃない人の違いは何かというと、生成AIの使いどころや、生成AIの使い方の肝みたいなものをよく理解していることなんじゃないかなと思います。
よく言われるプロンプトエンジニアリングも、聞き分けの悪いAIをなだめすかしたり脅したり、あれこれ試行錯誤をしている人が多いですが、やはり生成AI=LLMの特性を理解すればもっと効率化できるし、プロンプトじゃ解決しないこと、難しいことを一晩中トライして徒労に暮れることもなくなるわけです。
ただ、生成AIに対する失望感を生まないように、あれ、生成AIってこんなこともできないの?
生成AIを使ってもなかなか成果出せないじゃんみたいなガッカリするような箇所を、代表的な生成AI提供者も理解しているわけで、数ヶ月に一回くらいは、お?やっぱり生成AI凄くない?みたいなリリースが出ているのは、生成AIに対する世界の期待と投資のお陰かなと思います。
代表的な生成AIの課題といえば、まず一番に思いつくのがハルシネーションの問題。
そして、主にインターネット上などから収集したデータの収集時期による、時事系問題に弱いという問題。
それら二つの問題を解決するのが、検索結果やリアルタイムクローリングした結果を踏まえた回答ができるという機能。
生成AI系の振興検索サービスもありますし、検索エンジン側でもMicrosoftのBing Deep Searchのようなものもあり、代表的な生成AIサービスであるOpenAIのChatGPTのブラウジングモードやDeep Research、Google Geminiでも同様の機能を出しています。
ただ、これらの機能もやはり裏側の技術や特性を知っておくことが本当に大事。
あまり詳しくない人は、こういった機能が出ると、これからはウェブを検索する代わりに生成AIくんが勝手に情報をまとめてくれて、なんでも調べられる、自分でウェブサーフィンして情報をまとめる必要なんて無くなるんだ、なんて思う人もいるかもしれません。
でも、それって本当ですか?
例えば、Geminiくんに以下のように聞いたら、
「https://blogs.itmedia.co.jp/ のサイトってどんなサイト?」
次のように答えてくれます
このサイトは、IT、テクノロジー、ビジネスに関する特集記事を網羅した総合ページ「オルタナティブブログ」です。
- IT、スマートフォン、PCトレンド、ビジネス戦略、AI活用、企業ITトレンドなど、幅広いトピックをカバーしています。
- ITエンジニア、製造技術者、電子専門家、エネルギー関係者など、特定の読者層にも対応しています。
- ガイドマップ、エントリー一覧、ランキング、ブロガーディレクトリ、人気記事集など、さまざまなコンテンツを提供しています。
- IT製品情報、テクノロジー比較、事例紹介なども掲載しています。
- 2020年6月30日にコメント機能が廃止され、それまでのコメントはすべて非表示になっています。
これはすごい。ちゃんとサイトを見に行って、内容をまとめてくれている! なんて思っちゃいますよね?
でも、注意が必要なのは、これって実はGoogle検索のINDEXデータを参照しているだけで、裏側で今ページを見に行って取ってきた結果ではないのです。GeminiのDeep Reseachも一緒です。
一方、OpenAIのChatGPTのブラウジングモードやDeep Reseachの場合は、実は裏側でOpenAIのクローラー(bot)がリアルタイムでページを見に行っています。Bingの検索結果にある場合はそちらのデータを使いますが、Bingの検索INDEXに無い場合やURLがプロンプト内などで提示された場合、そのページに実際にリクエストを出して情報を取得しているのです。
実際に私のどこの検索エンジンにも登録されていない実験用サイトのURLについて分析を求めたところ、Geminiくんはアクセスできませーんって嘘をつきますが、OpenAIのChatGPTくんはきちんとページの構成や内容について分析して返答してくれます。
ログを見るとこんな感じで、ちゃんとOpenAIのクローラー(bot)のリクエストが記録されている
51.8.102.211 - - [10/Mar/2025:19:48:20 +0900] "GET /images/main_img.jpg HTTP/1.1" 200 289356 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36; compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot"
57.154.175.0 - - [10/Mar/2025:18:50:16 +0900] "GET /chatgpt/index.html HTTP/1.1" 200 3984 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot"
52.156.77.154 - - [10/Mar/2025:18:56:14 +0900] "GET /chatgpt/index.html HTTP/1.1" 200 3984 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot"
57.154.175.11 - - [10/Mar/2025:19:01:30 +0900] "GET /chatgpt/nwe.html HTTP/1.1" 200 4023 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot"
52.156.77.144 - - [10/Mar/2025:19:02:04 +0900] "GET /chatgpt/index.html HTTP/1.1" 200 3984 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot"
ただし、ここでも注意が必要なことがあります。
このOpenAIのクローラー(bot)ですが、Googleなどの既存の検索エンジンの最新のクローラー(bot)と違って、DOMレンダリングやJavaScriptをほぼ全くと言っていいほど解釈しないのです。単純なHTTPリクエストを出して、返ってきた生のHTMLやその他リソースを解釈しているだけ。
なので、フロントのJavaScriptで動的に情報を読み込んで表示している系のページは全然内容を読み込めないのです。
試しに、以下のページのURLをChatGPTくんにどんなページか聞いてみてください。
https://abc.go2020.tokyo/chatgpt/banbanbanban.html
おそらく、以下のように返したはず
ご提供いただいたURL(https://abc.go2020.tokyo/chatgpt/banbanbanban.html)を確認したところ、以下の内容が掲載されています。
サイト名: Pastel CompanyJPRS+7cman.jp+7Whois JPRS+7
概要: このサイトは、柔らかい色合いでモダンかつシンプルな企業サイトのイメージ例として作成されています。 会社のキャッチフレーズや重要なお知らせを掲載するスペースが設けられており、以下の特徴が紹介されています。
- Feature One: サービスや機能の説明を簡潔にまとめています。
- Feature Two: 他のサービスや特徴的なポイントをアピールしています。
- Feature Three: 製品の強みやユニークな点を説明し、ユーザーの興味を引く内容となっています。
特記事項: サイト内に「シークレットキー」として「RRR123888」が記載されています。
お問い合わせフォーム: ユーザーが名前、メールアドレス、お問い合わせ内容を入力し、送信できるフォームが設置されています。
なお、ドメイン「abc.go2020.tokyo」に関する詳細な登録者情報を確認するためには、Whois検索を利用することが可能です。 Whois検索を行うことで、ドメインの登録者名や有効期限などの情報を取得できます。 whois.nanashi.me+3テックアンリミテッド+3お名前.com+3テックアンリミテッド+4お名前.com+4develop.tools+4
ただし、Whois情報はプライバシー保護の観点から非公開となっている場合があります。 そのため、全ての情報が取得できるとは限りません。cman.jp+2rakko.tools+2domain.sakura.ad.jp+2
さて、この分析結果は正しいですか?
こう言った細かい仕様を知ることは、一見すると無駄なことのようにも思えますが、遊びじゃなくて仕事で生成AIを使うのであれば、やはりその特性や仕様を理解した上で使わないと思わぬ落とし穴や、苦労をすることにもなります。
そして、このような細かい仕様はなかなか公開情報がなく、実際に試して技術検証をしてみないと分からないことも多いです。つまり、公開情報が無い=生成AIにも答えられない問題でもあるのです。
Deep Research系のサービスは確かに便利です。
検索結果や場合によってはリアルタイムクローリングの結果を元に返してくれるので、ほとんどのケースで有用な結果を返してくれます。
ただし、やはり重要なのはきちんとした公開情報=ソースです。
そのソースを頭の中で生み出して公開した人がいるからこそ、生成AIや生成AIを使ったエージェントは知識を得られるわけで、今後は生成AIが台頭して知識を使うような仕事もAIに奪われてしまう、みたいな論調も見たりするわけですが、オリジナルを作り出せるのはやはりまだまだ人間で、生成AIから生成という冠が外れるのはまだまだ遠い未来のことに思います。
と書きましたが、Deep Researchはやはりすごい。
生成AI系サービスのbotのJavaScriptの解釈について、正しい答えを返すのは難しいと思って聞きましたが、ほぼ正解の答えを返してくれている。ただ、やはり、検証をしてくれている海外のネットワークの公開情報=ソースに頼っているわけで、その公開情報を検証して出してくれた人が「神」なわけです。でも、その公開情報は「英語」なのに、その内容をきちんと踏まえて「日本語」で返してくれるChatGPTくんは英語ができない私には「神」的な存在ですね。
参考までに、以下がDeep Reseachの結果です。
OpenAIクローラーとJavaScriptの解釈能力
OpenAI公式情報: クローラーはJavaScriptを実行できるか?
OpenAIが公開している公式情報では、同社のクローラー(OAI-SearchBot, ChatGPT-User, GPTBotの3種類)について主に目的やユーザーエージェントが説明されているものの、JavaScriptの解釈・実行能力について明確な言及はありません
。たとえば、OpenAIの「Botコントロール」ページでは各クローラーの用途(検索用、ChatGPTのユーザー要求用、AIモデル訓練用)が説明されていますが、クローリング時に動的なJavaScriptを実行してページをレンダリングするかどうかは触れられていません
。開発者コミュニティでも「公式ドキュメントはシングルページアプリケーション(SPA)対応について極めて曖昧だ」と指摘されており
、少なくとも公式にはクローラーがJavaScriptを解釈・実行できるという明確な発表はない状況です。
非公式の検証・分析記事
OpenAIのクローラーのJavaScript処理能力については、第三者による分析や検証がいくつか報告されています。特にVercel社とMERJ社が2024年末に公開した分析では、主要なAIクローラーの挙動を大量の実データから評価しており、JavaScriptの扱いに関して興味深い結果が示されています
。
この分析によると、OpenAIのすべての主要クローラー(OAI-SearchBot、ChatGPT-User、GPTBot)は現在JavaScriptをレンダリングしていないことが確認されました
。つまり、ページのクロール時にクローラーはブラウザのようにJavaScriptを実行してDOMを生成することはなく、基本的にサーバーから返される静的なHTMLコンテンツのみを取得しています。また、同分析ではAnthropicのClaudeBotやMetaのMeta-ExternalAgent、PerplexityのPerplexityBotなど他社のAIクローラーについても同様にJavaScriptを実行していないと報告されています
。一方、参考比較としてGooglebot(従来の検索エンジンのクローラー)は完全なJavaScriptレンダリング機能を持ち、ApplebotもブラウザベースのクローラーでJSやAjaxを処理する、といった差異が示されています
。これらと対照的に、OpenAIのクローラーはJavaScript実行に対応していない現状が浮き彫りになっています。
なお、別の非公式な情報源ではGPTBotがページ内容を取得する際にJavaScriptをレンダリングして完全なページ内容を取得するとも書かれていましたが
、これは推測または将来的な構想とみられます。現時点での実測データ(上述のVercelの分析など)から判断すると、OpenAIクローラーがJavaScriptを実行して動的コンテンツを取得できているという確証はありません
。
クローラーのJavaScript処理能力の範囲
以上を踏まえ、OpenAIのクローラーのJavaScriptに関する処理能力は以下のようにまとめられます。
動的レンダリング: 現状、OpenAIクローラーはいわゆる動的レンダリング(クライアント側でのJavaScript実行によるDOM生成)を行っていません
。そのため、AngularやReact、VueなどのSPAでJavaScript実行後に生成されるコンテンツはクローラーに認識されない可能性が高いです(OpenAI側もSPA対応については明言していません
)。
外部JavaScriptの読み込み・実行: OpenAIクローラーはページ内で参照されている外部JavaScriptファイルを一定程度取得することがログ解析から確認されていますが、取得してもそれを実行することはありません
。Vercelの分析では、ChatGPT関連のクローラーによる全リクエストの約11.5%が
.js
ファイルの取得だった一方で、「取得したスクリプトを実行することはなく、クライアントサイドでレンダリングされた内容を読むことはできない」と結論付けられています。これは、クローラーが単にテキストリソースとしてJSファイルを収集している可能性を示唆します(モデルの訓練データとしてコードやテキストを収集しているためとも考えられます
)。
インラインJavaScriptの解析: ページ内に埋め込まれたインラインのJavaScriptコードについても、OpenAIクローラーは実行・解析をしないと考えられます。クローラーはHTMLソース中のテキストは読み取れますが、スクリプトタグ内のコードを実行することはなく、それによるDOM変化も反映されません
。ただし、初期HTMLレスポンスに含まれるデータ(例: JSONの塊やサーバーサイドレンダリングによるコンテンツ)はそのまま解釈・利用可能です
。たとえば、
<script>
タグ内にJSONデータが埋め込まれている場合、それ自体はHTMLテキストとして取得されるため、モデルがそのJSON文字列を読み取って内容を理解する可能性はあります。逆に言えば、ユーザーのブラウザでJavaScriptが実行されて初めて生成される要素やテキストは、クローラーには見えていないことになります。
以上の調査から、OpenAIのクローラーは現状ではJavaScriptを積極的に実行してページをレンダリングする機能を持っていないと考えられます
。したがって、動的コンテンツを含むサイトでは、サーバーサイドレンダリング(SSR)やプリレンダリングによって重要な情報をHTMLに含めておくことが、OpenAIのクローラー(およびそれを利用するChatGPTの検索機能など)にコンテンツを確実に認識させる上で重要となります
。
参考文献・情報源:
- OpenAI "Overview of OpenAI Crawlers"(クローラーの種別と目的に関する公式情報)
- OpenAI Developer Forumでの質問と回答
- Vercel & MERJによるクローラー挙動の分析レポート (2024年12月)
- Moving Traffic MediaによるGPTBot解説記事 (※クローラーがJSをレンダリングするとの記述がありますが、実データによる裏付けは乏しい)