Pular para o conteúdo
Concedo
Comece grátis
Menu

Como instalar banner de cookies LGPD na VTEX

Publicado em 24 de agosto de 2026 · atualizado em 2 de setembro de 2026

Uma loja VTEX raramente é um site pequeno. É uma operação com agência ou implementadora, um contêiner de tags com histórico de várias campanhas, apps de pixel instalados em momentos diferentes por pessoas diferentes, e um checkout que a plataforma controla de ponta a ponta.

Colar o snippet continua sendo a parte simples. O que consome tempo é o inventário e a conversa com quem implementa. Numa loja desse porte, é comum o levantamento encontrar tags que ninguém reivindica: de uma campanha encerrada, de uma agência anterior, de um fornecedor que já saiu.

Antes de instalar: o inventário é mais importante aqui

Numa loja com dez tags, o inventário é conferência. Numa loja VTEX com quarenta, ele é o projeto. Percorra as seis portas de entrada:

Porta de entradaOnde conferir
Templates do CMS LegadoScripts colados nos templates de HTML que montam o <head>
Tema do VTEX IO ou FastStoreCódigo no repositório da loja, entregue por deploy
Apps de pixel da contaInstaladas no admin e configuradas por ID, sem código visível
Contêiner do GTMDezenas de tags, muitas herdadas de campanhas antigas
Personalização do checkoutÁrea de código JavaScript do checkout
Ferramentas de vitrineRecomendação, busca, teste A/B, chat, mapa de calor, prova social

Rode o scanner gratuito no domínio da loja: ele acha o que entra por app de pixel e não está em repositório nenhum. A conferência à mão, pelo DevTools, está em rodar a varredura do site.

Faça o levantamento em quatro estados diferentes: home, página de produto, carrinho com item e usuário logado. Cada um acorda um conjunto distinto de scripts, com recomendação na home, personalização na página de produto, recuperação no carrinho e ferramentas de CRM quando há sessão de cliente.

Guarde a lista com o responsável por cada tag ao lado. Numa VTEX, "de quem é essa tag" é uma pergunta que costuma não ter dono, e é ela que trava o projeto no fim.

Passo 1. Descubra a sua arquitetura antes de colar qualquer coisa

O snippet é o mesmo em qualquer cenário, e as duas exigências também: o mais alto possível dentro do <head>, sem async e sem defer.

<script src="https://app.concedo.com.br/cmp/v1/loader.js" data-chave="pk_seu_identificador"></script>

O que muda é onde esse <head> é montado. Descubra em qual dos três mundos a sua vitrine vive antes de abrir qualquer tela.

CMS Legado (Portal)

No CMS Legado, o cabeçalho é um template de HTML que você edita no admin. O caminho passa pela área de CMS e pelos itens de layout e templates; o nome exato do menu varia com a versão da conta, e o critério continua o de sempre: procure o template em que a tag <head> aparece e que é compartilhado por todas as páginas da vitrine.

  1. Localize o template do cabeçalho.
  2. Cole o snippet imediatamente depois da abertura do <head>, antes de qualquer meta, de qualquer CSS e, principalmente, antes do contêiner do GTM.
  3. Salve e publique. Depois teste em janela anônima: o HTML passa pela CDN da plataforma e a versão anterior pode continuar sendo servida por alguns minutos.

VTEX IO

Aqui a diferença é de arquitetura, não de tela. Não existe um arquivo de HTML que você edita no admin. A vitrine é um app de tema, versionada em repositório Git e publicada por linha de comando: você trabalha num workspace, testa, e só então promove para a versão que atende o público.

A inclusão de scripts no cabeçalho passa por um arquivo de configuração do app de tema, e o caminho exato varia com a versão do tema e com o que a implementadora montou. Em algumas contas é um bloco declarado no tema, em outras um app dedicado. Peça à sua agência o caminho usado na sua conta e o procedimento de deploy.

Três consequências do modelo:

  • Toda mudança exige deploy, o que significa prazo e janela combinada.
  • Você ganha workspace de teste: dá para validar o banner com tráfego interno antes de expor a loja inteira. Use isso, é uma vantagem real da plataforma.
  • Quem tem acesso ao repositório passa a ser parte do processo de conformidade. Registre quem são essas pessoas.

FastStore

Na vitrine construída com o framework mais recente da VTEX, o storefront é um projeto Next.js no repositório da loja. O snippet entra no componente que monta o <head> do documento, o mais alto possível, e sobe pela mesma esteira de deploy do restante do código.

Vale a mesma regra de sempre: nada de async, nada de defer, e o loader acima da tag de qualquer biblioteca de terceiro, inclusive acima do contêiner do GTM.

Quando todas as tags já estão no GTM

Aí é possível carregar o snippet por uma tag de HTML personalizado com o gatilho de Inicialização do consentimento, seguindo instalar com GTM. Na VTEX esse caminho quase nunca basta sozinho: o GTM segura o que ele mesmo dispara e não alcança o que um app de pixel injeta por fora dele.

Passo 2. Bloquear o que a plataforma e os apps injetam

Com o loader ativo, os rastreadores conhecidos (GA4, Meta, TikTok, Hotjar, Clarity, LinkedIn, Pinterest) ficam presos até o aceite, inclusive quando injetados dinamicamente por JavaScript. 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 frentes.

Tags que estão no seu template ou no seu tema

São as mais bem bloqueadas, porque você escreve o HTML e pode marcá-las:

<script type="text/plain" data-category="marketing" src="https://exemplo/pixel.js"></script>

type="text/plain" faz o navegador não executar o script; data-category diz em que categoria ele deve ser liberado, com os valores necessarios, estatisticas, marketing e personalizacao. Esse é o único mecanismo que impede também a requisição de rede. Depois do aceite, o script é recriado com o src real e roda sem recarregar a página.

Marque tudo que estiver ao seu alcance. Numa loja com muitas tags, esse trabalho é a maior parte do ganho.

Apps de pixel

A VTEX tem o conceito de app de pixel: um app instalado na conta que injeta script na vitrine, e às vezes no checkout, a partir de um simples campo de identificador. Como você não escreve a tag, não há onde colocar data-category. Sobra o bloqueio por padrão de URL, e o resultado depende de como a tag chega à página:

Como a tag entraAntes do aceiteSobra requisição ao terceiro?
Injetada por JavaScriptA interceptação de createElement e do setter de src segura antes de sairNão
Já pronta no HTML servidoO MutationObserver impede a execuçãoSim, o arquivo chegou a ser pedido

Nos dois casos não há execução nem cookie antes do aceite, que é o que a LGPD cobra. Se você precisa poder afirmar que nada sai para terceiros antes da escolha, o caminho é desinstalar o app de pixel e assumir a tag no tema, marcada, ou dentro do GTM.

E há um ganho fácil aqui: desinstale os apps de pixel que ninguém usa. Em conta VTEX antiga elas se acumulam. Cada uma é um terceiro com permissão de rodar código nas páginas onde o seu cliente digita dados.

O limite declarado

Terceiro desconhecido não é bloqueado. Ele continua carregando até o scanner trazê-lo para a base, e o motivo está em como o bloqueio automático funciona. Numa loja VTEX, espere encontrar vários, porque operações desse porte costumam acumular mais fornecedores por página do que sites menores.

Iframes conhecidos, como YouTube e Maps, são escondidos e substituídos por um aviso clicável que reabre as preferências.

Passo 3. Checkout e o evento de compra

O checkout da VTEX roda sob /checkout e é uma aplicação da plataforma, não a sua vitrine. Script colocado no template do cabeçalho ou no tema do IO não roda ali. Vale para qualquer CMP externa: é a arquitetura da plataforma, e o planejamento parte dela.

O que costuma existir no checkout legado é uma área de código no admin, com arquivos de JavaScript e CSS personalizados do checkout, tradicionalmente o lugar das customizações de quem já mexeu nessa etapa. Se a sua conta tem esse recurso e alguém já o usa, ele entra no inventário.

O ponto mais sensível é o evento de compra. Em boa parte das lojas, a conversão é disparada na página de confirmação a partir do evento vtex:orderPlaced empurrado para o dataLayer, o evento mais valioso da operação e, justamente, o que está fora do alcance de um banner instalado na vitrine.

Três caminhos, em ordem de preferência:

  1. Condicionar a tag de conversão ao consentimento dentro do próprio GTM do checkout. É a abordagem mais usada em VTEX: uma variável personalizada lê o estado de consentimento gravado no domínio e a tag só dispara se a categoria correspondente estiver liberada. Peça o contrato de leitura a quem fornece a CMP, em vez de deduzir o formato olhando o navegador: formato de armazenamento muda de versão, e código que depende de dedução quebra em silêncio.
  2. Aceitar o limite e registrá-lo na política de cookies como risco conhecido e documentado, em vez de descoberto numa fiscalização.
  3. Levar a questão à VTEX ou à implementadora, para saber o que a versão atual da sua conta oferece de governo de scripts no checkout.

Cookies necessários não podem ser bloqueados. Os cookies de sessão e de carrinho da própria VTEX, como o que carrega o identificador do carrinho, o de sessão do usuário e o de autenticação da área do cliente, são estritamente necessários e ficam na categoria "necessários", sempre ativa. Scripts de pagamento, antifraude e captcha também são necessarios. Na dúvida entre bloquear e quebrar o checkout, a classificação correta é sempre necessarios.

Depois de instalar, faça um pedido de teste do início ao fim, com a recusa ativa. Numa loja VTEX, esse teste passa por frete, meio de pagamento e antifraude: refaça-o para cada combinação relevante da operação.

Passo 4. Cache, CDN e deploy

A VTEX serve a vitrine por CDN própria, então três regras substituem toda a discussão de plugin de cache que existe em outras plataformas:

  1. Teste sempre em janela anônima e depois de publicar. O HTML anterior pode continuar sendo servido por alguns minutos.
  2. Nada de async, defer ou "adiar JavaScript" no loader. Se a loja tem alguma camada de otimização de performance, coloque o loader.js na lista de exclusões. Atrasar o loader cria exatamente a janela em que as tags rodam sem consentimento.
  3. Não combine nem minifique o snippet com outros scripts. Combinar muda a ordem, e ordem é requisito.

Uma nota sobre o banner e o cache de página: o banner é renderizado no navegador e não vem no HTML. Se viesse, a CDN serviria a mesma página com o mesmo estado de consentimento a todo mundo.

Se a operação anuncia no Google, o banner precisa comunicar a escolha às tags do Google. No Concedo isso já vem ligado: o consent default com os sete sinais sai de forma síncrona antes de qualquer tag, e o update corresponde à escolha do visitante.

Numa VTEX típica não há uma tag do Google, há várias: GA4, Google Ads, remarketing dinâmico com feed de produtos, às vezes Floodlight. Três verificações:

  • Ordem. Se o contêiner do GTM é carregado por um app da plataforma, você pode não controlar a posição dele no HTML. Abra o código-fonte e confira quem vem primeiro. Se não der para ficar acima, mova o contêiner para o template do tema, onde a posição é sua.
  • GA4 duplicado. É comum o mesmo identificador estar num app de pixel e numa tag do GTM. Isso duplica sessão, distorce conversão e cria dois estados de consentimento concorrentes. Escolha um lugar.
  • Segundo default. Se alguma solução antiga de cookies ainda estiver ativa, desinstale de verdade. Dois gtag('consent','default', ...) conflitantes produzem comportamento imprevisível.

O detalhamento de cada sinal, o significado do parâmetro gcs e a diferença entre o modo básico e o avançado estão no guia do Google Consent Mode v2.

Passo 6. Verificar se funcionou

Sempre em janela anônima, sempre no ambiente que o público acessa, e depois de publicar.

  1. Antes de interagir. Abra a loja. DevTools, Aplicativo, Cookies. Só devem existir cookies do seu próprio domínio, de sessão e de carrinho. Nenhum _ga, _gcl_au, _fbp, _ttp, _hjSession.
  2. Código-fonte. Ctrl+U e confira, com o olho mesmo, se o loader.js está no head e acima do contêiner do GTM e das demais tags.
  3. Recusar tudo. Recuse e navegue por quatro páginas: home, categoria, produto e busca. Na aba Rede, filtre por google-analytics, facebook, tiktok, hotjar: nada pode aparecer.
  4. Com carrinho e com login. Ainda com a recusa ativa, adicione item ao carrinho e faça login. É o estado em que as ferramentas de personalização e de CRM acordam.
  5. Aceitar tudo. Aceite e recarregue. Os scripts devem carregar e os cookies aparecer. Se continuarem sem aparecer, o bloqueio não soltou com o aceite e a operação ficou sem mensuração.
  6. Só estatísticas. Nas preferências, marque apenas estatísticas. O GA4 dispara; Meta e TikTok, não.
  7. Revisita. Feche o navegador, abra de novo e volte à loja: a escolha precisa ter sido lembrada e o banner não deve reaparecer.
  8. Pedido de teste com recusa ativa. Do carrinho à confirmação, com frete e pagamento reais do fluxo. Confira se a conversão se comportou como você combinou no passo 3.

Passo 7. A conversa com a agência ou implementadora

Na VTEX quase sempre existe um terceiro entre você e o código. Leve esta lista para a reunião:

  • Quem tem acesso ao repositório do tema e quem aprova deploy.
  • Quem é o dono do contêiner do GTM e quantas pessoas têm acesso de publicação.
  • Quais apps de pixel estão instalados, quem pediu cada um e quais podem sair.
  • Quais tags ainda são usadas e quais sobraram de campanhas encerradas.
  • Em que categoria cada tag entra, entre necessarios, estatisticas, marketing e personalizacao. Essa classificação é decisão do controlador, não da agência, e precisa ficar registrada por escrito.
  • Qual é o prazo padrão para publicar uma mudança de tag, e quem aciona esse prazo quando o scanner encontrar um rastreador novo.

Conformidade de cookies não termina na instalação: a loja muda sem avisar, e cada campanha nova traz um script novo. Em qualquer plano do Concedo, inclusive no gratuito, o sensor instalado continua observando as rotas que os seus visitantes abrem e manda e-mail quando um terceiro novo aparece, seja o pixel que a agência colou ou o app que alguém instalou na loja. Agência ou implementadora que atende carteira fala com a gente e recebe a conta montada para a operação: todos os sites num painel só, rótulo por cliente e export de evidências por cliente, que é o formato de que precisa quando o cliente pergunta "e o meu, está conforme?". O caminho é contato; a tabela de planos está em preços.

Erros comuns na VTEX

  • Snippet abaixo do GTM. O contêiner sobe primeiro e leva as tags junto. Sempre acima.
  • Editado no workspace e nunca promovido. No IO, funcionar no seu ambiente não significa estar no ar.
  • Publicado sem testar em workspace. O contrário do erro anterior, e mais caro.
  • Template certo, página errada. Loja com mais de um template de cabeçalho: confira home, categoria, produto e busca, uma página de cada vez.
  • Duas soluções de cookies. Sobrou o script de uma CMP antiga no template. Dois banners, dois defaults, estado imprevisível.
  • App de pixel esquecido. Não está em nenhum repositório e ninguém lembra dele. Só o scanner ou a aba Rede acham.
  • Bloqueou algo do checkout. Pagamento, antifraude, captcha e arquivos da própria plataforma são necessarios. Bloquear qualquer um deles derruba faturamento.
  • Testou logado no admin. A sessão de administrador muda comportamento e polui o inventário. Janela anônima, sempre.
  • Recusar escondido. "Recusar tudo" na primeira camada, com o mesmo peso de "Aceitar tudo": combine isso com a agência antes do layout do banner. O que a ANPD espera está em cookies e LGPD à luz do Guia da ANPD.

Perguntas frequentes

Onde entra o snippet na minha vitrine? No CMS Legado, no template de cabeçalho, logo depois da abertura do <head>. No VTEX IO, no arquivo de configuração do app de tema que declara os scripts do cabeçalho. Na FastStore, no componente que monta o <head> do documento. Em todos, a mesma linha, o mais alto possível e acima do contêiner do GTM.

Funciona em CMS Legado e em VTEX IO ao mesmo tempo? Sim. Muitas contas rodam parte da vitrine em cada mundo durante uma migração. O snippet é o mesmo; o que muda é onde ele é colado e como sobe. Confira a ordem no código-fonte de cada um dos dois mundos separadamente.

O banner aparece no checkout? Não. O checkout é uma aplicação da plataforma e nenhum script da vitrine roda lá. O consentimento coletado antes continua registrado e válido; o que não existe é bloqueio nessa etapa por via de vitrine. O passo 3 traz os três caminhos possíveis.

Vai atrapalhar o desempenho da loja? O loader é um arquivo só, sem dependência de runtime, e é síncrono de propósito. Numa loja com quarenta tags, cada uma que fica presa até o aceite é uma requisição a menos disputando banda com a vitrine. O critério de performance, e o que uma CMP não pode puxar de CDN de terceiro, estão em como escolher uma CMP.

E se a configuração do banner não carregar? A loja não quebra: o loader é fail-open, libera as tags e deixa um aviso no console. O critério 8 de como escolher uma CMP explica a escolha e o que ela custa.

Minha loja é grande. O log de consentimento aguenta? Nenhum plano cobra por decisão de consentimento, nem o gratuito: a régua é o tamanho do domínio. O que o pago muda é a retenção: o histórico passa a ser integral, sem corte por idade, que é o que sustenta a prova quando a contestação vem meses depois. A retenção de cada plano está em preços.

O que exatamente fica gravado de cada visitante? Nunca o IP bruto. O registro usa um hash do IP com o user agent e um salt diário: dá para deduplicar o mesmo visitante dentro do dia, que é o necessário para provar consentimento, e a correlação se perde depois disso por construção.

Próximos passos

  1. Descubra em qual dos três mundos a vitrine vive e combine com a agência a janela de deploy do snippet.
  2. Monte o inventário nos quatro estados descritos acima, com o scanner e a aba Rede, e leve a lista para a reunião do passo 7 com um responsável ao lado de cada tag.
  3. Decida, com o passo 3, o que acontece com a tag de conversão no checkout, e registre a decisão por escrito.
  4. Faça a verificação de oito passos, incluindo o pedido de teste com recusa ativa.
  5. Feche o resto da conformidade da operação com o checklist LGPD para e-commerce. Se a empresa também opera uma segunda loja fora da VTEX, o caminho equivalente está em como instalar no Shopify.

Continue lendo

O que o seu site carrega antes de alguém aceitar?

O scanner abre algumas páginas como um visitante anônimo e lista os cookies, scripts e iframes de terceiros que disparam sem consentimento nenhum.

Sem cadastro e sem cartão. O resultado abre numa página de endereço próprio, que não é indexada e que ninguém encontra sem o link.