ChatGPTやPerplexityで自社名を検索しても、何も出てこない。 あるいは、競合の情報ばかりが引用されて自社の記事は無視される。
こうした現象の原因は、コンテンツの質とは別のところにあることが多いです。 AIが使う「クローラ」というプログラムが、そもそもサイトの中身を読めていません。
GEO(Generative Engine Optimization)対策の最初のステップは、AIにコンテンツを「見える」状態にすることです。 本記事では、その仕組みと具体的な確認方法を解説します。
AIクローラとは何か
AI検索サービス(ChatGPT、Perplexity、Claudeなど)は、Web上の情報を収集するために「クローラ」と呼ばれるプログラムを動かしています。
クローラの動きはシンプルで、以下の繰り返しです。
- WebページのURLにアクセスする
- サーバーが返すHTMLを受け取る
- HTMLの中からテキストとリンクを取り出す
- リンク先のページに対して同じことを繰り返す
ここで重要なのは、クローラが読んでいるのは「HTMLに書かれたテキスト」だけという点です。 ブラウザで見えている画面そのものではありません。
Google検索とAI検索の決定的な違い
Google検索のクローラ(Googlebot)は、ブラウザと同じようにJavaScriptを実行できます。 2019年以降、GoogleはヘッドレスChromeを使って、JavaScriptで動的に生成されるコンテンツもインデックスしています。
つまり、Googleには見えています。
しかし、AI検索のクローラはJavaScriptを実行しません。
| クローラ | サービス | JavaScriptの実行 |
|---|---|---|
| GPTBot | ChatGPT / OpenAI | しない |
| ChatGPT-User | ChatGPT検索 | しない |
| ClaudeBot | Claude / Anthropic | しない |
| PerplexityBot | Perplexity | しない |
| CCBot | Common Crawl(LLM学習データ) | しない |
| Googlebot | Google検索 | する |
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を生成してから返す方式に変更することです。
- SSR(サーバーサイドレンダリング): アクセスのたびにサーバーがHTMLを組み立てて返します。Next.js、Nuxtが代表的です
- SSG(静的サイト生成): あらかじめHTMLファイルを生成しておきます。Astro、Hugo、Next.jsのstatic exportが代表的です
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への移行やプリレンダリングサービスの導入を検討する段階です。