Aller au contenu

Installer le tracking en 5 minutes

Dans le dashboard Elvn, créez le site (menu Sites → New site) avec son domaine réel (ex. blog.exemple.fr), puis ouvrez Settings → Tracking : le snippet y est généré tout prêt avec votre identifiant public.

Le snippet standard :

<script defer src="https://elvn.live/js/t.js" data-site="SITE_PUBLIC_ID"></script>
  • SITE_PUBLIC_ID est l’identifiant public du site, affiché à sa création et dans Settings → Tracking. Il n’est pas secret, mais il est propre à chaque site.
  • Le script pèse ~1,5 Ko min+gzip, sans dépendance, entièrement sous try/catch silencieux : il ne peut pas casser votre page.

Collez-le avant </head>, sur toutes les pages du site. Selon votre stack : le layout global (Next.js, Astro, SvelteKit…), le template de base (base.html, app.blade.php…), ou le <head> de chaque fichier HTML. Le guide pour agents IA donne l’emplacement exact framework par framework.

Deux points d’attention :

  • Une seule occurrence du script par page.
  • SPA : rien à configurer — les navigations pushState/replaceState sont suivies automatiquement.

Si votre site applique une CSP, autorisez uniquement :

  • script-src : https://elvn.live ;
  • connect-src : https://elvn.live (endpoint POST /api/e).

Déployez, puis visitez une page du site (depuis le domaine réel, pas localhost). Sous ~30 à 60 secondes :

  • l’encart « en attente du premier événement » de Settings → Tracking passe au vert ;
  • votre visite apparaît dans la vue Realtime du site.

Vérification côté réseau (onglet Network du navigateur) : une requête POST https://elvn.live/api/e doit partir au chargement et recevoir un 202 avec un corps vide.

En ligne de commande :

Fenêtre de terminal
# le script doit être servi (200, text/javascript, ETag)
curl -sI https://elvn.live/js/t.js | head -5
# l'endpoint répond TOUJOURS 202, même à un payload invalide (voir ci-dessous)
curl -s -o /dev/null -w "%{http_code}\n" -X POST https://elvn.live/api/e --data '{}'

POST /api/e répond toujours 202 avec un corps vide, même quand l’événement est rejeté : c’est volontaire (aucun oracle pour les scanners). Un 202 ne prouve donc pas que l’événement a été compté. Il est rejeté en silence quand :

  • le data-site est inconnu ou le site désactivé ;
  • le domaine visité ne correspond pas au domaine déclaré du site dans le dashboard (les sous-domaines du domaine déclaré sont acceptés). C’est l’erreur nº 1 : vérifiez que le domaine du site Elvn est exactement celui servi en production ;
  • le navigateur envoie le signal GPC (Sec-GPC: 1) et que le site le respecte (option activée par défaut) ;
  • la requête vient d’un bot ou dépasse le rate limit (100 evt / 10 s par site + IP).

La seule vérité : l’événement visible dans Realtime.

C’est normal : le tracker reste muet sur localhost / 127.x / [::1], sauf si vous ajoutez l’attribut data-dev au script. Testez depuis le domaine réel, ou ajoutez data-dev temporairement (voir la référence du tracker).

Les listes type EasyPrivacy bloquent les domaines d’analytics connus : une partie de vos visiteurs (public tech surtout) sera invisible avec le snippet standard. La parade : servir le script et l’endpoint depuis votre propre domaine — voir Proxy first-party.

Automatisation (navigator.webdriver), page dans une iframe, visiteur ayant activé l’opt-out (localStorage.elvn_ignore === "true"). Détail complet : référence du tracker.