2026.06.06 (Sam)

✹ RĂ©sumĂ© de GPT-5.5  

RĂ©cit de l’ajout d’un Cloudflare Worker et de D1, dans la limite de l’offre gratuite, Ă  un blog statique GitHub Pages afin de conserver les valeurs cumulĂ©es existantes de GA tout en affichant les visites du jour et les vues par article.

J’ai eu envie d’ajouter un compteur de visites au blog.

Pas parce que la fonctionnalitĂ© elle-mĂȘme est impressionnante. C’est plutĂŽt l’inverse. Elle paraĂźt tellement Ă©vidente, mais sur un blog statique créé avec GitHub Pages, elle n’est pas prĂ©sente naturellement.

Google Analytics Ă©tait dĂ©jĂ  installĂ©. En tant qu’administrateur, je pouvais ouvrir GA et voir le nombre de visiteurs et de vues. Mais ces chiffres n’étaient pas visibles dans le blog. Les visiteurs ne pouvaient pas savoir si ce blog Ă©tait encore lu aujourd’hui, ni dans quelle mesure les articles rĂ©cents avaient Ă©tĂ© consultĂ©s.

Je voulais retrouver cette petite impression des indicateurs de Naver Blog, avec Aujourd'hui, Cumul et vues par article affichĂ©s discrĂštement. Ce n’était pas vraiment un chiffre pour se mettre en avant, mais plutĂŽt un signal indiquant que le blog n’est pas une page statique morte, et qu’il continue d’ĂȘtre lu.

Le problÚme était donc simple.

Est-ce que je pouvais conserver les avantages d’un blog statique gratuit tout en ajoutant seulement une toute petite partie dynamique pour les statistiques de visite ?

J’ai d’abord fixĂ© les conditions

Je ne voulais pas agrandir toute la structure simplement pour ajouter un compteur de visites.

DĂšs le dĂ©part, j’ai fixĂ© quelques conditions.

  • Conserver le flux d’écriture avec GitHub Pages et Jekyll.
  • Ne pas utiliser de serveur payant.
  • RĂ©soudre le problĂšme dans la limite de l’offre gratuite, que ce soit avec Cloudflare ou Firebase.
  • L’afficher discrĂštement prĂšs du profil.
  • Faire en sorte qu’il ne devienne pas Ă©trangement long sur mobile.
  • Afficher non seulement les statistiques de tout le blog, mais aussi les vues par article.
  • Ne pas jeter les valeurs cumulĂ©es existantes de GA.

La derniÚre condition était particuliÚrement importante.

Si j’ajoutais un nouveau compteur et que les vues repartaient de 0, ce serait Ă©trange. Le blog Ă©tait dĂ©jĂ  en ligne, et GA contenait dĂ©jĂ  des vues accumulĂ©es depuis quelque temps. Mais continuer Ă  lire uniquement GA restait Ă©loignĂ© de la sensation de compteur que je voulais.

Je pensais qu’il suffirait de lire GA

Au dĂ©but, je pensais qu’il suffisait de lire l’API Google Analytics.

Puisque GA possĂ©dait dĂ©jĂ  les donnĂ©es, il me semblait qu’un Cloudflare Worker pouvait simplement appeler l’API GA et renvoyer les chiffres. En pratique, j’ai créé un compte de service, ajoutĂ© les autorisations sur la propriĂ©tĂ© GA, et les appels API fonctionnaient.

Mais une fois le tout branchĂ©, ce n’était pas ce que je voulais.

GA est un outil d’analyse. Il est utile pour que l’administrateur observe les tendances plus tard, mais il Ă©tait ambigu comme compteur de visites rĂ©agissant directement sur l’écran du blog. Le chiffre Aujourd'hui posait particuliĂšrement problĂšme. Si je venais moi-mĂȘme d’entrer sur le blog et que la valeur du jour restait affichĂ©e Ă  0, pour un visiteur cela ressemblait simplement Ă  quelque chose de cassĂ©.

Les noms des mĂ©triques prĂȘtaient aussi Ă  confusion. Les utilisateurs actifs et les vues de page sont des valeurs diffĂ©rentes. Si je dĂ©finis le nombre de visiteurs de façon stricte, le chiffre paraĂźt trop conservateur. Si j’utilise les vues de page, la sensation est plus naturelle, mais il faut faire attention au libellĂ©.

Au final, le jugement était simple.

Utiliser GA comme valeur de rĂ©fĂ©rence historique, et compter moi-mĂȘme les augmentations Ă  partir de maintenant.

J’ai sĂ©parĂ© la base de rĂ©fĂ©rence et l’incrĂ©ment

La structure finale a pris cette forme.

Vues publiques = base GA + incrément Cloudflare D1

La base GA correspond au nombre dĂ©jĂ  accumulĂ©. Je choisis une date de rĂ©fĂ©rence et j’enregistre les vues totales du site ainsi que les vues par article jusqu’à ce moment-lĂ .

À partir de lĂ , le Cloudflare Worker compte directement. Quand un visiteur entre sur le blog, JavaScript appelle le Worker, et le Worker enregistre dans D1 les incrĂ©ments du jour, du mois, du total et de chaque chemin de page.

En résumé, cela donne ceci.

Valeurs cumulées existantes : base Google Analytics
Nouvel incrément : Cloudflare Worker + D1
API publique : Cloudflare Worker
Affichage du blog : inclusion Jekyll + JavaScript

J’ai aimĂ© cette mĂ©thode parce qu’elle ne jette aucun des deux cĂŽtĂ©s.

Elle conserve les donnĂ©es existantes de GA. En mĂȘme temps, les comptages futurs rĂ©agissent immĂ©diatement sur l’écran du blog.

Pourquoi Cloudflare Worker et D1

Firebase faisait aussi partie des candidats. Mais pour une fonctionnalité de cette taille, le cÎté Cloudflare était plus simple.

GitHub Pages est un site statique, il n’y a donc aucun endroit oĂč placer du code serveur. Worker comble ce vide avec une petite piĂšce. D1 est basĂ© sur SQLite, ce qui suffit pour stocker des nombres simples comme ceux d’un compteur de visites.

La condition de coĂ»t convenait aussi. Un compteur de visites pour un blog personnel peut ĂȘtre gĂ©rĂ© dans la limite de l’offre gratuite. Si beaucoup de monde arrive soudainement, une partie du comptage peut devenir lĂ©gĂšrement imprĂ©cise, mais les articles eux-mĂȘmes ne se cassent pas. Au dĂ©part, ce n’est ni un systĂšme de paiement ni un grand livre financier.

Ce que je voulais, ce n’était pas une comptabilitĂ© exacte, mais montrer le flux d’un blog qui est en train d’ĂȘtre lu.

J’ai limitĂ© les robots et les visites rĂ©pĂ©tĂ©es avec modĂ©ration

Quand on ajoute un compteur Ă  une page publique, les robots peuvent aussi faire monter les chiffres.

Les bloquer parfaitement est difficile. Et si je bloque trop strictement, je m’éloigne au contraire de la sensation de compteur que je voulais. Je prĂ©fĂ©rais une maniĂšre de compter un peu gĂ©nĂ©reuse, comme sur Naver Blog.

Le Worker ne traite donc que quelques points.

  • Exclure les agents utilisateur qui sont clairement des robots.
  • Ne pas recompter la mĂȘme combinaison visiteur et page pendant un certain dĂ©lai.
  • Accumuler les vues par article de la mĂȘme maniĂšre, avec des incrĂ©ments basĂ©s sur le chemin.

Autrement dit, je l’ai ajustĂ© pour un compteur de visites public, pas pour un outil d’analyse strict.

Je l’ai affichĂ© discrĂštement Ă  l’écran

Au dĂ©but, j’ai essayĂ© d’afficher les statistiques dans plusieurs cases. Mais l’interface placĂ©e Ă  cĂŽtĂ© du profil devait rester petite. Quand les chiffres deviennent trop nombreux, le premier Ă©cran du blog se salit plutĂŽt qu’autre chose.

J’ai donc finalement gardĂ© trois valeurs.

Aujourd'hui / Mois / Total

Aujourd'hui donne la sensation que le blog est lu maintenant. Mois montre l’échelle rĂ©cente. Total montre le temps que le blog a accumulĂ©.

Dans les listes d’articles, j’ai ajoutĂ© un nombre de vues Ă  chaque article.

10 vues

Cette valeur utilise aussi la mĂȘme structure que les statistiques globales.

Vues par article = base GA par article + incrément Cloudflare D1 par article

Par exemple, si un article avait 9 vues selon la base GA et qu’il a Ă©tĂ© lu une fois de plus aprĂšs le passage au nouveau compteur, l’écran affiche 10 vues.

C’était ce qui semblait le plus naturel. Les vues passĂ©es ne sont pas jetĂ©es, et les vues futures s’accumulent immĂ©diatement.

Résultat

Au final, des chiffres comme ceux-ci sont apparus prĂšs du profil du blog.

Aujourd'hui 1 / Mois 66 / Total 4,944

Et les listes d’articles affichent les vues sous cette forme.

10 vues

Si l’on regarde seulement la fonctionnalitĂ©, elle est petite. Mais j’aime beaucoup ce travail.

Le problĂšme Ă©tait clair. Un blog GitHub Pages n’avait pas de compteur de visites. GA existait, mais il ne suffisait pas comme compteur visible sur l’écran public. Pour autant, je ne voulais pas construire un gros serveur juste pour un seul blog.

J’ai donc conservĂ© les donnĂ©es existantes de GA comme base de rĂ©fĂ©rence, puis ajoutĂ© une structure qui compte directement seulement les incrĂ©ments suivants avec Cloudflare Worker et D1.

Les avantages du blog statique sont restĂ©s tels quels. J’écris en Markdown, je dĂ©ploie avec GitHub Pages, et le coĂ»t de maintenance reste presque nul. En Ă©change, j’ai posĂ© une petite piĂšce sans serveur uniquement sur la partie exacte qui manquait.

Si plus tard je dois prĂ©senter ce blog comme un portfolio, ce genre de travail sera peut-ĂȘtre justement facile Ă  expliquer. Ce n’est pas une fonctionnalitĂ© grandiose, mais elle est partie d’une gĂȘne rĂ©elle, elle a limitĂ© le coĂ»t et la complexitĂ©, et elle a Ă©tĂ© menĂ©e jusqu’à une forme exploitable.

Laisser un commentaire