O formulário é a segunda conversão mais comum de um site de serviço, e a mais mal medida. O Google Analytics 4 tem um evento automático chamado form_submit, que muita gente ativa e passa a confiar; ele dispara quando o botão é clicado, não quando o envio é confirmado, e por isso conta tentativas com erro, campos obrigatórios vazios e cliques duplos. O resultado é uma taxa de conversão inflada e campanhas otimizando para pessoas que nunca enviaram nada.
Este tutorial compara os quatro métodos de medição de formulário, mostra o mais confiável (o site avisa o GTM só no sucesso), explica o que fazer em cada plataforma (HTML próprio, WordPress, construtores, sites por IA), como testar, como marcar como evento-chave e como levar a conversão para o Google Ads.
Os quatro métodos para rastrear envio de formulário
| Método | Como funciona | Confiabilidade | Quando usar |
|---|---|---|---|
| Página de obrigado | Após o envio, o site redireciona para /obrigado; a conversão é a visualização dessa página | Alta, se o redirecionamento só acontece no sucesso | Formulários que redirecionam; o mais simples |
| dataLayer no sucesso | O código do formulário executa dataLayer.push({event: "generate_lead"}) quando o servidor confirma o envio | Muito alta | Padrão recomendado; formulários sem redirecionamento (AJAX) |
| Acionador "Envio de formulário" do GTM | O GTM escuta o evento submit do navegador | Média; falha em formulários por JavaScript e conta envios inválidos | Formulários HTML simples sem validação por script |
| Medição otimizada do GA4 (form_submit) | Evento automático ao interagir e enviar | Baixa para conversão; conta cliques no botão | Só como indicador de interação, nunca como conversão |
A regra: medir o sucesso, não a tentativa. Só os dois primeiros métodos garantem isso.
Método 1: rastrear formulário pela página de obrigado
O mais simples quando o formulário redireciona após o envio.
- Confirmar que o formulário redireciona para uma URL própria (ex.: /obrigado) apenas quando o envio dá certo.
- Colocar a página de obrigado com noindex (meta robots), para não aparecer no Google.
- No GTM: Acionadores › Novo › Visualização de página › Algumas visualizações › Page Path contém /obrigado.
- Tags › Nova › Evento do GA4 › nome generate_lead › parâmetro form_id (ou form_name) com um valor fixo ("contato") e page_path com a variável Referrer ou um parâmetro na URL de obrigado (/obrigado?form=contato&from=implante).
- Testar: enviar o formulário, cair na página de obrigado, ver o evento no DebugView.
Limite
Se a pessoa recarrega a página de obrigado ou a acessa direto, conta de novo. Para evitar, o redirecionamento pode incluir um parâmetro único ou a página pode bloquear acesso direto. Para a maioria dos sites de serviço, o erro é pequeno.
Método 2 (recomendado): dataLayer no sucesso do envio
É o método que mede exatamente o que importa: a confirmação de que a mensagem foi enviada. Exige uma linha no código do formulário, no ponto em que o servidor responde com sucesso.
No código do site
No retorno de sucesso do formulário (a função que mostra "Mensagem enviada"), inserir: window.dataLayer = window.dataLayer || []; window.dataLayer.push({event: "generate_lead", form_id: "contato", form_page: window.location.pathname, service: valorDoCampoServico});
No GTM
- Variáveis › Nova › Variável da camada de dados › nome form_id; repetir para form_page e service.
- Acionadores › Novo › Evento personalizado › nome do evento generate_lead.
- Tags › Nova › Evento do GA4 › nome generate_lead › parâmetros form_id = {{dlv - form_id}}, form_page = {{dlv - form_page}}, service = {{dlv - service}} › acionador generate_lead.
- Testar no modo de visualização: ao enviar com sucesso, o evento personalizado aparece na linha do tempo com a tag disparada; ao enviar com erro, nada dispara.
Por que o nome generate_lead
É um evento recomendado do GA4 (nome reservado com significado de "lead gerado"), que aparece com tratamento especial em relatórios e na importação para o Ads. Usar o nome recomendado evita criar um evento personalizado quando já existe um padrão.
Método 3: acionador de envio de formulário do Google Tag Manager
O GTM tem um acionador nativo "Envio de formulário". Funciona em formulários HTML clássicos que enviam a página; falha nos formulários modernos, que enviam por JavaScript sem recarregar e muitas vezes interrompem o evento submit.
- Variáveis › Configurar › marcar Form ID, Form Classes, Form URL.
- Acionadores › Novo › Envio de formulário › marcar "Aguardar tags" e "Verificar validação" › Alguns formulários › Form ID igual a [id do formulário].
- Tag do GA4 com evento generate_lead e form_id = {{Form ID}}.
- Testar com envio válido e com envio inválido: se o inválido também dispara, o método não serve para esse formulário.
Sinais de que não funciona
- O formulário mostra "enviado" sem recarregar e o GTM não registra nada.
- O acionador dispara ao clicar em "Enviar" mesmo com campos vazios.
- O formulário é de um plugin ou serviço externo (embed) que roda em iframe: o GTM da página não enxerga.
Como rastrear formulário em cada plataforma
| Plataforma | Método recomendado | Como |
|---|---|---|
| HTML próprio (feito à mão, ChatGPT, exportado do Lovable) | dataLayer no sucesso | Uma linha no retorno de sucesso do script de envio |
| WordPress com Contact Form 7 | dataLayer no sucesso | Ouvir o evento wpcf7mailsent e fazer o push; ou plugin que já envia ao dataLayer |
| WordPress com Elementor / WPForms / Gravity | dataLayer ou página de obrigado | Configuração de "ação após envio": redirecionar para /obrigado ou executar script |
| Wix | Página de obrigado ou integração nativa | Configurar redirecionamento após envio; ou usar o evento de formulário da integração do GA4 do Wix |
| Hostinger Website Builder | Página de obrigado | Configurar a página de sucesso do formulário e medir a visualização |
| Lovable | dataLayer no sucesso | Pedir no chat: "no sucesso do envio do formulário, execute dataLayer.push({event: 'generate_lead', form_id: 'contato'})" |
| Formulário externo em iframe (Typeform, RD, HubSpot) | Evento da própria ferramenta ou página de obrigado | Essas ferramentas enviam mensagens de conclusão que o GTM pode escutar, ou redirecionam |
Como instalar o GTM em cada plataforma está em como instalar o Google Tag Manager no site.
Como testar o rastreamento do formulário
- Modo de visualização do GTM conectado ao site.
- Envio inválido (campo obrigatório vazio): nenhuma tag de conversão deve disparar.
- Envio válido: o evento generate_lead aparece na linha do tempo com a tag do GA4 em "Tags Fired" e os parâmetros corretos.
- DebugView do GA4: o evento aparece com form_id e form_page.
- Repetir em celular.
- Conferir que o e-mail do formulário chegou (medição boa de formulário que não entrega não serve).
- Publicar o contêiner com descrição.
Como conferir depois de publicado
Comparar, a cada mês, o número de eventos generate_lead no GA4 com o número de e-mails recebidos pelo formulário. Diferença de até 10% é aceitável; acima disso, um dos dois lados está errado. A verificação geral está em como saber se o Google Analytics está funcionando.
Como transformar o envio de formulário em evento-chave e conversão do Ads
- No GA4: Administrador › Eventos › localizar generate_lead › ativar "Marcar como evento-chave" (ou criar em Eventos-chave › Novo).
- Em Definições personalizadas, registrar form_id e service como dimensões para usar nos relatórios.
- No Google Ads, importar o evento-chave como conversão (Metas › Conversões › Importar › GA4) com contagem "Uma"; ou criar uma tag de conversão do Ads ligada ao mesmo acionador generate_lead, como em como criar uma tag de conversão no Google Tag Manager.
- Ver a taxa de conversão por página e canal em Aquisição de tráfego, como em como calcular a taxa de conversão do site.
Exemplo
Uma escola media formulários pelo form_submit automático e registrava 90 "conversões" por mês. Ao mudar para o dataLayer no sucesso, caíram para 31, o número real de pedidos de visita. A campanha de matrículas, que otimizava para o evento inflado, passou a otimizar para o real; em dois meses, os pedidos subiram para 48 com o mesmo orçamento.
Código de exemplo: formulário HTML que avisa o GTM só no sucesso
Para quem tem um site em HTML (feito à mão, pelo ChatGPT ou exportado), o trecho abaixo mostra a lógica completa de um formulário que envia por JavaScript e só registra a conversão quando o servidor confirma. O assistente de IA escreve o código a partir desta descrição.
Estrutura
- Um formulário com id="form-contato", campos nome, WhatsApp, serviço (seleção) e mensagem, e um botão "Enviar".
- Um script que intercepta o envio (evento submit), impede o recarregamento, valida os campos e envia os dados para o serviço de e-mail (um endpoint próprio, um serviço como FormSubmit ou a função do construtor).
- No retorno de sucesso (resposta 200), o script: mostra a mensagem "Recebemos sua mensagem"; executa window.dataLayer.push({event: "generate_lead", form_id: "contato", form_page: location.pathname, service: valorSelecionado}); e, opcionalmente, redireciona para /obrigado.
- No retorno de erro, mostra "Não foi possível enviar; fale pelo WhatsApp" e não executa o push.
Pedido ao assistente
"Escreva o HTML e o JavaScript de um formulário de contato com os campos nome, WhatsApp, serviço (opções: [lista]) e mensagem, que envia por fetch para [endpoint] sem recarregar a página. Valide os campos obrigatórios. Só quando a resposta for de sucesso, mostre uma mensagem de confirmação e execute window.dataLayer.push({event: 'generate_lead', form_id: 'contato', form_page: window.location.pathname, service: [valor do campo serviço]}). Em caso de erro, mostre uma mensagem com link para o WhatsApp e não execute o push."
No GTM, para esse formulário
| Item | Configuração |
|---|---|
| Variáveis | dlv - form_id, dlv - form_page, dlv - service (Variável da camada de dados) |
| Acionador | Trigger - CE - generate_lead (Evento personalizado, nome generate_lead) |
| Tag GA4 | GA4 - Evento - generate_lead com os três parâmetros |
| Tag Ads (se houver campanha) | Ads - Conversão - Lead Formulário, mesmo acionador |
| GA4 | generate_lead como evento-chave; form_id e service como dimensões personalizadas |
Teste em quatro cenários
- Campo obrigatório vazio: nada dispara.
- Endpoint fora do ar (simular desligando a rede): mensagem de erro, nada dispara.
- Envio correto no computador: evento com os três parâmetros no DebugView.
- Envio correto no celular: idem.
Esse é o mesmo padrão que os sites do Grupo KOP usam em formulários, Jornadas e simuladores: a conversão só existe quando o contato chegou.
Formulários que abrem em pop-up ou em várias etapas
Formulários em pop-up seguem a mesma regra: o push acontece no sucesso do envio, não na abertura do pop-up. Formulários de várias etapas (quiz, pré-qualificação) merecem dois eventos: um de início (journey_open, evento comum) e um de conclusão (journey_complete ou generate_lead, evento-chave). A taxa entre os dois mostra onde as pessoas desistem, e as etapas intermediárias podem enviar um parâmetro step para análise de funil no GA4 (Explorar › Funil).
Formulários do WhatsApp Business e agendamento externo
Quando o contato termina fora do site (um link que abre o WhatsApp com os dados preenchidos, ou um sistema de agendamento em outro domínio), o site só consegue medir o clique de saída. Nesses casos, o evento é o clique (whatsapp_click ou schedule_click), e a conclusão é registrada pela equipe ou pelo sistema externo. Tentar medir a conclusão pelo site produz zero ou números inventados.
Resumo de decisão por tipo de formulário
| Tipo | Método | Evento |
|---|---|---|
| Contato simples | dataLayer no sucesso ou página de obrigado | generate_lead |
| Pré-qualificação em etapas | dataLayer no início e na conclusão | journey_open / journey_complete |
| Agendamento externo | Clique de saída | schedule_click |
| Newsletter | dataLayer no sucesso | sign_up |
| Download de material | Medição otimizada ou clique | file_download |
Em todos os tipos, a regra é a mesma: o evento-chave é a conclusão confirmada, e o início é evento comum. Com essa separação, o relatório de Eventos mostra o funil de cada formulário sem precisar de ferramenta extra.
Erros comuns ao rastrear envio de formulário
- Usar form_submit da medição otimizada como conversão: conta cliques.
- Acionador de clique no botão "Enviar": mesma coisa.
- Página de obrigado acessível direto e indexada: conversões falsas e página no Google.
- Push do dataLayer antes da confirmação do servidor: conta envios que falharam.
- Formulário em iframe medido pelo GTM da página: nada dispara.
- Nomes de evento diferentes por formulário (contato, contato_enviado, lead): consolidar em generate_lead com form_id.
- Não registrar form_id como dimensão: impossível saber qual formulário converte.
- Medir e não entregar: e-mail do formulário caindo em spam ou não chegando.
Perguntas sobre rastrear envio de formulário
Como rastrear envio de formulário no Google Analytics
O método mais confiável é o site executar dataLayer.push({event: "generate_lead"}) só quando o envio é confirmado e o GTM disparar a tag do GA4 a partir desse evento; alternativas são a página de obrigado e o acionador de formulário do GTM.
O evento form_submit do GA4 serve como conversão
Não. Ele dispara na interação com o botão, contando tentativas com erro. Serve apenas como indicador de interação.
O que é generate_lead
Um evento recomendado do GA4 para lead gerado; usar esse nome evita criar eventos personalizados e facilita relatórios e importação para o Ads.
Como rastrear formulário no WordPress
Com o evento de sucesso do plugin (ex.: wpcf7mailsent no Contact Form 7) enviando ao dataLayer, ou redirecionando para uma página de obrigado.
Como rastrear formulário no Wix ou na Hostinger
Configurando uma página de sucesso após o envio e medindo a visualização dela no GTM, ou usando a integração nativa de GA4 quando disponível.
Como rastrear formulário em site feito no Lovable
Pedindo no chat para executar dataLayer.push({event: "generate_lead"}) no sucesso do envio e criando o acionador de evento personalizado no GTM.
Como saber se a medição do formulário está certa
Comparando mensalmente os eventos generate_lead no GA4 com os e-mails recebidos; diferença acima de 10% indica erro.
Como levar o formulário para o Google Ads
Marcando generate_lead como evento-chave e importando no Ads, ou criando uma tag de conversão do Ads ligada ao mesmo acionador.
Resumo · como rastrear envio de formulário no Google Analytics
- Medir o sucesso, não a tentativa: form_submit automático e clique no botão não servem como conversão.
- Recomendado: dataLayer.push generate_lead no retorno de sucesso + acionador de evento personalizado no GTM.
- Alternativa simples: página de obrigado com noindex e acionador de visualização.
- Acionador de formulário do GTM: só para HTML clássico; testar envio inválido.
- Por plataforma: HTML/Lovable (dataLayer), WordPress (evento do plugin), Wix/Hostinger (página de obrigado), iframe (evento da ferramenta).
- Testar: inválido não dispara, válido dispara; DebugView; celular; e-mail chegou.
- Evento-chave no GA4, dimensões form_id e service, conversão no Ads com contagem "Uma".
Medir o formulário no sucesso muda o número e muda as decisões: a taxa cai para a real e as campanhas passam a otimizar por lead de verdade. O Grupo KOP entrega essa medição em todos os pontos de captação de cada site e a usa para operar campanhas, como mostra a página de Google Ads. O próximo passo é entender o que são eventos no Google Analytics 4.