"Las consultas están llegando, pero el número de conversiones no se mueve." Esta es una de las quejas más comunes en sitios que usan el envío de un formulario como objetivo. La notificación por correo llega, así que el envío claramente fue exitoso; sin embargo, las conversiones de Google Ads y GA4 están en cero. Ahí se esconde un conjunto de trampas de tracking exclusivas de los formularios.
¿Te suena algo de esto?
- Los correos de consulta llegan, pero específicamente el envío del formulario no se registra como conversión
- Después de enviar, la página nunca cambia: solo aparece en su lugar un mensaje de "Gracias, lo recibimos"
- El trigger "Form Submission" de GTM no se dispara
- El botón se hace clic sin problema, pero no hay señal de que se esté enviando un evento de medición
- En un formulario de varios pasos, no queda claro qué paso debería contar como objetivo
Esta guía organiza por qué los envíos de formulario no se registran como conversión en cinco puntos de diagnóstico, y luego recorre cómo verificarlo en DevTools y en la vista previa de GTM, además del diseño confiable que se dispara con el evento de un envío exitoso.
Principio básico: el tracking del formulario depende de cómo ocurre el envío
La mayoría de las fallas de tracking en formularios se reducen a una sola cosa: el lado de medición no logra captar cómo se está procesando realmente el envío. La vieja suposición —"enviar el formulario carga una página nueva"— simplemente ya no aplica para muchos formularios actuales.
| Cómo ocurre el envío | Qué puede ver el tracking | Qué falla |
|---|---|---|
| Navegación de página | La carga de la página de finalización puede servir de señal | No hay navegación, así que no llega ninguna señal |
| Envío por AJAX (sin navegación) | La página no cambia, así que parece que "no pasó nada" | Los tags que dependen de la carga nunca se disparan |
| Disparo de evento | El evento de envío exitoso se puede capturar directamente | Un listener ausente hace que se pierda el evento |
El punto clave: "se hizo clic en el botón" y "el envío se completó con éxito" son dos eventos completamente distintos. Los puntos de diagnóstico 1 a 5 a continuación están ordenados para ir descartando estos casos de "cómo ocurre el envío", de arriba hacia abajo.
Diagnóstico 1: un envío por AJAX no cambia nada, así que no hay señal de finalización
Hoy en día, la mayoría de los formularios de contacto no cambian de página cuando presionas enviar. Detrás de escena envían los datos de forma asíncrona (AJAX) y muestran "Gracias por tu envío" en la misma página. Es excelente para la experiencia de usuario, pero un problema real para el tracking.
La mayoría de los tags de medición usan "se cargó una nueva página de finalización" como su señal de disparo. Si ni la página ni la URL cambian, entonces, desde la perspectiva del navegador, no pasó nada, y el tag nunca se dispara.
- Después del envío, la URL se mantiene igual y solo cambia el mensaje de finalización
- La finalización se muestra en un modal (ventana emergente), y la página en sí nunca navega
- "Enviado" se renderiza con JavaScript y nada más
En este caso necesitas un diseño que se dispare con el evento de un envío exitoso, no con la carga de una página. Cómo construir esa señal se cubre en el Diagnóstico 5. Para los puntos ciegos del lado de la página de finalización, consulta Por qué no se registran las conversiones de tu página de agradecimiento.
Error común: si "el mensaje de finalización se muestra bien pero no se registra nada", sospecha primero de un envío por AJAX. Una finalización donde la URL nunca cambia no puede ser capturada por un tag que depende de la carga de página.
Diagnóstico 2: no hay un listener de evento vinculado, así que el envío nunca se captura
Aunque hayas diseñado todo para "registrar en el evento de envío", si el listener que espera ese evento no está correctamente vinculado, no pasa nada; es natural. Aquí es donde la intención del diseño y la implementación se desalinean.
- El script de tracking se ejecuta una sola vez, antes de que exista el formulario en la página, y nunca se vincula a un formulario insertado después
- El listener se vincula por error a el elemento equivocado
- El formulario se genera dinámicamente (en una ventana emergente, o después de una transición de pantalla en una SPA), así que el objetivo aún no existe cuando intentas vincularlo
Para formularios que aparecen más tarde, vincular un listener "una vez al cargar la página" no es suficiente. Necesitas volver a vincularlo después de que aparezca el formulario, o capturar el evento en un elemento superior (delegación de eventos).
Error común: si "la consulta de la página principal se registra pero la consulta de la ventana emergente no", es muy probable que no haya un listener vinculado al formulario que aparece después.
Diagnóstico 3: el trigger "Form Submission" de GTM no se dispara
Google Tag Manager (GTM) tiene un práctico trigger de "Form Submission", pero está construido en torno a formularios HTML simples, y a menudo no se dispara con los formularios controlados por JavaScript de hoy en día.
- El formulario llama a
preventDefault()justo antes de enviarse para cancelar el envío nativo y mandar los datos con su propia lógica (el "evento de envío" que GTM espera nunca ocurre) - La validación pausa el flujo primero, desincronizándose con el momento de detección de GTM
- El redireccionamiento después del envío es demasiado rápido, y la pantalla cambia antes de que el trigger pueda ejecutarse
Así que "coloqué el trigger de Form Submission pero no se dispara" normalmente no es una falla; es que la construcción del formulario y las suposiciones del trigger no coinciden. Para aislar fallas generales de GTM, consulta Qué revisar cuando GTM no registra conversiones.
Error común: en un formulario controlado por JavaScript, no confíes en el trigger "Form Submission"; cambia a enviar un evento personalizado al tener éxito el envío (Diagnóstico 5). Esa es la ruta confiable.
Diagnóstico 4: confundir el "clic" del botón con el "envío" real
Como solución alternativa, a veces se cuenta el "clic en el botón de enviar" como objetivo, pero eso descuadra los números. Un clic y un envío exitoso son eventos diferentes.
- Se presionó el botón, pero un error de validación detuvo el envío (se contó el clic, el envío falló)
- El usuario hizo clic en el botón repetidamente (una sola consulta se contó varias veces)
- El procesamiento del lado del servidor falló, pero solo se registró el clic
Contar clics tiende a inflar el número por encima de la cantidad real de consultas. El objetivo correcto es el momento en que el envío tiene éxito, y para eso necesitas el diseño del Diagnóstico 5.
Error común: si "el número de conversiones es claramente más alto que las consultas reales", sospecha que estás contando clics de botón en lugar de envíos exitosos.
Diagnóstico 5: cómo verificarlo, y cómo registrar de forma confiable
Todo lo anterior se puede aislar en gran parte viendo con tus propios ojos si realmente se dispara una señal de medición al enviar. Los pasos son simples.
- Abre el formulario de contacto y abre las DevTools de tu navegador
- En la pestaña "Network", filtra por
conversionocollect(GA4) - Envía realmente el formulario y observa si se dispara una solicitud de medición en ese momento
- Revisa también la "Console" en busca de errores y si el evento de envío está ocurriendo
- Si usas GTM, abre el modo Preview y verifica si el trigger se dispara al enviar el formulario
Y la base de un tracking confiable es señalizar explícitamente tú mismo el evento de un envío exitoso. Dentro del callback que se ejecuta cuando el envío del formulario tiene éxito, envía un único evento personalizado de tracking; este enfoque evita la mayoría de los problemas de los Diagnósticos 1 a 4, sin importar si el formulario usa AJAX, una SPA o un modal.
Error común: con un bloqueador de anuncios o la protección de tracking del navegador activada, la solicitud misma se bloquea y parece que "no se está disparando". Verifica en un estado limpio con esas opciones desactivadas.
Herramientas de formularios de terceros incrustadas mediante iframe
Si tu formulario proviene de una herramienta de terceros —HubSpot, Typeform, Formstack o similar— y está incrustado en tu página dentro de un iframe, ese límite crea un punto ciego de tracking. El iframe es un contexto de navegación separado: GTM ejecutándose en tu página no puede ver eventos dentro del iframe, así que un trigger de Form Submission apuntado a él nunca se disparará.
- El formulario vive en el documento propio del iframe, y las restricciones de origen cruzado impiden que los scripts de tu página lean o escuchen sus eventos
- Algunas herramientas (por ejemplo, el embed de JavaScript de HubSpot) disparan un callback en la página principal cuando se envía un formulario, pero solo si usas su embed basado en script, no el iframe puro
- Las páginas de finalización basadas en redirección dentro del iframe no disparan un evento de carga de página en tu página externa
La solución depende de la herramienta. Verifica si tu proveedor de formularios ofrece un callback o evento de JavaScript al completar el envío (el onFormSubmitted de HubSpot, por ejemplo). Si lo hace, envía un evento de dataLayer desde ese callback y dispara tu tag de conversión con él. Si la herramienta solo ofrece un iframe sin ganchos hacia la página principal, considera cambiar a su embed basado en script o usar un enfoque del lado del servidor que escuche el envío en el backend.
Error común: "configuré el tracking de GTM pero no se dispara nada" en un embed de HubSpot o Typeform casi siempre es un problema de límite de iframe. Verifica qué método de embed estás usando antes de depurar el tag en sí.
El consentimiento de cookies y las restricciones de privacidad descartan conversiones silenciosamente
Aunque el tracking de tu formulario sea técnicamente correcto, el consentimiento de cookies y las restricciones de privacidad del navegador pueden impedir que la conversión se registre alguna vez. Esta es una categoría de falla distinta a los Diagnósticos 1-5: el tag se dispara, pero los datos no llegan.
- Los visitantes que rechazan el banner de consentimiento de cookies (o nunca interactúan con él) no tendrán cookies publicitarias escritas, así que los pings de conversión se vuelven sin cookie o se bloquean por completo
- El Intelligent Tracking Prevention (ITP) de Safari y la Protección de Seguimiento Mejorada de Firefox restringen o eliminan las cookies de tracking por defecto, afectando aproximadamente al 35-40 % del tráfico web
- Con Consent Mode V2, cuando se rechaza
ad_storage, Google recibe solo pings anonimizados; las conversiones se modelan, no se miden directamente, lo cual puede reducir el volumen reportado
El resultado: tu formulario se dispara correctamente y las consultas llegan, pero Google Ads muestra menos conversiones de las que realmente tienes. La brecha tiende a ser mayor en regiones con regulación de privacidad estricta (UE/EEE, Reino Unido) o en sitios con alto tráfico de Safari/Safari móvil.
Para recuperar la atribución perdida, activa el Consent Mode para que Google pueda modelar las conversiones con consentimiento denegado, y configura Enhanced Conversions (ver abajo) para hacer coincidir conversiones usando datos propios en lugar de cookies. Para un análisis más profundo de la pérdida específica de Safari, consulta Safari ITP y la pérdida de conversiones.
Error común: si tu número de conversiones cae cada vez que actualizas o endureces tu banner de cookies, la causa no es un error de tracking, sino pérdida de datos relacionada con el consentimiento.
Enhanced Conversions: recuperando la atribución que pierden las cookies
Los formularios tienen una ventaja natural sobre muchos otros tipos de conversión: recopilan datos propios —direcciones de correo, números de teléfono, nombres— en el momento exacto en que ocurre la conversión. Enhanced Conversions usa estos datos para recuperar la atribución que las restricciones de cookies borrarían de otra manera.
Cómo funciona: cuando el formulario se envía con éxito, el tag de conversión aplica un hash SHA-256 a los datos proporcionados por el usuario (correo, teléfono, dirección) y los envía junto con el ping de conversión. Google compara el hash con los datos de usuarios con sesión iniciada para atribuir la conversión de vuelta al clic en el anuncio, sin necesidad de cookies de terceros.
Para configurarlo en GTM:
- Activa Enhanced Conversions a nivel de cuenta en Google Ads (Conversiones → Configuración)
- Edita tu tag de Google Ads Conversion Tracking en GTM y activa "Incluir datos proporcionados por el usuario desde tu sitio web"
- Mapea los campos del formulario (el correo es el mínimo; el teléfono y el nombre mejoran las tasas de coincidencia) a las variables correspondientes
- Publica y espera de 48 a 72 horas, luego verifica la salud del tag en la pestaña de Diagnóstico
En el caso de los formularios, Enhanced Conversions típicamente recupera entre 5-25 % de las conversiones que de otro modo se perderían, dependiendo la ganancia exacta de cuántos de tus visitantes tienen sesión iniciada en Google. Combinado con el modelado de Consent Mode, esto cierra la mayor parte de la brecha entre "consultas recibidas" y "conversiones reportadas". Para los pasos de verificación, consulta Verificación de Enhanced Conversions.
Error común: si Enhanced Conversions está activado pero las variables de datos proporcionados por el usuario no están mapeadas a los campos correctos del formulario, los hashes estarán vacíos y las tasas de coincidencia serán cero. Verifica siempre que la variable de correo realmente capture un valor en el modo Preview de GTM.
Lo que revisar en tu propia máquina no te puede decir
Enviar el formulario tú mismo para ver si se dispara es útil, pero verificarlo una sola vez en tu propia máquina tiene dos límites estructurales.
- Tu entorno no es el entorno de tus visitantes. Tú ya aceptaste el banner de cookies, y tus extensiones y las condiciones de la IP de tu oficina son diferentes. Puede dispararse sin problemas para ti al enviar, pero para un visitante en un entorno distinto el listener no está vinculado o el tag se descarta.
- Las conversiones que involucran un clic en un anuncio son difíciles de verificar. Para ver correctamente "si realmente se registra cuando alguien que llegó por un anuncio envía el formulario", 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 "se dispara cuando yo lo envío, así que está bien" tiende a pasar por alto el problema de que los datos se pierdan en el recorrido real que siguen tus visitantes.
Checklist: verificar el tracking de envío de formulario
- Enviaste realmente el formulario y confirmaste que la solicitud de medición se disparó en la pestaña Network de DevTools
- Revisaste la Console en busca de errores al momento del envío
- Para envíos por AJAX (sin navegación), confirmaste que el diseño se dispara con el evento de envío exitoso
- Confirmaste que hay un listener vinculado a los formularios que aparecen después (ventanas emergentes, SPA)
- Con GTM, confirmaste que el trigger se dispara al enviar el formulario en modo Preview
- Confirmaste que estás contando el "envío exitoso", no el clic del botón, como objetivo
- Para formularios de varios pasos, decidiste claramente qué paso cuenta como objetivo
- Verificaste en un entorno limpio con bloqueadores de anuncios, protección de tracking y exclusión de IP interna desactivados
- Para embeds de formularios de terceros (HubSpot, Typeform, etc.), confirmaste que el método de embed expone un callback hacia la página principal, no un iframe puro sin ganchos
- Verificaste que la configuración de consentimiento de cookies y Consent Mode no estén bloqueando silenciosamente el ping de conversión
- Si Enhanced Conversions está activado, confirmaste que las variables de datos proporcionados por el usuario capturan valores reales en el modo Preview de GTM
Preguntas frecuentes
P. Los correos de consulta llegan, pero las conversiones no se registran. R. La notificación por correo es un procesamiento del lado del servidor en tu herramienta de formularios; la conversión es un tag de medición del lado del navegador: rutas diferentes. Normalmente el envío por AJAX no causa navegación y nada se dispara (Diagnóstico 1), o no hay un listener vinculado para capturar el envío (Diagnóstico 2). Envía de verdad y confirma que se dispara.
P. Coloqué el trigger "Form Submission" de GTM pero no se dispara.
R. En formularios controlados por JavaScript, preventDefault() o la validación a menudo desincronizan las cosas con la detección de GTM, así que no se dispara (Diagnóstico 3). Cambia a enviar un evento personalizado al tener éxito el envío; esa es la ruta confiable.
P. ¿Por qué no se registra nada aunque se muestra el mensaje de finalización? R. Es muy probable que sea un envío por AJAX o un modal donde la URL nunca cambia, así que la señal de disparo del tag (una carga de página) nunca ocurre (Diagnóstico 1). Necesitas un diseño que se dispare con el evento de envío exitoso.
P. Mi número de conversiones es más alto que la cantidad real de consultas. R. Puede que estés contando clics de botón en lugar de envíos exitosos (Diagnóstico 4). Los clics repetidos y los envíos fallidos también se cuentan, inflando el número. Haz que el objetivo sea el momento en que el envío tiene éxito.
P. Uso un embed de HubSpot (o Typeform) y no se registra nada.
R. Si el formulario está incrustado como iframe, GTM en tu página no puede ver los eventos dentro de él; las restricciones de origen cruzado bloquean el acceso. Cambia al embed basado en script del proveedor y usa su callback de JavaScript (por ejemplo, onFormSubmitted de HubSpot) para enviar un evento de dataLayer que dispare tu tag de conversión.
P. El tracking del formulario funciona en mi máquina, pero Google Ads muestra menos conversiones que las consultas reales. R. El consentimiento de cookies y las restricciones de privacidad del navegador son la causa más probable. Los visitantes que rechazan las cookies o usan Safari/Firefox pueden enviar el formulario con éxito mientras el ping de conversión se bloquea o queda sin cookie. Activa Consent Mode y Enhanced Conversions para recuperar la brecha.
P. En un formulario de varios pasos, ¿qué punto debería ser el objetivo? R. Como regla general, el éxito del envío final. Disparar en un "Siguiente" intermedio cuenta a personas que luego abandonan, inflando el número. Si quieres ver la finalización de cada paso, registra esos como eventos separados, distintos del objetivo.
Conclusión: registra los formularios con el evento de un envío exitoso
Los envíos de formulario no se registran por un puñado de razones: ① un envío por AJAX sin navegación, ② un listener ausente, ③ el trigger Form Submission de GTM que no se dispara, ④ la confusión entre clic y envío, y ⑤ la ambigüedad sobre el objetivo en formularios de varios pasos. Todas se resuelven dejando atrás la vieja señal de "carga de página" y adoptando un diseño que señaliza explícitamente tú mismo el evento de un envío exitoso. Para el panorama completo de verificación, usa la Checklist de verificación de tracking de conversiones.
Pero las verificaciones de disparo en tu propia máquina tienen límites. Ir más allá —confirmar que el envío del formulario realmente se registra, en el recorrido real que siguen tus visitantes, incluyendo visitantes en entornos distintos, en producción— es lo que verdaderamente significa "está funcionando el tracking". Para el punto de entrada del diagnóstico, consulta ¿Sin conversiones en Google Ads? Una guía de diagnóstico paso a paso.
ConversionOK ejecuta tu página en vivo en un navegador independiente y aislado, e intercepta las solicitudes de medición que realmente se envían cuando se envía el formulario, para luego verificarlas, sin necesidad de hacer clic en tu propio anuncio y sin interferencia de tu entorno de oficina. Empieza con una verificación estática gratuita para confirmar el punto de entrada de tu medición.