Como Configurar o Google Consent Mode v2 Sem Quebrar Suas Métricas no GA4
Consent Mode v2 sem queda abrupta de tráfego e conversões: Modo Avançado, ordem correta no GTM e como validar gcs/gcd antes de confiar no relatório.
Contexto
Banner de cookies ligado, CMP no ar — e no dia seguinte o GA4 “perde” metade das sessões e o Ads deixa de ver conversões. Em muitos casos não é a LGPD “matando” o tracking: é o Consent Mode v2 mal encaixado no GTM.
O Consent Mode v2 padroniza como as tags da Google leem o consentimento antes de gravar cookies ou enviar dados para Ads/Analytics. Na prática, você precisa declarar quatro sinais:
| Sinal | O que controla |
|---|---|
ad_storage |
Cookies de anúncios |
analytics_storage |
Cookies de analytics |
ad_user_data |
Envio de dados do usuário para publicidade (Google) |
ad_personalization |
Personalização / remarketing |
Os dois últimos vieram na v2. Sem eles mapeados na CMP, audiências e conversões no ecossistema Google Ads/Analytics podem falhar — mesmo com o banner “funcionando” visualmente.
O sintoma clássico para mídia: queda abrupta de volumetria logo após “entrar em conformidade”. O objetivo deste guia é configurar o Consent Mode v2 de forma que a conformidade e a mensuração coexistam — e saber quando a queda é real, quando é configuração errada e quando a modelagem do GA4 simplesmente não entra.
Problema
Quatro falhas explicam a maior parte das discrepâncias:
1. Modo Básico no lugar do Avançado
No Modo Básico, as tags da Google ficam bloqueadas até o usuário aceitar. Se ele recusa (ou não interage), nada vai para a Google: zero cookies, zero pings. Resultado: tráfego e conversões de não-consentidores somem do GA4, e a modelagem comportamental não tem sinal para treinar.
No Modo Avançado, as tags carregam com estado padrão denied. Sem consentimento, não leem/escrevem cookies, mas enviam cookieless pings (sinais anônimos: user agent, resolução, país derivado do IP sem persistir o IP, timestamp, etc.). Esses pings alimentam a modelagem e preservam registro bruto útil (ex.: exportação BigQuery com pings observados).
| Dimensão | Básico | Avançado |
|---|---|---|
| Antes do consentimento | Tag bloqueada | Dispara com denied |
| Cookieless pings | Não | Sim |
| Modelagem no GA4 | Não | Sim (com limiares) |
| Aprovação jurídica | Mais simples | Exige alinhamento sobre pings |
Operacionalmente, para não quebrar métricas, o caminho usual é o Modo Avançado — desde que jurídico/DPO aceite o comportamento dos pings. Sem esse alinhamento, você troca “dados faltando” por risco de compliance.
2. Race condition: tag antes do default
A causa mais comum de implementação “quebrada”: a tag do GA4/GTM dispara antes do gtag('consent', 'default', …). Sem default explícito, o Consent Mode não governa o ciclo de vida direito — e no Network você vê gcd com letras como l (unset) ou padrões inconsistentes.
3. CMP ainda na lógica da v1
Banner atualizado na tela, mas a CMP não envia ad_user_data / ad_personalization. No GA4, esses sinais aparecem inativos; no Ads, audiências e medição personalizada sofrem. Atualizar o template da CMP na galeria do GTM e remapear as categorias resolve a maior parte dos casos.
4. Esperar modelagem sem limiar (ou com identidade errada)
Mesmo no Modo Avançado, a modelagem comportamental não é automática. A propriedade precisa, em linhas gerais:
- ≥ 1.000 eventos/dia com
analytics_storage = deniedpor pelo menos 7 dias consecutivos; e - ≥ 1.000 usuários/dia com
analytics_storage = grantedem pelo menos 7 dos 28 dias anteriores.
Site com volume baixo (ex.: ~500 visitas/dia e 50% de recusa) pode nunca ativar o modelo — e a “perda” no relatório é estrutural, não bug da CMP.
Além disso, na UI a identidade de relatórios precisa estar em Misturado (Blended) para ver dados modelados. Em Observado ou Baseado no dispositivo, a modelagem some dos relatórios padrão.
Importante: modelagem preenche métricas agregadas na UI. Não entra em audiências, BigQuery, retenção/coortes, métricas preditivas nem User Explorer/Sequences. Quem otimiza campanha com audiências ainda depende de consentimento observado.
Como diagnosticar
Passo 1 — Declarar default antes do GTM
No <head>, antes do snippet do GTM (ou via template de consent no trigger Consent Initialization - All Pages):
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
'ad_storage': 'denied',
'analytics_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'wait_for_update': 500
});
</script>
Fluxo esperado:
defaultcom os quatro sinais emdenied(ewait_for_updatepara a CMP responder).- Carrega GTM / CMP.
- Usuário escolhe no banner → CMP chama
gtag('consent', 'update', …). - Tags nativas da Google ajustam cookies vs pings sem reload.
No GTM, tags nativas da Google já têm consent checks embutidos: deixe “verificações de consentimento adicionais” como Não definida para o Modo Avançado funcionar. Tags de terceiros sem suporte nativo: use Exigir consentimento adicional com as categorias certas.
Mitigações úteis para atribuição de clique quando ad_storage está negado:
ads_data_redaction— redação de identificadores de clique nas requisições quando anúncios não têm storage.url_passthrough— preservagclid(e afins) na navegação interna até haver consentimento numa página seguinte da sessão.
Passo 2 — Validar no Network (gcs e gcd)
- Janela anônima → DevTools → Network.
- Filtre por
collectougcd. - Carregue a página sem interagir com o banner.
Espere algo nesta linha:
gcs=G100→ad_storageeanalytics_storagenegados (típico do Avançado antes do update).gcd=11p1p1p1p5→ os quatro sinais em default denied, ainda sem update do usuário.
- Clique em “Aceitar tudo” e confira o próximo ping:
gcs=G111gcd=11r1r1r1r5(default denied → updated granted)
Se gcd vier cheio de l ou m sem default claro, volte ao Passo 1: a ordem de scripts está errada.
Passo 3 — Conferir no Tag Assistant
No Tag Assistant, abra a aba Consent na timeline:
- On-page Default deve refletir o que você definiu.
- On-page Update deve disparar na escolha do banner.
Se o default não aparece ou o update nunca chega, a CMP não está falando Consent Mode v2 de ponta a ponta.
Passo 4 — Sintoma → correção
Queda >50% de tráfego após “ligar” Consent Mode
Causa: Modo Básico (tags bloqueadas).
Correção: passar para Avançado; tirar bloqueio prévio das tags nativas Google.
gcd com l / m o tempo todo
Causa: sem default antes do GTM.
Correção: script/template de default no Consent Initialization.
ad_user_data / ad_personalization inativos no GA4
Causa: CMP ou mapeamento ainda em v1.
Correção: atualizar template CMP + remapear sinais v2.
Sem dados modelados na UI (mesmo no Avançado)
Causa: abaixo do limiar ou identidade ≠ Misturado.
Correção: Blended + aceitar que volume baixo não modela.
Conversões Ads somem em landings
Causa: gclid não persiste sem cookie.
Correção: avaliar url_passthrough.
Passo 5 — Ajustar expectativa de relatório
Depois que Network e Tag Assistant estão corretos:
- Confirme identidade Misturado se quiser ver modelagem na UI.
- Separe mentalmente: observado (otimização de Ads/audiências) vs modelado (visão agregada de usuários/sessões/conversões na interface).
- Se o volume não atinge limiar, planeje first-party e, quando fizer sentido, medição server-side — Consent Mode sozinho não “inventa” tráfego em propriedades pequenas.
Próximo passo
Se o banner está no ar e o GA4 (ou o Ads) não fecha a conta, o próximo movimento não é mais um tutorial: é auditar a cadeia CMP → Consent Mode v2 → GTM → GA4/Ads (ordem dos scripts, quatro sinais, Modo Básico vs Avançado, gcs/gcd, limiares e identidade de relatório).
Use o diagnóstico acima como checklist interno. Se quiser uma leitura externa da implementação, peça um diagnóstico das tags — o objetivo é sair da disputa “compliance vs métrica” e ter os dois sob controle.