Analytics server-side vs JavaScript analytics.
Toda ferramenta popular de analytics — Google Analytics, Plausible, Fathom, Simple Analytics, GoatCounter, Umami — usa a mesma arquitetura: um snippet de JavaScript que dispara no navegador do visitante. Essa arquitetura tem um limite duro. Aproximadamente 30-60% do tráfego real da web não é humano em browser — é bots, crawlers, atacantes, requests server-to-server. Analytics JS-only não consegue ver nada disso.
Analytics server-side captura requests na camada do servidor, antes que qualquer navegador esteja envolvido. Abaixo está a comparação técnica e uma recomendação: quando JS é suficiente, quando você precisa de server-side, e quando (como acreditamos) você quer os dois.
A diferença de arquitetura
Analytics JavaScript funciona assim:
- Navegador do visitante requisita
/page.html - Servidor retorna HTML contendo
<script src="ga.js"> - Navegador parseia, baixa
ga.js, executa - Script dispara um beacon pros servidores do GA com metadados da visita
Esse pipeline falha quando:
- O "visitante" é um script que não roda JS (bots, crawlers, atacantes)
- O visitante usa uBlock Origin / Ghostery / similar (bloqueia o domínio do GA)
- O visitante tem conexão que dá timeout antes do
ga.jscarregar - A request nunca retornou HTML (responses de REST API, hits de imagem, download de arquivo)
- JavaScript dá erro silencioso antes do beacon disparar
Analytics server-side funciona diferente:
- Request do visitante bate no seu servidor (Apache / Nginx / PHP-FPM)
- Seu código aplicação (ou um beacon server-side) captura a request e encaminha metadados pra camada de analytics
- Captura acontece independente do que o visitante faça depois
Esse pipeline não liga pra JavaScript, ad-blockers, quirks do browser ou tipo de response. Se a request bateu no seu servidor, foi contada.
O que cada camada captura
| Server-side (Radar) | JavaScript (GA / Plausible / Fathom) | |
|---|---|---|
| Visitantes humanos com browser + JS ativado | ✓ | ✓ |
| Humanos com ad-blockers ativos | ✓ | ✕ |
| AI crawlers (GPTBot, ClaudeBot, PerplexityBot, etc.) | ✓ | ✕ |
| Bots SEO (Ahrefs, Semrush, Majestic, etc.) | ✓ | ✕ |
| Leitores RSS (Feedly, Inoreader, NewsBlur) | ✓ | ✕ |
| Monitores de uptime (UptimeRobot, Pingdom) | ✓ | ✕ |
| Atacantes (sqlmap, wpscan, nuclei, brute-force) | ✓ | ✕ |
| Requests REST API (/wp-json/, /api/) | ✓ | ✕ |
| Web Vitals (LCP, INP, CLS — perf client-side) | ✓ | ✓ |
| Erros JS / rage clicks / scroll depth | ✓ | Parcial |
| Atribuição UTM + canais | ✓ | ✓ |
O SysWP Radar usa as duas camadas: pixel JavaScript pra visitantes humanos (Web Vitals + UTM + engagement) E beacon server-side (via plugin PHP no WordPress, ou snippet de uma linha em qualquer plataforma) pra tudo que JS não vê. As duas são complementares, não competidoras.
Quando JavaScript-only basta
- Você só se preocupa com funnels de conversão humanos (checkout de e-commerce, signup de SaaS)
- Você aceita ignorar 30-60% do tráfego total
- Você não roda um site de conteúdo que AI crawlers se importem
- Você não está no WordPress (a maioria dos ataques mira WP especificamente)
- Você não precisa saber quais bots estão comendo sua banda
Nesse caso, Plausible ou Fathom são ótimos. São focados, rápidos, privacy-first, e fazem o trabalho deles bem dentro do escopo.
Quando você precisa de analytics server-side
- Site de conteúdo / blog / docs: AI crawlers agora são parcela significativa do "tráfego". Você quer otimizar pra citação em respostas do ChatGPT / Claude / Perplexity. Não dá pra otimizar o que não mede.
- Site WordPress:
/wp-login.php,/xmlrpc.php,/wp-json/são superfícies de ataque constantes. Analytics JS não vê nenhum ataque. Server-side captura todos. - E-commerce / SaaS com API pública: requests API (GET /api/products) não rodam JS. Captura server-side mostra quais endpoints são chamados, por quem, com que frequência.
- News / publicação: leitores RSS (Feedly, Inoreader, NewsBlur) consomem
/feed/sem browser. Você fica totalmente cego pros seus assinantes mais fiéis com JS-only. - Equipes preocupadas com segurança: scanners batendo em
/.env,/.git/config, probes de vulnerabilidade, tentativas de injeção sqlmap — invisíveis pra analytics JS, visíveis na camada server.
Como o SysWP Radar implementa as duas camadas
Uma plataforma, duas camadas de captura:
- Pixel JavaScript (uma tag
<script>async, ~2 KB) — atende sessões humanas em browser. Captura Web Vitals usando PerformanceObserver, params UTM, scroll, rage clicks, erros JS. Roda em qualquer plataforma. - Beacon server-side — pra WordPress, é o plugin SysRadar que hooka em
shutdowne envia requests viafastcgi_finish_request()+blocking=false(zero latência ao visitante). Pra não-WP, um webhook HTTP ou shipper de log do Apache.
O classifier (modelo de scoring server-side estilo Bayesiano + regras curadas) categoriza cada request capturada em 9 categorias em tempo real: humanos, bots verificados, AI crawlers, SEO crawlers, leitores RSS, health checks, WP interno, atacantes, desconhecidos. O dashboard mostra agregados, drillable, com timeseries horária.
Perguntas frequentes
Analytics server-side não viola mais a privacidade que analytics JS?
Dá pra rodar o Radar junto com Google Analytics / Plausible?
O beacon server-side deixa meu site lento?
shutdown do WordPress com blocking=false + fastcgi_finish_request() — ou seja, latência ao visitante é zero. A request HTTP pro Radar acontece depois que o WordPress já enviou a resposta ao visitante.E se meu site não usa PHP?
Capture as duas camadas numa só instalação.
Plano free pra sempre. Pixel JS + beacon server-side, um signup. Veja a diferença na primeira hora.
Criar conta grátis →Primeiros 100 clientes pagantes travam 50% lifetime.