Google Analytics 2027 · Capítulo 7 de 35 · 11 min
Escrever o contrato de dados que o desenvolvedor consegue implementar
Um documento de eventos com nome oficial, parâmetros, momento de disparo e formato de dataLayer que o desenvolvedor implementa sem reunião.
Este capítulo faz parte do curso gratuito Google Analytics 2027. Para marcar como concluído e salvar o progresso, abra este capítulo na página do curso.
Com o contêiner organizado, falta decidir o que o site entrega para ele ler. Sem contrato, o desenvolvedor escolhe nomes por conta própria ("enviouForm", "lead_ok"), o analista espera outros, e o evento chega ao relatório com um nome que ninguém procura. Dois meses depois, há três eventos para o mesmo acontecimento e nenhum relatório que some os três.
O custo aparece na hora de responder à pergunta do negócio. Quantos orçamentos vieram da campanha de setembro? Se o evento se chama generate_lead numa página e lead_form noutra, a resposta exige uma exploração com filtro que só a Marina sabe montar. E a coleção de relatórios de lead do GA4 fica vazia, porque ela só reconhece os nomes recomendados.
O contrato de dados resolve isso com quatro decisões: de qual categoria cada evento vem, como ele se chama, o que o dataLayer carrega e em que instante o disparo acontece. A Verde Vivo saiu daqui com uma especificação de 12 eventos para o site em Next.js, e Caio implementou sem uma única reunião de esclarecimento.
Os eventos do GA4 vêm de quatro categorias, e saber de qual vem cada um evita reimplementar o que já existe. Os automáticos (first_visit, session_start, user_engagement) disparam pela própria tag, sem configuração. Os da medição otimizada (page_view, scroll, click, file_download, form_start, form_submit, view_search_results, video_start) disparam quando a opção está ligada no fluxo. Os recomendados têm nome e parâmetros definidos pelo Google, mas exigem implementação. Os personalizados são inventados pela empresa.
As quatro categorias de evento e o que cada uma exige
| Categoria | Quem define o nome | Exige código | Exemplos | Alimenta relatório pronto |
|---|---|---|---|---|
| Automático | Não | first_visit, session_start, user_engagement | Sim: usuários, sessões e engajamento | |
| Medição otimizada | Não, só a opção ligada | page_view, scroll, file_download, form_submit | Sim: páginas, downloads e formulários | |
| Recomendado | Google, na referência oficial | Sim, com o nome e os parâmetros oficiais | purchase, generate_lead, login, sign_up, view_item | Sim: e-commerce, geração de leads, monetização |
| Personalizado | A empresa | Sim | whatsapp_click, phone_click, cuidado_consultado | Não: só em exploração ou depois de registrar dimensão |
Fonte: Google Analytics, Recommended events (referência oficial, consultada em setembro de 2026)
A preferência pelo recomendado é uma regra de economia. Um purchase com transaction_id, value, currency e o array items preenche os relatórios de e-commerce sem ninguém configurar nada. Um generate_lead, seguido de qualify_lead, working_lead e close_convert_lead ou close_unconvert_lead (os seis eventos de lead que o Google documenta desde 2024), preenche a coleção de geração de leads e os públicos por estágio. O mesmo dado com nome inventado só vira relatório depois de trabalho manual.
A nomenclatura para o que sobra é curta: letras minúsculas, palavras separadas por sublinhado, verbo ou objeto que descreve o acontecimento e não a tela (whatsapp_click, não botao_verde_rodape). Nomes reservados pelo Google não podem ser usados, e um evento com o nome oficial e parâmetros diferentes dos oficiais engana quem lê o relatório pronto. O contrato lista cada nome uma vez, com a categoria e o dono.
O dataLayer é o lugar onde o site deposita o que a tag vai ler, e a estrutura dele é a parte do contrato que o desenvolvedor mais usa. É um array JavaScript em que cada push carrega o nome do evento e os dados no formato que o GA4 espera. O exemplo abaixo é o generate_lead da Verde Vivo, disparado depois que o servidor gravou o orçamento.
// Disparado APENAS depois da resposta 201 da API de orçamentos.
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: "generate_lead",
currency: "BRL",
value: 6000, // valor esperado do lead: R$ 42.000 x (1/7)
lead_source: "formulario_paisagismo",
lead_id: "ORC-2026-0917", // parâmetro só para o CRM, não vira dimensão
segmento: "corporativo",
});O momento do disparo é a decisão que mais separa medição confiável de medição que parece funcionar. Um mesmo formulário passa por cinco instantes, e cada um merece um evento próprio ou nenhum. A intenção é o clique em "Pedir orçamento" que abre o formulário. A tentativa é o envio. O erro é a resposta de validação. O sucesso é a resposta do servidor com identificador. A confirmação do servidor, dias depois, é o pagamento do Pix ou a etapa do CRM, que o capítulo 31 envia de fora do navegador.
- Etapa 1 de 5: Intenção
Clique em "Pedir orçamento": form_start da medição otimizada, sem código
- Etapa 2 de 5: Tentativa
Envio do formulário: form_submit, aceito ou não; nunca é o lead
- Etapa 3 de 5: Erro
Validação recusada: form_error personalizado com o campo que falhou
- Etapa 4 de 5: Sucesso
Resposta 201 com lead_id: generate_lead, o único que a mídia otimiza
- Etapa 5 de 5: Confirmação do servidor
Etapa no HubSpot dias depois: qualify_lead enviado pelo servidor, capítulo 31
Formulários em React e em outras bibliotecas mudam a regra do jogo. O envio acontece por JavaScript, sem recarregar a página, e a medição otimizada registra form_submit no instante do clique, tenha o servidor aceitado ou não. O contrato diz que form_submit é diagnóstico de funil e que generate_lead só existe depois da resposta bem-sucedida, com o lead_id gravado. A diferença entre os dois é a taxa de erro do formulário, que a Verde Vivo nunca tinha medido.
A aplicação de página única (o site em que a troca de rota acontece sem recarregar a página, como o Next.js da Verde Vivo) traz o problema mais frequente desta trilha. A Google tag dispara page_view no carregamento inicial e, por padrão, não sabe que a URL mudou depois. A medição otimizada tem a opção de registrar page_view em mudança de histórico do navegador, e o desenvolvedor pode enviar um page_view manual a cada rota. Ligar os dois gera page_view em dobro.
// Next.js: um page_view por troca de rota, com o título já atualizado.
// Exige a opção "mudança de histórico" DESLIGADA na medição otimizada.
import { usePathname, useSearchParams } from "next/navigation";
import { useEffect } from "react";
export function PageViewOnRoute() {
const pathname = usePathname();
const search = useSearchParams();
useEffect(() => {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: "page_view",
page_location: window.location.href,
page_title: document.title,
});
}, [pathname, search]);
return null;
}A escolha entre os dois caminhos depende de quem controla o título e os parâmetros. A opção automática é suficiente quando a URL diz tudo. O push manual ganha quando o título só fica pronto depois que a rota carrega os dados, ou quando o page_view precisa levar um parâmetro da página (a categoria da planta, o estágio do funil). Em qualquer caso, o contrato registra qual dos dois está ligado, e o outro fica desligado por escrito.
Armadilha comum: disparar o evento de sucesso no clique do botão porque "a API quase nunca falha". A tag não sabe da API, e o relatório passa a contar a tentativa como resultado. Quando a integração com o CRM cai por um dia, o site continua registrando leads que nunca existiram, e ninguém percebe até o comercial reclamar do silêncio.
A especificação da Verde Vivo nasceu num documento de duas páginas: nome do evento, categoria, momento exato, parâmetros com tipo e exemplo, dono e critério de teste. Caio recebeu o documento numa sexta e entregou a implementação na quarta seguinte, com um push por evento e uma função utilitária que valida os campos antes de chamar o dataLayer.
A especificação de eventos da Verde Vivo para o site em Next.js (trecho)
| Evento | Categoria | Momento do disparo | Parâmetros | Critério de teste |
|---|---|---|---|---|
| page_view | Push manual na troca de rota | useEffect após a rota carregar, com document.title pronto | page_location, page_title | Um por rota no DebugView; opção de histórico desligada |
| generate_lead | Recomendado | Resposta 201 da API de orçamentos | currency, value, lead_source, lead_id, segmento | Contagem igual à do HubSpot no dia |
| form_error | Personalizado | Validação recusada no cliente ou 4xx do servidor | form_id, campo, motivo | Soma de form_error e generate_lead igual a form_submit |
| whatsapp_click | Personalizado | Clique no botão fixo, antes de abrir o link | pagina, contexto | Um por clique, sem duplicar em clique duplo |
| sign_up | Recomendado | Conta do clube criada, resposta do servidor | method, plano | Contagem igual à de assinantes novos no dia |
| cuidado_consultado | Personalizado | Abertura de uma ficha de cuidado no guia | planta, secao | Registrado só após 2 segundos com a ficha aberta |
Cenário composto. Os eventos de e-commerce da loja Shopify entram no capítulo 19, com a estrutura de itens.
O page_view duplicado apareceu na primeira semana de teste, depois de a Google tag ter ficado única no capítulo 5: o site ainda mostrava 2,4 visualizações por sessão contra 1,3 da loja Shopify, e o DebugView exibia dois page_view a cada troca de rota, um deles com o título da rota anterior. Marina desligou a opção de mudança de histórico na medição otimizada e manteve o push manual, que levava o título certo.
Com a especificação no ar, setembro fechou com 92 generate_lead, 41 form_error (a maioria por CNPJ digitado com pontuação, corrigida no formulário na semana seguinte) e 1,4 visualizações por sessão no site. A soma de generate_lead com form_error bateu com form_submit em 131 de 133 casos, e os dois restantes foram tentativas de envio com a rede caída, sem resposta do servidor.
Escreva hoje, para o evento mais importante do seu site, as cinco linhas do contrato: nome, categoria, momento do disparo, parâmetros com exemplo e critério de teste. Entregue ao desenvolvedor e conte quantas perguntas voltam; o critério de acerto é nenhuma. O próximo capítulo registra os parâmetros desse contrato como dimensões e métricas, dentro dos limites que a propriedade padrão impõe.
Seu caderno neste capítulo
Abrir o caderno completoSelecione um trecho do capítulo para destacar ou anotar. No teclado, selecione com Shift e as setas e use Alt+Shift+D para destacar ou Alt+Shift+N para anotar.
Salvo neste navegador. Entre na sua conta para levar o caderno a outros aparelhos.
Entre na sua conta para compartilhar o que aprendeu e convidar alguém para estudar com você.
Voltar ao capítulo anterior: Organizar o Tag Manager para que a tag certa dispare uma vez
Todos os capítulos de Google Analytics 2027
- 01Entender o que o GA4 de 2026 mede antes de instalar a tag
- 02Transformar a pergunta do negócio num plano de mensuração
- 03Ler usuários, sessões e engajamento sem somar o que não soma
- 04Desenhar conta, propriedade e fluxo para o negócio que existe
- 05Instalar a Google tag uma vez só e validar a coleta
- 06Organizar o Tag Manager para que a tag certa dispare uma vez
- 07Escrever o contrato de dados que o desenvolvedor consegue implementar
- 08Registrar dimensões personalizadas sem estourar a cardinalidade
- 09Pedir consentimento, ligar o Consent Mode e saber o que a modelagem devolve
- 10Manter a mesma pessoa no relatório entre login, domínios e dispositivos
- 11Provar que o evento chegou certo antes de confiar no relatório
- 12Ler os relatórios nativos com denominador certo e comparação justa
- 13Marcar campanhas com UTM e ler canais sem cair em Direct e Unassigned
- 14Medir busca orgânica e tráfego de assistentes de IA sem superestimar nenhum
- 15Descobrir por que a página cheia de tráfego não produz resultado
- 16Achar onde a jornada perde gente com exploração, segmento e funil
- 17Medir retenção, ativação e valor por coorte em vez de por mês
- 18Construir públicos que a mídia usa e saber quando o preditivo não existe
- 19Instrumentar a loja do view_item ao refund e conciliar com o financeiro
- 20Ligar o clique ao contrato assinado com eventos de lead e CRM
- 21Medir o aplicativo e a assinatura com Firebase sem perder a pessoa entre plataformas
- 22Escolher quais eventos-chave viram conversão no Google Ads e quais só analisam
- 23Explicar por que duas plataformas reivindicam a mesma venda
- 24Importar custo de mídia e comparar plataformas com o mesmo indicador
- 25Planejar orçamento entre canais e separar crédito de causa
- 26Montar o painel executivo dentro do próprio Analytics
- 27Contar o resultado do mês no Data Studio sem multiplicar linhas
- 28Usar Ask Advisor e insights automáticos sem aceitar resposta sem conferir
- 29Ligar a exportação para o BigQuery e entender o que ela não reproduz
- 30Responder às perguntas do negócio em SQL sobre os dados brutos
- 31Enviar do servidor o evento que o navegador não vê, sem duplicar
- 32Automatizar relatório, auditoria e alerta com as APIs do Analytics
- 33Decidir entre Standard e 360 e governar a propriedade como ativo da empresa
- 34Diagnosticar os onze problemas clássicos do GA4 com método
- 35Entregar o projeto de mensuração e manter a rotina que o conserva