Como instalar banner de cookies LGPD no WordPress
Colar o snippet leva poucos minutos. O trabalho de verdade vem antes, e é descobrir quem
carrega rastreador no seu site: num WordPress típico não é você, é o tema, o construtor de
páginas e meia dúzia de plugins escrevendo no wp_head por conta própria.
Antes de instalar: faça o inventário
Pular esta etapa é a causa nº 1 de "instalei o banner e mesmo assim o Google Analytics grava cookie". Você não bloqueia o que não sabe que existe.
Num WordPress de PME, os rastreadores costumam entrar por cinco portas diferentes:
| Porta de entrada | Exemplos comuns |
|---|---|
| Plugin de analytics | Site Kit, MonsterInsights, GA Google Analytics |
| Plugin de pixel | PixelYourSite, Meta for WooCommerce, TikTok for Business |
| Tema / construtor | Elementor, Divi e Astra com integrações próprias |
| Código colado no tema | Snippet do Ads ou do Pixel dentro do header.php |
| Embeds | YouTube, Google Maps, Spotify, formulários de terceiros |
Rode o scanner gratuito na home e numa página feita no construtor: é onde as caixas de código personalizado costumam esconder pixel. A conferência à mão, pelo DevTools, e o que o painel libera depois de verificar o domínio estão em rodar a varredura do site.
É contra essa lista que o passo 6 confere a instalação: nada dela pode disparar antes do aceite.
Passo 1. Instalar o plugin ou o snippet
O snippet do Concedo é uma linha. Ela fica no head e precisa carregar antes de qualquer
outra tag, porque é ela que declara o consent default do Google e liga o motor de
bloqueio.
<script
src="https://app.concedo.com.br/cmp/v1/loader.js"
data-chave="pk_seu_identificador"
></script>
Sem async e sem defer. Com qualquer um dos dois, as tags do site disparam primeiro e
não sobra nada para bloquear.
Escolha um dos quatro métodos abaixo. Instalar por dois caminhos ao mesmo tempo cria dois banners e um estado de consentimento imprevisível.
Método A. Plugin do Concedo (recomendado)
O plugin coloca o snippet no head, antes de qualquer outra tag, e sobrevive à
atualização do tema.
- Baixe o plugin do Concedo.
- Em Plugins › Adicionar novo › Enviar plugin, envie o zip e ative.
- Em Configurações › Concedo, cole a chave do site e salve.
- Limpe o cache do site, do plugin de cache e da CDN.
Método B. Plugin de scripts no cabeçalho
Se você prefere colar o snippet à mão, um plugin de cabeçalho funciona em qualquer tema e dispensa editar código. Com o WPCode (ex-Insert Headers and Footers), que é gratuito:
- Painel, Plugins, Adicionar novo, procure por WPCode, instale e ative.
- Menu Code Snippets, item Header & Footer.
- Cole o snippet na caixa Header, nunca em Body ou Footer. No rodapé ele carrega tarde demais e as tags já rodaram.
- Salve e limpe o cache do site.
Se você já usa outro plugin com a mesma função ("Head, Footer and Post Injections", "Simple Custom CSS and JS"), use o que já está instalado. Não acumule plugins que fazem a mesma coisa.
Método C. Tema filho, via functions.php
Mais leve, sem plugin extra. Exige um tema filho: se você colar no functions.php do
tema pai, a próxima atualização apaga o código.
add_action( 'wp_head', 'concedo_cmp_loader', 0 );
function concedo_cmp_loader() {
echo '<script src="https://app.concedo.com.br/cmp/v1/loader.js" data-chave="pk_seu_identificador"></script>' . "\n";
}
A prioridade 0 no add_action faz o loader entrar antes dos scripts que outros plugins
registram no mesmo hook. Sem ela, o snippet cai no meio da fila e alguns rastreadores saem
na frente.
Prefira editar por FTP ou pelo gerenciador de arquivos da hospedagem. Um erro de sintaxe no editor de temas do painel derruba o site.
Método D. Via Google Tag Manager
Só faz sentido se todas as suas tags já passam pelo GTM: o snippet vai numa tag de HTML personalizado com o gatilho de Inicialização do consentimento, como descrito em instalar com GTM.
O GTM segura as tags que ele mesmo dispara e não alcança script colado direto no tema ou injetado por plugin. Num WordPress cheio de plugins, o método A cobre mais.
Passo 2. Bloquear o que os plugins injetam
Com o loader ativo, os rastreadores que ele reconhece por padrão (GA4, Meta, TikTok, Hotjar, Clarity, LinkedIn, Pinterest) já ficam presos até o aceite, inclusive quando injetados dinamicamente. O contêiner do GTM é a exceção, e ela é deliberada: ele entra como necessário e carrega antes da escolha, porque sozinho não coleta nada. O que fica preso são as tags que ele injeta, uma a uma, e elas ainda recebem os sinais do Consent Mode v2. Restam três casos que pedem atenção manual.
Scripts colados no tema
Se existe um Pixel ou uma tag do Ads escrita direto no header.php, marque o script para
que o motor de bloqueio o segure:
<script type="text/plain" data-category="marketing">
// conteúdo original do pixel
</script>
Trocar type="text/javascript" por type="text/plain" faz o navegador não executar o
script; o data-category diz ao Concedo em que categoria ele deve ser liberado. Depois do
aceite, o script é reinjetado e roda normalmente. O atributo é em inglês mesmo, e aceita
necessarios, estatisticas, marketing e personalizacao.
Embeds de YouTube e Google Maps
Um iframe do YouTube grava cookie de publicidade antes de qualquer clique. O loader substitui esses iframes por um aviso de conteúdo bloqueado com um botão que abre as preferências. Duas boas práticas complementares no WordPress:
- No editor de blocos, prefira o bloco YouTube ao HTML personalizado, assim o iframe fica identificável.
- Se o vídeo é essencial (página de vendas, curso), avalie usar o domínio
youtube-nocookie.com, que reduz o rastreamento sem eliminá-lo.
Plugins de analytics com carregamento próprio
Site Kit e MonsterInsights injetam o gtag.js por conta própria. Duas opções:
- Deixar o Concedo bloquear, que é o comportamento padrão: o script é reconhecido por padrão de URL e segurado até o aceite.
- Desligar o carregamento pelo plugin e mover a tag para o GTM, se você já usa GTM. Fica mais previsível, ao custo de uma mudança maior.
Não confie na opção "respeitar consentimento" que alguns desses plugins oferecem sem uma CMP por trás. Ela depende de um sinal que precisa existir antes, e quem cria esse sinal é a CMP.
Passo 3. Cache e otimização
Plugins de cache e de otimização são ótimos para performance e péssimos para ordem de execução. Três regras:
- Nunca combine nem minifique o snippet do CMP com outros scripts. Combinar muda a ordem, e ordem é requisito.
- Nunca aplique
defer,asyncou "delay JavaScript" ao loader. Atrasar o loader cria exatamente a janela em que as tags rodam sem consentimento. - Limpe o cache depois de cada mudança, o de página e o da CDN.
Onde configurar a exclusão, por plugin:
| Plugin | Onde excluir |
|---|---|
| WP Rocket | Otimização de arquivos, "Excluir arquivos JavaScript"; e "Carregar JavaScript adiado", exclusões |
| LiteSpeed Cache | Otimização de página, JS Settings, "JS Excludes" e "JS Deferred Excludes" |
| W3 Total Cache | Minify, "Never minify the following JS files" |
| WP Super Cache | Sem minificação por padrão; confira o plugin de otimização usado em conjunto |
| Autoptimize | "Exclude scripts from Autoptimize" |
Em todas as caixas, informe o caminho do loader (app.concedo.com.br/cmp/v1/loader.js).
Com cache de página, vale saber que o banner é renderizado no navegador e não vem no HTML. Se viesse, o cache serviria a mesma página com o mesmo estado de consentimento para todo mundo.
Passo 4. WooCommerce
Loja é onde o bloqueio malfeito custa faturamento. Duas coisas para acertar:
Cookies necessários não podem ser bloqueados. Os do próprio WooCommerce sustentam carrinho e sessão, então ficam na categoria "necessários", sempre ativa:
woocommerce_cart_hashwoocommerce_items_in_cartwp_woocommerce_session_*
Scripts de pagamento nunca entram no bloqueio. Mercado Pago, PagSeguro, Stripe, antifraude e o script de captura de cartão são necessários ao funcionamento do checkout: bloqueá-los derruba a venda. Só entram no bloqueio os de marketing e mensuração: Pixel, GA4, TikTok, remarketing dinâmico.
Depois de instalar, faça uma compra de teste do início ao fim: adicionar ao carrinho, checkout, pagamento aprovado. É o único teste que prova que a loja não quebrou.
Passo 5. Consent Mode v2
Se você anuncia no Google, o banner precisa comunicar a escolha às tags do Google. No
Concedo isso já vem ligado: antes de qualquer tag o loader dispara o consent default com
os sete sinais: seis negados, e o de segurança concedido, porque antifraude e login não
dependem de consentimento. Depois vem o update correspondente à escolha do visitante.
Se você usa o Site Kit, confira em Configurações se a opção de Consent Mode está
ativa e se não há um segundo bloco de consent default sendo injetado. Dois defaults
conflitantes produzem estado imprevisível. O detalhamento de cada sinal está no
guia do Google Consent Mode v2.
Passo 6. Verificar se funcionou
Faça em janela anônima, sempre, e depois de limpar o cache:
- Antes de interagir. Abra o site. DevTools, aba Aplicativo, Cookies. Só devem
existir cookies do seu próprio domínio (sessão do WordPress, carrinho). Nenhum
_ga,_gcl_au,_fbp,_ttp,_hjSession. - Recusar tudo. Clique em "Recusar tudo" e navegue por três páginas, incluindo uma
de produto. Na aba Rede, filtre por
google-analytics,facebook,tiktok,hotjar: nada pode aparecer. Confira os cookies de novo. - Aceitar tudo. Aceite e recarregue. Agora os scripts devem carregar e os cookies aparecer. Se não aparecerem, o aceite não soltou o bloqueio e o site ficou sem mensuração.
- Só estatísticas. Abra as preferências, marque apenas estatísticas e salve. GA4 dispara; Meta e TikTok, não.
- Revisita. Feche o navegador, abra de novo e entre no site: a escolha precisa ter sido lembrada e o banner não deve reaparecer.
- Checkout. Se for loja, refaça a compra de teste com "Recusar tudo" ativo. O pagamento precisa passar.
Erros comuns no WordPress
- Snippet no rodapé. As tags do
headjá rodaram. Sempre nohead. - Colado no tema pai. A atualização do tema apaga. Use tema filho ou o método A.
- Dois banners. Sobrou um plugin de cookies antigo ativo. Desative e apague de verdade, inclusive o código que ele tenha deixado no tema.
- Cache não limpo. Você testou o HTML antigo. Limpe cache do plugin e da CDN.
deferno loader. Alguma otimização "automática" pegou o snippet. Coloque-o na lista de exclusões.- Banner esconde o botão de recusar. Recusar precisa ter o mesmo peso visual de aceitar, e plugin que faz o contrário costuma acabar em reclamação; o que a ANPD espera está em cookies e LGPD à luz do Guia da ANPD.
- Política de privacidade desatualizada. O WordPress já tem uma página de política em Configurações, Privacidade. Ela precisa listar as categorias de cookies que o scanner encontrou e um link para reabrir as preferências.
Perguntas frequentes
Preciso mexer em código?
Pelos métodos A e B, não: você envia o plugin e cola a chave, ou cola uma linha numa caixa
do painel. O método C pede quatro linhas no functions.php do tema filho.
Funciona em qualquer tema?
Sim, e em qualquer versão do WordPress. O snippet é HTML puro no head, e o loader atua
sobre o DOM final, sem depender de tema, de construtor ou de plugin.
O banner deixa meu site mais lento?
O loader é um arquivo só, sem dependência de runtime, e é síncrono de propósito. Num
WordPress, o ganho de LCP vem do que ele segura: cada gtag.js ou pixel que um plugin
injeta e fica preso até o aceite é uma requisição a menos concorrendo com o conteúdo. O
critério de performance está em como escolher uma CMP.
Funciona com Elementor, Divi ou WPBakery? Sim. O cuidado é o de sempre com construtores: eles têm caixas de "código personalizado" onde pixels costumam ficar escondidos. Inclua essas caixas no inventário.
E se eu tenho vários sites WordPress? Cada site tem a sua chave pública e a sua configuração, e uma conta atende quantos domínios você precisar, sem teto. A assinatura é por domínio: todos usam o plano selecionado para a conta, e cada site acrescenta uma unidade desse plano à renovação seguinte. A medição recomenda o menor plano que comporta as páginas encontradas, mas nunca troca plano ou preço sozinha. A régua está em preços. Quem cuida de uma carteira de clientes trabalha do mesmo jeito; o painel com rótulo e filtro por cliente entra a partir de um dos degraus, e para agências diz qual.
O que fazer com quem já aceitou antes de eu instalar o banner? Consentimento anterior sem registro auditável não serve como prova. Comece do zero: a primeira visita depois da instalação apresenta o banner a todo mundo.
Próximos passos
- Instale o snippet pelo método A ou B e coloque o
loader.jsna lista de exclusões do plugin de cache. - Faça a verificação de seis passos acima, incluindo a compra de teste se for loja.
- Rode o scanner gratuito depois de limpar o cache e compare com o inventário feito antes: o que sobrou é plugin injetando por conta própria.
- Se você anuncia no Google, leia o
guia do Consent Mode v2 e confira o parâmetro
gcsnas requisições.
Continue lendo
Como instalar banner de cookies LGPD na VTEX
CMS Legado, VTEX IO e FastStore: onde entra o snippet em cada arquitetura, o que apps de pixel e o checkout deixam de fora e como fazer o inventário antes.
Como instalar banner de cookies LGPD no Wix
Como usar o Código personalizado do Wix sem brigar com o banner nativo, por que a navegação sem recarregar derruba bloqueio de fachada e como verificar.
Como instalar banner de cookies LGPD na Nuvemshop
Onde colar o snippet no tema, o que fazer com o Analytics e o Pixel do campo nativo, e o que o banner alcança no carrinho mas não alcança no checkout.
Como instalar banner de cookies LGPD no Shopify
Onde colar no theme.liquid e por que antes do content_for_header, o que custom pixels e checkout deixam de fora e como conviver com o consentimento nativo.