[đ ] Remettre de lâordre dans le tableau de statistiques du blog
âš 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.

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

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.

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