Portão de consentimento: nada opcional roda até que eles digam sim
A regra do vídeo, em uma linha: nenhum pixel de rastreamento, análise ou script de terceiros carrega até que o usuário clique em Aceitar no banner de cookies. Um banner que aparece enquanto o pixel já disparou não resolve nada. Esta habilidade constrói a parte de espera.
Não é aconselhamento jurídico. Nunca escreva "totalmente compatível" em código, cópia ou relatórios. Diga o que o aplicativo agora faz e o que foi testado.
Antes de tocar em qualquer coisa
- Tenha uma auditoria. Se não houver um relatório
consent-auditpara este aplicativo, execute-o primeiro. Você precisa do inventário: quais fornecedores, onde eles começam, o que eles enviam. - Pergunte ao proprietário uma questão por rastreador: manter, portão ou remover? Se um rastreador não for usado para decisões ou anúncios, removê-lo é melhor do que portá-lo. Um site com apenas armazenamento necessário não precisa de banner algum; não adicione um.
- Saiba o que a publicação liberará. Construtores hospedados (Lovable etc.) enviam todas as alterações não publicadas juntas. Liste-as e obtenha uma aprovação antes de publicar.
- Proteja dados de primeira parte. Os rastreadores de portão não devem tocar em login, pagamentos ou gravações próprias do banco de dados do aplicativo (trabalho do aluno, progresso, formulários). Mencione isso no relatório.
O que "portado" significa (a lista de verificação que a correção deve atender)
Carregamento
- Um carregador central (
src/lib/consent.ts, vejareferences/consent.ts). Nenhum pixel, GTM, gtag, PostHog ou<script>de replay emindex.html, no layout raiz ou emmain.tsx. - Scripts opcionais não são buscados, não apenas não inicializados:
import()dinâmico ou injeção de script acontece somente após opt-in. - Nenhum evento enfileirado é reproduzido: visualizações de página de antes do consentimento são descartadas, não enviadas tarde.
- O encaminhamento do lado do servidor (Meta Conversions API,
/api/track, funções de borda) verifica a mesma escolha armazenada, enviada com a requisição. - A análise injetada pelo host está desligada na fonte (Lovable → Configurações → Análise de visitantes desligada; Vercel/Netlify/Cloudflare análise desligada), ou portada antes da injeção. Remover um script depois que ele carrega é tarde demais, porque a primeira requisição já foi embora.
- Google Consent Mode (se GA/Ads permanecerem):
gtag('consent','default',{ad_storage:'denied',analytics_storage:'denied',ad_user_data:'denied',ad_personalization:'denied'})e o próprio script gtag ainda espera pelo opt-in na configuração padrão desta habilidade. Consent Mode "básico", não "avançado", porque o avançado envia pings sem cookies antes do consentimento.
O banner
- Aceitar opcionais e Recusar opcionais são igualmente proeminentes: mesmo tamanho, mesmo estilo, mesma quantidade de cliques. Além de uma opção Configurações.
- As alternâncias de categoria (Análise, Publicidade, e assim por diante) começam desmarcadas.
- Fechar o banner (X / Escape) significa recusar.
- A escolha é salva com uma versão e uma expiração (6 a 12 meses). Alterar a lista de fornecedores aumenta a versão e pergunta novamente.
- Um link persistente "Escolhas de privacidade" no rodapé reabre as configurações.
- Retirar o consentimento interrompe chamadas futuras e exclui cookies e armazenamento opcionais de propriedade do aplicativo (
_ga*,_fbp,_gcl_au,_ttp,ph_*,ajs_*,_hj*,_clck) sem tocar na autenticação. - Controle Global de Privacidade (
navigator.globalPrivacyControl === true) é tratado como Recusar para publicidade/venda/compartilhamento, e o banner diz que foi honrado.
O que é enviado, mesmo após o consentimento
- Nenhum e-mail, número de telefone, nome ou data de nascimento em cargas de pixel ou análise (sem correspondência avançada do Meta, sem
identify(email)). Use um ID opaco apenas se realmente necessário. - URLs são enviadas sem
?querye#fragment(códigos de presente, tokens de redefinição, termos de pesquisa). Se um fornecedor não puder removê-los, remova o fornecedor. - Nada de respostas de quiz, conteúdo de chat, dados de saúde/finanças/nascimento ou campos de formulário.
- Páginas de vídeo: nenhum pixel de anúncio em páginas que reproduzem vídeos de aula ou curso (risco da Lei Federal de Proteção à Privacidade de Vídeos), a menos que o advogado diga o contrário.
Aviso
- Um aviso de privacidade/cookies em uma rota pública, vinculado a partir do rodapé e da página de cadastro/login, listando os fornecedores e categorias reais. Use apenas o nome real do operador e e-mail de contato; nunca invente endereços, DPOs ou reivindicações legais.
Como implementar
- Código local / Claude Code: copie
references/consent.tspara o aplicativo, registre cada fornecedor opcional como umloader, exclua as tags codificadas, construa o banner com os componentes do próprio aplicativo e conecte o link do rodapé. Mantenha o diff pequeno e no estilo do aplicativo. - Lovable / Bolt / v0 / Replit (construído por agente): cole o prompt Correção de
~/.claude/skills/consent-audit/references/prompts.md(ou o prompt Remover). Em seguida, verifique você mesmo; não confie no resumo do agente.
Prove isso (obrigatório antes de dizer que está pronto)
Execute estes testes contra a pré-visualização e, em seguida, novamente no URL ativo após a publicação. No navegador integrado do Claude, use uma nova aba com armazenamento limpo, depois read_network_requests e javascript_tool (document.cookie, localStorage):
| Teste | Passa quando |
|---|---|
| Visita nova, sem clique | 0 requisições para domínios de anúncio, análise ou replay; nenhum cookie ou armazenamento opcional |
| Recusar, depois 2 navegações de página | ainda 0; banner permanece ausente; escolha salva |
| Aceitar análise apenas | análise carrega; pixels de anúncio não |
| Recarregar | escolha lembrada; sem banner |
| Retirar via link do rodapé | chamadas futuras param; cookies opcionais limpos; ainda conectado |
GPC ligado (navigator.globalPrivacyControl forçado como true) | publicidade negada sem clique |
| Navegação do lado do cliente (SPA) | nenhum rastreador surge na mudança de rota |
| Conectar com uma conta de teste | nenhum e-mail ou ID de usuário em nenhuma requisição de rastreador |
| Compilação + verificação de tipo | passa |
Relatório: arquivos alterados, resultado de cada teste com evidência (domínios vistos ou "nenhum"), testes não executados e por quê, alterações não publicadas enviadas com ele, e "Não é aconselhamento jurídico. Consulte um advogado se você veicular anúncios ou atender visitantes da Califórnia/UE."