ChatGPTやPerplexityで自社名を検索しても、何も出てこない。 あるいは、競合の情報ばかりが引用されて自社の記事は無視される。

こうした現象の原因は、コンテンツの質とは別のところにあることが多いです。 AIが使う「クローラ」というプログラムが、そもそもサイトの中身を読めていません。

GEO(Generative Engine Optimization)対策の最初のステップは、AIにコンテンツを「見える」状態にすることです。 本記事では、その仕組みと具体的な確認方法を解説します。

AIクローラとは何か

AI検索サービス(ChatGPT、Perplexity、Claudeなど)は、Web上の情報を収集するために「クローラ」と呼ばれるプログラムを動かしています。

クローラの動きはシンプルで、以下の繰り返しです。

  1. WebページのURLにアクセスする
  2. サーバーが返すHTMLを受け取る
  3. HTMLの中からテキストとリンクを取り出す
  4. リンク先のページに対して同じことを繰り返す

ここで重要なのは、クローラが読んでいるのは「HTMLに書かれたテキスト」だけという点です。 ブラウザで見えている画面そのものではありません。

Google検索とAI検索の決定的な違い

Google検索のクローラ(Googlebot)は、ブラウザと同じようにJavaScriptを実行できます。 2019年以降、GoogleはヘッドレスChromeを使って、JavaScriptで動的に生成されるコンテンツもインデックスしています。

つまり、Googleには見えています。

しかし、AI検索のクローラはJavaScriptを実行しません。

クローラサービスJavaScriptの実行
GPTBotChatGPT / OpenAIしない
ChatGPT-UserChatGPT検索しない
ClaudeBotClaude / Anthropicしない
PerplexityBotPerplexityしない
CCBotCommon Crawl(LLM学習データ)しない
GooglebotGoogle検索する

Google検索で上位に出ていても、AI検索には出ない。 この「ねじれ」の原因が、JavaScriptの実行有無にあります。

なぜAIクローラはJavaScriptを実行しないのか

技術的な理由は主に3つあります。

処理コストが桁違いに大きい。 JavaScriptを実行するにはブラウザ相当の環境が必要です。1ページあたり数秒かかる処理を、数十億ページ規模で行うのは現実的ではありません。Googleはこのインフラに巨額の投資をしていますが、AI企業が同等の仕組みを持つのは難しいのが現状です。

速度が落ちる。 AIクローラの目的はWebから大量のテキストを効率的に集めることです。JavaScript実行なしで読めるページのほうがWeb全体では多数派なので、それらを高速に収集するほうが合理的という判断があります。

セキュリティ上の懸念がある。 JavaScriptの実行は「他人が書いたプログラムを自分のサーバーで動かす」ことを意味します。悪意あるスクリプトへの対策コストも大きいです。

自社サイトがAIに見えているか確認する方法

サイトがAIクローラから読めているかどうかは、簡単に確認できます。

ターミナル(コマンドプロンプト)で以下を実行します。

curl -s https://自社サイトのURL | head -100

返ってきたHTMLに、記事のタイトルや本文のテキストが含まれていれば、AIクローラにもコンテンツが見えています。

もし以下のような内容しか返ってこない場合、AIからは「空のページ」に見えています。

<html>
<body>
  <div id="root"></div>
  <script src="/bundle.js"></script>
</body>
</html>

これは、React・Vue・Angularなどで構築されたSPA(シングルページアプリケーション)によくある状態です。ブラウザではJavaScriptが動いて画面が表示されますが、クローラにはHTMLの中身しか見えないため、空のdiv要素だけが取得されます。

Googleの「リッチリザルトテスト」も参考になります。 このツールでは「レンダリング前のHTML」を確認でき、それがAIクローラの見ている状態と同等です。

AIにコンテンツを見せるための対処法

対処法は、HTMLの時点でコンテンツが入っている状態を作ることです。 技術的には以下の3つのアプローチがあります。

サイトの構築方式を切り替える

最も確実な方法は、サーバー側でHTMLを生成してから返す方式に変更することです。

SSGは、ブログや記事ページのようにコンテンツが頻繁に変わらないページに向いています。 AI検索対策としては最も確実な方式で、このサイト自体もAstroによるSSGで構築しています。

プリレンダリングサービスを使う

既存のサイトを大きく変えられない場合、Prerender.ioなどのサービスを使う方法があります。 クローラからのアクセスを検知し、事前にレンダリングしたHTMLを返す仕組みです。

ただし、キャッシュの管理やクローラ判定の維持に継続的なコストがかかります。

ハイブリッド構成にする

記事ページやトップページはSSG、管理画面などはSPAという組み合わせが実務的には合理的です。 Next.jsのApp RouterやAstroのアイランドアーキテクチャなら、ページごとに方式を選べます。

robots.txtでAIクローラを許可する

サイトのHTMLにコンテンツが入っている状態を作ったら、AIクローラに対してアクセスを許可する設定も必要です。

robots.txtに以下を記述します。

User-agent: GPTBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

この設定がないと、コンテンツが読める状態になっていても、クローラがアクセスを自粛する場合があります。

LLMの学習データからも除外されるリスク

AI検索で引用されないだけでなく、LLMの「知識」にも反映されないリスクがあります。

LLMの学習データの主要ソースであるCommon Crawlも、JavaScriptを実行しないクローラで収集されています。 Dodge et al.(2021年、Allen Institute for AI)の研究では、「JavaScriptが無効な場合にコンテンツが表示されないページ」が学習データから除外対象になると報告されています。

つまり、AIクローラに読めないサイトは、AI検索に出ないだけでなく、AIの知識そのものに入りません。 この二重の不可視性が、GEO対策において最初に解消すべき問題です。

まとめ

GEO対策の第一歩は、AIクローラにコンテンツを「見える」状態にすることです。

ChatGPT・Perplexity・ClaudeのクローラはいずれもJavaScriptを実行しません。 Google検索で上位表示されていても、サイトの構築方式によってはAI検索から完全に無視されます。

確認方法はcurlコマンドひとつです。返ってきたHTMLに本文テキストが含まれていれば対策できています。 含まれていなければ、SSR/SSGへの移行やプリレンダリングサービスの導入を検討する段階です。