GET /v1/async/task/:id をポーリングするか、送信時に webhook.url を指定してください。タスクは
taskType: "CITATION_ANALYSIS" として報告されます。この分析は POST /v1/async/task ではなく専用エンドポイントで
送信してください。GEO Audit 時代を含む旧エンドポイント POST /v1/geo-audit、POST /v1/source-influence と POST /v1/research、タスク種別 GEO_AUDIT、SOURCE_INFLUENCE と CITATION_ATTRIBUTION、include.geoAudit、include.sourceInfluence も引き続き使えます。レスポンスは常に新しい名前を使います。
実行済みのタスクを分析する
回答がこのAPIから得たものなら、結果から回答と引用をコピーする代わりにタスクidを送ってください。COMPLETED であり、GET /v1/async/task/:id でまだ読める必要があります。回答の
Markdown(エンジンがMarkdownを返さなかった場合はテキスト)が answer になり、引用URLがエンジンの順序で
citations になります。最初の100件までで、ディスカッションスレッドは最大10件です。商品・動画カードの
プレースホルダー(googleusercontent.com のリンク)と Google 検索のリンクは、読むページがないためスキップします。
送らなければタスクの prompt、country、エンジンを使います。taskId を answer や citations と一緒に送ると
400 で拒否され、未完了のタスクや回答テキスト・引用URLのないタスクも同様です。不明または期限切れのタスクidは
404 を返します。
収集と同時にすべての回答を分析する
収集リクエストにinclude.citationAnalysis: true を加えると、回答が収集された直後に分析が実行されます。
回答エンジン(CHATGPT, GEMINI, PERPLEXITY, GOOGLE_AIO, GOOGLE_AIMODE, NAVER_AI_BRIEF, NAVER_AI_TAB, BING_SEARCH, BING_COPILOT)で、単一タスク、タスクバッチ、グリッド、POST /v1/batches のいずれでも使えます。
taskId と同じ方法で回答と引用 URL を読み取ります。回答の結果には response.citationAnalysis
が入ります。GET /v1/async/task/:id が返す分析タスクそのもので、task、credits、そして response
または error を含みます。
- Webhook: 分析の完了後、回答と分析をまとめて一度だけ送ります。
- ポーリング: 回答タスクは回答の準備ができた時点で
COMPLETEDになります。response.citationAnalysis.task.statusがCOMPLETEDかFAILEDになるまでポーリングを続けてください。 - バッチは、すべての回答とその分析が終わった時点で完了します。
- 分析がない場合: 回答に読み取れる引用 URL がない場合や、クレジットまたはキーの1日の上限で分析の hold を確保できない場合、
response.citationAnalysisは{ "error": "…" }となり、回答はすぐに届きます。 - 課金: 分析は他のCitation Analysisタスクと同じく使用量に応じて別に課金されます。回答の課金額は変わりません。特定のタスクタイプだけを許可したキーでは
CITATION_ANALYSISも許可する必要があります。
Payload
taskId または include.citationAnalysis を使うと、これらのフィールドは回答の生データから埋められます。CHATGPT
では、エンジンの検索が queries になり、取得されたすべてのページが cited、position、citedText、
publishedAt、query 付きの引用になります。トラッキングパラメータだけが異なる同じURLは統合されます。Google AI
Overview では、オーバービューのソースが引用、それ以外のオーガニック結果が非引用となり、position にはオーガニック
順位が入ります。その他のエンジンは引用ソースのみを提供します。
結果
v4 より前に保存された結果は、version フィールドのない以前の形のままです。
version
この形では常に 4 です。
answer
送信した回答をそのまま返します。answerRanges はまさにこの文字列のオフセットです。JavaScript のUTF-16コード
単位で、start は含み、end は含みません。テキストを分割し直さず、answer.slice(start, end) のようにそのまま
切り出してください。links[] の範囲は回答の意味的なまとまり(文、リスト項目、表のセル)を丸ごと指し、
brands[] の範囲は書かれたとおりの名前を指します。境界は元のテキスト基準です。
queries[]
この回答のためにエンジンが実行した検索です。それぞれ id、text、そしてその検索が見つけたソースを示す
sourceIds を持ちます。エンジンが検索を公開せず、送信もしなかった場合は空です。
sources[]: ページごとに1エントリ
id: 不透明な識別子。結果内で一意です。url: ページのURL。domain: そのホスト。channel: ページを管理する主体。ホストから判定します:own: 自社ブランドのサイト(ownがtrueのときに限る)。brand: 結果が挙げる他ブランドの自社サイト。editorial: 発行元。ページを変更できるのは発行元だけです。認識できないホストはeditorialとして 報告されます。retailer: オンラインストアまたはマーケットプレイス。review_platform: 顧客レビューまたは企業レビューのサイト。community: フォーラムまたはQ&Aサイト。video: 動画プラットフォーム。social: ソーシャルネットワーク。blog_platform: ホスティング型のブログサービス。reference: 百科事典またはwiki。アクションの対象にはなりません。
cited: 回答がページを引用していればtrue、エンジンが取得しただけならfalse。position: そのページのエンジン自身の順位。順位がなければnull。queryIds[]: そのページを見つけた検索。publishedAt: エンジンが報告した公開日、またはnull。citedText[]: エンジン自身が引用したと報告した箇所。なければ[]。brandIds[]: 読み取れたページ本文、タイトル、citedTextに登場するブランド。own: ページが自社ブランドのサイト上にあればtrue。paragraphs[]: 結果に含まれた引用ページの段落。それぞれid(結果全体で一意)と段落のtextを持ちます。 リンクなしで含まれる段落もあります。非引用ページでは常に空です。error: ページを読めなかった場合のみ存在します。このときparagraphsは空で、文字列はそのソースに関する 短い理由です。
brands[]
結果が追跡するすべてのブランド: 自社の brand(role: "target")、competitors("competitor")、そして回答が
挙げるその他のブランド("answer")。
rank: 回答でそのブランド名が初めて現れる順、1から。回答がそのブランドを挙げていなければnull。answerRanges[]: 回答がそのブランドまたはその製品名を挙げている正確な箇所。同じUTF-16オフセットで、answer.slice(start, end)は書かれたとおりの名前を返します。大文字小文字を区別せず単語単位で照合し(空白で区切らない文字体系を除く)、見出しや表のセルも対象ですが、リンクURLや画像マークアップの中は対象外です。links[]の範囲と違い、回答のまとまり全体ではありません。citedSourceIds[]: ページがそのブランドを挙げている引用ソース。retrievedSourceIds[]: ページがそのブランドを挙げている非引用ソース。ownSourceIds[]: そのブランド自身のサイト上のソース。target のみ埋められます。
links[]: 段落ごとに1つの関係
paragraphId: このリンクが対象とする段落。常にsources[]に存在する段落を指します。answerRanges[]: この段落に対応する回答の部分で、上と同じUTF-16オフセットのstart/endペアです。1つの リンクが複数の範囲を持つことがあり、同じ回答テキストが範囲間で重複することはありません。各範囲は回答の まとまり(文、リスト項目、表のセル)を丸ごと指します。explanation: 対応を説明する短い文。段落が回答のその部分について何を述べているかを記します。
visibility
この回答における自社ブランドの位置です。brand を送らなかった場合は null。
brandId:brands[]内の自社ブランド。stage: 次のいずれか:mentioned: 回答が自社ブランドを挙げている。on_cited_page: 回答は挙げていないが、引用ページが挙げている。on_retrieved_page: エンジンが引用せずに取得したページだけが挙げている。not_found: 読み取ったどのページも挙げていない。
rank:brands[]における自社ブランドのrank。answerBrands: 回答が挙げるブランドの数。
actions[]
自社ブランドのための優先順位付きの次のステップです。brand を送らなかった場合は []。priority は1(最優先)
から始まり、欠番はありません。アクションは control の順に並びます。まず自社が管理するもの(owned)、次に
自社が投稿できるプラットフォーム(platform)、最後にアウトリーチ(outreach)です。summary は1文、steps[] は
1〜5個の具体的なステップで、どちらも回答の言語で書かれます。sourceIds、brandIds、queryIds、linkIds は
この結果内の根拠を指します。
brandIds は自社ブランド、またはそれらのページが挙げる競合ブランドを示します。アクションが、偽のレビューや
関係を明かさないレビュー、独立したレビュアーを装うこと、リンクの購入、自社が所有しないページの編集を提案する
ことはありません。自社ブランドを挙げていても引用されなかった第三者ページは、アクションではなく
brands[].retrievedSourceIds に示されます。
insights[]
ページ全体から読み取れる内容の短い要約を最大4件示します。どのチャネルが引用されたか、引用ページに共通する形式・
鮮度・基準、回答のブランドの順序が引用ページの扱う内容とどう対応するか、そして自社ブランドの位置です。
sourceIds は各要約の元になったページ、linkIds はリンクを示します。少なくとも一方は空でなく、この結果内の
エントリしか指しません。インサイトは対応を説明するもので、助言ではありません。
結果を正しく読む
- リンクがないことは判定ではありません。 リンクのない段落は回答の範囲と一致しなかっただけで、範囲のない 回答部分はリンクされた段落がなかっただけです。どちらもページが無関係、未使用、信頼できないという意味では ありません。
- 読めなかったページは不確かなままです。
sources[].errorがあれば、その引用は分析から除外されています。 リンクがないことを否定的な結果と見なさないでください。重要なら再試行するかbodyを渡してください。 - 対応であって因果ではありません。 結果は、既存の回答と既存のページテキストが事後的にどう対応するか、そして それらのページがどのブランドを挙げているかを説明します。生成への影響を測ったり、ページを採点したり、回答の 生成過程を報告したりはしません。
not_foundは読み取ったどのページにもないという意味です。 自社ブランドがウェブ上に存在しないという意味では ありません。- 取得データはエンジンに依存します。 非引用ページは、エンジンが公開している場合(ChatGPT、Google AI Overview)
か、
cited: falseのページを送った場合にのみ現れます。それ以外ではすべてのソースが引用となり、自社ページは 引用としてのみ現れます。 - チャネルはホストから判定します。
channelはページのホストから推定したもので、誰が書いたかを読み取って 判定したものではありません。 - アクションは提案であって保証ではありません。 この結果に挙げたページをもとに優先順位を付けたもので、実行しても 回答が変わるとは限りません。
- idは内部用です。
s…/q…/b…/l…/a…の識別子を実行をまたいだ安定キーとして保存しないでください。 1つの結果の中でのみ有効です。
実行と制限
- サイズは失敗の理由になりません。 リクエスト契約が受け付けるもの、つまり最大200,000文字の
answerと最大 100件の引用はすべて分析します。長い回答、多数のソース、非常に長いページは、拒否せずに処理を分割して扱います。 - 深さはページではなく回答に比例します。 長いページだからといって、回答が裏付けられる以上のリンクは 生まれません。分析は回答に対応する可能性が最も高い箇所に集中し、対応があるすべてのソースが結果に表れます。 大きなページや、同じ記述をナビゲーション、一覧、レビューで繰り返すページでは、すべての出現ではなく最も強い 箇所を想定してください。
- マークアップは根拠になりません。 サイトマップ、リンク索引、画像ギャラリーはリンクを生みません。それら だけでできたページは、対応を作り出さずに段落なしで報告されます。
- 読めなかったソースは、他に読めるソースがあればタスクを失敗させずに
sources[].errorで報告します。どの ソースも読めなかった場合、分析の失敗、タイムアウト、サービス設定エラーではタスクが失敗します。 - リクエストはAPIの他の部分と同様に使用量で計測します。送信レスポンスは一時的なクレジットの確保を示し、 最終的な課金はタスクが終了状態に達したときに確定します。