Consent LGPD + Google Consent Mode v2
A plataforma é compliant com LGPD (Brasil) + Google Consent Mode v2 (GCM v2). Esta página explica como funciona o banner, as 4 categorias de cookies, e como o consent é propagado pros pixels.
O banner
Banner anchored bottom-left (desktop) / bottom edge (mobile), com 3 ações:
| Ação | Comportamento |
|---|---|
| Aceitar todos | { necessary, performance, functionality, others } = all true |
| Recusar | { necessary: true, demais: false } |
| Personalizar | Abre painel com toggles individuais por categoria |
Persistido em cookie cookies_consent com TTL de 12 meses. Após 12 meses o banner reaparece pra renovação de consent (regra LGPD).
Quando o banner aparece
- Brand tem
brand.features.cookieConsentPopup === trueno backoffice - User não tem cookie
cookies_consentválido (não aceitou ainda OU expirou) - User não é bot (Lighthouse / Googlebot bypass)
Quando o banner é suprimido
cookies_consentválido existe (já aceitou)- Brand desativou
cookieConsentPopupno backoffice - User é bot (Lighthouse score não pode ser afetado)
- Modal de auth/payment está aberto (banner não compete com z-index)
4 categorias de cookies
| Categoria | Default | Pode desativar? | Cookies aqui |
|---|---|---|---|
| Necessários | granted (sempre) | Não | jwt_token, cookies_consent, __cf_bm, _cfuvid |
| Performance | denied até consent | Sim | _ga, _gid, _gat, GA4 client cookies |
| Funcionalidade | denied até consent | Sim | preferências, idioma, layout settings |
| Outros / marketing | denied até consent | Sim | cookie_tracking, cookie_referrer, rmkvera, rmkvera_aud, _fbp, _fbc, lastclick, etc |
"Aceitar com só necessary toggled" → coerce pra Aceitar Tudo
Paridade legado: se user clica "Salvar" no painel "Personalizar" com apenas necessary ligado (todas outras desativadas), o sistema coerce pra Aceitar Tudo.
Razão: "só necessários" é equivalente a "Recusar" (mesma decisão), mas se user ativamente foi até "Personalizar" e clicou Salvar, é UX confusa retornar pra mesma decisão. Comportamento legado coerce — mantemos.
Google Consent Mode v2 (GCM v2)
GCM v2 é o protocolo do Google pra propagar consent pros tags GTM. Requer 7 sinais no dataLayer antes do GTM carregar.
Mapping: 4 categorias → 7 sinais GCM
necessary → security_storage (sempre granted, GCM exige explícito)
performance → analytics_storage
functionality → functionality_storage
+ personalization_storage
others → ad_storage
+ ad_user_data
+ ad_personalization
Diagrama do mapping
Defaults antes do consent
// Injetado no dataLayer ANTES do GTM carregar
gtag('consent', 'default', {
analytics_storage: 'denied',
ad_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied',
functionality_storage: 'denied',
personalization_storage: 'denied',
security_storage: 'granted', // sempre granted
});
GTM (e tags Meta/Google/etc) honram esses defaults — pixels disparam em modo limitado (sem cookies de identificação).
Update após consent
gtag('consent', 'update', {
analytics_storage: 'granted', // user marcou performance
ad_storage: 'granted', // user marcou others
// etc
});
GTM dispara fanout — qualquer tag que estava esperando consent agora roda em modo full.
Modo "cosmetic-only" (cookieConsentCosmeticOnly)
Brands com autorização conjunta de marketing + compliance podem ativar featuresConfig.cookieConsentCosmeticOnly: true. Detalhes em Modo Cosmético.
Bot bypass
Banner não aparece pra bots (Googlebot, Lighthouse, AdsBot). Razão:
- Lighthouse score é prejudicado por banner overlay
- Googlebot indexação não precisa interagir com banner
- AdsBot validação de landing pages quebraria com banner
Detection via User-Agent (isBotRequest) no server.
Migração de formato legado
Versões anteriores do cookie usavam formato array (["necessary", "performance"]). O parser detecta esse formato e converte pra objeto novo automaticamente, preservando preferências do user.
// Cookie legado (array)
["necessary", "performance"]
// Lido e convertido pra
{
necessary: true,
performance: true,
functionality: false,
others: false,
timestamp: 1731000000000
}
Sem necessidade de re-prompt — user mantém suas escolhas.
Como debuggar
Cookie
DevTools → Cookies → cookies_consent:
{
"necessary": true,
"performance": true,
"functionality": false,
"others": true,
"timestamp": 1731000000000
}
GCM v2 signals
// Console
window.dataLayer.filter(e => e[0] === "consent")
Mostra default e update commands.
Pixel comportamento limitado
Meta Pixel quando ad_storage: denied:
- Não escreve
_fbp,_fbc - Não dispara
initmatching - Eventos disparam mas em modo "no cookies"
Configuração por brand
brand.features.cookieConsentPopup (controlado no backoffice/BFF):
true→ banner habilitado, mostra na primeira visitafalse→ banner suprimido (brand sem requisito LGPD ativo, ou modo cosmetic — ver próxima página)
Adicionalmente featuresConfig.cookieConsentCosmeticOnly (frontend) — ver Modo Cosmético.
Anti-patterns
- Desativar
cookieConsentPopupnuma brand BR ativa. Não-compliance LGPD. Pode ser autuado. - Ativar
cookieConsentCosmeticOnlysem aprovação compliance. Idem. - Setar
analytics_storage: grantedno default (sem user consent). Quebra GCM v2 compliance. - Esquecer
security_storage: grantedno default. GCM v2 exige os 7 sinais explicitamente — esquecimento pode causar GTM warnings. - Não testar comportamento "Recusar" ao desenvolver tag GTM nova. Tag pode estar exigindo cookies que o user negou — falha silenciosa.