Suivi analytique : Collecte d'événements axée sur la confidentialité
Cet article explique comment nous suivons le comportement des utilisateurs tout en respectant la vie privée et en évitant le trafic des robots.
Le problème : Comprendre le comportement des utilisateur
Nous devons savoir :
-
Quelles pages les utilisateurs visitent
-
Quels produits ils consultent
-
D'où provient le trafic (Google Ads, organique, réseaux sociaux)
-
Quelles campagnes génèrent des conversions
Mais nous devons éviter :
-
Suivre les robots et les crawlers
-
Stocker des informations personnellement identifiables (PII)
-
Enfreindre les réglementations sur la confidentialité
La solution : Suivi côté client + côté serveur
Côté client : Suivi JavaScript
ID Visiteur : ID aléatoire stocké dans un cookie (365 jours)
ID Session : ID aléatoire stocké dans sessionStorage (jusqu'à la fermeture du navigateur)
Paramètres de campagne : Extraits de l'URL et stockés dans sessionStorage
Paramètres suivis :
-
gclid- Google Click ID (Annonces Search) -
gbraid- Google Ads click ID (Annonces Shopping) -
wbraid- Google Ads click ID (iOS) -
fbclid- Facebook click ID -
srsltid- Google organic search result ID -
utm_source,utm_medium,utm_campaign,utm_term,utm_content
Stockage : Les paramètres sont stockés dans des cookies (30 minutes) pour l'attribution des clics WhatsApp/téléphone
Côté serveur : Enrichissement
Le serveur enrichit les événements avec :
Données GeoIP : Pays, région, ville à partir de l'adresse IP
Analyse de l'User-Agent : Navigateur, OS, type d'appareil
Horodatage : Heure serveur (UTC)
Détection de robots : Filtre les user-agents de robots connus
Types d'événements
Consultation de page : L'utilisateur visite une page
Consultation de produit : L'utilisateur consulte une page produit
Ajout au panier : L'utilisateur ajoute un produit au panier
Passage en caisse : L'utilisateur initie le paiement
Achat : L'utilisateur finalise un achat
Clic WhatsApp : L'utilisateur clique sur le bouton WhatsApp
Clic téléphone : L'utilisateur clique sur un numéro de téléphone
Flux de données
sequenceDiagram
participant User
participant JS as JavaScript
participant API as /api/analytics
participant Firehose as Kinesis Firehose
participant S3
User->>JS: Visit page
JS->>JS: Extract URL params
(gclid, utm_*, etc.)
JS->>JS: Store in sessionStorage
JS->>API: POST event + params
API->>API: Enrich with GeoIP
API->>API: Parse User-Agent
API->>API: Filter bots
API->>Firehose: Send enriched event
Firehose->>S3: Store in analytics bucketDétection des robots
Nous filtrons le trafic des robots en utilisant plusieurs signaux :
Modèles d'User-Agent : Chaînes de caractères de robots connus (Googlebot, Bingbot, etc.)
Modèles de comportement : Trop rapide, trop de requêtes
JavaScript manquant : Les robots n'exécutent souvent pas le JS
Cookie d'exclusion : tv_exclude=true arrête tout suivi
Protection de la vie privée
Pas de PII : Nous ne stockons jamais les noms, e-mails, numéros de téléphone
IPs anonymisées : Le dernier octet est supprimé avant le stockage
Pas de suivi inter-sites : Les cookies sont uniquement first-party
Désinscription : Les utilisateurs peuvent définir le cookie d'exclusion
Conservation des données : Les événements sont supprimés après 90 jours
Chargement conditionnel des pixels
Nous ne chargeons les pixels de suivi que lorsqu'ils sont pertinents :
Pixel Google Ads : Uniquement si gclid, gbraid ou wbraid est présent
Pixel LinkedIn : Uniquement si msclkid est présent
Pixel Facebook : Uniquement si fbclid est présent
Avantage : Pages plus rapides à charger, moins de surcharge de suivi
Détection de la source du trafic
Nous détectons la source du trafic à partir des paramètres d'URL :
Google Ads : gclid, gbraid, wbraid → utm_source=google_ads
Google Organique : srsltid → utm_source=google_search
Facebook : fbclid → utm_source=facebook
LinkedIn : msclkid → utm_source=linkedin
Direct : Aucun paramètre → utm_source=direct
Suivi des conversions
Nous suivons les conversions tout au long du tunnel :
Consultation de produit → Ajout au panier → Passage en caisse → Achat
Chaque étape inclut :
-
ID Visiteur (pour l'attribution)
-
ID Session (pour l'analyse de session)
-
Paramètres de campagne (pour le calcul du ROI)
-
SKU du produit (pour l'analyse produit)
Suivi des contacts prospects
Lorsque les utilisateurs nous contactent (WhatsApp, téléphone, e-mail), nous capturons :
Méthode de contact : WhatsApp, téléphone, e-mail
Paramètres de campagne : Provenant des cookies (fenêtre de 30 minutes)
Contexte produit : Sur quelle page produit ils se trouvaient
Avantage : Attribuer les conversions hors ligne aux campagnes en ligne
Limitation du débit
Le point de terminaison analytique est limité en débit :
Limite : 100 requêtes par 10 minutes par IP
Avantage : Empêche les abus et les inondations de robots
Stockage
Les événements sont stockés dans S3 via Kinesis Firehose :
Format : JSON lines (un événement par ligne)
Partitionnement : Par date (année/mois/jour/heure)
Compression : Gzip
Conservation : 90 jours
Interrogation
Les événements sont interrogés via AWS Athena :
Schéma : Défini dans Glue Data Catalog
Requêtes : SQL sur les données S3
Cas d'utilisation : ROI des campagnes, popularité des produits, sources de trafic
Références
Concepts techniques
-
Web analytics - Wikipédia
-
Privacy by design - Wikipédia
Services AWS
-
Kinesis Firehose - Documentation AWS
-
Athena - Documentation AWS
Articles connexes
- Multi-Server Architecture - Où l'analytique s'exécute
Résumé
Notre système analytique suit le comportement des utilisateurs tout en respectant la vie privée :
Côté client :
-
✅ Extraire les paramètres de campagne de l'URL
-
✅ Stocker dans sessionStorage (portée session)
-
✅ Stocker dans les cookies (30 min pour l'attribution)
-
✅ Envoyer les événements à l'API
Côté serveur :
-
✅ Enrichir avec GeoIP et User-Agent
-
✅ Filtrer le trafic des robots
-
✅ Envoyer vers Kinesis Firehose
-
✅ Stocker dans S3 (partitionné par date)
Confidentialité :
-
✅ Pas de PII stockée
-
✅ IPs anonymisées
-
✅ Cookies first-party uniquement
-
✅ Désinscription disponible
-
✅ Conservation de 90 jours
Chargement conditionnel :
-
✅ Pixel Google Ads uniquement si gclid présent
-
✅ Pixel LinkedIn uniquement si msclkid présent
-
✅ Pixel Facebook uniquement si fbclid présent
Cette approche équilibre les insights avec la confidentialité et les performances.