Como instalar banner de cookies LGPD no Shopify
No Shopify existem duas lojas rodando ao mesmo tempo. Uma é o tema: o HTML que você
edita, onde ficam os scripts que você e a sua agência colaram. A outra é a camada da
própria Shopify, feita do content_for_header, dos app embeds, dos custom pixels e do
checkout hospedado, código que aparece na página sem passar pelo seu editor.
Uma CMP instalada no tema governa a primeira camada por inteiro. A segunda
obedece a outro dono. Quem instala sem saber disso vê o _fbp nascer mesmo assim e
conclui que o banner falhou, quando o pixel saiu por um caminho que nenhum script de tema
alcança.
Antes de instalar: faça o inventário das duas camadas
No Shopify, olhar só o código do tema esconde metade do problema. Percorra as seis portas de entrada:
| Porta de entrada | Onde conferir |
|---|---|
theme.liquid e snippets do tema | Editar código, procurar por fbq, gtag, dataLayer, hj |
| App embeds | Editor de temas, painel lateral, seção de apps |
| Apps com script na vitrine | Não aparecem no código do tema; só no HTML final ou no scanner |
| Custom pixels | Configurações, eventos do cliente |
| Canais de venda | Apps de Google e de Meta instalam as próprias tags pelo canal |
| Embeds no conteúdo | YouTube e Maps em páginas e descrições de produto |
Rode o scanner gratuito no domínio da loja: ele lista o que entra por app e
não está no seu código, a metade que o theme.liquid esconde. A conferência à mão, pelo
DevTools, está em rodar a varredura do site.
Faça o inventário também com um produto no carrinho e, se possível, com a loja em modo de teste até a tela de pagamento. Apps de recuperação de carrinho e de upsell só acordam quando existe carrinho.
Passo 1. Instalar o snippet no theme.liquid
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 disparam primeiro e não sobra
nada para bloquear.
O caminho no painel:
- Loja virtual, Temas.
- No tema publicado, use o menu de ações para duplicar o tema antes de qualquer coisa. Editar o tema publicado sem uma cópia é trabalhar sem rede de proteção.
- Ainda no menu de ações, Editar código.
- Abra
Layout, arquivotheme.liquid. - Cole o snippet imediatamente depois da tag
<head>, na primeira linha útil do cabeçalho.
No arquivo, fica assim:
<head>
<script src="https://app.concedo.com.br/cmp/v1/loader.js" data-chave="pk_seu_identificador"></script>
<!-- ... meta tags do tema ... -->
{{ content_for_header }}
</head>
O snippet precisa vir antes de {{ content_for_header }}. Essa tag Liquid é o ponto em
que a Shopify injeta o que ela controla: a análise da própria plataforma, os scripts dos
apps instalados e as tags dos canais de venda. Se o loader vier depois dela, tudo isso já
terá sido parseado e o único mecanismo que ainda pode agir é o mais fraco dos três.
Salve. Se você estava num tema duplicado, publique quando terminar os testes.
O que não fazer: instalar dentro de um custom pixel
Custom pixel parece o lugar certo e é uma armadilha. Ele roda num iframe isolado, com
acesso limitado à página que o visitante está vendo: de lá, uma CMP não intercepta os
scripts do tema nem desenha um banner utilizável. O lugar do loader é o theme.liquid.
Via Google Tag Manager
Só para loja em que todas as tags já passam pelo GTM: o snippet vai numa tag de HTML personalizado com o gatilho de Inicialização do consentimento, e o passo a passo está em instalar com GTM.
No Shopify, esse método raramente basta sozinho: o GTM segura o que ele mesmo dispara, e
não alcança o que entra pelo content_for_header, por app embed ou por custom pixel.
Passo 2. Bloquear o que a Shopify 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 quatro frentes.
Tags que você mesmo colou no tema
São as mais fáceis e as mais bem bloqueadas. Marque cada uma:
<script type="text/plain" data-category="marketing">
// conteúdo original do pixel
</script>
Trocar o type por text/plain faz o navegador não executar o script; o atributo
data-category diz em que categoria ele deve ser liberado. Os valores aceitos são
necessarios, estatisticas, marketing e personalizacao. Depois do aceite, o script é
recriado com o src real e roda normalmente, sem recarregar a página.
Esse é o único mecanismo que impede até a requisição de rede. Use-o em tudo que estiver ao seu alcance.
App embeds e scripts de apps
App embed é o interruptor que cada app tem no editor de temas. Muitos deles carregam biblioteca de terceiro. Duas ações:
- Desligue o que não usa. App instalado e esquecido continua carregando script todos os dias, e cada um deles é um terceiro lendo o comportamento do seu cliente.
- Aceite o limite conhecido: terceiro desconhecido não é bloqueado e continua carregando até o scanner trazê-lo para a base. No Shopify ele quase sempre é a biblioteca de um app; a razão de não derrubar o checkout por ela está em como o bloqueio automático funciona.
O que entra pelo content_for_header
Aqui você não escreve a tag, então não há onde colocar data-category. Sobra o bloqueio
por padrão de URL, e o resultado depende de como a tag chega:
| Como a tag entra | O que acontece 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. No segundo, o terceiro chega a
receber a requisição do arquivo. É por isso que a posição antes de {{ content_for_header }}
pesa tanto: ela garante que o motor esteja de pé quando o parser chegar lá.
Embeds de YouTube e Maps
Iframes conhecidos são escondidos e substituídos por um aviso clicável que reabre as preferências. O aviso é focável, então funciona por teclado também.
Passo 3. Consentimento nativo da Shopify e CMP externa
A Shopify tem a própria camada de privacidade: uma API de consentimento no navegador, uma configuração de privacidade do cliente no admin e um banner de cookies próprio, orientado às regiões que ela trata como reguladas. Custom pixels e app pixels obedecem a essa camada, e não ao seu script de tema.
A divisão de responsabilidade:
| Camada | Quem governa de fato |
|---|---|
| Scripts do tema, app embeds, tags coladas por você | A CMP carregada no theme.liquid |
| Custom pixels e app pixels | A camada de privacidade da própria Shopify |
| Checkout hospedado | A Shopify |
| Sinais para as tags do Google | Consent Mode v2, disparado pela CMP |
Daí saem três consequências.
Um banner só. Se você vai usar o banner do Concedo, desligue o banner nativo da Shopify. Dois banners na mesma tela significam experiência ruim, taxa de aceite baixa e dois estados de consentimento que se contradizem.
A camada da Shopify não muda sozinha. Se nada atualizar o estado de consentimento dela, ele permanece no padrão da conta, que tende a ser permissivo nas regiões que a Shopify não trata como restritas. Por isso "nada dispara no checkout" só é verdade depois que a ponte do passo seguinte está feita.
A ponte entre as duas camadas é trabalho de implementação. Para que os custom pixels respeitem a escolha feita no banner, alguém precisa comunicar essa escolha à API de consentimento da Shopify no momento em que o visitante decide. Se você for por esse caminho, consulte a assinatura vigente da API de privacidade do cliente na documentação da Shopify antes de escrever a chamada, porque ela evolui.
A alternativa mais simples, e a que costuma valer mais a pena numa PME: manter as tags
de marketing fora dos custom pixels, no tema, marcadas com data-category. Você perde
alguns eventos que a camada de pixels entrega prontos e ganha controle sobre o que dispara
antes do aceite.
Se você ainda está escolhendo fornecedor, os critérios estão no guia de como escolher uma CMP.
Passo 4. Checkout: o que muda e o que não dá para mudar
O checkout do Shopify é servido pela plataforma e nenhum script de tema roda lá. Isso vale para qualquer CMP externa: é a arquitetura, e o planejamento da loja parte dela.
Três pontos que valem para qualquer loja:
checkout.liquidacabou. A Shopify desligou as personalizações antigas de checkout em 2024 e as da página de status do pedido em agosto de 2025; o caminho é o Checkout Extensibility, com extensões de interface e apps.- A mensuração do checkout passa pela camada de pixels da Shopify, não pelo tema. Governá-la é o assunto do passo 3.
- Nada de bloquear o que faz a venda acontecer. Scripts de pagamento, antifraude e
captcha são
necessarios. Na dúvida entre bloquear e quebrar a loja, a classificação correta é semprenecessarios.
Cookies necessários não podem ser bloqueados. O cart, o _secure_session_id e os
cookies de sessão que mantêm carrinho e login são estritamente necessários e ficam na
categoria "necessários", sempre ativa. Um cuidado: não generalize o prefixo
_shopify_. Parte dessa família é de sessão e parte serve à análise da própria
plataforma, com finalidade diferente. Trate cada um pela finalidade, não pelo prefixo; o
relatório do scanner já faz essa separação por você.
Depois de instalar, faça uma compra de teste do início ao fim, com o gateway em modo de teste. É 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: o consent default com os sete sinais é empurrado
de forma síncrona antes de qualquer tag, e o update sai da escolha do visitante.
O ponto de atenção no Shopify é a ordem. Quando o app do canal de vendas do Google
instala a tag, ela entra pelo content_for_header. Se o seu snippet estiver abaixo dessa
linha, o default sai depois da tag e você fica com cookie criado sem consentimento e
estado inconsistente do lado do Google.
Confira também se não existe um segundo bloco de gtag('consent','default', ...) vindo de
um app antigo de cookies. Dois defaults conflitantes produzem comportamento imprevisível.
O detalhamento de cada sinal está no
guia do Google Consent Mode v2.
Passo 6. Verificar se funcionou
Sempre em janela anônima, sempre depois de publicar o tema, e nunca logado como administrador da loja.
- Antes de interagir. Abra a loja. DevTools, Aplicativo, Cookies. Devem existir
apenas cookies do seu domínio, como o
carte os de sessão. Nenhum_ga,_gcl_au,_fbp,_ttp,_hjSession. - Código-fonte. Ctrl+U na home e confira, com o olho mesmo, se o
loader.jsaparece acima do bloco que a Shopify injeta. Se estiver abaixo, corrija antes de seguir. - Recusar tudo. Recuse e navegue por três páginas, incluindo uma de produto. Na aba
Rede, filtre por
google-analytics,facebook,tiktok,hotjar: nada pode aparecer. - Com carrinho. Ainda com a recusa ativa, adicione um produto ao carrinho. É o momento em que apps de recuperação e de upsell acordam.
- Aceitar tudo. Aceite e recarregue. Os scripts devem carregar e os cookies aparecer. Se continuarem ausentes, o aceite não soltou o bloqueio e a loja está 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, entre na loja: a escolha precisa ter sido lembrada e o banner não deve reaparecer.
- Compra de teste com recusa ativa. O pagamento precisa passar normalmente.
Erros comuns no Shopify
- Snippet depois de
{{ content_for_header }}. Instalação decorativa: o banner aparece, o bloqueio chega tarde. É o erro nº 1 da plataforma. - Snippet no rodapé, ou no
theme.liquidfora dohead. Mesmo efeito. - Loader dentro de um custom pixel. Não governa nada, pelo isolamento do iframe.
- Editar o tema errado. Você duplicou, editou a cópia, testou o publicado e concluiu que não funcionou. Confira qual tema está ativo.
- Dois banners. Sobrou o banner nativo da Shopify ligado, ou um app de cookies antigo ainda com o app embed ativo. Desinstale de verdade.
- App que injeta pixel sem passar pelo tema. Não está no código, está no HTML final. Só o scanner ou a aba Rede acham.
- Testar logado como staff. O comportamento muda. Janela anônima, sempre.
deferno loader. Alguma otimização automática pegou o snippet. Tire-o de qualquer lista de scripts adiados.- Recusar escondido. "Recusar tudo" precisa ter o mesmo peso visual de "Aceitar tudo"; o que a ANPD espera da primeira camada está em cookies e LGPD à luz do Guia da ANPD.
Perguntas frequentes
Onde eu colo o snippet no Shopify?
Loja virtual, Temas, menu de ações do tema publicado, Editar código, arquivo
theme.liquid. Uma linha logo depois da tag <head>, acima de {{ content_for_header }}.
Salvar e publicar fecha a instalação.
Funciona em qualquer tema? Sim, do Dawn aos temas de nova geração e aos customizados pela agência. O loader atua sobre o DOM final, independentemente de quem gerou o HTML. O cuidado é com as seções de "código personalizado" que muitos temas oferecem: elas escondem pixels e precisam entrar no inventário.
O banner aparece no checkout? Não. O checkout é servido pela Shopify e nenhum script do tema roda lá. O consentimento coletado antes continua registrado e válido; o que não existe é bloqueio nessa etapa por via de tema.
Preciso manter o banner nativo da Shopify ligado? Não mantenha os dois. Escolha um. O nativo é gratuito e resolve o básico para as regiões que a Shopify trata como reguladas, o que já é uma opção legítima para loja sem mídia paga. Uma CMP dedicada entra quando você precisa de bloqueio real das tags do tema, de Consent Mode v2 com ordem garantida e de registro auditável com histórico e versão do texto.
O banner deixa a loja mais lenta?
O loader é um arquivo só, sem dependência de runtime, e é síncrono de propósito. No
Shopify, o que pesa de verdade entra pelo content_for_header, e cada tag dali que fica
presa até o aceite é uma requisição a menos disputando banda com as fotos dos produtos. O
critério de performance está em como escolher uma CMP.
Meu remarketing caiu depois de instalar o banner. É esperado? Parte da queda é real e vem de quem recusa. A outra parte costuma ser erro de implementação: sinal que não chega, tag que ficou presa mesmo após o aceite. A diferença entre as duas está explicada em por que o seu remarketing quebrou.
E a loja que também vende em outra plataforma? Cada site tem a sua chave 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. Agência que atende 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.
Próximos passos
- Cole o snippet no
theme.liquid, acima de{{ content_for_header }}, e confira a ordem no código-fonte. - Decida a política da segunda camada: tirar as tags de marketing dos custom pixels ou construir a ponte com a API de privacidade da Shopify.
- Faça a verificação de oito passos, incluindo a compra de teste com a recusa ativa.
- Volte ao scanner gratuito com um produto no carrinho: é onde os apps que não passam pelo tema aparecem. Depois feche o resto da conformidade com o checklist LGPD para e-commerce.
Continue lendo
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.
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.