Como instalar banner de cookies LGPD na VTEX
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 entrada | Onde conferir |
|---|---|
| Templates do CMS Legado | Scripts colados nos templates de HTML que montam o <head> |
| Tema do VTEX IO ou FastStore | Código no repositório da loja, entregue por deploy |
| Apps de pixel da conta | Instaladas no admin e configuradas por ID, sem código visível |
| Contêiner do GTM | Dezenas de tags, muitas herdadas de campanhas antigas |
| Personalização do checkout | Área de código JavaScript do checkout |
| Ferramentas de vitrine | Recomendaçã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.
- Localize o template do cabeçalho.
- Cole o snippet imediatamente depois da abertura do
<head>, antes de qualquermeta, de qualquer CSS e, principalmente, antes do contêiner do GTM. - 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 entra | Antes do aceite | Sobra requisição ao terceiro? |
|---|---|---|
| Injetada por JavaScript | A interceptação de createElement e do setter de src segura antes de sair | Não |
| Já pronta no HTML servido | O MutationObserver impede a execução | Sim, 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:
- 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.
- Aceitar o limite e registrá-lo na política de cookies como risco conhecido e documentado, em vez de descoberto numa fiscalização.
- 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:
- Teste sempre em janela anônima e depois de publicar. O HTML anterior pode continuar sendo servido por alguns minutos.
- Nada de
async,deferou "adiar JavaScript" no loader. Se a loja tem alguma camada de otimização de performance, coloque oloader.jsna lista de exclusões. Atrasar o loader cria exatamente a janela em que as tags rodam sem consentimento. - 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.
Passo 5. Consent Mode v2 numa loja com muitas tags do Google
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. Doisgtag('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.
- 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. - Código-fonte. Ctrl+U e confira, com o olho mesmo, se o
loader.jsestá noheade acima do contêiner do GTM e das demais tags. - 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. - 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.
- 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.
- Só estatísticas. Nas preferências, marque apenas estatísticas. O GA4 dispara; Meta e TikTok, não.
- Revisita. Feche o navegador, abra de novo e volte à loja: a escolha precisa ter sido lembrada e o banner não deve reaparecer.
- 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,marketingepersonalizacao. 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
- Descubra em qual dos três mundos a vitrine vive e combine com a agência a janela de deploy do snippet.
- 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.
- Decida, com o passo 3, o que acontece com a tag de conversão no checkout, e registre a decisão por escrito.
- Faça a verificação de oito passos, incluindo o pedido de teste com recusa ativa.
- 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
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.
Como instalar banner de cookies LGPD no WordPress
Plugin ou snippet, como bloquear os scripts que os plugins injetam e o que fazer com cache, WooCommerce e Consent Mode v2 antes de publicar.