Aller au contenu

Réalisation

Des statistiques auto-hébergées, sans cookie ni service tiers

maxa-analytics est l'outil que j'ai écrit pour mesurer mes propres sites, maxadev.fr compris. Il sert ici de démonstration : le nom est à moi, la mécanique se transpose.

0

cookie déposé chez vos visiteurs

Le problème de départ

J'avais plusieurs sites à suivre (maxadev.fr, maxa-movies, maxence-os) et trois endroits pour le faire. Les statistiques de maxadev.fr chez Google, derrière un bandeau cookies, donc sans les visiteurs qui refusent les cookies. Les logs du serveur, dans un terminal. Et les pannes, que je risquais d'apprendre par quelqu'un d'autre.

Chacun ne voyait qu'une partie de l'histoire. Quand le site ne répond plus, la page ne s'affiche pas et la visite n'est pas comptée : la courbe baisse sans dire pourquoi. Et la plupart des robots, qui n'exécutent pas le script de mesure, manquent aux statistiques alors qu'ils remplissent les logs. Croiser les deux à la main, c'est le genre de vérification qu'on remet à plus tard.

Ce qui a été construit

Un seul outil, installé sur mon serveur. Sur chaque site, un script de moins de 3 Ko une fois compressé, ou un connecteur Next.js, Nuxt ou Node, y compris pour Electron. Le tableau de bord montre les pages, les sources (jusqu'aux visites envoyées par ChatGPT ou Claude), les clics, les parcours, les entonnoirs et l'activité en temps réel. Le tout sans cookie ni identifiant persistant.

À côté, un petit agent expédie les logs de Nginx Proxy Manager, le reverse proxy placé devant les sites. Le tableau de bord y lit ce qui échappe au script : robots, erreurs, scanners en quête d'un fichier .env ou d'une installation WordPress, avec une fiche par adresse IP. Des alertes réglées au curseur arrivent sur mon iPhone et ouvrent la fiche de l'incident.

La démonstration

Des visiteurs aux logs du serveur, jusqu'aux questions posées en conversationVidéo sans son · 1 min 45 · données de démonstration

Les choix techniques, et pourquoi

Trois décisions structurantes, prises pour que l'outil reste léger, respectueux de vos visiteurs et chez vous.

Un conteneur, une base SQLite

Le tableau de bord et la collecte tiennent dans un seul conteneur, avec une base SQLite. Pas de CDN, pas de pixel : aucun service tiers ne s'intercale entre vos visiteurs et vos statistiques, les données restent sur votre serveur, et vous ne dépendez d'aucun éditeur pour continuer à y accéder.

Sans cookie, par construction

Rien n'est déposé dans le navigateur. Le visiteur est compté grâce à un identifiant haché avec un sel qui change chaque jour et qui est détruit au bout de deux jours. L'adresse IP n'est jamais écrite sur les pages vues ni sur les événements : seule la session garde celle de son début, pour le diagnostic, 30 jours par défaut, puis l'efface, et un réglage permet de ne jamais la stocker.

Serveur MCP protégé par OAuth 2.1

Le serveur MCP est intégré à l'outil : Claude, ou tout autre client MCP, interroge en conversation les statistiques de vos sites et les logs de votre reverse proxy, sans export à faire ni API publique à exposer. La vidéo montre trois de ces conversations, dont « Où est-ce que je perds mes acheteurs ? » et « Fais-moi le point de la semaine ».

Ce que ça change à l'usage

Quand une courbe baisse, la vue serveur du site met les réponses du proxy, erreurs comprises, face aux pages vues : on voit si l'audience recule ou si le site ne répond plus. Et, si les alertes sont activées, une série d'erreurs serveur déclenche une notification sur mon iPhone, preuves à l'appui, avant qu'un visiteur ait à signaler le problème.

maxadev.fr est lui-même mesuré par cet outil, et par lui seul, avec l'accord de ses visiteurs : ni cookie, ni Google Analytics, ni grand agrégateur de données. Les chiffres MaxaDev de la vidéo, eux, sont fictifs, comme le reste de la démonstration.

La même mécanique, pour votre cas

Le nom est à moi, la mécanique non. Garder chez soi une donnée qu'on confie d'habitude à un tiers, la croiser avec les traces qui existent déjà, être prévenu quand un seuil est franchi, et pouvoir l'interroger en conversation : ça vaut pour l'audience d'un site comme pour autre chose.

Ce que je livre, c'est l'outil taillé pour votre cas, l'hébergement, et le code source. Si vos statistiques dépendent d'un bandeau cookies, ou si vous apprenez vos pannes par vos clients, c'est probablement par là qu'il faut commencer.

  • Statistiques sans cookie pour les sites de vos clients
  • Suivi d'usage d'une application web ou de bureau
  • Supervision de serveurs et alertes sur mobile
  • Indicateurs métier interrogeables en langage naturel

Questions fréquentes

  • Non. C'est l'outil que j'utilise pour mes propres sites, montré ici comme démonstration de ce qui est faisable. Ce que je livre, c'est un outil construit pour votre cas d'usage, avec son hébergement et son code source.
  • On y retrouve les usages courants : pages, sources et campagnes UTM, événements, parcours, entonnoirs et temps réel. La différence tient à ce que l'outil ne fait pas : aucun cookie, aucun usage publicitaire, aucune donnée de visiteur transmise à un tiers pour la mesure. Et la vue serveur ajoute ce qu'un outil de statistiques classique ne voit pas.
  • L'outil est conçu pour se passer de cookie et d'identifiant persistant, et la collecte ne passe par aucun service tiers. La CNIL prévoit une exemption de consentement pour certaines mesures d'audience, mais elle dépend de la configuration (conservation des adresses IP, rapprochement avec les logs du serveur, contenu des événements envoyés) et de l'usage. C'est au responsable du site de trancher ; je documente précisément ce qui est stocké, et pendant combien de temps.
  • Le script ne voit que les navigateurs qui l'exécutent. Le reverse proxy, lui, voit tout passer, y compris les robots, les scanners et les erreurs 5xx quand l'application ne répond plus. Ces logs existent déjà : un agent les expédie depuis Nginx Proxy Manager. Leur détail, adresses IP comprises, est gardé 14 jours par défaut, puis il ne reste que des totaux horaires, sans adresse IP.
  • MCP est le protocole qui permet à un assistant comme Claude d'interroger une application. Ici, le serveur MCP est intégré à l'outil et protégé par OAuth 2.1 : vous demandez en conversation pourquoi vos ventes ont décroché, où vous perdez vos acheteurs ou comment s'est passée la semaine, et l'assistant va chercher la réponse dans vos statistiques et vos logs. Ce qu'il consulte est transmis au modèle qui l'anime : sur des données sensibles, mieux vaut un modèle qui tourne sur votre propre machine.