Ahir vaig desenganxar-me de Google Analytics per les estadístiques d’aquest bloc i he implementat un sistema propi, basat en pràctiques comunes de la indústria.
Els elements que el componen són aquest fitxer javascript visita.js:
var xhttp = new XMLHttpRequest();
// Construir URL per registrar la visita
var url_registre = "https://unxicdellum.cat/visita.html";
// Afegir-hi un paràmetre amb els mil·lisegons i un aleatori de sis xifres
var ara = new Date();
url_registre += "?nc=" + ara.getMilliseconds() + 1000*Math.floor(Math.random()*1000000);
// Afegir-hi la URL de la pàgina
url_registre += "&pagina=" + window.location.href;
// Afegir-hi la pàgina anterior
url_registre += "&anterior=" + document.referrer;
// Inicialitzar i fer la petició
xhttp.open("GET", url_registre, true);
xhttp.send();
Aquest fitxer visita.html (un fitxer essencialment buit):
<html></html>
I aquesta parametrització de nginx:
# A la configuració general (http) hi he afegit això
log_format visita '$remote_addr|$time_iso8601|$arg_pagina|$arg_anterior|$id_sessio|$http_user_agent';
map $cookie_uxlsessio $id_sessio {
~^[0-9a-fA-F] $cookie_uxlsessio;
default $request_id;
}
# Dins de SERVER hi ha aquestes linies
add_header Set-Cookie "uxlsessio=$id_sessio; Secure; HttpOnly; Path=/";
location /visita.html {
access_log /var/log/nginx/xicllum-visita.log visita;
try_files $uri = 404;
}
En processar una pàgina el servidor consulta la cookie uxl_sessio. Si no existeix la crea amb $request_id, un nombre de 16 bytes aleatori (en hexadecimal). Si ja existeix la torna a gravar, sense canviar-ne el valor. Aquesta tècnica proporciona un valor nou a la primera visita d’una sessió de navegació, i el manté per tota la sessió.
El fitxer javascript és inclòs (amb <script async…>) a cada pàgina, perquè l’he posat al bloc <head> de header.php. En carregar-se la pàgina amb un navegador aquest javascript demana al servidor la pàgina visita.html amb tres paràmetres:
- Un número aleatori de sis xifres concatenat amb el mil·lisegon en què es fa la petició. Això és per evitar que el navegador i els proxies retornin una petició prèvia emmagatzemada en una “caché” en comptes d’enviar la petició al servidor.
- La URL de la pàgina actual.
- La URL de la pàgina anterior.
En arribar al servidor aquesta petició és desada en un fitxer de registre específic junt amb l’hora, l’identificador de sessió i l’adreça IP. En aquest fitxer hi ha la informació bàsica que vull:
- La data i hora
- Quines pàgines es visiten.
- Des d’on s’arriba al meu bloc, és a dir, qui el té referenciat.
- Un agrupador de totes les pàgines que s’han vist en una mateixa sessió.
I en faig una anàlisi diària ràpida amb awk i ho carrego (diàriament) en una taula MySQL per tenir-ne una visió històrica.
[28/06/2020] Ho modifico perquè gravi les visites directament a la base de dades.
Aquesta entrada ha estat editada diverses vegades la primera setmana d’abril de 2020.
Un pensament a “Estadístiques del blog”