Analytics server-side vs JavaScript analytics.
Toda herramienta popular de analytics — Google Analytics, Plausible, Fathom, Simple Analytics, GoatCounter, Umami — usa la misma arquitectura: un snippet de JavaScript que se dispara en el navegador del visitante. Esa arquitectura tiene un límite duro. Aproximadamente el 30-60% del tráfico real de la web no es humano en navegador — son bots, crawlers, atacantes, requests server-to-server. El analytics JS-only no puede ver nada de eso.
El analytics server-side captura requests en la capa del servidor, antes de que cualquier navegador esté involucrado. Abajo está la comparación técnica y una recomendación: cuándo JS es suficiente, cuándo necesitas server-side, y cuándo (como creemos) quieres los dos.
La diferencia de arquitectura
El analytics JavaScript funciona así:
- El navegador del visitante solicita
/page.html - El servidor retorna HTML conteniendo
<script src="ga.js"> - El navegador parsea, descarga
ga.js, ejecuta - El script dispara un beacon a los servidores de GA con metadatos de la visita
Ese pipeline falla cuando:
- El "visitante" es un script que no ejecuta JS (bots, crawlers, atacantes)
- El visitante usa uBlock Origin / Ghostery / similar (bloquea el dominio de GA)
- El visitante tiene conexión que da timeout antes de que
ga.jscargue - La request nunca retornó HTML (responses de REST API, hits de imagen, descarga de archivo)
- JavaScript da error silencioso antes de que el beacon se dispare
El analytics server-side funciona diferente:
- La request del visitante golpea tu servidor (Apache / Nginx / PHP-FPM)
- Tu código de aplicación (o un beacon server-side) captura la request y reenvía metadatos a la capa de analytics
- La captura ocurre independientemente de lo que el visitante haga después
Ese pipeline no le importa el JavaScript, los ad-blockers, los quirks del navegador o el tipo de response. Si la request golpeó tu servidor, fue contada.
Qué captura cada capa
| Server-side (Radar) | JavaScript (GA / Plausible / Fathom) | |
|---|---|---|
| Visitantes humanos con navegador + JS activado | ✓ | ✓ |
| Humanos con ad-blockers activos | ✓ | ✕ |
| AI crawlers (GPTBot, ClaudeBot, PerplexityBot, etc.) | ✓ | ✕ |
| Bots de SEO (Ahrefs, Semrush, Majestic, etc.) | ✓ | ✕ |
| Lectores 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) | ✓ | ✓ |
| Errores JS / rage clicks / scroll depth | ✓ | Parcial |
| Atribución UTM + canales | ✓ | ✓ |
SysWP Radar usa las dos capas: pixel JavaScript para visitantes humanos (Web Vitals + UTM + engagement) Y beacon server-side (vía plugin PHP en WordPress, o snippet de una línea en cualquier plataforma) para todo lo que JS no ve. Las dos son complementarias, no competidoras.
Cuándo basta con JavaScript-only
- Solo te importan los funnels de conversión humanos (checkout de e-commerce, signup de SaaS)
- Aceptas ignorar el 30-60% del tráfico total
- No corres un sitio de contenido que les importe a los AI crawlers
- No estás en WordPress (la mayoría de los ataques apuntan a WP específicamente)
- No necesitas saber qué bots se están comiendo tu ancho de banda
En ese caso, Plausible o Fathom son geniales. Son enfocados, rápidos, privacy-first, y hacen su trabajo bien dentro del scope.
Cuándo necesitas analytics server-side
- Sitio de contenido / blog / docs: los AI crawlers ahora son una porción significativa del "tráfico". Quieres optimizar para citación en respuestas de ChatGPT / Claude / Perplexity. No puedes optimizar lo que no mides.
- Sitio WordPress:
/wp-login.php,/xmlrpc.php,/wp-json/son superficies de ataque constantes. El analytics JS no ve ningún ataque. Server-side captura todos. - E-commerce / SaaS con API pública: las requests API (GET /api/products) no ejecutan JS. La captura server-side muestra qué endpoints son llamados, por quién, con qué frecuencia.
- News / publicación: los lectores RSS (Feedly, Inoreader, NewsBlur) consumen
/feed/sin navegador. Te quedas totalmente ciego para tus suscriptores más fieles con JS-only. - Equipos preocupados por seguridad: scanners golpeando
/.env,/.git/config, probes de vulnerabilidad, intentos de inyección sqlmap — invisibles para el analytics JS, visibles en la capa del servidor.
Cómo SysWP Radar implementa las dos capas
Una plataforma, dos capas de captura:
- Pixel JavaScript (una etiqueta
<script>async, ~2 KB) — atiende sesiones humanas en navegador. Captura Web Vitals usando PerformanceObserver, params UTM, scroll, rage clicks, errores JS. Corre en cualquier plataforma. - Beacon server-side — para WordPress, es el plugin SysRadar que se engancha en
shutdowny envía requests víafastcgi_finish_request()+blocking=false(cero latencia al visitante). Para no-WP, un webhook HTTP o shipper de log de Apache.
El classifier (modelo de scoring server-side estilo Bayesiano + reglas curadas) categoriza cada request capturada en 9 categorías en tiempo real: humanos, bots verificados, AI crawlers, SEO crawlers, lectores RSS, health checks, WP interno, atacantes, desconocidos. El dashboard muestra agregados, drillable, con timeseries horaria.
Preguntas frecuentes
¿El analytics server-side no viola más la privacidad que el analytics JS?
¿Puedo correr Radar junto con Google Analytics / Plausible?
¿El beacon server-side hace mi sitio más lento?
shutdown de WordPress con blocking=false + fastcgi_finish_request() — es decir, latencia al visitante es cero. La request HTTP a Radar ocurre después de que WordPress ya envió la respuesta al visitante.¿Y si mi sitio no usa PHP?
Captura las dos capas en una sola instalación.
Plan free para siempre. Pixel JS + beacon server-side, un signup. Mira la diferencia en la primera hora.
Crear cuenta gratis →Los primeros 100 clientes pagantes aseguran 50% de por vida.