Estadístiques del blog

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”

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.