Guía · server-side
Analítica server-side: mide desde tu backend, no desde el navegador.
Casi todas las herramientas de analítica cargan un script en el navegador de cada visitante. La analítica del lado del servidor hace lo contrario: tu aplicación ya recibe cada petición, así que es ella la que cuenta la visita.
Esta guía explica qué cambia, qué ganas, qué se te escapa y cómo lo hace runomine.
Revisado el 14 de octubre de 2026
Qué es la analítica del lado del servidor
Con «server-side» se llaman dos cosas distintas:
- Etiquetado en servidor (server-side tagging): el navegador sigue cargando un script, pero envía los eventos a un servidor intermedio que los reenvía a Google Analytics, Meta u otros. Cambia el camino, no el origen.
- Recogida en el servidor: tu backend registra la visita al responder, sin nada en el navegador. Los eventos de negocio (un alta, un pago confirmado) se envían desde donde ocurren: tu código, un job, un webhook.
runomine es lo segundo, con un beacon opcional para lo que tu backend no ve.
Backend frente a navegador: qué ve cada uno
| Librería en tu backend | Script en el navegador | |
|---|---|---|
| Qué hay en el navegador | Nada | Un script y, a menudo, cookies |
| Bloqueadores de anuncios | No ven lo que hace tu servidor | Pueden bloquear el script o sus peticiones |
| Páginas servidas por la caché del CDN | No llegan a tu backend: hace falta el beacon | Se cuentan |
| Navegación dentro de una SPA | Solo la primera carga; el resto, con el beacon | Se cuentan si el script sigue pushState |
| Eventos de negocio | Donde ocurren: en tu código, un job o un webhook | Solo si el navegador sigue en la página |
| Bots | Llegan todos: hay que filtrarlos (runomine lo hace de forma centralizada) | Muchos no ejecutan JavaScript |
| Peso de la página | Cero bytes; el envío va después de responder | Un script más que descargar y ejecutar |
| La IP del visitante | Puede quedarse en tu servidor | Llega al proveedor con cada petición |
Contar visitantes únicos sin cookies
Sin cookie no hay un identificador guardado en el navegador. runomine usa un hash diario: la IP, el user agent y el host, con una sal derivada de tu token y de la fecha UTC.
La misma persona el mismo día da el mismo hash; al día siguiente, otro. Así tienes visitantes únicos por día, y nadie puede ser seguido entre días ni entre sitios.
Las librerías de PHP, Node, Python y Rust lo calculan en tu servidor y se prueban contra el mismo vector de test. Con el beacon, lo calcula runomine con la misma fórmula y descarta la IP, así que una persona vista por ambos cuenta una sola vez.
# Computed on your server, by the library
day = "2026-10-13" # today, UTC
salt = hex(HMAC-SHA256(key = token, "runomine:" + day))
visitor = hex(SHA256(salt + "|" + ip + "|" + user_agent + "|" + host))[0:16]
# Test vector every implementation reproduces
token = "rm_live_test_0123456789abcdef"
ip = "203.0.113.9" host = "example.com"
visitor = 5f9e1bebe31e8bf5
# What travels to runomine: the hash, never the IP
{ "type": "pageview", "url": "https://example.com/pricing",
"visitor": "5f9e1bebe31e8bf5", "user_agent": "Mozilla/5.0 …" }
Librería, beacon o los dos
-
Librería
Para apps con backend. Páginas vistas desde un middleware y eventos con
track(). La IP no sale de tu servidor. -
Beacon
Para sitios estáticos, páginas en la caché del CDN y SPAs. Menos de 1,5 KB, sin cookies ni localStorage, y descarta las visitas con Do Not Track o GPC.
-
Los dos
Dan el mismo hash de visitante, así que nadie cuenta dos veces. La librería para lo que pasa por tu backend; el beacon para el resto.
Cómo empezar en tu stack
-
Laravel
Middleware autodescubierto y
Rom::track(). Guía de Laravel. -
Express y Next.js
@runomine/node: middleware de Express y helper para elmiddlewarede Next.js (App Router). Node 18+, sin dependencias. -
Django y FastAPI
runominepara Python 3.10+: middleware de Django y middleware ASGI para FastAPI o Starlette. Solo la librería estándar. -
Rust
Capa para axum, actix-web o cualquier stack tower, también en modo síncrono.
-
Cualquier otro backend
POST /api/v1/eventscon tu token: hasta 500 eventos por llamada, idempotentes por id. -
Sitios estáticos
Una etiqueta
<script>con el beacon. Sin cookies.
FAQ
Preguntas frecuentes
¿La analítica server-side esquiva los bloqueadores de anuncios?
¿No cuenta también los bots?
¿Qué pasa con las páginas que cachea mi CDN?
¿Es lo mismo que Google Tag Manager server-side?
¿Ralentiza mi aplicación?
Fuentes
Páginas y documentación públicas, consultadas el 14 de octubre de 2026. Si algo ha cambiado, lo corregiremos.
Sigue leyendo
- runomine frente a Google Analytics Qué ganas y qué pierdes al dejar GA4, y cómo cambiar sin quedarte a ciegas.
- runomine frente a Plausible Dos herramientas sin cookies. La diferencia: desde dónde se mide y cómo llega el dinero.
- Analítica para Laravel Páginas vistas con un middleware, eventos con Rom::track y ventas de Stripe por fuente.
Cuenta lo que importa.
Visitas, ventas y servidores en un solo sitio. Instalado en menos de lo que has tardado en leer esta página.