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 cacheQuem aceitouQuem recusou
Gerada por quem aceitoumedidomedido, contra a escolha
Gerada por quem não tinha cookienão medidonão medido
Depois da correçãomedidonã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

  1. Google, Ajuda do Google Analytics, Modelagem comportamental para o modo de consentimento (2026)
  2. Cloudflare Docs, Cache keys (2026)