Banner de cookies, cache do Cloudflare e GA4
No site da agência, o tema só imprimia o Google Tag Manager quando o cookie de consentimento dizia aceito, e o Cloudflare cacheava o HTML sem variar por cookie. A cópia na borda dependia de quem gerou o primeiro acesso, e a medição virava tudo ou nada, com risco de medir quem recusou. Nos 28 dias até 25 de setembro de 2026, o Search Console contou 278 cliques e o GA4, 191 sessões de todos os canais. A correção foi tirar a decisão do servidor. O GTM agora sai sempre em um template inerte, e o navegador só o ativa depois do aceite.
Principais pontos
- Um cache de CDN que não varia por cookie congela, para todos os visitantes, a versão do HTML gerada para o primeiro deles.
- No site da agência, 3 URLs chegaram a ficar em cache com o GTM ativo e foram servidas assim a visitantes sem consentimento, até o purge.
- Nos 28 dias até 25 de setembro de 2026, os cliques orgânicos do Search Console (278) passaram o total de sessões do GA4 em todos os canais (191).
- Pela Ajuda do Google Analytics, a modelagem comportamental do modo de consentimento pede pelo menos 1.000 usuários diários com consentimento concedido em 7 dos últimos 28 dias.
- Com banner opt-in e sem modelagem, o tráfego de IA no GA4 é piso, não total, e só conta quem aceitou.
Onde a medição quebrou?
A medição quebra quando o servidor decide, pelo cookie de consentimento, se imprime a tag de analytics e uma CDN cacheia esse HTML sem variar por cookie. No site da agência, o tema lia o cookie de consentimento e só colocava o Google Tag Manager no HTML quando o valor era aceito. O GA4 e o Clarity vêm pelo GTM. Na frente do servidor, o Cloudflare guardava o HTML com uma chave que não olha cookie.
O resultado é que a cópia na borda depende de quem gerou o primeiro acesso depois de cada purge. Se foi alguém que tinha aceitado, a página ficou em cache com o GTM ativo e foi servida assim para todos, inclusive para quem recusou. Se foi alguém sem o cookie, a página ficou sem o GTM para todos, inclusive para quem aceitou depois. Cada URL tinha a sua sorte.
Como apareceu?
O sintoma foi o Clarity com 16 sessões em 3 dias e o Search Console contando mais cliques orgânicos que o total de sessões do GA4. Nos 28 dias até 25 de setembro de 2026, o Search Console registrou 278 cliques. O GA4, em um recorte quase igual, registrou 191 sessões somando todos os canais. Organic Search sozinho não pode passar o total, então parte das visitas simplesmente não era medida.
A confirmação veio de um erro meu. Ao conferir a instalação do Clarity, fiz leituras com o cookie aceito do navegador de teste. Três URLs que estavam fora do cache foram geradas nessa hora e ficaram na borda com o GTM ativo. Até o purge, qualquer visitante dessas páginas recebia a tag, com ou sem consentimento. Desde então, toda leitura ao vivo contra o domínio sai sem credenciais.
| Situação da cópia em cache | Quem aceitou | Quem recusou |
|---|---|---|
| Gerada por quem aceitou | medido | medido, contra a escolha |
| Gerada por quem não tinha cookie | não medido | não medido |
| Depois da correção | medido | não medido |
A correção no navegador
A correção foi tirar a decisão do servidor: o GTM agora sai sempre no HTML, dentro de um template inerte, e o navegador só o ativa depois do aceite. Um elemento template não executa o que tem dentro. O HTML fica igual para todos os visitantes, então o cache pode continuar ignorando cookie sem risco. No clique em aceitar, o script do banner recria as tags do template no head e no começo do body, uma vez só. Em visitas seguintes, se o cookie já diz aceito, a ativação acontece no carregamento.
Tinha um detalhe escondido. O evento de aceite era disparado antes de o ouvinte existir, então a ativação no carregamento precisou de uma chamada direta, e não de esperar o evento. Conferi depois do deploy, em aba sem cookie: nenhuma requisição para googletagmanager.com nem para clarity.ms antes do aceite, e as três tags (GTM, gtag e Clarity) carregadas na mesma página depois do clique.
Havia duas outras saídas. Colocar o cookie na chave de cache resolveria direto, mas, pela documentação do Cloudflare, esse ajuste só existe no plano Enterprise. A segunda seria uma regra que pula o cache para quem tem o cookie. Descartei porque todo visitante que aceita passa a bater na origem em todas as páginas, e a regra quebra em silêncio se o nome ou o valor do cookie mudar.
O que isso faz com o tráfego de IA?
Com banner opt-in e sem modelagem, o número de tráfego de IA no GA4 é um piso, e só conta quem aceitou. No mesmo recorte de 28 dias, o GA4 do site mostrou 4 sessões vindas do ChatGPT e nenhuma de outro assistente. Esse número passou pelo mesmo cache que decidia por página se havia tag, então nem como piso ele é confiável antes da correção.
A modelagem comportamental do modo de consentimento não resolve em site pequeno. Pela Ajuda do Google Analytics, ela exige o modo avançado, pelo menos 1.000 eventos diários com armazenamento de analytics negado por 7 dias e pelo menos 1.000 usuários diários com consentimento concedido em 7 dos últimos 28 dias. Um site com algumas centenas de sessões por mês não chega perto, e o GA4 mostra só o que observou.
Por isso separo as perguntas. Para saber se a IA manda visita, o GA4 dá o piso, filtrado pelo canal de assistentes de IA. Para saber se a IA cita a marca, a medição é outra, feita nas respostas, e não passa pelo banner. O que não faço é somar as duas coisas como se fossem o mesmo número.
Para saber se a IA cita a marca, a medição é outra, feita nas respostas, e não passa pelo banner.
Lucas Ferraz, especialista em SEO
Quando os números voltam a valer?
Trato tudo de antes de 25 de setembro de 2026 como série quebrada e só comparo a partir de 23 de outubro, 28 dias depois da correção. Antes disso, o GA4 mediu o que cada cópia em cache fazia, não quem aceitou. A primeira leitura limpa vai mostrar, pela primeira vez, a relação entre cliques do Search Console e sessões do GA4 com a taxa de aceite real do banner. Quando ela sair, este texto ganha o número.
Nota de método
- O que foi medido
- HTML servido pelo Cloudflare para o lucasferrazseo.com com e sem o cookie de consentimento, cliques do Search Console (29 de agosto a 25 de setembro de 2026) e sessões do GA4 (30 de agosto a 26 de setembro de 2026, com dados completos até 21 de setembro).
- Quando
- 25 e 26 de setembro de 2026.
- Como
- Leitura do HTML com fetch sem credenciais, contagem de requisições para googletagmanager.com e clarity.ms antes e depois do aceite, e leitura das duas ferramentas pela API.
- Limitação
- Os recortes de data do Search Console e do GA4 não são idênticos, e o GA4 tinha dados completos só até 21 de setembro. Os números de antes da correção misturam páginas em cache com e sem a tag, então não medem a taxa de aceite.
Os termos de medição estão definidos no vocabulário de medição, e o protocolo das rodadas na política editorial.
O que a IA desdobra desta pergunta?
Quando alguém faz esta busca em uma IA, o sistema abre subperguntas antes de responder. Estas são as que apareceram na medição, e onde cada uma é respondida.
Perguntas frequentes
O cache do Cloudflare derruba sessões do GA4 sozinho?
Em geral não. O script do GA4 roda no navegador, depois que o HTML chega. O problema aparece quando o servidor decide, pelo cookie, se imprime ou não a tag, porque a CDN guarda uma só versão do HTML para todo mundo.
Não dava para resolver com uma regra que pula o cache quando o cookie existe?
Dá, e foi a opção que descartei. Todo visitante que aceita passa a gerar requisição na origem em todas as páginas, e a regra precisa acompanhar cada mudança de nome ou valor do cookie. Decidir no navegador mantém o HTML igual para todos e o cache inteiro.
Os números do GA4 de antes da correção servem para alguma coisa?
Para tendência, pouco. Eles mediam o que a cópia em cache de cada página fazia, não quem aceitou. Trato como série quebrada e comparo só a partir de 28 dias depois da correção.
Fontes citadas
Versão em markdown para agentes de IA: https://lucasferraz.com/blog/consentimento-cache-e-trafego-de-ia/md/