Google Tag Manager avançado: triggers e variáveis customizadas
GTM básico é fácil, mas 80% das implementações param no pageview. Guia técnico de triggers avançados, variáveis customizadas e Data Layer pra rastrear tudo que importa.
Nathan Máximo
Máximo do Marketing
A maioria das empresas instala o GTM, joga o pixel do Meta e o GA4 lá dentro, e chama de “implementado”. Tecnicamente está. Mas o que o GTM realmente faz quando bem usado é radicalmente diferente do que essa configuração básica entrega.
A diferença entre GTM básico e GTM avançado é a diferença entre “sei que o usuário visitou a página” e “sei exatamente o que ele clicou, quanto scrollou, qual campo do formulário abandonou, qual vídeo assistiu até o fim, e quando saiu sem converter.”
Esse artigo cobre os recursos que fazem o GTM sair do tracking de pageview e virar uma ferramenta real de análise comportamental.
GTM básico vs avançado — o que muda
Configuração básica padrão:
- Tag GA4: dispara em All Pages
- Tag Meta Pixel: dispara em All Pages
- Zero customização de triggers
- Nenhuma variável customizada
O que essa configuração entrega: sessões e pageviews. Suficiente pra ver quantas pessoas visitaram. Insuficiente pra qualquer decisão de otimização séria.
Configuração avançada entrega:
- Cliques em CTAs específicos (com texto e destino capturados)
- Scroll depth real (25%, 50%, 75%, 90%)
- Envio de formulários com campo de origem rastreado
- Reprodução de vídeo (play, pause, % assistida)
- Erros de JavaScript em produção
- Eventos de Data Layer enviados do backend
- Tempo de engajamento por seção da página
A distância entre os dois não é tão grande quanto parece. São triggers e variáveis certas aplicadas no lugar certo.
Os tipos de trigger — o que cada um faz
GTM tem 13 tipos de trigger. A maioria ignora 10. Erro.
Page View, DOM Ready, Window Loaded
São três momentos diferentes do carregamento de página:
| Trigger | Quando dispara | Quando usar |
|---|---|---|
| Page View | HTML começa a carregar | Tracking básico de visita, scripts que não dependem do DOM |
| DOM Ready | HTML carregado, DOM disponível | Precisa ler elementos da página (textos, classes) |
| Window Loaded | Tudo carregado, incluindo imagens e scripts | Precisa garantir que terceiros (GA4, pixel) já carregaram |
Erro clássico: usar Page View pra capturar elemento do DOM que ainda não existe nesse momento. O trigger falha silenciosamente.
Click triggers
Dois tipos:
All Elements: qualquer clique em qualquer elemento. Amplo demais sem filtros.
Just Links: só cliques em links (<a>). Mais específico. Permite seguir link antes de disparar.
Configuração útil: habilita “Wait for Tags” (500ms) quando precisar que o evento do GA4 seja enviado antes de o navegador navegar pra outro domínio.
Como filtrar cliques específicos:
Click Textcontains “Falar com a gente” — captura por texto do botãoClick Classescontains “btn-cta” — por classe CSSClick URLcontains ”/#contato” — por destino do linkClick IDequals “btn-comprar” — por atributo ID
Form triggers
Form Submission dispara quando usuário clica no submit do formulário.
Habilita “Wait for Tags” aqui também, pra garantir que o evento de conversão dispara antes da página redirecionar.
Configuração pro GA4:
- Trigger: Form Submission
- Filtro:
Page URLcontains “/contato” (evita capturar todo formulário do site) - Tag GA4 Event:
generate_lead - Variáveis:
Form ID,Page URL,Page Title
Ponto de atenção: se o formulário usa preventDefault() e não redireciona (formulário AJAX), Form Submission pode não disparar. Nesse caso, precisa de Custom Event via Data Layer.
Custom Event triggers
O mais poderoso. Dispara quando alguém chama dataLayer.push({ event: 'nome_evento' }) no código do site.
Permite tracking de eventos que o GTM não captura nativamente:
- Compra concluída (evento do backend via webhook)
- Abandono de carrinho detectado pela aplicação
- Usuário atingiu nível de engajamento customizado
- Login realizado
- Produto adicionado ao carrinho (via React state)
Exemplo: desenvolvedora adiciona no site:
dataLayer.push({
event: 'produto_adicionado',
produto_nome: 'Óculos Ray-Ban RB2132',
produto_valor: 450.00,
categoria: 'Solar'
});
No GTM: Custom Event trigger com Event Name = produto_adicionado. Tag GA4 captura isso automaticamente com os parâmetros extras.
Scroll Depth triggers
Scroll Depth dispara quando usuário rola a página até determinada porcentagem ou posição em pixels.
Configuração recomendada: 25%, 50%, 75%, 90% (porcentagem).
Tag GA4 Event: scroll_depth com parâmetro scroll_threshold = {{Scroll Depth Threshold}}
Uso prático: identificar quais páginas de blog têm leitura real vs quais tem bounce (clicou, não leu). Página com 90%+ de leitura tem conteúdo bom. Página com 25% médio precisa de revisão no lead.
Timer triggers
Dispara após X milissegundos na página. Útil pra:
- Marcar usuário como “engajado” após 30 segundos
- Disparar popup depois de 45 segundos
- Detectar se usuário ficou tempo suficiente pra ser qualificado
Configuração: Timer, Interval = 30000ms (30s), Limit = 1 (só dispara uma vez).
Tag: GA4 event time_on_page com parâmetro seconds = 30.
JavaScript Error triggers
Captura erros de JavaScript em produção. Essencial pra monitoramento de qualidade.
Trigger: JavaScript Error.
Tag: GA4 Event js_error com variáveis:
{{Error Message}}{{Error URL}}{{Error Line}}
Cria relatório no GA4 pra ver quais erros acontecem mais. Erros em páginas de checkout são prioridade máxima.
Variáveis customizadas — onde a precisão acontece
Variáveis são o que permite passar dados dinâmicos pras tags. Sem elas, toda tag recebe informação estática.
Data Layer Variable
A mais importante. Lê valores que o site coloca no Data Layer.
Exemplo: site de e-commerce empurra no checkout:
dataLayer.push({
event: 'purchase',
ecommerce: {
transaction_id: 'TX-9821',
value: 899.00,
currency: 'BRL',
items: [{ item_name: 'Óculos de Grau Prada', price: 899.00, quantity: 1 }]
}
});
No GTM: cria variável Data Layer com Data Layer Variable Name = ecommerce.value. Essa variável retorna 899.00 dinamicamente.
Tag GA4 de compra usa {{DL - Purchase Value}} no campo de valor. Tracking preciso sem hardcode.
JavaScript Variable
Executa código JavaScript e usa o retorno como valor da variável.
Exemplo pra capturar hash do usuário logado:
function() {
return window.userHash || 'anonimo';
}
Exemplo pra capturar nome da campanha da URL:
function() {
var params = new URLSearchParams(window.location.search);
return params.get('utm_campaign') || 'nenhuma';
}
Poderoso porque dá acesso a tudo que JavaScript consegue acessar na página.
URL Variable
Extrai partes da URL sem precisar escrever JavaScript.
Componentes disponíveis: Full URL, Protocol, Host, Port, Path, Query, Fragment.
Exemplo: variável que pega o parâmetro utm_source da URL. Tipo: URL, Componente: Query, Parâmetro de consulta: utm_source.
Resultado: meta, google, email, etc — dependendo do UTM.
DOM Element
Lê texto ou atributo de elemento específico do HTML.
Útil quando o site não tem Data Layer mas o dado existe em algum lugar da página.
Exemplo: página de produto tem <span class="preco">R$ 1.290,00</span>. Variável DOM Element captura esse valor sem modificar o site.
Seletor CSS: .preco. Propriedade: innerText. Resultado: R$ 1.290,00.
Auto-Event Variables
Disponíveis quando trigger é um evento de clique ou formulário.
As principais:
| Variável | O que retorna |
|---|---|
| Click Text | Texto visível do elemento clicado |
| Click URL | Href do link clicado |
| Click Classes | Classes CSS do elemento |
| Click ID | Atributo ID do elemento |
| Click Element | Referência ao elemento DOM |
| Form ID | ID do formulário enviado |
| Form Classes | Classes do formulário |
Uso típico: tag GA4 que captura qual botão de CTA foi clicado. Parâmetro cta_text = {{Click Text}}. Agora GA4 mostra “Falar com a gente”, “Ver planos”, “Quero uma proposta” como valores distintos.
Data Layer: a arquitetura que sustenta tudo
Data Layer é um array global (window.dataLayer) onde o site empurra dados estruturados que o GTM lê.
Sem Data Layer, GTM depende de scraping do DOM ou JavaScript acrobático pra pegar informações do site. Com Data Layer, o site “fala” com o GTM de forma limpa.
Implementação básica no <head>:
<script>
window.dataLayer = window.dataLayer || [];
</script>
Esse script deve vir antes do snippet do GTM. Se GTM carrega antes do array existir, pode perder eventos.
Padrão de eventos que toda implementação precisa:
// Página carregou com usuário autenticado
dataLayer.push({
event: 'user_identified',
user_type: 'cliente',
user_email_hash: 'abc123...' // SHA-256
});
// Formulário enviado via AJAX
dataLayer.push({
event: 'form_submitted',
form_name: 'Contato Comercial',
origem: 'header-cta'
});
// Produto visualizado
dataLayer.push({
event: 'view_item',
ecommerce: {
items: [{ item_name: 'Nome do produto', price: 299.00 }]
}
});
O dev implementa o Data Layer uma vez. O GTM lê sem precisar de mais mudanças de código.
5 implementações avançadas que fazem diferença
1. Tracking de cliques em WhatsApp
Trigger: Click — Just Links
Filtro: Click URL contains wa.me OR api.whatsapp.com
Tag GA4 Event: whatsapp_click
Parâmetros: page_location = {{Page URL}}, click_text = {{Click Text}}
Resultado: vê quantos cliques em WhatsApp vêm de cada página, qual CTA funciona melhor.
2. Scroll depth por tipo de conteúdo
Trigger: Scroll Depth 75%
Filtro: Page URL contains /blog/
Tag GA4 Event: blog_read
Parâmetro: article_title = {{Page Title}}
Resultado: lista dos artigos mais lidos de verdade (não só visitados).
3. Abandono de formulário
Não tem trigger nativo pra isso. Precisa de JavaScript customizado:
// Coloca no HTML Customizado via GTM (tag que dispara em DOM Ready)
document.querySelector('form#contato').querySelectorAll('input, textarea').forEach(function(field) {
field.addEventListener('blur', function() {
if (this.value) {
dataLayer.push({
event: 'form_field_interaction',
field_name: this.name
});
}
});
});
Trigger: Custom Event form_field_interaction
Tag GA4: captura qual campo foi preenchido antes do abandono.
4. Tracking de vídeo YouTube
GTM tem suporte nativo a YouTube se habilitar o listener.
Tag: Google Analytics — Universal (ou GA4) com track type Video
Trigger: YouTube Video — Play, 25%, 50%, 75%, Complete
Parâmetros: video_title, video_percent, video_url
Resultado: vê quais vídeos retêm atenção e onde o usuário desiste.
5. Erro de checkout em tempo real
Trigger: Custom Event checkout_error
Precisa que o site empurre esse evento quando checkout falha:
dataLayer.push({
event: 'checkout_error',
error_type: 'cartao_recusado',
step: 'pagamento'
});
Tag GA4 Event: checkout_error
Parâmetros: error_type, step
Resultado: monitor de erros de checkout sem precisar de ferramenta extra. Cria alerta no GA4 pra notificar quando taxa de erro subir.
Depuração — como confirmar que está funcionando
GTM tem Preview Mode (clica no botão “Preview” no workspace). Abre Tag Assistant no browser, que mostra em tempo real:
- Quais tags dispararam
- Quais triggers foram ativados
- Quais variáveis foram lidas e seus valores
- Sequência de eventos na página
Processo de QA:
- Entra em Preview Mode
- Abre o site em outra aba
- Reproduz a ação que deveria disparar a tag (clica no botão, envia formulário)
- Volta pro Tag Assistant e confirma que a tag disparou com os valores corretos
- Verifica no GA4 DebugView se o evento chegou
Sem esse processo, você publica imaginando que funciona. Com ele, você sabe.
Erros que aparecem sempre
Trigger muito amplo sem filtro: Click trigger em “All Elements” sem filtro captura TUDO. Enche o GA4 de lixo.
Sequência errada de tags: Tag de conversão dispara antes da tag de configuração GA4. Evento chega sem a measurement ID. Vai pro limbo.
Não publicar depois de editar: Fez a mudança no GTM e achou que foi ao ar. GTM tem versionamento — precisa clicar “Submit” pra publicar.
Dependência de elemento DOM em Page View: Elemento não existe no DOM ainda. Usar DOM Ready resolve.
Não usar Exception em triggers: Trigger de formulário em All Pages captura também formulários de newsletter no rodapé. Usa trigger de exceção pra excluir o que não quer.
O que muda quando o GTM é bem configurado
Dados de qualidade mudam o que é possível decidir. Com tracking superficial, você sabe que a taxa de conversão é 1.2%. Com tracking avançado, você sabe que usuários que scrollam 75%+ da landing page convertem a 4.8%, e os que clicam no vídeo antes do CTA convertem a 6.1%.
Esse nível de detalhe é o que separa otimização de CRO real de “mudamos o botão de verde pra laranja e nada mudou.”
GTM bem configurado também é a base pra server-side tracking via Stape funcionar corretamente — os dois trabalham juntos, com GTM Web capturando eventos e GTM Server enviando pro Meta CAPI e Google Enhanced Conversions. Se a implementação front-end for ruim, o server-side não salva.
Pra quem está construindo a camada de dados do zero, vale ler o guia de GA4 completo pra entender como os eventos do GTM aparecem lá dentro, e como estruturar as conversões pra que o bidding do Google Ads otimize com dados reais.
A terceira peça é consent: triggers de GTM precisam respeitar o que o usuário escolheu no banner de cookies. Implementação de Consent Mode V2 garante que o GTM não dispara tags de tracking quando usuário rejeitou.
A Máximo configura GTM avançado com triggers, variáveis e Data Layer estruturado. Se seu tracking está no nível básico, fala com a gente e a gente faz um diagnóstico do que está perdendo.
Quer aplicar isso na sua empresa?
A gente faz um diagnóstico gratuito e mostra o caminho mais curto pra você crescer com previsibilidade.
Quero meu diagnóstico