ContenuPied de page
Roadmaps Faciles
Roadmaps Faciles
BienvenuePremiers pas

Comprendre

Utiliser

Gérer

Technique

Documentation techniqueConfiguration DNSDéploiementSelf-hostingSécuritéTracking & AnalyticsFeature Flags

FAQ
Technique

Tracking & Analytics

Architecture du tracking, plan d'événements AARRI et configuration des fournisseurs (noop, Matomo, PostHog).

Architecture

Le tracking repose sur une abstraction multi-provider dans src/lib/tracking-provider/. Trois fournisseurs sont supportés, sélectionnés via la variable d'environnement NEXT_PUBLIC_TRACKING_PROVIDER :

FournisseurNiveauClientServeurFeature flags
noopnoop———
matomosimplePage views uniquement——
posthogfullEvents, identify, groupEvents, identify, groupOui

Noop par défaut

En développement local, le provider par défaut est noop — aucun événement n'est envoyé. Pour tester le tracking, configurez NEXT_PUBLIC_TRACKING_PROVIDER=posthog avec une clé PostHog valide.

Interfaces

  • ITrackingProvider — côté client : track(), identify(), group(), page(), reset()
  • IFeatureFlagProvider — côté client (PostHog uniquement) : isFeatureEnabled(), getFeatureFlag(), onFeatureFlags()
  • IServerTrackingProvider — côté serveur : track(), identify(), groupIdentify(), shutdown()

Composants React

  • <TrackingProvider> — Context provider client, initialise le fournisseur selon la config
  • useTracking() — Hook client pour accéder au provider
  • <TrackPageView event={...} /> — Composant fire-and-forget pour les page views côté client

Helpers serveur

  • trackServerEvent(distinctId, event) — Fire-and-forget, appelle le provider serveur
  • identifyServerUser(distinctId, traits) — Identifie un utilisateur côté serveur
  • identifyServerGroup(groupType, groupId, traits) — Identifie un groupe côté serveur

Plan de tracking — AARRI

Le plan de tracking suit le framework AARRI Pirate Metrics (méthode beta.gouv) — variante du AARRR classique où Impact remplace Revenue (service public, pas de revenu).

Convention de nommage : entité.verbe_au_passé — ex. post.created, user.signed_up.

1. Acquisition

Événements de découverte de la plateforme.

ÉvénementPropertiesCôtéDescription
docs.page_viewedpath, sectionClientPage de documentation consultée
board.public_viewedboardId, tenantIdClientBoard public consulté sans authentification
embed.viewedboardId, tenantId, referrer?ClientBoard embarqué vu dans une iframe

2. Activation

Premier moment de valeur ("aha!").

ÉvénementPropertiesCôtéDescription
user.signed_upuserId, methodServeurCompte créé
user.first_loginuserId, methodServeurToute première connexion
tenant.createdtenantId, subdomainServeurEspace créé
post.first_createdpostId, boardId, tenantIdServeurPremier feedback soumis
vote.first_castpostId, tenantIdServeurPremier vote

3. Engagement

Profondeur d'utilisation active.

ÉvénementPropertiesCôtéDescription
post.createdpostId, boardId, tenantId, isAnonymousServeurFeedback soumis
post.viewedpostId, boardId, tenantIdClientDétail d'un post consulté
vote.castpostId, tenantIdServeurVote positif
comment.createdpostId, tenantId, isReplyServeurCommentaire ajouté
post.status_changedpostId, tenantId, oldStatus, newStatusServeurStatut modifié par admin/modérateur
board.viewedboardId, tenantIdClientBoard consulté (authentifié)
board.createdboardId, tenantIdServeurBoard créé

4. Retention

Les utilisateurs reviennent (signaux de retour).

ÉvénementPropertiesCôtéDescription
user.signed_inuserId, methodServeurConnexion (chaque login = signal de retour)

5. Referral

Les utilisateurs en amènent d'autres.

ÉvénementPropertiesCôtéDescription
invitation.senttenantId, roleServeurInvitation envoyée
invitation.acceptedtenantId, userIdServeurInvitation acceptée
tenant.domain_configuredtenantId, domainServeurDomaine custom configuré
embed.configuredtenantIdServeurEmbed activé

6. Impact (remplace Revenue)

Valeur créée pour le service public.

ÉvénementPropertiesCôtéDescription
moderation.post_approvedpostId, tenantIdServeurPost approuvé par modération
moderation.post_rejectedpostId, tenantIdServeurPost rejeté par modération
tenant.settings_updatedtenantId, settingServeurSettings mis à jour
member.role_changedtenantId, userId, oldRole, newRoleServeurRôle d'un membre modifié

Configuration

Variables d'environnement

VariableDescriptionExemple
NEXT_PUBLIC_TRACKING_PROVIDERProvider actifnoop, matomo, posthog
NEXT_PUBLIC_POSTHOG_KEYClé projet PostHogphc_...
NEXT_PUBLIC_POSTHOG_HOSTHost PostHog (EU)https://eu.i.posthog.com
NEXT_PUBLIC_MATOMO_URLURL serveur Matomohttps://stats.example.fr
NEXT_PUBLIC_MATOMO_SITE_IDID site Matomo42

PostHog — bonnes pratiques

  • Host EU : toujours utiliser https://eu.i.posthog.com pour la conformité RGPD
  • Session replay : désactivé (privacy by design)
  • Autocapture : activé mais filtré via les attributs data-ph-*
  • Feature flags : disponibles côté client via useTracking().isFeatureEnabled()
  • Cross-integration Sentry : le posthogIntegration() de @sentry/nextjs lie les sessions PostHog aux erreurs Sentry

Consentement DSFR

Le tracking respecte le consentement utilisateur via le composant DSFR ConsentBanner. Les finalités sont configurées dynamiquement selon le provider actif — aucun script de tracking n'est chargé avant consentement explicite.

Sécurité

Modèle de sécurité, isolation des données et mécanismes de protection.

Feature Flags

Système de feature flags intégré pour déployer en continu sans exposer les features non finalisées.

On this page

Architecture
Interfaces
Composants React
Helpers serveur
Plan de tracking — AARRI
1. Acquisition
2. Activation
3. Engagement
4. Retention
5. Referral
6. Impact (remplace Revenue)
Configuration
Variables d'environnement
PostHog — bonnes pratiques
Consentement DSFR