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

Como instalar banner de cookies LGPD no Shopify

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

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 entradaOnde conferir
theme.liquid e snippets do temaEditar código, procurar por fbq, gtag, dataLayer, hj
App embedsEditor de temas, painel lateral, seção de apps
Apps com script na vitrineNão aparecem no código do tema; só no HTML final ou no scanner
Custom pixelsConfigurações, eventos do cliente
Canais de vendaApps de Google e de Meta instalam as próprias tags pelo canal
Embeds no conteúdoYouTube 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:

  1. Loja virtual, Temas.
  2. 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.
  3. Ainda no menu de ações, Editar código.
  4. Abra Layout, arquivo theme.liquid.
  5. 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 entraO que acontece antes 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. 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:

CamadaQuem governa de fato
Scripts do tema, app embeds, tags coladas por vocêA CMP carregada no theme.liquid
Custom pixels e app pixelsA camada de privacidade da própria Shopify
Checkout hospedadoA Shopify
Sinais para as tags do GoogleConsent 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.liquid acabou. 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 é sempre necessarios.

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.

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.

  1. Antes de interagir. Abra a loja. DevTools, Aplicativo, Cookies. Devem existir apenas cookies do seu domínio, como o cart e os de sessão. Nenhum _ga, _gcl_au, _fbp, _ttp, _hjSession.
  2. Código-fonte. Ctrl+U na home e confira, com o olho mesmo, se o loader.js aparece acima do bloco que a Shopify injeta. Se estiver abaixo, corrija antes de seguir.
  3. 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.
  4. Com carrinho. Ainda com a recusa ativa, adicione um produto ao carrinho. É o momento em que apps de recuperação e de upsell acordam.
  5. 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.
  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, entre na loja: a escolha precisa ter sido lembrada e o banner não deve reaparecer.
  8. 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.liquid fora do head. 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.
  • defer no 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

  1. Cole o snippet no theme.liquid, acima de {{ content_for_header }}, e confira a ordem no código-fonte.
  2. 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.
  3. Faça a verificação de oito passos, incluindo a compra de teste com a recusa ativa.
  4. 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

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.