rendering.score はコピーが含むページの割合です。CDN がコピーを送れば、受け取る
エージェントはその分を読みます。
仕組み
- サイトを接続します。 サイトキーは一度だけ表示されます。このキーはサイトのコピーを読むことしかできません。
- ページを公開します。 ページの URL を送ると、querying.ai がサイトの国からレンダリングしてコピーを保管し、
refreshDays日ごと (既定 28 日)に再レンダリングします。 - コピーを同期します。 CDN が 10 分ごとにサイトキーでコピー一覧を読み、新しいコピーをダウンロードし、一覧から消えたコピーを削除します。
- AI エージェントに返します。 AI エージェントが GET を送ると、CDN は保管したコピーで応答します。コピーのないページ、期限切れのコピー、 エラーはオリジンに送ります。
サイトの接続
key を保管してください。このレスポンスにしかなく、CDN が送ります。POST /v1/ai-rendering/sites/{id}/key は新しいキーを返し、
古いキーをすぐに止めます。
あとから
PATCH /v1/ai-rendering/sites/{id} で変更できます。
ページの公開
GET /v1/async/task/{taskId} で追うか、GET /v1/ai-rendering/sites/{id} でページの
status を読みます:
ready: コピーがコピー一覧にあります。copyがその HTML ファイルです。rendering: 最初のコピーを作っています。failed: 最初のレンダリングが失敗しました。refreshAtに再レンダリングします。expired: コピーが期限切れになり、次のレンダリングまで一覧から外れました。
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 にストアのコピーで応答します:
- Cloudflare Worker
- ほかの CDN とサーバー
Worker はコピーを Workers KV に置き、cron で 10 分ごとに同期します。コピーは KV でコピーのファイルと同時に期限切れになります。Workers Free プランでは KV の書き込みが 1 日 1,000 回のため、大きなサイトは最初の同期に 1 日以上かかることがあります。
wrangler.toml:cloudflare-worker.mjs: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 にあります。