2026.06.10 (Mer)

✹ RĂ©sumĂ© de GPT-5.5  

Retour sur la correction d’une page publique de statistiques oĂč visites et vues se mĂ©langeaient, en sĂ©parant les visites par sessions de 30 minutes des vues par ouverture de page dans un tableau lisible aussi sur mobile.

Juste aprĂšs avoir créé la page publique de statistiques du blog, quelque chose me gĂȘnait dĂ©jĂ .

Les chiffres étaient là.

Mais leurs noms se mélangeaient trop facilement.

Visiteurs, visites, vues, sessions, page views. Sur l’écran d’un blog, ces mots se ressemblent. Dans le modĂšle de comptage, ils ne veulent pas dire la mĂȘme chose. Si un compteur public brouille cette frontiĂšre, les chiffres deviennent difficiles Ă  croire mĂȘme s’ils s’affichent correctement.

Au dĂ©but, des libellĂ©s comme « vues aujourd’hui », « vues ce mois-ci » et « vues totales » semblaient suffisants. Mais ce que je voulais dans la barre latĂ©rale Ă©tait plus proche du nombre de visites du blog aujourd’hui que du nombre d’ouvertures d’articles.

Cartes initiales du compteur public oĂč visites et vues Ă©taient encore mĂ©langĂ©es

J’ai donc sĂ©parĂ© Ă  nouveau le modĂšle.

Visites
-> sessions avec 30 minutes d'inactivité

Vues
-> nombre d'ouvertures de pages ou d'articles

Cartes de statistiques aprÚs séparation des visites et des vues

4943 n’était pas un nombre de visites

La premiÚre chose à corriger était le sens du baseline.

La valeur 4943 importĂ©e depuis Google Analytics Ă©tait screenPageViews. Autrement dit, des vues de page. L’afficher comme un total de visiteurs ou de visites aurait Ă©tĂ© faux.

J’ai donc corrigĂ© le Worker et la documentation ensemble.

totalPageViews
-> GA screenPageViews baseline + D1 page views

totalSessions
-> GA sessions baseline + D1 sessions

Les visites et les vues ne peuvent pas reposer sur le mĂȘme baseline. J’ai ajoutĂ© une route sĂ©parĂ©e pour initialiser le baseline des sessions.

/admin/seed-session-baseline

J’ai aussi ajoutĂ© cette Ă©tape au dĂ©ploiement du Worker dans GitHub Actions. Si le Worker est dĂ©ployĂ© mais que le baseline reste vide, le total public des visites peut sembler cassĂ©.

Utiliser immédiatement la réponse de /track

La premiÚre structure faisait un détour.

Le client envoyait /track pour compter, puis relisait /analytics pour remplir l’écran. Avec le cache et l’ordre des requĂȘtes, la visite tout juste comptĂ©e pouvait ne pas apparaĂźtre tout de suite.

Désormais, /track renvoie aussi le payload analytics le plus récent.

Chargement de page
-> POST /track
-> le Worker met Ă  jour session/vues
-> la mĂȘme rĂ©ponse contient les analytics frais
-> le client rend la barre latérale et la vue de la page courante

Les rafraßchissements périodiques continuent de lire /analytics.

Le premier affichage utilise la valeur fraüchement mise à jour. Ensuite, l’API de lecture maintient l’interface à jour.

Une session ne doit pas augmenter Ă  chaque changement de page

Les vues peuvent augmenter lorsqu’un lecteur passe d’un article à un autre.

Les visites sont diffĂ©rentes. Si une personne lit trois articles dans la mĂȘme session du blog, cela ne doit pas devenir trois visites. J’ai ajoutĂ© une table sessions au Worker et reliĂ© les sessions par visitor hash et dernier moment d’activitĂ©.

La limite est de 30 minutes.

Moins de 30 minutes depuis la derniÚre activité
-> mĂȘme session

Plus de 30 minutes
-> nouvelle session

Ainsi les visites du jour/mois/total dans la barre latĂ©rale bougent moins que les page views. Les vues par article continuent d’utiliser le page path.

Les pages multilingues suivent la mĂȘme rĂšgle.

/daily-review/.../ et /en/daily-review/.../ sont deux versions linguistiques du mĂȘme article. La clĂ© de vue utilise le canonical path, et changer de langue dans la mĂȘme session ne crĂ©e pas une nouvelle visite.

Rendre le tableau plus proche d’une vraie table

La premiĂšre page de statistiques reposait sur des cartes KPI et des listes Ă  barres.

Ce n’était pas mauvais, mais dĂšs que visites et vues sont apparues ensemble, la structure est devenue ambiguĂ«. Plus de cartes allongeaient l’écran mobile, et il devenait difficile de lire quel chiffre Ă©tait une visite et lequel Ă©tait une vue pour chaque pĂ©riode.

J’ai donc transformĂ© la zone de comparaison du haut en quelque chose de plus proche d’une table.

Tableau de statistiques organisant visites et vues par période

Période          Visites     Vues
Période choisie  n           n
Aujourd'hui      n           n
Ce mois-ci       n           n
Total            n           n

Le total avait aussi besoin de deux lignes.

Total
-> suivi direct depuis 2026/06/09

Total
-> inclut les statistiques avant 2026/06/09

Ces deux lignes n’ont pas le mĂȘme sens.

Le suivi direct est la valeur soutenue par les dimensions D1 depuis le début de la collecte publique. Le total avec historique ajoute le baseline GA. Les mélanger sur une seule ligne rend le nombre plus gros, mais il ne correspond plus aux dimensions détaillées.

J’ai donc sĂ©parĂ© aussi le texte d’explication.

Visites : exclut les retours dans les 30 min. Vues : ouvertures de page.
Le suivi direct commence le 2026/06/09.

Rendre la saisie de dates moins pénible

Sur une page de statistiques, on change souvent les dates.

Au début je pensais que range=today, range=month, range=total et range=custom suffisaient. Mais les périodes directes demandent de modifier début et fin encore et encore.

J’ai donc rendu les champs plus proches d’un petit outil.

format YYYY/MM/DD
date picker caché
sélection du segment année/mois/jour
ajustement avec ArrowUp / ArrowDown
ajustement avec la molette
clamp entre date de début et date de fin

Visuellement, ce sont toujours deux petits champs, mais changer les dates est devenu beaucoup moins pénible.

J’ai aussi arrĂȘtĂ© de cacher les dates jusqu’au choix du mode custom. Les champs restent visibles, et les presets dĂ©placent simplement les dates vers la bonne pĂ©riode.

C’est plus prĂ©visible.

Séparer les dimensions détaillées en onglets

Afficher toutes les dimensions Ă  la fois rendait la page confuse.

Pages, environnement visiteur, source de trafic, région et langue sont utiles, mais tout ouvrir sur un seul écran se lit mal. Je les ai regroupés en onglets.

Pages
Environnement visiteur
Trafic
Région/langue

Les paths peuvent ĂȘtre longs, donc les libellĂ©s ont reçu un title et le CSS a Ă©tĂ© ajustĂ© pour que le retour Ă  la ligne et la troncature ne cassent pas la mise en page. Les valeurs de page commençant par / sont devenues des liens.

Le but n’était pas de faire un dashboard spectaculaire.

Je voulais pouvoir l’ouvrir sur tĂ©lĂ©phone et voir vite quels articles Ă©taient lus, combien de visites il y avait aujourd’hui, et combien de vues avaient Ă©tĂ© comptĂ©es.

Aligner aussi les libellés multilingues

La page de statistiques n’existe pas seulement en corĂ©en.

Il y a aussi /en/analytics/, /ja/analytics/, /zh-Hans/analytics/ et les autres locales actives. Les libellĂ©s comme « visites », « vues », « sessions de 30 minutes » et « vues GA + D1 » devaient ĂȘtre ajustĂ©s dans le front matter de chaque locale.

Si on oublie cela, la structure change mais les anciennes phrases restent dans les autres langues.

Sur un blog multilingue, corriger un écran ne veut pas dire corriger une seule page. Le sens des libellés doit suivre.

Ce que j’ai vĂ©rifiĂ©

J’ai surtout vĂ©rifiĂ© le rendu et le sens des mĂ©triques.

node --check cloudflare/ga-stats-worker.js
node --check assets/js/custom/analytics-dashboard.js
node --check assets/js/custom/visitor-stats.js
bundle exec jekyll build
Cloudflare Worker deploy
GitHub Pages deploy

Les critÚres étaient les suivants.

La barre latérale affiche sessions comme visites
Les vues par article restent des page views
Visites totales et vues totales utilisent des baselines différentes
Le total direct et le total incluant GA sont séparés
La saisie de dates ne se heurte pas aux presets today/month/total
La table période/visites/vues ne déborde pas sur mobile

AprĂšs ce travail, la page de statistiques est devenue plus calme.

Il y a plus de chiffres, mais ils prĂȘtent moins Ă  confusion. Une visite est une visite, une vue est une vue. Un total reste un total, mais le total direct et le total avec historique ne sont pas la mĂȘme chose.

L’important n’était pas de faire paraĂźtre les chiffres plus grands.

C’était de ne pas cacher ce que chaque chiffre signifie.

Laisser un commentaire