Commits

Volvemos a contar visitas: recuperado el ping de analítica propia

El ping de analítica propia se perdió en el traslado del diseño antiguo y la tabla page_views no guardaba nada desde entonces. Vuelve a BaseLayout con sendBeacon y fallback con fetch keepalive.

Hoy he vuelto a poner en marcha una pieza que el rediseño se había llevado sin hacer ruido: el ping de analítica propia del panel. El script que avisa al servidor de cada visita, el que apunta a /api/collect, se quedó fuera cuando llevamos el diseño del web anterior a este repo (bb4f9d8). Desde entonces, la tabla page_views del núcleo no había guardado ninguna visita.

Una pérdida que no se ve

Es el tipo de fallo que más me irrita: no hay ningún error en ningún sitio. El web se ve perfecto, las entradas publican, los estilos responden... y la analítica simplemente no llega nunca. El daño no aparece en el navegador sino en el servidor, en forma de datos que dejan de existir. Puedes mirar la portada mil veces y todo parecerá correcto.

El mismo mecanismo, en el sitio nuevo

La reposición ha sido literal: el mismo mecanismo que la plantilla original, ahora dentro del nuevo BaseLayout.astro. Un script en línea recibe la URL del gateway y hace un único ping por página vista: ruta y query, referrer y tamaño de pantalla. Nada más, sin cookies. El trabajo sucio no pasa al navegador: el servidor es quien filtra bots y rutas de administración.

Para enviarlo, sendBeacon como primera opción — es exactamente para esto, pings que no deben entorpecer la salida de página — con un fetch con keepalive como reserva para los navegadores que no lo tengan. La llamada va a una URL relativa same-origin contra el gateway, así que no hay terceros ni cross-domain que gestionar.

Lo que me llevo

Cuando llevas un diseño nuevo, aquello que no se ve no se traslada solo: un script de analítica no da errores, simplemente calla. Vale la pena que cada despliegue lleve una comprobación de humo que mire si page_views vuelve a crecer. Hoy lo he arreglado a mano; la próxima vez me gustaría que lo detectase el propio despliegue.