"Configuré el ecommerce de GA4, pero el ingreso en mi informe de Monetización no coincide con mi carrito." Este es uno de los dolores de cabeza más comunes en la medición de tiendas online. Las compras están ocurriendo, pero el monto no aparece o no se registró ni un solo producto. La mayoría de las veces, la causa se reduce a una falla dentro del evento purchase enviado en el checkout.
¿Te suena familiar alguno de estos casos?
- El informe de Monetización muestra compras pero ingresos (
value) en cero (o vacíos) - Aparece "Compras de ecommerce", pero la lista de
itemsestá vacía - El panel de tu carrito y GA4 no coinciden en el monto de ingresos
- El mismo pedido se cuenta dos veces, inflando los ingresos por encima de la realidad
Esta guía organiza cómo verificar que tu evento de compra de GA4 se envía correctamente, parámetro por parámetro. Desde un ángulo práctico: dónde mirar para aislar "se envió vs. no se envió".
Primero, los parámetros que necesita un evento de compra
El centro de la medición de ecommerce de GA4 es el evento recomendado purchase, que se envía cuando se completa una compra. Para registrar correctamente los ingresos y los productos, deben estar presentes todos estos parámetros.
| Parámetro | Función | Falla común |
|---|---|---|
transaction_id |
Identifica el pedido de forma única | Si falta → la misma compra se cuenta dos veces |
value |
Monto total de la compra | Sin definir / enviado como string → los ingresos muestran 0 |
currency |
Código de moneda (ISO 4217) | No es MXN/USD, o falta → el monto no se agrega |
items |
Arreglo de productos comprados | Arreglo vacío o esquema incorrecto → los productos no se registran |
El punto clave: value y currency siempre van juntos. Sin una moneda, GA4 no puede agregar el monto como ingreso. Y items es un arreglo donde cada producto lleva campos como item_id e item_name. Si ese arreglo está vacío o su estructura es incorrecta, la compra igual se cuenta, pero los productos dentro de ella desaparecen.
El problema del arreglo items (productos no registrados)
Cuando "las compras aparecen pero los productos están vacíos", casi siempre es un problema de items. Tres causas típicas:
- Arreglo items vacío:
purchasese envía, pero conitems: []. Los datos del carrito se están cortando en algún punto de la transferencia. - Esquema incorrecto: cada producto no tiene
item_idniitem_name. GA4 requiere al menos uno de los dos, así que si faltan ambos, la entrada no se trata como un producto. - Nombres de campo incorrectos: todavía estás enviando claves antiguas de Universal Analytics como
idoname. GA4 esperaitem_id/item_name.
Problema común: si puedes ver que la solicitud
purchasese dispara en DevTools pero no se registra ningún producto, revisa el cuerpo de la solicitud producto por producto: ¿está vacíoitems, y las claves sonitem_id/item_name? "El evento se está disparando" no significa "los productos llegaron correctamente".
El problema de value / currency (los ingresos no coinciden)
Las fallas alrededor del monto rompen silenciosamente tus reportes de ingresos.
valueenviado como string: enviar"3000"como string puede impedir que GA4 lo agregue como número, así que nunca llega a los ingresos. Pasa un número (3000).currencyfaltante o no-ISO: sicurrencyestá ausente, o escrito como$opesos, no se agregará. Debe ser el código ISO 4217 de tres letras (MXN,USD, etc.).- Manejo inconsistente de impuestos/envío: si
valueincluye o no impuestos y envío debe coincidir entre tu carrito y GA4, o se manifestará como una discrepancia en el monto. Cualquiera de las dos opciones está bien: lo importante es ser consistente.
Problema común: si "el conteo de compras coincide pero solo los ingresos están mal", sospecha primero de qué estás incluyendo en
value(con impuestos vs. sin impuestos, envío o no). La mayoría de las discrepancias están ahí.
El problema de transaction_id (conteo duplicado)
transaction_id es el parámetro que identifica un pedido de forma única. Si falta, o cambia cada vez, GA4 trata la misma compra como compras separadas y las cuenta más de una vez.
- Cada vez que se recarga la página de agradecimiento,
purchasese dispara de nuevo, y sin untransaction_id, cada recarga se cuenta como ingreso nuevo - Por el contrario, con un
transaction_idcorrecto, GA4 deduplica las compras repetidas que comparten el mismo ID
Para un desglose más completo del conteo duplicado en sí, consulta Por qué las conversiones se cuentan dos veces y cómo solucionarlo. La regla básica: coloca un valor que sea único por pedido y que nunca cambie, como el número de orden, en transaction_id.
Problemas del dataLayer (implementaciones con GTM)
Si usas Google Tag Manager para enviar el evento purchase, los datos fluyen a través del dataLayer. Tres problemas aquí explican gran parte de los casos de "purchase se dispara pero los datos están mal".
- No limpiar el objeto ecommerce antes de cada push. GTM combina los pushes del dataLayer de forma recursiva. Si un evento de ecommerce anterior (por ejemplo,
add_to_cart) dejó datos de productos en el objetoecommerce, esos datos residuales se filtran en tu push depurchase. La solución: siempre haz push de{ ecommerce: null }justo antes de tu push de compra. - Momento del trigger vs. disponibilidad del dataLayer. Si tu tag de evento de GA4 se dispara en DOM Ready, pero la plataforma del carrito envía los datos de la transacción al dataLayer un poco después, el tag se dispara con un objeto
ecommercevacío. Verifica el orden en el modo Vista previa de GTM: el push depurchaseal dataLayer debe aparecer antes de que se dispare el tag. - Usar el tipo de variable incorrecto. GTM tiene una "Variable de capa de datos" integrada para campos de ecommerce (por ejemplo,
ecommerce.transaction_id). Si accidentalmente creas una variable de JavaScript personalizada o codificas el valor manualmente, el mapeo puede romperse silenciosamente cuando cambie el formato del carrito.
Prueba rápida: abre la Vista previa de GTM, completa una compra de prueba y observa la pestaña Variables del evento
purchase. Cada campo de ecommerce (transaction_id,value,currency,items) debería tener un valor. Si alguno estáundefined, el push al dataLayer o falta o se dispara después del tag. Para solución de problemas más general de GTM, consulta Por qué tu tag de GTM no está registrando datos.
Redirecciones a pasarelas de pago y pérdida del evento purchase
Cuando el checkout redirige al comprador a una pasarela de pago externa (PayPal, Stripe Checkout, Klarna, etc.) y luego lo trae de vuelta a tu página de agradecimiento, el evento purchase corre un alto riesgo de nunca dispararse o de perder sus datos.
- Ruptura de sesión al regresar. La redirección crea una nueva navegación. Si el navegador trata el regreso como una nueva sesión (común con Safari ITP y las heurísticas de bloqueadores de anuncios), la página de agradecimiento puede cargarse sin el contexto del carrito necesario para poblar
itemsovalue. Para más sobre la pérdida de datos específica de Safari, consulta Safari ITP y la pérdida de conversiones. - Sobrescritura de atribución. Incluso cuando
purchasese dispara, GA4 puede atribuir la conversión al dominio de pago como una fuente de "referencia" en lugar de la fuente de tráfico original. Agrega el dominio de la pasarela de pago a tu lista de enlaces entre dominios en la configuración del flujo de datos de GA4 para preservar la sesión. Consulta Por qué se rompe el seguimiento entre dominios para la configuración completa. - Alternativa del lado del servidor. Para pasarelas que envían de forma confiable un webhook del lado del servidor (por ejemplo,
checkout.session.completedde Stripe), considera disparar el eventopurchasemediante el Measurement Protocol de GA4 desde tu servidor, en lugar de depender del script del lado del cliente. Esto evita por completo el problema de la redirección. Para el enfoque del lado del servidor, consulta Verificación de GTM del lado del servidor.
La secuencia de eventos de ecommerce también importa
Los eventos de ecommerce de GA4 siguen un embudo: view_item → add_to_cart → begin_checkout → purchase. Aunque purchase puede dispararse de forma independiente, una falla en un evento anterior puede enmascarar problemas que terminan apareciendo en los datos de purchase.
- Si
add_to_cartnunca llena correctamenteecommerce.itemsen el dataLayer, es probable que ese mismo arreglo de items mal formado se arrastre hastapurchase. - Algunas plataformas de carrito construyen el arreglo
itemsde forma progresiva a lo largo de los pasos del embudo. Si se saltabegin_checkouto se dispara con un error, el arreglo que llega apurchasepuede estar incompleto. - Verificar todo el embudo, no solo el
purchasefinal, detecta errores de esquema antes y agiliza la depuración.
Cuatro formas de confirmar que se está enviando
Puedes confirmar que el evento purchase y su contenido se envían correctamente, en este orden:
- DebugView de GA4: activa el modo de depuración, realiza una compra real (o de prueba) y, en "Administrar → DebugView", observa si aparece el evento
purchasey sivalue,currencyeitemsestán presentes. La clave es expandir items y revisar el contenido. - Network de DevTools: en las DevTools de tu navegador, filtra por
collecty confirma que se dispara una solicitud a…/g/collectcuando carga la página de agradecimiento. En el cuerpo, inspeccionaen=purchase,transaction_id,value,currencyeitems. - Informe de Monetización de GA4: en "Informes → Monetización → Compras de ecommerce", confirma que la cantidad e ingresos por producto se estén acumulando (los informes estándar tienen un retraso de procesamiento).
- Revisa duplicados por transaction_id: en un informe de exploración, verifica que el mismo pedido no se cuente dos veces buscando duplicados a nivel de
transaction_id.
Para confirmar si el propio tag de GA4 se está disparando, lee primero Cómo verificar que tu tag de GA4 está funcionando: agiliza el proceso de aislar el problema.
Lo que revisar en tu propia máquina no puede decirte
DebugView y DevTools son muy útiles, pero hacer una compra de prueba en tu propia máquina tiene dos límites estructurales.
- Tu entorno no es el entorno de tus visitantes. El estado de sesión, las extensiones, la exclusión de la IP de oficina y los bloqueadores de anuncios hacen que
purchasepueda dispararse correctamente en tu máquina pero faltar en las condiciones reales del comprador. Especialmente en flujos que pasan por una pasarela de pago o redirecciones, la sesión puede perderse antes de volver a la página de agradecimiento, dejandoitemsvacío. - Los ingresos que involucran un clic en un anuncio son difíciles de verificar. Para ver correctamente "¿una compra impulsada por un anuncio realmente se registra como ingreso?", necesitarías hacer clic en un anuncio en vivo para recrear el recorrido, lo cual conlleva el riesgo de una violación de política publicitaria por autoclic.
Juzgar que "apareció en DebugView, así que está bien" tiende a pasar por alto el problema de que value o items se pierdan en el flujo real de checkout que siguen tus compradores. Para la mentalidad de ir más allá de "se dispara" hacia "realmente se registra", consulta Por qué se dispara pero no se registra.
Lista de verificación
- ¿Se dispara el evento
purchaseen la página de agradecimiento (compra completada)? - ¿Es
valueun número (no un string)? - ¿Es
currencyun código ISO 4217 (MXN/USD, etc.)? - ¿El arreglo
itemsno está vacío, conitem_id/item_nameen cada producto? - ¿Está presente
transaction_idy es único por pedido (para evitar el conteo duplicado)? - ¿Coincide la inclusión de impuestos/envío en
valuecon el lado del carrito? - ¿El mismo pedido no se cuenta dos veces (verifica a nivel de
transaction_id)? - ¿Tampoco falta en condiciones reales de usuario en producción (no juzgues a partir de una sola prueba en tu máquina)?
Preguntas frecuentes
P. Las compras aparecen, pero los ingresos (value) están en cero. ¿Por qué?
R. Normalmente value no está definido o se envía como string, o currency falta/no es ISO, por lo que no se puede agregar. Revisa el contenido de value y currency en la solicitud …/g/collect en Network de DevTools.
P. ¿Por qué solo los productos no se registran?
R. Lo más probable es que el arreglo items esté vacío, o que a cada producto le falten item_id / item_name. También revisa que no sigas enviando las claves antiguas de UA id / name.
P. ¿Por qué la misma compra se cuenta dos veces?
R. Normalmente transaction_id falta, o cambia en cada recarga. Coloca un valor único e inmutable, como el número de orden, y GA4 deduplicará. Consulta el artículo sobre seguimiento duplicado para más detalles.
P. ¿Deben incluirse impuestos y envío en value?
R. GA4 no tiene una regla estricta, pero lo más importante es alinear la definición de ingresos del carrito con el value de GA4. Un desajuste siempre se manifiesta como una discrepancia en el monto.
P. Si puedo ver purchase en DebugView, ¿estoy tranquilo? R. Eso solo confirma que se envió. Estarás tranquilo solo una vez que hayas confirmado que se acumula correctamente en el informe estándar de Monetización, y que no falta en el flujo real de checkout de tus compradores en producción.
Conclusión: no te quedes solo en "se dispara"; revisa el contenido y el registro en producción
La medición de compras de ecommerce de GA4 solo funciona correctamente una vez que el evento purchase tiene transaction_id, value, currency e items todos presentes. DebugView y DevTools confirman que "se está enviando", pero lo que importa viene después: si el monto y los productos se registran sin pérdidas, en el flujo real de checkout que siguen tus compradores, en producción.
ConversionOK ejecuta tu página en vivo en un navegador independiente y aislado, e intercepta el evento de compra realmente enviado (incluyendo value, currency e items) para luego verificarlo. No necesitas hacer clic en tu propio anuncio, ni hay interferencia de tu entorno de oficina. Empieza con una verificación estática gratuita para confirmar el punto de entrada de tu medición de ecommerce.