9.3 KiB
📊 PostHog Analytics - Guide d'Utilisation
🎯 Vue d'ensemble
PostHog est configuré pour tracker automatiquement les événements utilisateurs dans l'application Odentas Espace Paie.
✅ Configuration actuelle
Installation
- Package :
posthog-js(client) +posthog-node(serveur) - Région : EU (https://eu.i.posthog.com)
- Variables d'environnement :
NEXT_PUBLIC_POSTHOG_KEY: Clé API publiqueNEXT_PUBLIC_POSTHOG_HOST: URL du serveur PostHog
Composants créés
-
PostHogProvider (
components/PostHogProvider.tsx)- Initialise PostHog au chargement de l'application
- Active le mode debug en développement
- Expose
window.posthogpour les tests console en dev - Important : Utilise
person_profiles: 'identified_only'- les utilisateurs ne sont créés dans PostHog que lorsqu'ils sont explicitement identifiés
-
PostHogPageView (
components/PostHogPageView.tsx)- Track automatiquement chaque changement de page
- Capture l'URL complète avec query params
-
PostHogIdentifier (
components/PostHogIdentifier.tsx)- Composant clé pour l'identification des utilisateurs ⭐
- Identifie automatiquement les utilisateurs connectés via l'API
/api/me - Associe les propriétés utilisateur (email, nom, company, etc.)
- Réinitialise l'identité lors de la déconnexion
- Note : Si vous ne voyez pas les utilisateurs identifiés dans PostHog, vérifiez que ce composant est bien présent dans votre layout
🔍 Pourquoi les utilisateurs sont anonymes ?
Si vous voyez tous les utilisateurs anonymisés dans PostHog, c'est probablement parce que :
- ❌ Le composant
PostHogIdentifiern'est pas présent dans le layout - ❌ L'API
/api/mene retourne pas les bonnes données (vérifiez la structure JSON) - ❌ L'utilisateur n'est pas authentifié au moment où PostHog charge
- ❌ Les variables d'environnement PostHog sont manquantes
Solution :
- Vérifiez que
<PostHogIdentifier />est bien dansapp/layout.tsx - Ouvrez la console du navigateur et regardez les logs : vous devriez voir
👤 PostHog: Utilisateur identifié: email@example.com - Si vous voyez une erreur, vérifiez que l'API
/api/mefonctionne correctement
📈 Événements trackés automatiquement
Événements système
$pageview: Chaque changement de page$pageleave: Quand l'utilisateur quitte une page$autocapture: Clics et interactions (si activé)
Propriétés utilisateur trackées
Lors de l'identification (connexion) :
email: Email de l'utilisateurfirst_name: Prénomdisplay_name: Nom d'affichage completcompany_name: Nom de la société active (active_org_name)company_id: ID de la société active (active_org_id)is_staff: Membre du staff ou non
🔧 Utilisation avancée
Tracker un événement personnalisé
'use client';
import { usePostHog } from 'posthog-js/react';
function MonComposant() {
const posthog = usePostHog();
const handleAction = () => {
posthog.capture('nom_evenement', {
propriete1: 'valeur',
propriete2: 123,
timestamp: new Date().toISOString()
});
};
return <button onClick={handleAction}>Action</button>;
}
Exemple concret : Tracking de création de contrat ✨
// Après création réussie d'un contrat
posthog?.capture('contract_created', {
contract_type: 'CDDU',
regime: 'CDDU_MONO',
categorie_professionnelle: 'Artiste',
contract_id: contractId,
validation_immediate: true,
});
💡 Voir le guide complet :
POSTHOG_SURVEY_CONTRATS.mdpour la mise en place d'un survey de satisfaction après création de contrats.
Identifier un utilisateur manuellement
posthog.identify('user_id_unique', {
email: 'user@example.com',
name: 'Nom Utilisateur',
plan: 'premium'
});
Tracker une propriété super (persistante)
// Sera ajoutée à tous les événements futurs
posthog.register({
app_version: '1.0.0',
environment: 'production'
});
Réinitialiser l'identité
// À la déconnexion (déjà fait dans LogoutButton)
posthog.reset();
🧪 Tests en développement
Console du navigateur
En mode développement, PostHog est accessible via window.posthog :
// Tester un événement
window.posthog.capture('test_event', { message: 'Hello' });
// Voir l'utilisateur actuel
window.posthog.get_distinct_id();
// Voir les propriétés
window.posthog.get_property('email');
Vérifier les requêtes réseau
- Ouvrez DevTools (F12)
- Onglet Network
- Filtrez par "batch" ou "posthog"
- Les requêtes vers
eu.i.posthog.com/batch/doivent être en status 200
Logs console
Avec le mode debug activé, vous verrez :
[PostHog.js] "capture" {event: "$pageview", properties: {...}}
[PostHog.js] "identify" {distinctId: "user_id", properties: {...}}
📊 Dashboard PostHog
Accès
Vues utiles
- Activity / Live Events : Voir les événements en temps réel
- Persons : Liste des utilisateurs identifiés
- Insights : Créer des graphiques et analyses
- Funnels : Analyser les parcours utilisateurs
- Session Recordings : Voir les replays de sessions (si activé)
Filtres utiles
- Exclure dev :
$current_url does not contain localhost - Voir uniquement staff :
is_staff = true - Par société :
company_name = X
🎯 Cas d'usage recommandés
1. Tracker les actions importantes
// Création d'un contrat
posthog.capture('contrat_created', {
contrat_id: contratId,
type: typeContrat,
montant: montant
});
// Signature d'un document
posthog.capture('document_signed', {
document_type: 'contrat',
document_id: docId
});
// Téléchargement de fiche de paie
posthog.capture('payslip_downloaded', {
month: '2025-10',
employee_id: employeeId
});
2. Groupes (pour analytics par société)
posthog.group('company', companyId, {
company_name: 'Société X',
plan: 'premium',
employees_count: 50
});
3. Feature Flags (A/B testing)
const showNewFeature = posthog.isFeatureEnabled('new_ui_design');
if (showNewFeature) {
// Afficher la nouvelle interface
}
🔒 Confidentialité & RGPD
Données collectées
- Événements de navigation et interactions
- Propriétés utilisateur (email, nom, société)
- Données techniques (navigateur, OS, résolution)
Données NON collectées par défaut
- Mots de passe
- Données sensibles dans les formulaires
- Contenu des documents
Respect du RGPD
- Hébergement EU (GDPR compliant)
- Possibilité d'anonymiser les IPs
- Droit à l'oubli via l'API PostHog
Opt-out utilisateur
// Si l'utilisateur refuse le tracking
posthog.opt_out_capturing();
// Pour réactiver
posthog.opt_in_capturing();
🚨 Troubleshooting
Les événements n'arrivent pas
- ✅ Vérifier que les variables
NEXT_PUBLIC_*sont dans.env.local - ✅ Redémarrer le serveur après modification du
.env.local - ✅ Vérifier la console : doit afficher "✅ PostHog initialisé"
- ✅ Vérifier Network : requêtes
/batch/en status 200 - ✅ Vérifier la clé API dans le dashboard PostHog
❌ Les utilisateurs sont tous anonymes / non identifiés
Symptôme : Dans PostHog, vous voyez des utilisateurs avec des IDs anonymes (ex: anon_xyz123) au lieu des vrais utilisateurs.
Cause : Le composant PostHogIdentifier n'identifie pas correctement les utilisateurs.
Solutions :
-
Vérifier la console du navigateur :
- Vous devriez voir :
👤 PostHog: Utilisateur identifié: email@example.com ID: user-uuid - Si vous voyez une erreur, notez le message
- Vous devriez voir :
-
Vérifier que PostHogIdentifier est dans le layout :
- Ouvrir
app/layout.tsx - Chercher
<PostHogIdentifier /> - Doit être à l'intérieur du
<Providers>ou<PostHogProvider>
- Ouvrir
-
Tester l'API /api/me :
# Dans la console du navigateur (quand vous êtes connecté) fetch('/api/me').then(r => r.json()).then(console.log)- Doit retourner :
{ user: { id: "...", email: "..." }, active_org_id: "...", ... } - Si
user.idest undefined, il y a un problème avec l'API
- Doit retourner :
-
Vérifier la configuration PostHog :
- Dans
PostHogProvider.tsx, vous devez avoir :person_profiles: 'identified_only' - Cela signifie que PostHog ne crée des profils que pour les utilisateurs identifiés explicitement
- Dans
-
Forcer une réidentification :
// Dans la console du navigateur window.posthog.reset(); // Efface l'identité actuelle window.location.reload(); // Recharge la page pour réidentifier
Double initialisation
Si vous voyez "You have already initialized PostHog!", c'est normal en dev (React Strict Mode). En production, cela n'arrive pas.
Événements en retard
PostHog batch les événements pour optimiser les performances. Ils peuvent apparaître avec 5-30s de délai dans le dashboard.
📚 Ressources
Dernière mise à jour : 13 octobre 2025