Saltar al contenido
runomine

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

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.

El hash del visitante
# 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 el middleware de Next.js (App Router). Node 18+, sin dependencias.

  • Django y FastAPI

    runomine para 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/events con tu token: hasta 500 eventos por llamada, idempotentes por id.

  • Sitios estáticos

    Una etiqueta <script> con el beacon. Sin cookies.

Server-side no significa «fuera de la ley de cookies». Las directrices 2/2023 del CEPD dicen que la directiva ePrivacy puede aplicar aunque no haya cookies, y el RGPD aplica siempre que se tratan IPs: un hash es seudonimización, no anonimización. runomine está diseñado para encajar en la exención de medición de audiencia (AEPD, CNIL) para visitas y embudos, y firma contigo un contrato de encargo (art. 28 RGPD). Atribuir ingresos a usuarios identificados puede requerir consentimiento: valóralo con tu DPO.

FAQ

Preguntas frecuentes

¿La analítica server-side esquiva los bloqueadores de anuncios?
Lo que mide tu backend, sí: un bloqueador actúa en el navegador y no ve lo que hace tu servidor. El beacon, como cualquier script, sí puede bloquearse.
¿No cuenta también los bots?
Tu servidor recibe todas las peticiones, bots incluidos. runomine los descarta de forma centralizada (lista de user agents, navegadores headless, user agent vacío) y los cuenta por día, así que la librería no necesita saber nada de bots.
¿Qué pasa con las páginas que cachea mi CDN?
Si Cloudflare u otro CDN sirve la página desde su caché, tu backend no la ve. Añade el beacon a esas páginas: da el mismo hash de visitante, así que nadie cuenta dos veces.
¿Es lo mismo que Google Tag Manager server-side?
No. El etiquetado en servidor sigue empezando en un script del navegador y reenvía sus eventos. runomine registra la visita en tu backend, sin script, y solo usa el beacon donde tu backend no llega.
¿Ralentiza mi aplicación?
No. Las librerías guardan los eventos en memoria y los envían en lotes después de responder, reintentan con backoff y, si fallan, fallan en silencio. Nunca lanzan una excepción.

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.