Bloquear Scripts Antes do Consentimento: Como Saber se Seu Banner Realmente Funciona

Um banner que aparece depois que os scripts carregam não é conformidade — é evidência de violação. Veja como o bloqueio real de scripts categorizados com data-cf-category funciona e como verificar se o seu site está protegido.

Como bloquear scripts antes do consentimento com a LGPD?

Para bloquear scripts antes do consentimento, cada tag de terceiro (Google Analytics, Meta Pixel, etc.) deve receber o atributo data-cf-category="analytics" ou data-cf-category="marketing". O CookieFácil usa um mecanismo de type rewriting: o atributo type do script é alterado para text/plain antes que o navegador o execute. Um MutationObserver complementar intercepta scripts injetados dinamicamente. Após o consentimento, os scripts categorizados são clonados e reinseridos para execução.

CookieFácil auxilia na adequação à LGPD, mas não substitui assessoria jurídica especializada.

O problema: banners que não bloqueiam nada

A maioria dos banners de cookies exibe a interface de consentimento corretamente — mas não impede que os scripts de analytics e marketing carreguem antes disso. O navegador executa os scripts na ordem em que os encontra no HTML, e isso acontece muito antes do banner ser renderizado na tela.

O que acontece em um site sem bloqueio real

O HTML é processado de cima para baixo. Tags <script> no <head> executam imediatamente. O GA4, o Meta Pixel e o GTM carregam tipicamente entre 40ms e 100ms após o início da página — muito antes de o JavaScript do banner sequer inicializar, o que costuma ocorrer entre 300ms e 500ms.

Resultado: quando o visitante vê o banner pela primeira vez, os scripts de rastreamento já transmitiram dados para o Google, Meta e outros terceiros. A escolha exibida no banner é cosmética, não técnica.

DevTools — Network Timeline

0ms    → HTML carregado
48ms   → gtm.js executado
71ms   → analytics.js disparado
89ms   → fbevents.js carregado
312ms → banner.js inicializado
487ms → banner visível na tela

Scripts de analytics e marketing disparam 400ms antes do banner aparecer.

Implicação jurídica — Art. 7º da LGPD: O tratamento de dados pessoais (incluindo IDs de dispositivo, endereço IP e comportamento de navegação coletados por scripts de analytics e marketing) exige uma base legal válida. Para cookies não essenciais, essa base legal é o consentimento do titular — que deve ser obtido antes do início do tratamento. Scripts que disparam antes do consentimento constituem tratamento sem base legal, independentemente de o banner ser exibido na mesma página.

Seu site já coleta dados antes do consentimento?

Verificar agora — gratuito

Como o bloqueio real funciona: MutationObserver + type rewriting

O CookieFácil usa dois mecanismos complementares para garantir que scripts categorizados com data-cf-category não executem antes do consentimento.

Passo 1 — Type rewriting

Quando o navegador encontra uma tag <script type="text/plain">, ele ignora o conteúdo e não executa o script. O CookieFácil, ao inicializar, percorre o DOM e reescreve o atributo type de todo script que contenha data-cf-category de text/javascript (ou sem tipo) para text/plain — antes que o navegador possa executá-los.

Após o visitante conceder consentimento para uma categoria, os scripts dessa categoria são clonados, têm seu type restaurado para text/javascript, e são reinseridos no DOM para execução normal.

Passo 2 — MutationObserver

O type rewriting funciona para scripts presentes no HTML inicial. Mas e os scripts injetados dinamicamente via JavaScript — como os criados por GTM, frameworks SPA (React, Vue, Angular) ou outros snippets de terceiros?

Para esses casos, o CookieFácil instancia um MutationObserver que monitora o DOM em tempo real. Quando um novo nó <script> é inserido, o observer verifica se ele possui data-cf-category. Se possuir, intercepta antes da execução e aplica o mesmo mecanismo de type rewriting — independentemente de como o script foi criado.

Passo 3 — Como categorizar seus scripts corretamente

O bloqueio funciona apenas para scripts que possuem o atributo data-cf-category. Scripts sem esse atributo não são interceptados e executam normalmente. É responsabilidade do proprietário do site marcar os scripts de terceiros com a categoria correta.

Incorreto — não será bloqueado:

const script = document.createElement('script');
script.src = 'https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXX';
document.head.appendChild(script);
// PROBLEMA: sem data-cf-category, NÃO será bloqueado

Sem data-cf-category, o script executa imediatamente — o bloqueio não é ativado.

Correto — será bloqueado até o consentimento:

const script = document.createElement('script');
script.src = 'https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXX';
script.setAttribute('data-cf-category', 'analytics');
document.head.appendChild(script);
// CORRETO: será bloqueado até o consentimento de analytics

O MutationObserver intercepta o script antes da execução e aguarda o consentimento.

Também correto — tag HTML direta:

<script data-cf-category="analytics"
        src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXX">
</script>
<!-- Type rewriting intercepta antes da execução -->

Valores aceitos para data-cf-category:  analytics  |  marketing  |  functional
Scripts marcados como necessary (necessários) nunca são bloqueados.

O que acontece sem bloqueio real?

Para DPOs e equipes jurídicas: estas são as exposições concretas quando scripts de terceiros executam antes do consentimento registrado.

Coleta sem base legal — Art. 7º LGPD

Scripts de analytics transmitem dados comportamentais, IDs de dispositivo e endereço IP ao primeiro page view — antes de qualquer consentimento. Esse tratamento ocorre sem base legal válida, pois o consentimento deve anteceder o início do tratamento, não ser registrado posteriormente.

Transferência internacional sem autorização — Art. 33 LGPD

Dados enviados ao Google (servidores nos EUA e EU) e ao Meta (EUA) antes do consentimento constituem transferência internacional de dados pessoais sem a autorização exigida pelo Art. 33 da LGPD — uma infração autônoma, além da coleta sem base legal.

Sanção administrativa — Art. 52 LGPD

A ANPD pode aplicar multa de até 2% do faturamento do grupo econômico no Brasil referente ao último exercício, limitada a R 50 milhões por infração. Cada page view com scripts não consentidos pode ser interpretado como uma infração separada.

Banner visível ≠ prova de conformidade

A existência de um banner na página não é prova de conformidade. A prova real é o registro de consentimento com timestamp e token criptográfico associado ao momento exato em que o script foi liberado — não ao momento em que o banner foi exibido.

Integração com o Google Consent Mode v2: Além do bloqueio de scripts, sites com Google Ads e GA4 devem implementar o sinal de consentimento correto para que a modelagem de conversão funcione. Saiba como implementar o GCM v2 corretamente →

Seu DPO já checou se os scripts estão realmente bloqueados?

Ativar bloqueio real agora

Como verificar se o seu site realmente bloqueia scripts

Três métodos para confirmar tecnicamente se os scripts de terceiros aguardam o consentimento antes de executar.

Usar a ferramenta: verificar se meu site está bloqueando scripts

Verificar meu site agora

Gratuito. Sem cadastro. Resultado em segundos.

1. DevTools — Aba Network

Abra o DevTools (F12) antes de acessar a página. Na aba Network, recarregue sem aceitar o banner. Filtre por analytics.js, gtm.js, fbevents.js. Se esses arquivos aparecerem nos primeiros segundos — antes de qualquer interação — o bloqueio não está funcionando.

2. GA4 DebugView

Ative o GA4 DebugView (via extensão Google Analytics Debugger) e acesse a página sem aceitar o banner. Se o evento page_view aparecer no DebugView antes de você aceitar — o script do GA4 está carregando antes do consentimento e não está sendo bloqueado.

3. Google Tag Assistant

Com o Google Tag Assistant (extensão Chrome), acesse a página e verifique quais tags disparam no carregamento inicial — antes de qualquer aceite. Tags que disparam no estado "sem consentimento" precisam ser categorizadas com data-cf-category para que o bloqueio seja ativado.

Comece a bloquear scripts agora — sem cartão de crédito

O Plano Grátis inclui bloqueio de scripts categorizados e MutationObserver para sites com até 2.000 visitantes/mês. Faça upgrade conforme crescer.

GRÁTIS

R$ 0  /mês

Para começar a proteger seu site


  • 1 site · até 2.000 visitantes/mês

  • Bloqueio de scripts categorizados

  • MutationObserver incluído

  • Registro de consentimentos

Começar Grátis
Mais Popular

BÁSICO

R$ 24,99  /mês

Para sites em crescimento


  • 3 sites · até 10.000 visitantes/mês

  • Exportação CSV de logs

  • Google Consent Mode v2 automático

  • Remover marca CookieFácil

Começar Agora

PROFISSIONAL

R$ 49  /mês

Para múltiplos sites e agências


  • 10 sites · até 100.000 visitantes/mês

  • CSV + PDF + relatórios avançados

  • Regras geográficas (LGPD / GDPR)

  • CSS personalizado no banner

Começar Agora

FAQ — Bloqueio de Scripts e LGPD

Scripts e consentimento

Dúvidas técnicas e jurídicas sobre como o bloqueio de scripts funciona na prática. Veja também o guia de implementação do Google Consent Mode v2.

  • O CookieFácil bloqueia todos os scripts do meu site automaticamente?

    Não. O CookieFácil bloqueia scripts que possuem o atributo data-cf-category (com valores analytics, marketing ou functional). Scripts sem esse atributo não são interceptados e executam normalmente. É responsabilidade do proprietário do site identificar e marcar os scripts de terceiros com a categoria correta.

  • O que acontece com scripts que não têm o atributo data-cf-category?

    Scripts sem data-cf-category não são interceptados pelo mecanismo de type rewriting nem pelo MutationObserver. Eles executam normalmente no carregamento da página. Para bloquear um script, o proprietário do site deve adicionar o atributo data-cf-category com o valor correspondente à categoria do script (analytics, marketing ou functional).

  • O MutationObserver funciona com React, Vue e scripts injetados dinamicamente?

    Sim. O MutationObserver monitora todas as inserções de nós no DOM, independentemente de como o script foi criado — por frameworks SPA, GTM, ou qualquer outro código JavaScript. Quando um novo elemento <script> é inserido com data-cf-category, o observer o intercepta antes da execução e aplica o bloqueio, aguardando o consentimento da categoria correspondente.

  • Qual a diferença entre o CookieFácil e um banner que só coleta preferências sem bloquear?

    A diferença é arquitetural. Um banner puramente cosmético exibe uma interface de consentimento, mas os scripts de analytics e marketing já carregaram antes do banner ser visível. O CookieFácil usa type rewriting: antes da execução, o atributo type dos scripts categorizados é alterado para text/plain, impedindo que o navegador os execute. Somente após o consentimento registrado, os scripts são reinseridos para execução. É a diferença entre registrar uma preferência e tecnicamente impedir o tratamento.