Skip to main content

Analytics de fréquentation enrichi (appareils, referrers), anonymisation IP partielle, et un bug de consentement cookies corrigé

Équipe Digitalisation UTB
Frontend, Backend & Backoffice

Le système d'enregistrement des visites (visitor_logs, /api/analytics) gagne trois nouvelles dimensions — type d'appareil, source de trafic, langue — et une anonymisation basique de l'IP. En parallèle, un bug faisait que le bandeau cookies ne trackait jamais un visiteur ayant choisi "Personnaliser" avec Analytics activé.

Ce qui change côté analytics​

  • Trois colonnes ajoutées à visitor_logs : referrer, screen_resolution, language.
  • GET /api/analytics/stats renvoie désormais aussi une répartition par appareil (Ordinateur/Tablette/Mobile) et un top 5 des referrers.
  • L'IP est anonymisée par zérotage du dernier octet (192.168.1.123 → 192.168.1.0) — IPv4 uniquement, une IPv6 est stockée telle quelle.

Détail complet : Analytics de fréquentation (nouvelle page). Ce système n'a aucun rapport avec /api/tracking (suivi de dossier par ticket) malgré le nom proche.

Le bug cookies corrigé​

Un visiteur choisissant "Personnaliser" puis activant seulement la catégorie Analytics n'était en fait jamais tracké — le code ne vérifiait que le cas "Tout accepter". Corrigé. Détail : Consentement cookies (nouvelle page, à ne pas confondre avec les consentements légaux du formulaire de prêt scolaire).

À garder en tête​

GET /api/analytics/stats reste accessible sans authentification — le code le signale lui-même comme provisoire. Peu sensible (pas de données personnelles) mais à corriger si ces statistiques doivent rester internes.

Petit bug de code repéré au passage : le filtre du top 5 referrers (referrer: { not: null, not: '' }) a une clé JS dupliquée — seule la seconde survit, donc les visites sans referrer (null) ne sont en fait pas exclues du classement, contrairement à l'intention du code.

Pages de doc à jour​

Analytics de fréquentation (nouvelle page), Consentement cookies (nouvelle page), Consentements légaux.