# Cómo medir la visibilidad de marca en respuestas de IA

Javier Rodeiro · 2026-10-12

La cuota de voz en respuestas de IA es el porcentaje de respuestas en las que aparece una marca, frente a un grupo fijo de competidores. En una muestra de 2.194 turnos que recogí para una correduría de seguros, 1.093 respuestas nombraban al menos a una empresa vigilada y ninguna nombraba al cliente. Contar solo nombres habría ocultado las 345 respuestas que citan fuentes.

## ¿Por qué contar nombres se queda corto?

El equipo de marketing del cliente quería saber cuánto mencionan la marca los asistentes tipo ChatGPT cuando alguien pregunta por seguros. La primera versión fue la obvia: contar respuestas cuyo texto contiene el nombre.

Esa cuenta sale casi siempre a cero para una correduría que compara precios. Si preguntas por el seguro de coche más barato, el asistente enumera aseguradoras, no comparadores, y muchas veces adjunta enlaces a las fuentes. La marca puede estar presente como dominio citado sin aparecer ni una vez en el texto. Un conteo de nombres da cero tanto para una empresa que se usa como fuente como para una invisible. Son situaciones distintas y el panel no las distinguía.

## ¿Qué conté en su lugar?

Una marca cuenta como presente en un turno (una pregunta y su respuesta) si su nombre aparece en el texto o su dominio aparece entre las URL citadas. Cada turno suma una vez por actor, sea cual sea la señal. Luego divido lo del cliente entre el total del cliente y sus competidores, por clúster temático. El grupo de competidores se fija de antemano, así que la cifra solo cambia cuando cambian las respuestas.

![Flujo: los prompts rotan entre proveedores de LLM, cada turno se revisa por nombres y dominios citados, y la unión alimenta una cuota de voz por clúster frente a competidores.](../../../assets/articles/ai-visibility-share-of-voice-1.svg)

El diagrama marca el paso que importa: nombre y cita se unen antes de dividir. Este es el núcleo del modelo de dbt que alimenta el panel (nombres de cliente y competidores cambiados, estructura intacta):

```sql
round(
    safe_divide(
        cm.client_comparator_mentions,
        nullif(cm.total_comparator_mentions, 0)
    ), 4
) as geo_mention_rate
```

`dbt` es la herramienta de transformación en SQL que usa el proyecto para construir sus marts, las tablas finales que leen los paneles. `comparator_mentions` es la unión por clúster de aciertos por nombre y por cita.

## ¿Por qué devolver NULL y no cero?

El `nullif` de ese fragmento es deliberado. Si en un clúster no aparece ningún actor vigilado, ni el cliente ni un competidor, la cuota no está definida, no es cero. Un cero diría "el cliente ha perdido este clúster". Lo cierto es "los asistentes hablaron de otra cosa". El modelo devuelve NULL, el panel muestra un hueco y el modelo de reparto de presupuesto salta el clúster en lugar de penalizarlo. Dejé la decisión escrita como registro de decisión de arquitectura en el repositorio, porque sabía que en un mes habría olvidado el motivo.

## ¿Cómo se recogen los prompts?

Los datos vienen de prompt farming: lanzo un conjunto grande de preguntas realistas contra varios proveedores de LLM de forma programada y guardo cada respuesta. Un rotador sencillo, una clase que elige el siguiente proveedor para cada prompt, reparte las preguntas para que las manías de un solo modelo no dominen la muestra. Cada conversación tiene dos turnos, de modo que una pregunta de seguimiento puede cambiar las fuentes. Todo acaba en DuckDB, una base de datos analítica embebida, cargado con dlt, una librería de Python para trabajos de extracción y carga.

## ¿Qué mostró la muestra?

La foto del 22 de junio de 2026 contiene 1.097 conversaciones y 2.194 turnos. El extractor encontró en ellas 22.328 menciones de 15 actores vigilados. De los 2.194 turnos, 1.093 nombran al menos a un actor vigilado y 345 llevan enlaces a fuentes: 2.422 citas en 316 dominios distintos. El cliente no aparece nombrado en ningún turno y su dominio no se cita en ninguno.

![Gráfico de barras de 2.194 turnos: 1.093 nombran a un actor vigilado, 345 citan una fuente, 0 nombran al cliente, 0 citan el dominio del cliente.](../../../assets/articles/ai-visibility-share-of-voice-2.svg)

Los dos ceros son el hallazgo. El mercado no es invisible para los asistentes: en la mitad de los turnos se nombra a alguien. El cliente está ausente de ambos canales, así que añadir citas a la métrica no lo rescató. Sí significa que el movimiento futuro puede venir de cualquiera de los dos canales, y el informe puede decir de cuál.

## ¿Qué queda abierto?

Tres cosas. La muestra es una sola foto, así que no sé si los ceros son estables o ruido. El extractor decide con un modelo de lenguaje qué cuenta como mención de un actor y no he medido su tasa de error frente a etiquetas manuales. Y el grupo de competidores es una elección: si cambia, cambia la cuota, por eso el informe lo declara siempre.

Si gestionas un comparador o agregador, la conclusión es corta. Cuenta nombres y citas juntos, divide por un grupo fijo de competidores y mantén "sin datos" separado del cero.

Source: https://javierrodeiro.com/es/blog/medir-visibilidad-de-marca-en-respuestas-de-ia/
