Une surface réduite, des fondations de niveau infrastructure.
WebmasterID est un monorepo pnpm et Turborepo, avec du TypeScript strict partout. Chaque brique est délibérément petite et remplaçable ; rien n’est magique. Cette page parcourt le système de bout en bout.
Six éléments composent le produit.
Traceur du navigateur
Petit script IIFE (environ 3 KB minifié) chargé depuis /tracker.iife.min.js. Il déclenche page_view au premier rendu, s’accroche à history.pushState, replaceState et popstate pour la navigation en SPA, et expose une API window.WebmasterID typée.
API d’ingestion
Fastify sur des fonctions Vercel. Elle valide les événements avec Zod, classe la source de trafic, détecte les bots d’IA et de recherche, anonymise l’adresse IP et écrit dans Postgres. Elle accepte aussi bien application/json que text/plain.
PostgreSQL via Supabase
Schéma Drizzle avec deux tables distinctes, events et bot_visits. Les secrets wmsk_ ne sont conservés que sous forme d’empreintes SHA-256. La valeur en clair s’affiche une seule fois, à la création du site, et jamais ensuite.
Détection des bots d’IA et de recherche
Les robots d’exploration reconnus (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, Applebot, Bingbot, Meta-ExternalAgent, CCBot, etc.) sont dirigés vers bot_visits, jamais vers events. Les agrégats humains restent propres.
Tableau de bord de l’opérateur
Tableau de bord Next.js rendu côté serveur. Le filtre de site et de période passe par les paramètres de l’URL ; six pages : Vue d’ensemble, Sites, Événements, Visibilité dans l’IA, Campagnes et Diagnostic.
API d’événements côté serveur
POST /api/server/events accepte des événements de serveur à serveur, avec un token Bearer wmsk_ validé contre son empreinte SHA-256. Vos back-ends peuvent ainsi enregistrer des événements que le navigateur ne verrait jamais.
Un chemin réseau discret.
Pourquoi text/plain
navigator.sendBeacon avec un corps de requête textuel fixe le Content-Type à text/plain;charset=UTF-8, un type MIME de la liste sûre CORS. Pas de préflight, pas de surface CORS avec identifiants, pas de négociation avec les couches CORS de la plateforme.
Pourquoi le traceur est servi depuis la même origine
Le traceur est servi depuis l’origine du site public. Vous pouvez l’héberger vous-même si vous le préférez ; l’extrait d’installation tient en une seule balise <script> avec deux attributs data-*.
Pourquoi l’adresse IP est anonymisée
Le dernier octet des adresses IPv4 est mis à zéro et les IPv6 sont tronquées en /48. Une résolution suffisante pour repérer des vagues de bots et une géographie approximative ; insuffisante pour identifier une personne en particulier.
Pourquoi il n’y a pas de cookies
WebmasterID n’a aucune notion de visiteur récurrent d’un site à l’autre. Il n’y a rien que le produit ferait avec un cookie et qu’il ne puisse faire sans, donc il n’y a pas de cookie.
Une seule balise de script.
Installer WebmasterID revient à ajouter une balise <script> avec deux attributs de données : data-wmid (votre site_id) et data-endpoint (l’URL d’ingestion). Les sites qui l’installent restent responsables de leur propre parcours de consentement ; WebmasterID n’enveloppe pas le traceur dans un SDK de consentement par défaut.
Le fichier du traceur est servi avec un en-tête Cache-Control de cinq minutes. C’est exactement l’artefact construit à partir de packages/tracker-js dans ce monorepo.
L’organisation du dépôt.
| Chemin | Rôle |
|---|---|
| /apps/web | Site public — celui que vous lisez |
| /apps/dashboard | Tableau de bord de l’opérateur |
| /apps/ingest-api | Ingestion des événements, avec Fastify |
| /packages/tracker-js | Traceur du navigateur, en IIFE et en ESM |
| /packages/sdk-next | Composant d’intégration pour Next.js |
| /packages/database | Schéma Drizzle sur PostgreSQL |
| /packages/shared | Types, schémas Zod, identifiants |
| /packages/privacy | Anonymisation de l’IP, DNT, consentement, rétention |
| /packages/ai-visibility | Détection des bots et trafic issu de l’IA |
| /packages/seo-intelligence | Classification des moteurs de recherche et des référents |
À lire aussi
- Analyse sans cookies
Ce qui est collecté et ce qui ne l’est pas, dans le détail.
- Visibilité dans l’IA
Comment les visites humaines venues de l’IA et celles des robots restent sur deux voies distinctes.
- Philosophie du produit
Pourquoi ces choix ont été faits.
- Supervision de site
Ce qui se construit par-dessus cette architecture.