Pular para o conteúdo principal
Zenovay
Gratuito20 minutesIntermediário

Implementação de Consentimento de Cookies

Implemente banners de consentimento de cookies e integre com o Zenovay para rastreamento analítico em conformidade. Saiba mais sobre cookies neste guia de conformidade de privacidade.

cookiesconsentgdprbannercompliance
Última atualização:

Aprenda como implementar consentimento de cookies e integrá-lo com o Zenovay Analytics para conformidade de privacidade.

Você precisa de um banner de cookies?

Uso de cookies do Zenovay

ModoArmazenamento no clienteConsentimento necessário
Modo sem cookiesNenhum (IDs window-scoped em memória)Geralmente não
Modo padrãoUm único cookie first-party para reconhecer visitantes recorrentesPode ser necessário

O Zenovay é sempre sem cookies no servidor: nenhum endereço IP ou dado pessoal é armazenado. A tabela acima é apenas sobre o que o script de rastreamento escreve no navegador do visitante. O modo sem cookies impede que o script escreva qualquer cookie ou entrada localStorage.

Quando o consentimento é obrigatório

O consentimento é tipicamente obrigatório quando:

  • Usando cookies persistentes
  • Rastreamento entre sessões
  • Identificação de visitantes recorrentes
  • Coleta de dados pessoais

O consentimento pode não ser obrigatório quando:

  • Usando modo sem cookies (sem cookies)
  • Funcionalidade estritamente necessária
  • Estatísticas agregadas anônimas

Modo sem cookies (sem cookies)

Você pode executar o script de rastreamento do Zenovay em modo sem cookies, que não escreve nada no navegador do visitante. Existem duas formas de habilitá-lo.

Opção 1: atributo de script. Adicione data-cookieless="true" à sua tag de script:

<script
  defer
  data-tracking-code="YOUR_TRACKING_CODE"
  data-cookieless="true"
  src="https://api.zenovay.com/z.js"
></script>

Opção 2: configuração do site. Abra o painel do seu site, vá para Configurações, e ative o toggle sem cookies (aparece nas abas Geral e Avançado). A aba Geral também regenera o snippet acima com data-cookieless="true" já adicionado.

Modo sem cookies:

  • Não usa cookies nem localStorage (apenas IDs window-scoped em memória)
  • Não cria identificadores persistentes
  • Legalmente conforme antes do consentimento sob ePrivacy para o próprio script de rastreamento do Zenovay
  • Dados ligeiramente menos precisos sobre visitantes recorrentes (espere ~10-15% menos uniques)

Outras ferramentas que você carrega (Meta Pixel, Google Analytics e similares) ainda definem seus próprios cookies e podem exigir consentimento independentemente dessa configuração.

Carregamento condicional

Verificação básica de consentimento

// Verificar consentimento antes de carregar
function loadZenovayIfConsented() {
  const consent = localStorage.getItem('analytics_consent');

  if (consent === 'granted') {
    loadZenovay();
  } else if (consent === 'denied') {
    // Não carregar análises
  } else {
    showConsentBanner();
  }
}

function loadZenovay() {
  const script = document.createElement('script');
  script.src = 'https://api.zenovay.com/z.js';
  script.setAttribute('data-tracking-code', 'YOUR_TRACKING_CODE');
  script.defer = true;
  document.head.appendChild(script);
}

// Executar ao carregar a página
loadZenovayIfConsented();
<div id="cookie-banner" style="display: none;">
  <div class="cookie-content">
    <p>Usamos análises para melhorar sua experiência.</p>
    <button onclick="acceptCookies()">Aceitar</button>
    <button onclick="declineCookies()">Recusar</button>
    <a href="/privacy">Saiba mais</a>
  </div>
</div>

<script>
function showConsentBanner() {
  document.getElementById('cookie-banner').style.display = 'block';
}

function acceptCookies() {
  localStorage.setItem('analytics_consent', 'granted');
  document.getElementById('cookie-banner').style.display = 'none';
  loadZenovay();
}

function declineCookies() {
  localStorage.setItem('analytics_consent', 'denied');
  document.getElementById('cookie-banner').style.display = 'none';
  // Opcionalmente carregar em modo sem cookies
  loadZenovayCookieless();
}

function loadZenovayCookieless() {
  // data-cookieless="true" diz ao rastreador para usar apenas
  // IDs window-scoped em memória - sem cookies, sem localStorage.
  const script = document.createElement('script');
  script.src = 'https://api.zenovay.com/z.js';
  script.setAttribute('data-tracking-code', 'YOUR_TRACKING_CODE');
  script.setAttribute('data-cookieless', 'true');
  script.defer = true;
  document.head.appendChild(script);
}
</script>

Plataformas populares de consentimento

Integração do Cookiebot

// Aguardar consentimento do Cookiebot
window.addEventListener('CookiebotOnAccept', function() {
  if (Cookiebot.consent.statistics) {
    loadZenovay();
  }
});

// Lidar com mudanças de consentimento
window.addEventListener('CookiebotOnDecline', function() {
  // Consentimento retirado - parar rastreamento
  if (window.zenovay) {
    window.zenovay('disable');
  }
});

Configuração do Cookiebot:

  1. Adicionar Zenovay à categoria "Estatísticas"
  2. Definir nome do cookie: zenovay_session
  3. Definir provedor: zenovay.com
  4. Definir tipo: HTTP
  5. Definir expiração: Sessão ou 1 ano

Integração do OneTrust

// Callback de consentimento do OneTrust
function OptanonWrapper() {
  if (OnetrustActiveGroups.includes('C0002')) {
    // Cookies de desempenho consentidos
    loadZenovay();
  } else {
    // Carregar em modo sem cookies
    loadZenovayCookieless();
  }
}

Categorias do OneTrust:

  • C0001: Estritamente necessário
  • C0002: Desempenho (Zenovay)
  • C0003: Funcional
  • C0004: Direcionamento

Integração do Osano

// Callback de consentimento do Osano
window.Osano.cm.addEventListener('osano-cm-consent-changed', function(event) {
  if (event.ANALYTICS === 'ACCEPT') {
    loadZenovay();
  }
});

Integração do Termly

// Callback de consentimento do Termly
window.addEventListener('termly-consent-preferences-updated', function(e) {
  if (e.detail.analytics) {
    loadZenovay();
  }
});

Modo de Consentimento do Google

Integração

// Inicializar Modo de Consentimento do Google
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}

gtag('consent', 'default', {
  'analytics_storage': 'denied'
});

// Atualizar ao consentir
function updateConsent(granted) {
  gtag('consent', 'update', {
    'analytics_storage': granted ? 'granted' : 'denied'
  });

  if (granted) {
    loadZenovay();
  }
}

Com Zenovay

Use a abordagem de carregamento condicional mostrada acima para carregar Zenovay apenas após o consentimento ser concedido via Modo de Consentimento do Google:

// Carregar Zenovay apenas após o consentimento de análises ser concedido
function updateConsent(granted) {
  gtag('consent', 'update', {
    'analytics_storage': granted ? 'granted' : 'denied'
  });

  if (granted) {
    const script = document.createElement('script');
    script.src = 'https://api.zenovay.com/z.js';
    script.setAttribute('data-tracking-code', 'YOUR_TRACKING_CODE');
    script.defer = true;
    document.head.appendChild(script);
  }
}

Implementação em React

Contexto de consentimento

// ConsentContext.js
import { createContext, useContext, useState, useEffect } from 'react';

const ConsentContext = createContext();

export function ConsentProvider({ children }) {
  const [consent, setConsent] = useState(() => {
    return localStorage.getItem('analytics_consent') || 'pending';
  });

  const grantConsent = () => {
    localStorage.setItem('analytics_consent', 'granted');
    setConsent('granted');
  };

  const denyConsent = () => {
    localStorage.setItem('analytics_consent', 'denied');
    setConsent('denied');
  };

  return (
    <ConsentContext.Provider value={{ consent, grantConsent, denyConsent }}>
      {children}
    </ConsentContext.Provider>
  );
}

export const useConsent = () => useContext(ConsentContext);

Componente de banner de consentimento

// CookieBanner.js
import { useConsent } from './ConsentContext';

export function CookieBanner() {
  const { consent, grantConsent, denyConsent } = useConsent();

  if (consent !== 'pending') return null;

  return (
    <div className="cookie-banner">
      <p>Usamos cookies para analisar o tráfego do site.</p>
      <button onClick={grantConsent}>Aceitar</button>
      <button onClick={denyConsent}>Recusar</button>
    </div>
  );
}

Análises condicionais

// Analytics.js
import { useEffect } from 'react';
import { useConsent } from './ConsentContext';

export function Analytics({ websiteId }) {
  const { consent } = useConsent();

  useEffect(() => {
    if (consent === 'granted') {
      const script = document.createElement('script');
      script.src = 'https://api.zenovay.com/z.js';
      script.setAttribute('data-tracking-code', websiteId);
      script.defer = true;
      document.head.appendChild(script);
    } else if (consent === 'denied') {
      // Não carregar análises quando o consentimento é negado.
      // Se ainda quiser rastreamento mínimo, carregue o script com
      // data-cookieless="true" em vez disso (sem cookies, sem localStorage).
    }
  }, [consent, websiteId]);

  return null;
}

Implementação em Vue.js

<!-- CookieConsent.vue -->
<template>
  <div v-if="showBanner" class="cookie-banner">
    <p>Usamos cookies para análises.</p>
    <button @click="accept">Aceitar</button>
    <button @click="decline">Recusar</button>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue';

const showBanner = ref(false);

onMounted(() => {
  const consent = localStorage.getItem('analytics_consent');
  if (!consent) {
    showBanner.value = true;
  } else if (consent === 'granted') {
    loadZenovay();
  }
});

function accept() {
  localStorage.setItem('analytics_consent', 'granted');
  showBanner.value = false;
  loadZenovay();
}

function decline() {
  localStorage.setItem('analytics_consent', 'denied');
  showBanner.value = false;
  loadZenovayCookieless();
}

function loadZenovay() {
  const script = document.createElement('script');
  script.src = 'https://api.zenovay.com/z.js';
  script.setAttribute('data-tracking-code', 'YOUR_TRACKING_CODE');
  document.head.appendChild(script);
}

function loadZenovayCookieless() {
  // data-cookieless="true" diz ao rastreador para usar apenas
  // IDs window-scoped em memória - sem cookies, sem localStorage.
  const script = document.createElement('script');
  script.src = 'https://api.zenovay.com/z.js';
  script.setAttribute('data-tracking-code', 'YOUR_TRACKING_CODE');
  script.setAttribute('data-cookieless', 'true');
  document.head.appendChild(script);
}
</script>

Página de preferências de consentimento

Permitir que os usuários mudem suas preferências:

<div class="cookie-preferences">
  <h2>Preferências de Cookies</h2>

  <div class="cookie-option">
    <label>
      <input type="checkbox" id="necessary" checked disabled>
      Cookies Necessários (Obrigatório)
    </label>
    <p>Essencial para o funcionamento do site.</p>
  </div>

  <div class="cookie-option">
    <label>
      <input type="checkbox" id="analytics">
      Cookies de Análises
    </label>
    <p>Nos ajudam a entender como os visitantes usam nosso site.</p>
  </div>

  <button onclick="savePreferences()">Salvar Preferências</button>
</div>

<script>
// Carregar preferências atuais
document.getElementById('analytics').checked =
  localStorage.getItem('analytics_consent') === 'granted';

function savePreferences() {
  const analytics = document.getElementById('analytics').checked;
  localStorage.setItem('analytics_consent', analytics ? 'granted' : 'denied');

  // Recarregar para aplicar as mudanças
  location.reload();
}
</script>

Registro de consentimento

Rastrear consentimento para conformidade:

function logConsent(type, granted) {
  fetch('/api/consent-log', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      type: type,
      granted: granted,
      timestamp: new Date().toISOString(),
      userAgent: navigator.userAgent
    })
  });
}

function acceptCookies() {
  logConsent('analytics', true);
  localStorage.setItem('analytics_consent', 'granted');
  loadZenovay();
}

Melhores práticas

Design do banner

  • Linguagem clara: Explique o que os cookies fazem
  • Opções iguais: Aceitar e recusar igualmente proeminentes
  • Sem padrões escuros: Não engane os usuários para aceitar
  • Controle granular: Deixe os usuários escolher categorias
  • Revogação fácil: Permita alterar preferências

Técnico

  • Não carregar antes do consentimento: Carregue rastreamento apenas após consentimento
  • Respeite a revogação: Pare o rastreamento quando o consentimento for retirado
  • Lembre as preferências: Não pergunte repetidamente
  • Teste completamente: Verifique se o fluxo de consentimento funciona

Conformidade

  • Documente o consentimento: Registre quando o consentimento é dado/retirado
  • Revisão regular: Atualize conforme as regulamentações mudam
  • Trilha de auditoria: Mantenha registros para conformidade

Solução de problemas

Rastreamento ainda ativo após recusar

Verifique:

  • Script não codificado em HTML
  • Verificação de consentimento executada antes de qualquer rastreamento
  • Sem problemas de cache

Verifique:

  • localStorage não está bloqueado
  • Cookie não expira imediatamente
  • Mesmo domínio para todas as páginas

Plataforma de consentimento não se ativa

Certifique-se:

  • Código de integração correto
  • Plataforma completamente carregada antes da verificação
  • Nomes de callbacks correspondem

Próximos passos

Este artigo foi útil?