LGPD / Cookies Componentes
O aviso de cookies que a LGPD (Lei 13.709/2018) pede de verdade: Estatísticas, Marketing e Preferências só rodam depois que a pessoa aceita — e ela pode aceitar por categoria, recusar e mudar de ideia depois.
O que é
Não é só um aviso bonito: ele segura os scripts de terceiros (Google Analytics, pixel do Facebook, chat…) até a pessoa aceitar a categoria deles. Você coloca uma linha <div sw-lgpd> na página e troca o <script> desses serviços para type="text/plain" com a categoria em data-sw-lgpd. O banner oferece "Aceitar todos", "Recusar todos" (com o mesmo peso, como a lei pede) e "Personalizar" (liga/desliga por categoria). Depois da escolha, um botãozinho redondo fica no canto para a pessoa mudar de ideia.
Precisa do JavaScript do SWCore. O navegador não executa um <script type="text/plain">; quando a pessoa aceita a categoria, o componente troca esse script por um de verdade e ele roda. A escolha fica guardada no navegador dela (com data e hora) e vale nas próximas visitas. A categoria Necessários sempre existe e não pode ser desligada. O visual acompanha o tema claro/escuro (menos o estilo drk, que é sempre escuro).
Quando usar
- Todo site que usa Google Analytics, pixel de anúncio, chat ou vídeo incorporado — isto é, quase todo site público.
- Loja e site de cliente: dá para mostrar "o que eu aceitei" (
SW.Lgpd.accepted('marketing')) antes de disparar evento de conversão. - Site sem nenhum script de terceiros e sem cookie além do necessário não precisa do banner.
Comece aqui
-
1
Coloque o SWCore na página.
<link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.css"> <!-- fim do body --> <script src="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.js"></script> -
2
Coloque o banner uma vez na página, com o endereço da sua política de privacidade.
<div sw-lgpd sw-lgpd-policy="/privacidade"></div> -
3
Troque o script de estatística/anúncio para
type="text/plain"e diga a categoria. Ele só roda depois do "aceitar".<!-- ANTES: rodava para todo mundo --> <script> /* código do Google Analytics */ </script> <!-- DEPOIS: só roda se a pessoa aceitar "Estatísticas" --> <script type="text/plain" data-sw-lgpd="analytics"> /* código do Google Analytics */ </script>
Todas as variações
Cada quadro abaixo é o componente de verdade, rodando. O código embaixo é exatamente o que está no quadro: copie e cole.
1. Posição do banner
O banner é um só por página e fica preso na tela, então estes quadros têm um botão que cria o banner nesta página com as mesmas opções do código embaixo. Aceite, recuse ou personalize para ver o resto do fluxo (o botão redondo que aparece depois reabre as preferências). Para sumir com tudo, use "Limpar demonstração" no fim da seção.
<div sw-lgpd sw-lgpd-policy="/privacidade"></div>
<div sw-lgpd sw-lgpd-pos="bar" sw-lgpd-policy="/privacidade"></div>
<div sw-lgpd sw-lgpd-pos="center" sw-lgpd-policy="/privacidade"></div>
2. Estilo
Palavras em sw-lgpd, combináveis entre si e com a posição. tint, drk e gls valem também para o painel de preferências; mini só encolhe o banner (a mensagem vira uma linha só, cortada com "…").
<div sw-lgpd="tint" sw-lgpd-policy="/privacidade"></div>
<div sw-lgpd="drk" sw-lgpd-policy="/privacidade"></div>
<div sw-lgpd="gls" sw-lgpd-policy="/privacidade"></div>
<div sw-lgpd="mini" sw-lgpd-policy="/privacidade"></div>
<div sw-lgpd="mini drk" sw-lgpd-pos="bar" sw-lgpd-policy="/privacidade"></div>
<div sw-lgpd="gls" sw-lgpd-pos="center" sw-lgpd-policy="/privacidade"></div>
3. Categorias e texto
Ofereça só as categorias que o seu site usa (sw-lgpd-cats, separadas por vírgula; as possíveis são analytics, marketing e preferencias). O texto do aviso troca com sw-lgpd-msg. Estes botões abrem direto o painel "Personalizar".
<div sw-lgpd></div>
<div sw-lgpd sw-lgpd-cats="analytics"></div>
<div sw-lgpd sw-lgpd-msg="Usamos cookies para medir as visitas e melhorar a loja. Você escolhe."></div>
SW.Lgpd.destroy();
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| O banner (uma <div> por página) | ||
sw-lgpd | Liga o componente. Pode ficar em qualquer lugar da página; ele some depois de ler as opções. | <div sw-lgpd></div> |
sw-lgpd-policy | Endereço da sua política de privacidade — vira link no aviso e no painel. Apelido: sw-lgpd-link. | sw-lgpd-policy="/privacidade" |
sw-lgpd-modal | Abre a política numa janela por cima (sem sair da página) em vez de nova aba. | sw-lgpd-modal |
sw-lgpd-msg | Texto do aviso. Sem ele, vem um texto padrão em português. | sw-lgpd-msg="Usamos cookies…" |
sw-lgpd-cats | Categorias oferecidas. Padrão: analytics,marketing,preferencias. Necessários sempre aparece. | sw-lgpd-cats="analytics,marketing" |
sw-lgpd-reload | Se a pessoa tirar uma permissão depois, recarrega a página para parar os scripts que já rodaram. | sw-lgpd-reload |
| Posição — sw-lgpd-pos | ||
(nenhuma) | Cartão no canto de baixo, à esquerda. | |
bar | Faixa de ponta a ponta, embaixo. | sw-lgpd-pos="bar" |
center | Cartão centralizado, embaixo. | sw-lgpd-pos="center" |
| Estilo — palavras em sw-lgpd | ||
tint | Fundo levemente na cor primária. | sw-lgpd="tint" |
drk | Escuro, em qualquer tema. | sw-lgpd="drk" |
gls | Vidro fosco. | sw-lgpd="gls" |
mini | Banner compacto (só o banner; o painel continua completo). | sw-lgpd="mini drk" |
| Categorias (valor de data-sw-lgpd no script) | ||
necessarios | Sempre ativa. Para script essencial que você também quer marcar. | data-sw-lgpd="necessarios" |
analytics | "Estatísticas": Google Analytics, Hotjar, Clarity… | data-sw-lgpd="analytics" |
marketing | "Marketing": pixel do Facebook/Meta, Google Ads, TikTok… | data-sw-lgpd="marketing" |
preferencias | "Preferências": lembrar idioma, região, layout. | data-sw-lgpd="preferencias" |
| Nos seus scripts | ||
type="text/plain" | Segura o script: o navegador não executa. | <script type="text/plain" data-sw-lgpd="analytics"> |
data-sw-lgpd | A categoria que libera o script. | data-sw-lgpd="marketing" |
data-sw-lgpd-src | Para script externo: o endereço vai aqui (não em src). | data-sw-lgpd-src="https://…/pixel.js" |
| Em qualquer link ou botão | ||
sw-lgpd-open | Reabre o painel de preferências (ex.: link no rodapé "Preferências de cookies"). | <a href="#" sw-lgpd-open>Cookies</a> |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
<div sw-lgpd sw-lgpd-policy="/privacidade" sw-lgpd-cats="analytics"></div>
<!-- o carregador do GA: endereço em data-sw-lgpd-src, não em src -->
<script type="text/plain" data-sw-lgpd="analytics"
data-sw-lgpd-src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX" async></script>
<!-- a configuração do GA -->
<script type="text/plain" data-sw-lgpd="analytics">
window.dataLayer = window.dataLayer || [];
function gtag(){ dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-XXXXXXX');
</script>
<div sw-lgpd="tint" sw-lgpd-pos="bar" sw-lgpd-policy="/privacidade" sw-lgpd-reload></div>
<script type="text/plain" data-sw-lgpd="marketing">
/* código do pixel do Meta / Google Ads */
</script>
<footer>
<a href="/privacidade">Política de privacidade</a>
<a href="#" sw-lgpd-open>Preferências de cookies</a>
</footer>
Crie um banner acima, escolha, e pergunte aqui.
// antes de disparar um evento de conversão
if (SW.Lgpd.accepted('marketing')) {
fbq('track', 'Purchase');
}
// tudo de uma vez: { necessarios: true, analytics: false, marketing: true, … }
console.log(SW.Lgpd.consent());
// quando a pessoa escolher ou mudar de ideia
document.addEventListener('sw:lgpd:change', (e) => {
console.log(e.detail.categories, e.detail.changed, e.detail.firstTime);
});
Eventos
sw:lgpd:changedocument quando a pessoa escolhe ou muda de ideia, e também ao abrir a página se já existe uma escolha guardada. Traz e.detail.categories (o que está aceito), e.detail.changed (o que mudou) e e.detail.firstTime (true na primeira escolha).API (JavaScript)
SW.Lgpd.accepted("analytics")true/false: a pessoa aceitou essa categoria?SW.Lgpd.consent()SW.Lgpd.open()sw-lgpd-open faz).SW.Lgpd.acceptAll() / SW.Lgpd.rejectAll()SW.Lgpd.reset()SW.Lgpd.init({ policy, msg, pos, mods, cats, policyModal, reload })<div sw-lgpd>. mods e cats são listas: { pos: 'bar', mods: ['drk'], cats: ['analytics'] }.SW.Lgpd.destroy()Precisa de quê
swcore.min.csseswcore.min.js.- Uma página de política de privacidade no seu site (o link do banner aponta para ela).
- Marcar você mesmo cada script de terceiros com
type="text/plain"edata-sw-lgpd.
Cuidados — erros comuns
- Deixar o script do Analytics sem
type="text/plain": ele roda antes do aceite, e o banner vira enfeite. Todo script de terceiros precisa da marcação. - Script externo com
src="…"etype="text/plain": não é liberado do jeito certo. Coloque o endereço emdata-sw-lgpd-src. - Escrever a categoria em português ou com erro (
data-sw-lgpd="estatisticas"): o script nunca roda. As categorias sãoanalytics,marketing,preferencias,necessarios. - Link "Preferências de cookies" (
sw-lgpd-open) numa página sem<div sw-lgpd>: o painel abre com as categorias padrão, mas sem o banner os scripts marcados daquela página só são liberados depois de uma nova escolha. Coloque a<div sw-lgpd>em todas as páginas. - Duas
<div sw-lgpd>na mesma página: só a primeira vale.
O que ele não faz
- Não bloqueia sozinho o que você não marcou: iframes (YouTube, mapas) e scripts comuns rodam normalmente.
- Script que já rodou não "desliga" quando a pessoa tira a permissão — por isso existe
sw-lgpd-reload. - A escolha fica no navegador da pessoa: em outro aparelho, ou depois de limpar os dados, o banner volta. Não guarda nada no seu servidor.
- Scripts marcados que forem adicionados à página depois da escolha só são liberados na próxima escolha ou na próxima visita.
- Os nomes e descrições das categorias e o texto dos botões são fixos, em português.

