メインコンテンツへスキップ
AI エージェントはサーバーが送る HTML を読みます。スクリプトを実行しないため、スクリプトが描く価格、レビュー、仕様は届かず、画像の中の 文字は alt テキストからしか読みません。AI Rendering は公開したページを人が見るとおりにレンダリングし、スクリプトを外し、画像ごとに文字を alt テキストに書き込みます。サイトの CDN はこのコピーをダウンロードして保管し、AI エージェントに返します。人、検索エンジン、その他の リクエストはこれまでどおりサイトに届き、querying.ai はサイトへのリクエストの経路に入りません。 GEO Score がこの差を測ります。rendering.score はコピーが含むページの割合です。CDN がコピーを送れば、受け取る エージェントはその分を読みます。

仕組み

  1. サイトを接続します。 サイトキーは一度だけ表示されます。このキーはサイトのコピーを読むことしかできません。
  2. ページを公開します。 ページの URL を送ると、querying.ai がサイトの国からレンダリングしてコピーを保管し、refreshDays 日ごと (既定 28 日)に再レンダリングします。
  3. コピーを同期します。 CDN が 10 分ごとにサイトキーでコピー一覧を読み、新しいコピーをダウンロードし、一覧から消えたコピーを削除します。
  4. AI エージェントに返します。 AI エージェントが GET を送ると、CDN は保管したコピーで応答します。コピーのないページ、期限切れのコピー、 エラーはオリジンに送ります。

サイトの接続

key を保管してください。このレスポンスにしかなく、CDN が送ります。POST /v1/ai-rendering/sites/{id}/key は新しいキーを返し、 古いキーをすぐに止めます。 あとから PATCH /v1/ai-rendering/sites/{id} で変更できます。

ページの公開

ページをレンダリングしています:
レンダリングには 30 秒ほどかかります。GET /v1/async/task/{taskId} で追うか、GET /v1/ai-rendering/sites/{id} でページの status を読みます:
  • ready: コピーがコピー一覧にあります。copy がその HTML ファイルです。
  • rendering: 最初のコピーを作っています。
  • failed: 最初のレンダリングが失敗しました。refreshAt に再レンダリングします。
  • expired: コピーが期限切れになり、次のレンダリングまで一覧から外れました。
サイトあたり 1,000 ページまでです。公開済みのページをもう一度送ると、今すぐ再レンダリングします。ページはパスとクエリで区別し、 utm_* や gclid などの計測パラメータは除きます。DELETE /v1/ai-rendering/sites/{id}/pages/{pageId} でページを取り下げます。 GEO Score が作ったコピーを再レンダリングせずに公開するには、その task id を送ります: { "taskId": "0b6c1f7e-…" }。アカウントの完了した GEO Score で、サイトの国から測ったものである必要があります。

CDN の設定

次を CDN のコードの隣に ai-rendering.mjs として保存します。syncCopies はストアをコピー一覧に合わせ、copyFor は AI エージェント の GET にストアのコピーで応答します:
Worker はコピーを Workers KV に置き、cron で 10 分ごとに同期します。コピーは KV でコピーのファイルと同時に期限切れになります。
wrangler.toml:
cloudflare-worker.mjs:
Workers Free プランでは KV の書き込みが 1 日 1,000 回のため、大きなサイトは最初の同期に 1 日以上かかることがあります。
次の同期が終わったあと、公開したページを ChatGPT が開くように確認します。コピーには X-Querying-Rendering: HIT が付きます:

コピー一覧

CDN は X-Querying-Site-Key にサイトキーを入れて GET https://api.querying.ai/v1/ai-rendering/copies を読みます:
コピーが期限切れでない公開ページをすべて含みます。copy はキーなしでダウンロードできます。ページを再レンダリングすると renderedAt が変わるので、renderedAt が新しいときだけダウンロードしてください。一覧にないページのコピーは削除します。一覧と ダウンロードは無料です。

エージェント

モジュールの AGENTS がコピーを受け取る相手を決めます。User-Agent のどこにあっても、大文字と小文字を区別せずトークンで照合します。
  • 既定: 人が質問しながらページに送るエージェント(chatgpt-user、codex、claude-user、claude-code、perplexity-user、 gemini-deep-research、duckassistbot、amzn-user、mistralai-user)と、ChatGPT 検索のクローラー oai-searchbot です。 ChatGPT 検索はこのクローラーが取得したページから答え、GEO Score の score がそのページを測ります。検索インデックスは OpenAI が 再クロールしたあとに変わります。
  • 必要なら追加: claude-searchbot、perplexitybot。
  • 入れない: 学習用クローラー(GPTBot、ClaudeBot)と Web 検索のクローラー(Googlebot、Bingbot)。Googlebot はスクリプトを自分で実行します。

検索エンジンのルールを守る

ボットに人と違う内容を送るとクローキングです。Google は、ボット向けにレンダリングしたページでも内容が近ければクローキングとみなしません (Dynamic rendering)。OpenAI はクローキングの 方針を公開していないため、コピーを Google の基準に合わせます:
  • コピーは人のブラウザが描いたページです。querying.ai はスクリプトを外し、画像の中の文字だけをその画像の alt テキストに加えます。alt は 画像の文字が入る場所です。
  • コピーはそのページの URL でだけ送ります。
  • コピーは最新に保たれます。querying.ai が refreshDays ごとに再レンダリングし、モジュールは期限切れのコピーを送りません。
  • コピーを編集するなら、削除か修正だけにしてください。読み違えた文字の修正やポップアップの削除は問題ありません。人に見えない主張、 価格、リンクを加えないでください。

コピーの中身

コピーは、人のブラウザがページを最後までスクロールしたあとに描いた HTML です。スクリプトが読み込んだ文字、元の位置に入ったフレームの ページがあり、構造化データ(JSON-LD)を除くスクリプトはすべて外され、大きな画像ごとに文字が alt テキストに入ります。リンクと画像の アドレスは絶対アドレスのまま残り、ページと同じように読めます。コピーは最後のレンダリング時点のページです。価格や在庫の変更は、次の レンダリング(最大 refreshDays 日後)に CDN の同期時間を足した分だけ遅れてエージェントに届きます。画像の文字は読んだとおりに入るため、 読み違えた文字もそのまま送られます。

課金

レンダリング 1 回で 5 クレジット、文字を読んだ画像ごとに 5 クレジット、アカウントが過去 90 日に読んだ画像(同じファイル、同じ読み方)は 1 枚 2 クレジットで、最大 12 枚です。送信時に 65 クレジットを確保し、完了時に使った分だけ差し引きます。失敗したレンダリングは 課金しません。更新も同じ規則でサイトのアカウントに課金し、クレジットが足りないアカウントは 1 時間後に再試行します。サイトの接続、 GEO Score のコピーの公開、コピー一覧、コピーのダウンロードは無料です。コピーは CDN が送るため、エージェントのトラフィックに querying.ai の 費用はかかりません。クレジットと上限を参照してください。

エラー

エンドポイントは API reference にあります。