Saltar al contenido principal
Compara una respuesta de IA ya completada con las páginas detrás de ella. El resultado muestra las búsquedas que ejecutó el motor, las páginas que recuperó y las que citó, las marcas que nombra la respuesta y las páginas que las nombran, dónde se sitúa tu marca y acciones priorizadas. También asigna los párrafos de cada página citada a las partes de la respuesta con las que se corresponden, con una explicación para cada vínculo, y resume qué tienen en común las páginas citadas. Es un análisis de correspondencia a posteriori de una respuesta existente: no prueba que una fuente hiciera que el modelo generara una frase, ni puntúa la calidad de una página. Trátalo como evidencia que revisar, no como un veredicto.
Sondea GET /v1/async/task/:id o indica webhook.url al enviar; la tarea informa taskType: "CITATION_ANALYSIS". No envíes este análisis a través de POST /v1/async/task; usa el endpoint dedicado. Los endpoints antiguos POST /v1/geo-audit, POST /v1/source-influence y POST /v1/research, los tipos de tarea GEO_AUDIT, SOURCE_INFLUENCE y CITATION_ATTRIBUTION e include.geoAudit, include.sourceInfluence siguen funcionando; las respuestas usan siempre los nombres nuevos.

Analizar una tarea que ya ejecutaste

Si la respuesta vino de esta API, envía su id de tarea en lugar de copiar la respuesta y las citas del resultado:
La tarea debe ser tuya, estar en COMPLETED y seguir siendo legible mediante GET /v1/async/task/:id. Su Markdown de respuesta (el texto si el motor no devolvió Markdown) pasa a ser answer, y sus URL citadas pasan a ser citations en el orden del motor: las 100 primeras, con un máximo de 10 hilos de discusión. Se omiten los marcadores de tarjetas de producto y vídeo (enlaces de googleusercontent.com) y los enlaces de búsqueda de Google, porque no tienen página que leer. Se usan el prompt, el country y el motor de la tarea salvo que los envíes. Enviar taskId junto con answer o citations se rechaza con 400, igual que una tarea sin terminar o sin texto de respuesta ni URL citada. Un id de tarea desconocido o caducado devuelve 404.

Analiza cada respuesta mientras la recopilas

Añade include.citationAnalysis: true a una solicitud de recopilación y el análisis se ejecuta sobre la respuesta en cuanto se recopila. Funciona con los motores de respuesta (CHATGPT, GEMINI, PERPLEXITY, GOOGLE_AIO, GOOGLE_AIMODE, NAVER_AI_BRIEF, NAVER_AI_TAB, BING_SEARCH, BING_COPILOT), en tareas individuales, lotes de tareas, cuadrículas y POST /v1/batches.
El análisis lee la respuesta y sus URL citadas igual que taskId más arriba. El resultado de la respuesta incluye entonces response.citationAnalysis: la tarea de análisis tal como la devuelve GET /v1/async/task/:id, con task, credits y response o error.
  • Webhook: se envía una sola vez, cuando termina el análisis, con la respuesta y el análisis juntos.
  • Consulta periódica: la tarea de respuesta pasa a COMPLETED en cuanto la respuesta está lista. Sigue consultando hasta que response.citationAnalysis.task.status sea COMPLETED o FAILED.
  • Los lotes se completan cuando todas las respuestas y sus análisis han terminado.
  • Sin análisis: si la respuesta no cita ninguna URL que leer, o tus créditos o el límite diario de la clave no cubren la reserva del análisis, response.citationAnalysis es { "error": "…" } y la respuesta se entrega de inmediato.
  • Facturación: el análisis se cobra aparte, por uso, como cualquier tarea de Citation Analysis. El cobro de la respuesta no cambia. Una clave limitada a ciertos tipos de tarea también debe permitir CITATION_ANALYSIS.

Payload

Con taskId o include.citationAnalysis, estos campos se rellenan a partir de los datos brutos de la respuesta. Para CHATGPT, las búsquedas del motor pasan a ser queries y cada página que recuperó pasa a ser una cita con cited, position, citedText, publishedAt y query; la misma URL con distintos parámetros de seguimiento se fusiona. Para Google AI Overview, las fuentes del resumen son citadas y los resultados orgánicos fuera de ellas son no citados, con position igual a su posición orgánica. Los demás motores solo aportan fuentes citadas.
Enviar analysis en la solicitud devuelve 400. Todos los resultados incluyen insights.

Resultado

Los resultados guardados antes de v4 conservan su forma anterior, sin campo version.

version

Siempre 4 para esta forma.

answer

La respuesta que enviaste, sin cambios. answerRanges son offsets en exactamente esta cadena: unidades de código UTF-16 de JavaScript, start inclusivo y end exclusivo. Recórtala tal cual, con answer.slice(start, end), en lugar de volver a dividir el texto. Cada rango de links[] identifica una unidad semántica completa de tu respuesta: una frase, un elemento de lista o una celda de tabla. Cada rango de brands[] es el nombre exacto tal como está escrito. Los límites se refieren al texto original.

queries[]

Las búsquedas que ejecutó el motor para esta respuesta. Cada una tiene un id, su text y sourceIds: las fuentes que encontró esa búsqueda. Vacío si el motor no expuso búsquedas y no enviaste ninguna.

sources[]: una entrada por página

  • id: identificador opaco, único dentro del resultado.
  • url: la URL de la página; domain: su host.
  • channel: quién controla la página, deducido de su host:
    • own: el sitio propio de tu marca (exactamente cuando own es true).
    • brand: el sitio propio de otra marca que nombra el resultado.
    • editorial: un editor; solo el editor puede cambiar la página. Los hosts no reconocidos se informan como editorial.
    • retailer: una tienda online o un marketplace.
    • review_platform: un sitio de reseñas de clientes o de empresas.
    • community: un foro o un sitio de preguntas y respuestas.
    • video: una plataforma de vídeo.
    • social: una red social.
    • blog_platform: un servicio de blogs alojados.
    • reference: una enciclopedia o wiki; nunca es objetivo de una acción.
  • cited: true si la respuesta cita la página, false si el motor solo la recuperó.
  • position: la posición que el propio motor dio a la página, o null si no dio ninguna.
  • queryIds[]: las búsquedas que encontraron la página.
  • publishedAt: la fecha de publicación tal como la indicó el motor, o null.
  • citedText[]: pasajes que el propio motor indicó haber citado; [] si no hay ninguno.
  • brandIds[]: marcas nombradas en la página legible, su título o citedText.
  • own: true si la página está en el sitio propio de tu marca.
  • paragraphs[]: los párrafos de una página citada incluidos en el resultado. Cada uno tiene un id (único en todo el resultado) y el text del párrafo. Un párrafo puede incluirse sin ningún vínculo. Siempre vacío en páginas no citadas.
  • error: solo aparece si la página no se pudo leer. En ese caso paragraphs está vacío y la cadena es un motivo breve para esa fuente.

brands[]

Todas las marcas que sigue el resultado: tu brand (role: "target"), tus competitors ("competitor") y otras marcas que nombra la respuesta ("answer").
  • rank: el orden en que el nombre de la marca aparece por primera vez en la respuesta, empezando por 1; null si la respuesta no nombra la marca.
  • answerRanges[]: los tramos exactos donde la respuesta nombra la marca o uno de sus nombres de producto, en los mismos offsets UTF-16; answer.slice(start, end) devuelve el nombre tal como está escrito. La búsqueda no distingue mayúsculas y toma palabras completas (salvo en escrituras sin espacios); incluye títulos y celdas de tabla, nunca URL de enlaces ni marcado de imágenes. A diferencia de los rangos de links[], no son unidades completas de la respuesta.
  • citedSourceIds[]: fuentes citadas cuya página la nombra.
  • retrievedSourceIds[]: fuentes no citadas cuya página la nombra.
  • ownSourceIds[]: fuentes en el sitio propio de la marca; solo se rellena para la marca objetivo.
  • paragraphId: el párrafo al que se refiere el vínculo. Siempre apunta a un párrafo que existe en sources[].
  • answerRanges[]: las partes de la respuesta con las que se corresponde este párrafo, como pares start/end en los mismos offsets UTF-16. Un vínculo puede tener varios rangos; el mismo texto de respuesta no se repite entre ellos. Cada rango es una unidad completa de la respuesta (frase, elemento de lista o celda de tabla).
  • explanation: una frase breve que describe la correspondencia: qué afirma el párrafo sobre esa parte de la respuesta.

visibility

Dónde se sitúa tu marca en esta respuesta; null si no se envió brand.
  • brandId: tu marca en brands[].
  • stage: uno de:
    • mentioned: la respuesta nombra tu marca.
    • on_cited_page: la respuesta no la nombra, pero sí una página citada.
    • on_retrieved_page: solo la nombran páginas que el motor recuperó sin citar.
    • not_found: ninguna página leída la nombra.
  • rank: el rank de tu marca en brands[].
  • answerBrands: cuántas marcas nombra la respuesta.

actions[]

Próximos pasos priorizados para tu marca; [] si no se envió brand. priority empieza en 1 (hacer primero) y no tiene huecos. Las acciones se ordenan por control: primero lo que controla tu marca (owned), luego las plataformas donde puede publicar (platform) y después el contacto con terceros (outreach). summary es una frase y steps[] contiene de uno a cinco pasos concretos, ambos en el idioma de la respuesta. sourceIds, brandIds, queryIds y linkIds apuntan a la evidencia de este resultado. brandIds nombra tu marca, o las marcas rivales que nombran esas páginas. Las acciones nunca sugieren reseñas falsas u ocultas, hacerse pasar por un reseñador independiente, comprar enlaces ni editar páginas que tu marca no posee. Las páginas de terceros que nombran tu marca sin ser citadas aparecen en brands[].retrievedSourceIds, no como acciones.

insights[]

Hasta cuatro resúmenes cortos de lo que suman las páginas: qué canales se citaron, el formato, la actualidad o los criterios que comparten las páginas citadas, cómo se compara el orden de marcas de la respuesta con lo que cubren las páginas citadas y dónde se sitúa tu marca. sourceIds nombra las páginas y linkIds los vínculos en que se basa cada resumen; al menos uno de los dos no está vacío, y solo nombran entradas de este resultado. Los insights describen correspondencias; no son consejos.

Cómo leer bien el resultado

  • La ausencia de vínculo no es un veredicto. Un párrafo sin vínculo simplemente no coincidió con un rango de la respuesta, y una parte de la respuesta sin rango significa que ningún párrafo se vinculó a ella. Ninguna de las dos cosas dice que la página sea irrelevante, no se usara o no sea fiable.
  • Una página no leída sigue siendo incierta. Si sources[].error está presente, esa cita quedó fuera del análisis; no trates su falta de vínculos como un hallazgo negativo. Reinténtala o aporta su body si importa.
  • Correspondencia, no causalidad. El resultado describe cómo encajan a posteriori una respuesta existente y el texto de una página existente, y qué marcas nombran esas páginas. No mide influencia en la generación, no puntúa la página ni informa de cómo se produjo la respuesta.
  • not_found significa que no está en ninguna página leída. No significa que tu marca esté ausente de la web.
  • Los datos de recuperación dependen del motor. Las páginas no citadas solo aparecen cuando el motor las expone (ChatGPT, Google AI Overview) o cuando envías páginas con cited: false. Si no, todas las fuentes son citadas y tu propia página solo puede aparecer como citada.
  • Los canales se deducen del host. channel se infiere del host de la página, no de leer quién la escribió.
  • Las acciones son sugerencias, no garantías. Se priorizan a partir de las páginas listadas en este resultado; aplicar una no asegura que la respuesta cambie.
  • Los ids son internos. No guardes los identificadores s…/q…/b…/l…/a… como claves estables entre ejecuciones; solo valen dentro de un resultado.

Ejecución y límites

  • El tamaño no es un motivo de fallo. Todo lo que acepta el contrato de la solicitud, una answer de hasta 200.000 caracteres con hasta 100 citas, se analiza. Las respuestas largas, los conjuntos grandes de fuentes y las páginas muy largas se gestionan dividiendo el trabajo, no rechazando la tarea.
  • La profundidad depende de la respuesta, no de la página. Una página larga no produce más vínculos de los que la respuesta puede sostener: el análisis se concentra en los pasajes con más probabilidad de corresponderse con la respuesta, y cada fuente que muestra una correspondencia aparece representada. En una página grande, o que repite la misma afirmación en navegación, listados y reseñas, espera los pasajes más sólidos y no cada aparición.
  • El marcado no es evidencia. Los mapas del sitio, los índices de enlaces y las galerías de imágenes no aportan vínculos; una página formada solo por ellos se informa sin párrafos en lugar de con correspondencias inventadas.
  • Una fuente que no se pudo leer se informa en sources[].error sin hacer fallar la tarea si otra fuente es legible. La tarea falla cuando no se pudo leer ninguna fuente, ante un fallo del análisis, un timeout o un error de configuración del servicio.
  • Las solicitudes se miden por uso, como el resto de la API. La respuesta de envío muestra la retención temporal de créditos; el cargo final se liquida cuando la tarea llega a un estado final.