Visão Geral
O Easy Analytics System (EAS) é uma biblioteca JavaScript do lado do cliente, projetada para análise web abrangente. Ele permite que proprietários de sites coletem insights valiosos sobre o comportamento do usuário, desempenho da página e engajamento geral do site. O EAS é leve, configurável e inclui recursos como gerenciamento de consentimento, rastreamento de eventos personalizados e coleta detalhada de dados.
A versão do script documentada aqui é 1.0.0
.
Recursos
- Rastreamento de Visitantes e Sessões: Identificação única de visitantes e gerenciamento de sessões.
- Gerenciamento de Consentimento: Modal de consentimento integrado que respeita as escolhas do usuário (opt-in/opt-out). Suporta armazenamento de consentimento baseado em cookies e sem cookies (localStorage).
- Rastreamento de Visualizações de Página: Rastreia automaticamente carregamentos de página e informações relevantes da página.
- Métricas de Desempenho: Coleta dados detalhados de
Navigation Timing
(TTFB, FCP, LCP, etc.). - Dados do Dispositivo e Ambiente: Coleta informações sobre o dispositivo do usuário, navegador, SO, resolução de tela, idioma, etc.
- Rastreamento de Interação:
- Rastreamento automático de cliques em elementos interativos comuns.
- Rastreamento de interações personalizadas definidas via atributos HTML.
- Rastreamento de Erros JavaScript: Captura e reporta erros de JS e rejeições de promessas não tratadas.
- Rastreamento de Abandono de Formulário: Identifica formulários que os usuários começam a preencher, mas não enviam.
- Rastreamento de Eventos Personalizados: API para enviar dados de eventos personalizados.
- Agrupamento de Conteúdo: Agrupe dados analíticos por seções de conteúdo em seu site.
- Suporte a Não Rastrear (DNT): Respeita a configuração DNT do navegador.
- Detecção de Bots: Filtra o tráfego de bots conhecidos (configurável).
- Configuração Flexível: As opções podem ser definidas via objeto JavaScript ou parâmetros de URL.
- Opções de Armazenamento: Usa cookies por padrão, com fallback para localStorage para IDs e consentimento. Dados de sessão usam sessionStorage com fallbacks para localStorage/memória.
- Modo de Depuração: Fornece logs no console para desenvolvimento e solução de problemas.
Começando
Instalação
Inclua o script de analytics no seu arquivo HTML. Geralmente, é recomendado colocá-lo antes da tag de fechamento </body>
. Você também pode usar defer
se o colocar no <head>
.
<script defer src="https://cdn.alphasystem.dev/plugins/easy-analytics-system/latest/script-min.js"></script>
Configuração
Uma chave de API (API key) é obrigatória para o funcionamento do sistema de analytics. Você também precisa especificar o serverEndpoint
para onde os dados serão enviados. A configuração pode ser fornecida de várias maneiras:
1. Objeto Global window.analyticsConfig
(Recomendado)
Antes que o script EAS seja carregado, defina um objeto global window.analyticsConfig
:
<script>
window.analyticsConfig = {
apiKey: "SUA_CHAVE_DE_API",
serverEndpoint: "https://seu-servidor-analytics.com/api/track",
// ... outras opções de configuração
};
</script>
<script defer src="https://cdn.alphasystem.dev/plugins/easy-analytics-system/latest/script-min.js"></script>
2. Nome do Arquivo do Script
Se o seu arquivo de script for nomeado com a sua chave de API (por exemplo, SUA_CHAVE_DE_API.js
), a biblioteca tentará usar o nome do arquivo (sem .js
) como a chave de API. Este método é menos comum e principalmente útil se você não puder definir window.analyticsConfig
ou parâmetros de URL.
<!-- Assume que o script está hospedado em um local onde seu nome é a chave de API -->
<script src="https://cdn.example.com/SUA_CHAVE_DE_API.js" defer></script>
Observação: serverEndpoint
e outras configurações ainda seriam idealmente definidas via window.analyticsConfig
ou parâmetros de URL se este método for usado apenas para a chave de API.
3. Parâmetros de Consulta da URL
Você pode passar opções de configuração como parâmetros de consulta na URL do script. Isso substitui as opções de window.analyticsConfig
e o método do nome do arquivo do script para a chave de API.
<script src="caminho/para/eas-analytics.js?apiKey=SUA_CHAVE_DE_API&serverEndpoint=https://seu-servidor-analytics.com/api/track&debug=true" defer></script>
- Valores booleanos são definidos por
true
ou1
. - Valores numéricos são analisados correspondentemente.
Prioridade de Configuração:
- Parâmetros de Consulta da URL
- Objeto
window.analyticsConfig
- Nome do Arquivo do Script (apenas para
apiKey
) - Valores padrão
Opções de Configuração
A tabela a seguir detalha todas as opções de configuração disponíveis, seus valores padrão, tipos e descrições:
Opção | Tipo | Valor Padrão | Descrição |
---|---|---|---|
apiKey |
String | null |
Obrigatório. Sua chave de API exclusiva para o serviço de analytics. |
serverEndpoint |
String | "#" |
Obrigatório. O endpoint da URL para onde os dados de analytics serão enviados. |
cookieVisitorIdName |
String | "_ana_vid" |
Nome do cookie ou chave do localStorage usado para armazenar o ID do visitante. |
cookieSessionIdName |
String | "_ana_sid" |
Nome da chave do sessionStorage/localStorage usado para armazenar o ID da sessão. |
cookieConsentName |
String | "_ana_consent" |
Nome do cookie ou chave do localStorage usado para armazenar o status de consentimento do usuário. |
cookieExpirationDays |
Number | 365 |
Período de expiração em dias para os cookies de ID do visitante e consentimento. |
sessionTimeoutMs |
Number | 1800000 (30 minutos) |
Duração da inatividade em milissegundos após a qual uma sessão é considerada expirada e um novo ID de sessão é gerado. |
showConsentModal |
Boolean | true |
Se true , um modal de consentimento é exibido para usuários que não deram ou negaram consentimento. |
consentModalTitle |
String | "Privacidade e Uso de Dados" |
Texto do título para o modal de consentimento. |
consentModalText |
String | "Usamos cookies e coletamos dados analíticos para melhorar nosso serviço. Ao clicar em \"Aceitar\", você concorda com nossas práticas..." |
Texto principal do conteúdo para o modal de consentimento. |
privacyPolicyUrl |
String | "#" |
URL para sua política de privacidade. Se definida para uma URL válida (não "#" ), um link será adicionado ao modal de consentimento. |
acceptButtonText |
String | "Aceitar" |
Texto para o botão "Aceitar" no modal de consentimento. |
declineButtonText |
String | "Recusar" |
Texto para o botão "Recusar" no modal de consentimento. |
gatherPerformance |
Boolean | true |
Se true , coleta métricas de desempenho da página (Navigation Timing API). |
gatherNetworkInfo |
Boolean | true |
Se true , coleta informações de rede (tipo efetivo, RTT, downlink) se disponível via navigator.connection . |
gatherInteractionDetails |
Boolean | true |
Se true , rastreia automaticamente cliques em elementos interativos comuns como <a> , <button> , etc. |
gatherDeviceDetails |
Boolean | true |
Se true , coleta detalhes sobre o dispositivo do usuário (SO, navegador, resolução de tela, etc.). |
gatherPageDetails |
Boolean | true |
Se true , coleta detalhes sobre a página atual (URL, título, referenciador). |
trackJSErrors |
Boolean | true |
Se true , captura e envia erros de JavaScript (window.onerror ) e rejeições de promessas não tratadas. |
trackDeclaredInteractions |
Boolean | true |
Se true , rastreia interações em elementos com atributos data-analytics-* específicos. Veja Interações Declaradas. |
interactionAttributePrefix |
String | "data-analytics-" |
Prefixo para atributos HTML usados em interações declaradas (por exemplo, data-analytics-event ). |
trackFormAbandonment |
Boolean | true |
Se true , rastreia formulários com os quais os usuários interagem, mas não enviam. |
formAbandonmentTimeoutMs |
Number | 120000 (2 minutos) |
Timeout em milissegundos após a primeira interação com um formulário, após o qual é considerado abandonado se não enviado. |
formSelector |
String | "form" |
Seletor CSS para identificar formulários para rastreamento de abandono. |
contentGroupingAttribute |
String | "data-analytics-content-group" |
Nome do atributo HTML usado para definir grupos de conteúdo. Veja Agrupamento de Conteúdo. |
respectDNT |
Boolean | true |
Se true , respeita o sinal "Do Not Track" do navegador e evita o envio de dados (exceto para atualizações de consentimento ou relatórios de erro JS forçados). |
trackBotsViaUA |
Boolean | true |
Se true , tenta identificar bots via strings de User-Agent e pode interromper o rastreamento. Se false , o tráfego de bots pode ser rastreado. |
debug |
Boolean | false |
Se true , habilita logs detalhados no console do navegador para fins de depuração. |
useCookies |
Boolean | true |
Se true , usa cookies para armazenar ID do visitante e consentimento. Se false , usa localStorage . |
enableLocalStorageFallback |
Boolean | true |
Se o sessionStorage não estiver disponível (por exemplo, devido às configurações do navegador), definir isso como true permite usar o localStorage como fallback para dados de sessão. Se ambos falharem, os dados da sessão são armazenados na memória. |
Conceitos Fundamentais
Rastreamento de Visitantes e Sessões
- ID do Visitante (
client_id
): Um UUID exclusivo gerado para cada visitante. É armazenado em um cookie (padrão_ana_vid
) oulocalStorage
(seuseCookies
forfalse
) e persiste porcookieExpirationDays
. - ID da Sessão (
session_id
): Um UUID exclusivo gerado para cada sessão do usuário. Uma sessão começa quando um usuário visita o site pela primeira vez ou após um período de inatividade (sessionTimeoutMs
). Os dados da sessão são armazenados nosessionStorage
por padrão (chave_ana_sid
), com fallbacks paralocalStorage
ou armazenamento em memória, se necessário. A sessão é mantida ativa pela atividade do usuário.
Gerenciamento de Consentimento
O EAS inclui um sistema robusto de gerenciamento de consentimento:
- Status do Consentimento: Pode ser
given
(concedido),denied
(negado) ounot_set
(não definido). - Armazenamento: O status do consentimento é armazenado em um cookie (padrão
_ana_consent
) oulocalStorage
(seuseCookies
forfalse
). - Modal de Consentimento: Se
showConsentModal
fortrue
e o consentimento fornot_set
, um diálogo modal (renderizado em um Shadow DOM para isolamento de estilo) é exibido, permitindo que os usuários aceitem ou recusem o rastreamento.- A aparência e o texto do modal são configuráveis (veja
consentModalTitle
,consentModalText
, etc.). - Um link para sua política de privacidade (
privacyPolicyUrl
) pode ser incluído.
- A aparência e o texto do modal são configuráveis (veja
- Comportamento baseado no Consentimento:
given
: Capacidades completas de rastreamento são habilitadas.denied
: O rastreamento é significativamente limitado. A maioria da coleta de dados é desabilitada. O ID do visitante é removido dolocalStorage
seuseCookies
forfalse
. Erros de JS ainda podem ser reportados com contexto mínimo setrackJSErrors
for verdadeiro.not_set
: Se o modal for exibido, a inicialização completa aguarda a escolha do usuário. Se o modal estiver desabilitado, o rastreamento é limitado de forma semelhante adenied
.
- Atualizando o Consentimento: Se um usuário alterar seu status de consentimento, um evento (
consent_update
) é enviado.
Coleta e Envio de Dados
- A função interna
collectData()
monta o payload de dados para cada evento. - Os dados são enviados para o
serverEndpoint
usandonavigator.sendBeacon()
para eventos de descarga de página (para confiabilidade) oufetch()
para outros eventos. - Os payloads são objetos JSON.
Mecanismos de Armazenamento
O EAS usa o armazenamento do navegador para diversos propósitos:
- ID do Visitante:
- Cookie:
config.cookieVisitorIdName
(padrão:_ana_vid
) seconfig.useCookies
fortrue
. localStorage
: Mesma chave, seconfig.useCookies
forfalse
.
- Cookie:
- Status do Consentimento:
- Cookie:
config.cookieConsentName
(padrão:_ana_consent
) seconfig.useCookies
fortrue
. localStorage
: Mesma chave, seconfig.useCookies
forfalse
.
- Cookie:
- ID e Dados da Sessão:
sessionStorage
: Preferencial. Chaves:config.cookieSessionIdName
(padrão:_ana_sid
) e${config.cookieSessionIdName}_stime
.localStorage
: Fallback se osessionStorage
não estiver disponível econfig.enableLocalStorageFallback
fortrue
.- Em memória: Último recurso se tanto
sessionStorage
quantolocalStorage
não estiverem disponíveis. Os dados da sessão serão perdidos quando a página for fechada ou recarregada.
Os cookies são definidos com os atributos SameSite=Lax
e Secure
.
Capacidades de Rastreamento
Rastreamento Automático
Uma vez inicializado e com o consentimento concedido (se necessário), o EAS rastreia automaticamente vários tipos de dados:
Visualizações de Página
- Tipo de Evento:
pageview
- Acionado no carregamento da página.
- Dados Coletados:
- URL, caminho, hostname, referenciador, título do documento (
gatherPageDetails
). - Métricas de desempenho (
gatherPerformance
). - Informações do dispositivo, navegador, SO (
gatherDeviceDetails
). - Informações de rede (
gatherNetworkInfo
). - ID do visitante, ID da sessão, timestamps.
- URL, caminho, hostname, referenciador, título do documento (
Métricas de Desempenho
- Coletadas se
gatherPerformance
fortrue
. - Usa
performance.getEntriesByType("navigation")[0]
ou fallback paraperformance.timing
. - Métricas Incluem: Tempo de busca de DNS, tempo de conexão TCP, tempo de TLS, tempo de requisição, tempo de resposta, tempo de DOM interativo, tempo de DOM content loaded, tempo de carregamento da página, TTFB (Time to First Byte), contagem de redirecionamentos, tamanhos de transferência.
Informações do Dispositivo, Navegador e SO
- Coletadas se
gatherDeviceDetails
fortrue
. - Detalhes Incluem: String do User-Agent, idioma, resolução de tela, tamanho da viewport, profundidade de cor, offset do fuso horário, tipo de dispositivo (desktop, tablet, mobile), nome e versão do navegador, sistema operacional.
Informações de Rede
- Coletadas se
gatherNetworkInfo
fortrue
enavigator.connection
estiver disponível. - Detalhes Incluem: Tipo de conexão efetiva (por exemplo, '4g'), RTT (Round Trip Time), velocidade de downlink, preferência de economia de dados.
Interações do Usuário (Cliques)
- Coletadas se
gatherInteractionDetails
fortrue
. - Tipo de Evento:
click
(padrão, pode ser sobrescrito por interações declaradas) - Rastreia automaticamente cliques em:
- Tags
<a>
(âncora) - Elementos
<button>
- Elementos com
role="button"
<input type="submit">
ou<input type="button">
- Tags
- Dados Coletados: Tipo de elemento, ID, classes, conteúdo de texto (primeiros 100 caracteres), URL do link (para tags
<a>
), coordenadas do clique, URL de destino.
Interações Declaradas
- Coletadas se
trackDeclaredInteractions
fortrue
. - Permite rastrear interações específicas adicionando atributos HTML aos elementos.
- Usa atributos prefixados com
config.interactionAttributePrefix
(padrãodata-analytics-
). - Atributo Obrigatório:
data-analytics-event="seu_nome_de_evento"
: Define o tipo de evento. - Atributos Opcionais: Quaisquer outros atributos
data-analytics-*
serão coletados como pares chave-valor emevent_data
. Por exemplo,data-analytics-category="CTA"
torna-seevent_data: { category: "CTA" }
. - Exemplo:
Isso enviaria um evento com<button data-analytics-event="video_play" data-analytics-video-id="123" data-analytics-source="homepage">Play Video</button>
event_type: "video_play"
eevent_data: { video_id: "123", source: "homepage", element_type: "button", ... }
.
Erros de JavaScript
- Coletados se
trackJSErrors
fortrue
. - Tipo de Evento:
js_error
- Escuta por
window.onerror
ewindow.onunhandledrejection
. - Dados Coletados: Mensagem de erro, URL de origem, número da linha, número da coluna, stack trace (se disponível), tipo de erro (
onerror
ouunhandledrejection
). - Erros de JS são enviados com alta prioridade. O payload incluirá
session_id
apenas se o consentimento tiver sido concedido, mas o relatório de erro em si é sempre tentado setrackJSErrors
estiver habilitado.
Abandono de Formulário
- Coletado se
trackFormAbandonment
fortrue
. - Tipo de Evento:
form_abandonment
- Rastreia interações do usuário (foco, entrada) com formulários que correspondem a
config.formSelector
(padrão"form"
). - Se um usuário interage com um formulário, mas não o envia dentro de
config.formAbandonmentTimeoutMs
(padrão 2 minutos), um evento de abandono é enviado. - Dados Coletados: Identificador do formulário (ID, nome ou caminho CSS), tempo gasto antes do abandono, ação do formulário, método do formulário.
Descarga de Página e Mudanças de Visibilidade
- Tipo de Evento:
page_unload
- Enviado quando o usuário navega para fora da página ou fecha a aba/navegador.
- Inclui
duration_ms
(tempo gasto na página).
- Tipo de Evento:
visibility_change
- Enviado quando a visibilidade da página muda para
hidden
. - Inclui
duration_ms
(tempo gasto na página até ficar oculta) etime_since_last_activity_ms
.
- Enviado quando a visibilidade da página muda para
Rastreamento Manual
Eventos Personalizados (window.customAnalyticsTrack
)
Você pode rastrear manualmente eventos personalizados usando a função global window.customAnalyticsTrack
. Esta função está disponível após o carregamento do script EAS.
window.customAnalyticsTrack(eventName, eventDetails, targetElement);
eventName
(String, obrigatório): O nome para seu evento personalizado (por exemplo,"inscricao_newsletter"
,"produto_adicionado_carrinho"
).eventDetails
(Objeto, opcional): Um objeto contendo quaisquer dados adicionais que você queira associar a este evento. Padrão é{}
.targetElement
(Elemento DOM, opcional): O elemento DOM associado a este evento. Se fornecido, seu grupo de conteúdo (se houver) será incluído. Padrão édocument.body
.
Exemplo:
// Supondo um botão com id="subscribeBtn"
document.getElementById("subscribeBtn").addEventListener("click", () => {
window.customAnalyticsTrack(
"inscricao_newsletter",
{
origem: "promo_rodape",
email_usuario_fornecido: true, // Exemplo de detalhe personalizado
},
document.getElementById("subscribeBtn")
);
});
Observação: Eventos personalizados só serão enviados se o sistema de analytics estiver totalmente inicializado e o consentimento tiver sido concedido (se aplicável).
Agrupamento de Conteúdo
O agrupamento de conteúdo permite categorizar dados analíticos com base em seções do seu site.
- Habilite definindo o
config.contentGroupingAttribute
(padrão"data-analytics-content-group"
) em elementos HTML. - Quando um evento ocorre (por exemplo, visualização de página, clique, evento personalizado), o script procura por este atributo no elemento alvo ou em seus elementos pais.
- O valor do atributo é enviado como
content_group
no payload de dados.
Exemplo:
<article data-analytics-content-group="Seção do Blog">
<h1>Meu Post de Blog</h1>
<p>...</p>
<button id="likeButton">Curtir</button>
</article>
<script>
// Se ocorrer um clique em #likeButton, ou uma visualização de página para esta página,
// 'content_group: "Seção do Blog"' será incluído nos dados.
</script>
Tópicos Avançados
Não Rastrear (DNT)
- Se
config.respectDNT
fortrue
(padrão) e o navegador do usuário tiver DNT habilitado (navigator.doNotTrack === "1"
ou"yes"
), a maioria da coleta e envio de dados será suprimida. - Eventos relacionados a atualizações de consentimento (por exemplo,
opt_out
) ainda podem ser enviados. - Relatórios de erro JS enviados com
forceSend=true
podem contornar esta verificação no lado do cliente, mas o processamento do lado do servidor deve, em última instância, respeitar o DNT.
Detecção de Bots
- Se
config.trackBotsViaUA
fortrue
(padrão), o script verifica onavigator.userAgent
contra uma lista predefinida de padrões comuns de bots (BOT_UA_PATTERNS
). - Se um bot for detectado e esta opção for
true
, o script pode interromper a inicialização adicional para evitar o rastreamento do tráfego de bots. - Se
trackBotsViaUA
forfalse
, o tráfego de bots pode ser registrado.
Depuração
- Defina
config.debug = true;
para habilitar logs detalhados no console do navegador. - Isso exibirá informações sobre configuração, rastreamento de eventos, payloads de dados e possíveis problemas.
window.analyticsConfig = {
apiKey: "SUA_CHAVE_DE_API",
serverEndpoint: "https://seu-servidor-analytics.com/api/track",
debug: true,
};
Estrutura do Payload de Dados (Visão Geral)
Todos os dados enviados para o serverEndpoint
são um objeto JSON. Campos comuns chave incluem:
api_key
: Sua chave de API.event_type
: O tipo de evento (por exemplo,"pageview"
,"click"
,"js_error"
).event_data
: Um objeto contendo detalhes específicos para o evento.timestamp
: Timestamp ISO 8601 de quando o evento ocorreu.client_id
: O ID único do visitante.session_id
: O ID da sessão atual.sdk_version
: Versão do script EAS (por exemplo,"1.0.0"
).dnt
: Booleano, se o DNT está habilitado pelo usuário.url
,path
,hostname
,referrer
,title
: Detalhes da página.user_agent
,language
,screen_resolution
, etc.: Detalhes do dispositivo.performance
: Objeto de métricas de desempenho.connection
: Objeto de informações de rede.content_group
: String do grupo de conteúdo, se aplicável.
Os campos exatos dependem do event_type
e da configuração.