◔ Analytics e misurazione

Log del server o analytics JavaScript: due misure a confronto

Perché i log del server e gli analytics JavaScript danno numeri diversi, cosa vede ciascuno dei due metodi e come usarli insieme per avere un quadro credibile.

Capita spesso: il pannello di analytics segna mille visite in una giornata, mentre l'elaborazione dei log del server ne riporta cinquemila. Nessuno dei due numeri è «sbagliato». Misurano cose diverse, in punti diversi del percorso di una richiesta, e capire questa differenza è il primo passo per fidarsi dei propri dati.

Due punti di osservazione

Quando un browser apre una pagina succedono, in ordine, tre cose:

  1. il browser invia una richiesta HTTP al server;
  2. il server risponde con l'HTML, e quasi sempre scrive una riga nel proprio access log;
  3. il browser interpreta la pagina, scarica risorse ed esegue gli script, tra cui quello di analytics, che invia un segnale («hit») a un servizio di raccolta.

I log osservano il punto 2, gli analytics JavaScript il punto 3. Tutto ciò che succede tra i due, o che non arriva mai al punto 3, crea la divergenza.

Cosa vedono i log

Una riga tipica di un access log in formato combinato contiene l'IP, la data, il metodo e il percorso richiesti, il codice di stato, la dimensione della risposta, il referrer e lo user agent:

203.0.113.7 - - [12/Mar/2025:10:15:32 +0100] "GET /guida-backup/ HTTP/2.0" 200 18234 "-" "Mozilla/5.0 ..."

Da questi dati puoi ricavare:

  • tutte le richieste, comprese quelle di bot, crawler, strumenti di monitoraggio e client senza JavaScript;
  • errori: pagine 404, redirect 301 in catena, errori 500 che l'utente vede ma che lo script di analytics non registra perché la pagina non si carica;
  • risorse non HTML: download di PDF, immagini, feed RSS, chiamate alle API.

Il limite è che i log non sanno nulla di ciò che accade dopo il caricamento: quanto l'utente scorre, se clicca un pulsante che non genera una nuova richiesta, se resta sulla pagina un secondo o dieci minuti.

Cosa vede lo script JavaScript

Lo script lato client registra solo le visite di browser che eseguono JavaScript e non bloccano il servizio di raccolta. In compenso vede ciò che i log ignorano:

  • interazioni senza ricaricamento, come apertura di menu, riproduzione di un video, invio di moduli gestiti via JavaScript;
  • dimensione dello schermo e caratteristiche del dispositivo;
  • navigazione nelle single page application, dove il server vede una sola richiesta iniziale;
  • tempo di permanenza e profondità di scorrimento, se configurati.

Perché i numeri non coincidono

Causa Effetto sui log Effetto sugli analytics JS
Bot e crawler Contati Quasi sempre esclusi
Ad blocker e filtri privacy Contati Persi
Pagine servite dalla cache del browser o da una CDN Spesso non registrate dall'origine Contate
Utente che chiude la pagina prima che lo script parta Contato Perso
Navigazione interna in una SPA Una sola richiesta Più pagine viste

Il caso della CDN merita attenzione: se il sito è servito da una rete di distribuzione, le richieste che trovano la pagina in cache non arrivano al tuo server, e i log utili sono quelli della CDN, non quelli dell'origine.

Come usarli insieme

Il modo più sano è assegnare a ciascuna fonte le domande che sa trattare meglio.

Ai log chiedi: - quali URL restituiscono errori e con quale frequenza; - quali crawler visitano il sito e quanto spesso, utile per il SEO tecnico; - quante volte vengono scaricati file non HTML; - se ci sono picchi anomali che suggeriscono abusi o scansioni.

Agli analytics JS chiedi: - come si comportano le persone sulla pagina; - quali percorsi portano a una conversione; - quali campagne generano visite che interagiscono davvero.

Nel mio lavoro trovo utile un controllo periodico: scelgo una pagina con traffico stabile e confronto le pagine viste umane stimate dai log, dopo aver filtrato bot noti e richieste di risorse, con quelle registrate dallo script. Se il rapporto resta stabile nel tempo, gli analytics sono coerenti. Se cambia all'improvviso, qualcosa si è rotto: uno script rimosso per errore, un consenso che blocca la raccolta, un nuovo bot che si spaccia per browser.

Filtrare i log in modo ragionevole

Per avvicinare i log a una stima di visite umane:

  • escludi le richieste a immagini, fogli di stile, script e font;
  • escludi gli user agent che si dichiarano bot, crawler o spider;
  • escludi i codici di stato diversi da 200 quando conti le pagine viste;
  • raggruppa le richieste ravvicinate dallo stesso IP e user agent.

Il risultato resterà una stima, ma una stima indipendente dagli ad blocker, quindi un buon termine di paragone.

In sintesi

  • Log del server e analytics JavaScript osservano due momenti diversi della stessa visita.
  • I log vedono tutte le richieste, bot ed errori inclusi, ma non le interazioni dopo il caricamento.
  • Lo script vede il comportamento sulla pagina, ma perde chi blocca JavaScript o il servizio di raccolta.
  • Confrontare periodicamente le due fonti su pagine stabili aiuta a scoprire problemi di tracciamento.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche