Rastreamento de Analytics: Coleta de Eventos com Foco em Privacidade
Este artigo explica como rastreamos o comportamento do usuário respeitando a privacidade e evitando tráfego de bots.
O Problema: Entender o Comportamento do Usuário
Precisamos saber:
-
Quais páginas os usuários visitam
-
Quais produtos eles visualizam
-
De onde vem o tráfego (Google Ads, orgânico, redes sociais)
-
Quais campanhas geram conversões
Mas devemos evitar:
-
Rastrear bots e crawlers
-
Armazenar informações pessoalmente identificáveis (PII)
-
Violar regulamentações de privacidade
A Solução: Rastreamento no Lado do Cliente + Lado do Servidor
Lado do Cliente: Rastreamento com JavaScript
ID do Visitante: ID aleatório armazenado em cookie (365 dias)
ID da Sessão: ID aleatório armazenado no sessionStorage (até o navegador fechar)
Parâmetros de campanha: Extraídos da URL e armazenados no sessionStorage
Parâmetros rastreados:
-
gclid- Google Click ID (Anúncios de busca) -
gbraid- Google Ads click ID (Anúncios de Shopping) -
wbraid- Google Ads click ID (iOS) -
fbclid- Facebook click ID -
srsltid- Google organic search result ID -
utm_source,utm_medium,utm_campaign,utm_term,utm_content
Armazenamento: Parâmetros armazenados em cookies (30 minutos) para atribuição de clique no WhatsApp/telefone
Lado do Servidor: Enriquecimento
O servidor enriquece os eventos com:
Dados de GeoIP: País, região, cidade a partir do endereço IP
Análise do User-Agent: Navegador, SO, tipo de dispositivo
Timestamp: Horário do servidor (UTC)
Detecção de bots: Filtra user-agents conhecidos de bots
Tipos de Eventos
Visualização de página: Usuário visita uma página
Visualização de produto: Usuário visualiza página de produto
Adicionar ao carrinho: Usuário adiciona produto ao carrinho
Checkout: Usuário inicia o checkout
Compra: Usuário finaliza a compra
Clique no WhatsApp: Usuário clica no botão do WhatsApp
Clique no telefone: Usuário clica no número de telefone
Fluxo de Dados
sequenceDiagram
participant User
participant JS as JavaScript
participant API as /api/analytics
participant Firehose as Kinesis Firehose
participant S3
User->>JS: Visita página
JS->>JS: Extrai parâmetros da URL
(gclid, utm_*, etc.)
JS->>JS: Armazena no sessionStorage
JS->>API: POST evento + parâmetros
API->>API: Enriquece com GeoIP
API->>API: Analisa User-Agent
API->>API: Filtra bots
API->>Firehose: Envia evento enriquecido
Firehose->>S3: Armazena no bucket de analyticsDetecção de Bots
Filtramos o tráfego de bots usando múltiplos sinais:
Padrões de User-Agent: Strings conhecidas de bots (Googlebot, Bingbot, etc.)
Padrões de comportamento: Muito rápido, muitas requisições
JavaScript ausente: Bots frequentemente não executam JS
Cookie de exclusão: tv_exclude=true interrompe todo o rastreamento
Proteção de Privacidade
Sem PII: Nunca armazenamos nomes, e-mails, números de telefone
IPs anonimizados: Último octeto removido antes do armazenamento
Sem rastreamento cross-site: Cookies são apenas first-party
Opt-out: Usuários podem definir o cookie de exclusão
Retenção de dados: Eventos excluídos após 90 dias
Carregamento Condicional de Pixels
Carregamos pixels de rastreamento apenas quando relevantes:
Pixel do Google Ads: Apenas se gclid, gbraid ou wbraid estiverem presentes
Pixel do LinkedIn: Apenas se msclkid estiver presente
Pixel do Facebook: Apenas se fbclid estiver presente
Benefício: Carregamento mais rápido das páginas, menos sobrecarga de rastreamento
Detecção da Fonte de Tráfego
Detectamos a fonte de tráfego a partir dos parâmetros da URL:
Google Ads: gclid, gbraid, wbraid → utm_source=google_ads
Google Orgânico: srsltid → utm_source=google_search
Facebook: fbclid → utm_source=facebook
LinkedIn: msclkid → utm_source=linkedin
Direto: Sem parâmetros → utm_source=direct
Rastreamento de Conversões
Rastreamos conversões ao longo do funil:
Visualização de produto → Adicionar ao carrinho → Checkout → Compra
Cada etapa inclui:
-
ID do Visitante (para atribuição)
-
ID da Sessão (para análise de sessão)
-
Parâmetros da campanha (para cálculo de ROI)
-
SKU do produto (para análise de produto)
Rastreamento de Toque de Lead
Quando os usuários entram em contato conosco (WhatsApp, telefone, e-mail), capturamos:
Método de contato: WhatsApp, telefone, e-mail
Parâmetros da campanha: Dos cookies (janela de 30 minutos)
Contexto do produto: Em qual página de produto eles estavam
Benefício: Atribuir conversões offline a campanhas online
Limitação de Taxa
O endpoint de analytics tem limitação de taxa:
Limite: 100 requisições por 10 minutos por IP
Benefício: Previne abuso e inundações de bots
Armazenamento
Os eventos são armazenados no S3 via Kinesis Firehose:
Formato: JSON lines (um evento por linha)
Particionamento: Por data (ano/mês/dia/hora)
Compressão: Gzip
Retenção: 90 dias
Consulta
Os eventos são consultados via AWS Athena:
Esquema: Definido no Glue Data Catalog
Consultas: SQL nos dados do S3
Casos de uso: ROI de campanha, popularidade de produtos, fontes de tráfego
Referências
Conceitos Técnicos
-
Web analytics - Wikipedia
-
Privacy by design - Wikipedia
Serviços AWS
-
Kinesis Firehose - AWS documentation
-
Athena - AWS documentation
Artigos Relacionados
- Multi-Server Architecture - Onde o analytics é executado
Resumo
Nosso sistema de analytics rastreia o comportamento do usuário respeitando a privacidade:
Lado do cliente:
-
✅ Extrai parâmetros de campanha da URL
-
✅ Armazena no sessionStorage (escopo de sessão)
-
✅ Armazena em cookies (30 min para atribuição)
-
✅ Envia eventos para a API
Lado do servidor:
-
✅ Enriquece com GeoIP e User-Agent
-
✅ Filtra tráfego de bots
-
✅ Envia para o Kinesis Firehose
-
✅ Armazena no S3 (particionado por data)
Privacidade:
-
✅ Nenhum PII armazenado
-
✅ IPs anonimizados
-
✅ Cookies apenas first-party
-
✅ Opt-out disponível
-
✅ Retenção de 90 dias
Carregamento condicional:
-
✅ Pixel do Google Ads apenas se gclid presente
-
✅ Pixel do LinkedIn apenas se msclkid presente
-
✅ Pixel do Facebook apenas se fbclid presente
Esta abordagem equilibra insights com privacidade e desempenho.