← Todos los artículos

Blog

Cómo verificar que tu evento de compra (purchase) de ecommerce de GA4 se envía correctamente

evento purchase de ga4 no funcionaseguimiento de ecommerce ga4parámetro items de ga4verificar compra ga4

"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 items está 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:

  1. Arreglo items vacío: purchase se envía, pero con items: []. Los datos del carrito se están cortando en algún punto de la transferencia.
  2. Esquema incorrecto: cada producto no tiene item_id ni item_name. GA4 requiere al menos uno de los dos, así que si faltan ambos, la entrada no se trata como un producto.
  3. Nombres de campo incorrectos: todavía estás enviando claves antiguas de Universal Analytics como id o name. GA4 espera item_id / item_name.

Problema común: si puedes ver que la solicitud purchase se dispara en DevTools pero no se registra ningún producto, revisa el cuerpo de la solicitud producto por producto: ¿está vacío items, y las claves son item_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.

  • value enviado 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).
  • currency faltante o no-ISO: si currency está ausente, o escrito como $ o pesos, no se agregará. Debe ser el código ISO 4217 de tres letras (MXN, USD, etc.).
  • Manejo inconsistente de impuestos/envío: si value incluye 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, purchase se dispara de nuevo, y sin un transaction_id, cada recarga se cuenta como ingreso nuevo
  • Por el contrario, con un transaction_id correcto, 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".

  1. 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 objeto ecommerce, esos datos residuales se filtran en tu push de purchase. La solución: siempre haz push de { ecommerce: null } justo antes de tu push de compra.
  2. 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 ecommerce vacío. Verifica el orden en el modo Vista previa de GTM: el push de purchase al dataLayer debe aparecer antes de que se dispare el tag.
  3. 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 items o value. 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 purchase se 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.completed de Stripe), considera disparar el evento purchase mediante 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_itemadd_to_cartbegin_checkoutpurchase. 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_cart nunca llena correctamente ecommerce.items en el dataLayer, es probable que ese mismo arreglo de items mal formado se arrastre hasta purchase.
  • Algunas plataformas de carrito construyen el arreglo items de forma progresiva a lo largo de los pasos del embudo. Si se salta begin_checkout o se dispara con un error, el arreglo que llega a purchase puede estar incompleto.
  • Verificar todo el embudo, no solo el purchase final, 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:

  1. 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 purchase y si value, currency e items están presentes. La clave es expandir items y revisar el contenido.
  2. Network de DevTools: en las DevTools de tu navegador, filtra por collect y confirma que se dispara una solicitud a …/g/collect cuando carga la página de agradecimiento. En el cuerpo, inspecciona en=purchase, transaction_id, value, currency e items.
  3. 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).
  4. 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.

  1. 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 purchase pueda 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, dejando items vacío.
  2. 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 purchase en la página de agradecimiento (compra completada)?
  • ¿Es value un número (no un string)?
  • ¿Es currency un código ISO 4217 (MXN / USD, etc.)?
  • ¿El arreglo items no está vacío, con item_id / item_name en cada producto?
  • ¿Está presente transaction_id y es único por pedido (para evitar el conteo duplicado)?
  • ¿Coincide la inclusión de impuestos/envío en value con 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.