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 = denied por pelo menos 7 dias consecutivos; e
  • 1.000 usuários/dia com analytics_storage = granted em 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:

  1. default com os quatro sinais em denied (e wait_for_update para a CMP responder).
  2. Carrega GTM / CMP.
  3. Usuário escolhe no banner → CMP chama gtag('consent', 'update', …).
  4. 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 — preserva gclid (e afins) na navegação interna até haver consentimento numa página seguinte da sessão.

Passo 2 — Validar no Network (gcs e gcd)

  1. Janela anônima → DevTools → Network.
  2. Filtre por collect ou gcd.
  3. Carregue a página sem interagir com o banner.

Espere algo nesta linha:

  • gcs=G100ad_storage e analytics_storage negados (típico do Avançado antes do update).
  • gcd=11p1p1p1p5 → os quatro sinais em default denied, ainda sem update do usuário.
  1. Clique em “Aceitar tudo” e confira o próximo ping:
  • gcs=G111
  • gcd=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:

  1. Confirme identidade Misturado se quiser ver modelagem na UI.
  2. Separe mentalmente: observado (otimização de Ads/audiências) vs modelado (visão agregada de usuários/sessões/conversões na interface).
  3. 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.