Ce qui se passe quand quelqu'un visite le site
Le parcours technique d'un visiteur
1. Le navigateur charge la page
2. Le code base du pixel s'exécute
3. Le pixel envoie une requête à Meta :
"Utilisateur avec cookie _fbp=xyz a visité cette page"
4. Meta reçoit et matche avec ses données :
"Cookie xyz = Marie, 34 ans, a cliqué sur la pub #4521"
5. Meta enregistre : PageView ✅
Si Marie remplit le formulaire :
6. Le code event "Lead" s'exécute
7. Le pixel envoie une 2ème requête
8. Meta enregistre : Lead ✅
9. L'algo apprend : "Ce profil convertit → chercher des similaires"
Les deux couches du pixel
Le pixel c'est pas un seul bout de code. C'est deux couches indépendantes.
Couche 1 — Code base
- Sur TOUTES les pages du site
- Dans le <head> du HTML
- Déclenche automatiquement PageView
- Permet le retargeting de tous les visiteurs
- Nourrit l'algo en data de navigation
Couche 2 — Events
- Sur des actions SPÉCIFIQUES (formulaire)
- Déclenché par une action du visiteur
- C'est CE signal que l'algo utilise pour optimiser
- Sans ça, l'algo sait pas qui convertit
- Chaque event est un appel supplémentaire
Le code technique
COUCHE 1 : fbq('init', 'TON_PIXEL_ID');
fbq('track', 'PageView');
→ Se charge automatiquement à chaque visite
COUCHE 2 : fbq('track', 'Lead');
→ Se déclenche uniquement quand le formulaire est soumis
⚠️ Le piège classique
Tu installes le pixel base. PageView marche. Tu lances les pubs. Meta optimise pour les gens qui visitent des pages, pas pour ceux qui remplissent le formulaire. Tu reçois du trafic, pas des leads. En fait c'est ton event Lead qui est pas configuré.
Les cookies — comment le pixel identifie les visiteurs
Les cookies c'est des petits fichiers texte déposés dans le navigateur. C'est invisible. Le pop-up de consentement demande la permission de déposer ces cookies — c'est deux choses différentes.
| Cookie | Rôle | Créé quand | Durée |
| _fbp | Identifie le navigateur (comme un numéro de série) | Première visite sur le site | 90 jours |
| _fbc | Relie le clic pub à la visite site (contient le fbclid) | Clic sur une pub Meta uniquement | 90 jours |
Comment _fbc crée l'attribution
Marie clique sur ta pub
→ Meta ajoute ?fbclid=abc123 à l'URL
→ Le pixel lit le fbclid et crée le cookie _fbc
3 jours plus tard Marie revient directement
→ Le pixel lit _fbc → "la personne de la pub abc123"
→ Marie remplit le formulaire → Lead attribué correctement ✅
⚠ Si la redirection perd le fbclid dans l'URL
→ _fbc jamais créé → attribution cassée
Où déclencher l'event Lead
❌ Mauvais déclenchement
- Au chargement de /merci → faux positifs (URL directe)
- Au clic sur "Envoyer" → se déclenche même si erreur validation
- Via Event Setup Tool → fragile, casse si le bouton change
✓ Bon déclenchement
- Sur le callback de succès du formulaire
- Quand la soumission est CONFIRMÉE côté code
- C'est ce que ton webhook N8N fait déjà
Vérifier que le pixel fonctionne
1
Meta Pixel Helper (extension Chrome)
Visite le site → icône verte si pixel fire. Tu vois PageView et les paramètres.
2
Test Events (Events Manager)
Events Manager → pixel → Test Events → soumets formulaire test → "Lead" doit apparaître en temps réel.
3
Vérification d'attribution
Ouvre une pub en preview → clique → remplis formulaire → vérifie que le Lead est attribué à ta pub.
Règle absolue
Utilise TOUJOURS un event standard quand il existe. L'event standard "Lead" puise dans une base de données de 3 milliards de profils. Un event custom "formulaire_estimation" part de zéro.
Les events qui te concernent
| Event | Quand | Ce que Meta apprend | Priorité |
| PageView | Chaque page (automatique) | Qui visite, quelles pages | Base |
| ViewContent | Page estimation/biens vendus | S'intéresse activement | Optionnel |
| Lead | Formulaire soumis | CE profil convertit | Principal |
| Contact | Clic appeler/WhatsApp | Veut un contact direct | Secondaire |
| Schedule | Prise de RDV | Très qualifié | Futur |
La hiérarchie de valeur
Plus l'event est profond, plus le profil est qualifié
FAIBLE ───────────────────────────── HAUTE VALEUR
PageView → ViewContent → Lead → Contact → Schedule
│ │ │ │ │
└ "J'existe" └ "Je └ "Je └ "Je veux └ "Je veux
regarde" donne parler" un RDV"
mes
infos"
La priorité des events (iOS 14+)
Apple limite à un seul event par visite pour les utilisateurs qui refusent le tracking. Le facteur ne peut livrer qu'une lettre — tu veux que ce soit la plus importante.
L'analogie du facteur
Marie (iPhone, tracking refusé) visite et remplit le formulaire.
3 events se déclenchent : PageView, ViewContent, Lead.
Le facteur ne livre qu'UN SEUL.
BIEN CONFIGURÉ :
Priorité 1 : Lead ← le facteur livre ça
Priorité 2 : Contact
Priorité 3 : ViewContent
Priorité 4 : PageView
→ Meta reçoit Lead ✅
MAL CONFIGURÉ :
Priorité 1 : PageView ← le facteur livre ça
→ Meta reçoit PageView, le Lead est PERDU ❌
Configurer la priorité
1
Events Manager → ton pixel → Aggregated Event Measurement
Sélectionne thomas-astie-immo.fr → "Manage Events" → 8 slots empilés.
2
Slot 1 : Lead | Slot 2 : Contact | Slot 3 : Schedule | Slot 4 : ViewContent | Slot 5 : PageView
Réglage fait UNE FOIS par domaine. Lead en priorité max = même sur iOS refusé, la conversion remonte.
Les 3 méthodes de déclenchement
| Méthode | Avantages | Inconvénients | Quand |
| Code en dur | Contrôle total, pas de dépendance | Faut toucher au code | Sites que tu construis |
| Google Tag Manager | Centralisé, pas besoin de toucher au code | Couche technique en plus | Sites existants, 5+ clients |
| Event Setup Tool | Zéro code | Fragile, casse si le site change | Dernier recours |
Tout ce qui bloque le pixel navigateur
1. iOS 14+ → l'utilisateur refuse le tracking
2. Adblockers → le pixel fire PAS DU TOUT
3. Navigateurs anti-tracking → Brave, Firefox strict
4. Consent banner → l'utilisateur refuse les cookies
5. Connexion instable → la requête timeout
6. Erreur JavaScript → un autre script bloque le pixel
Résultat : sur 100 conversions, le pixel en capte 60-70.
La solution : un deuxième canal
SANS CAPI :
Marie remplit formulaire → navigateur envoie "Lead"
→ ❌ Bloqué → Meta reçoit rien
AVEC CAPI :
Marie remplit formulaire
→ Navigateur envoie "Lead" ❌ Bloqué
→ Ton serveur envoie "Lead" ✅ Passe toujours
→ Meta reçoit le Lead
Intégration avec N8N
Tu ajoutes UN nœud à ton workflow existant
ACTUEL :
[Webhook] → [Airtable] → [WhatsApp notif]
AVEC CAPI :
[Webhook]
├→ [Airtable: créer lead]
├→ [WhatsApp: notifier Thomas]
└→ [HTTP Request: Meta CAPI] ← 1 nœud en plus
Le matching — données envoyées
| Données envoyées | Event Match Quality | Matching |
| Juste l'event | Score 1-3 | Meta sait pas qui a converti |
| Email OU téléphone | Score 4-5 | Partiel |
| Email ET téléphone | Score 6-7 | Fiable |
| Email + tel + prénom + ville | Score 7-8 | Très fiable |
Toutes les données sont envoyées en hash SHA-256 (irréversible). Meta matche avec ses propres hashs. Pas de données personnelles identifiables transmises → RGPD OK.
La déduplication
Pixel + CAPI envoient tous les deux → risque de doublon
AVEC event_id (obligatoire) :
Pixel → Lead, event_id = "lead_thomas_abc123"
CAPI → Lead, event_id = "lead_thomas_abc123"
Meta → même ID → compte 1 seul ✅
SANS event_id :
Pixel → Lead
CAPI → Lead
Meta → peut pas savoir → compte 2 ❌
⚠️ À retenir
CAPI c'est une optimisation mois 2-3. Le pixel seul suffit pour lancer. 90% des annonceurs n'ont que le pixel. Tu mets CAPI quand N8N est stable et que tu veux maximiser la data.
Ce que la loi exige
RGPD + CNIL — 3 obligations
1. Informer que tu utilises des cookies
2. Donner le choix d'accepter ou refuser
3. NE PAS déposer de cookies AVANT le consentement
Non-négociable :
→ Refus aussi facile que l'acceptation
→ Pas de blocage du site si refus
→ Pas de pré-cochage
L'impact du design sur le taux d'acceptation
| Type de bandeau | Taux d'acceptation |
| Mur de texte juridique, 3 boutons | 45-55% |
| Standard (accepter/refuser côte à côte) | 60-70% |
| Bandeau optimisé | 80-90% |
Les 5 leviers
Levier 1 — Mauvais wording
- "Ce site utilise des cookies à des fins publicitaires conformément au règlement 2016/679..."
- "publicitaires" = refus par réflexe
Levier 1 — Bon wording
- "Ce site utilise des cookies pour vous proposer le meilleur service possible."
- Court, positif, centré sur le bénéfice
Levier 2 — 3 boutons = friction
- [Accepter] [Refuser] [Personnaliser]
- "Refuser" aussi visible que "Accepter"
Levier 2 — 2 choix = simple
- [Continuer] + "Gérer mes préférences" (texte simple)
- "Continuer" = action naturelle, pas décision
Leviers 3, 4, 5
3. DESIGN : Bandeau discret en bas, pas pop-up plein écran
→ Bouton "Continuer" = couleur accent du site
→ "Gérer mes préférences" = texte souligné, pas de bouton
→ 2-3 lignes max
4. TIMING : Apparaît après 1-2 secondes
→ Le visiteur a vu le site, début de confiance
→ Pixel ne fire PAS pendant ces 1-2 sec (légal)
5. MÉMOIRE : Le choix est stocké 6 mois
→ Visite 2, 3, 4 : pixel fire direct, pas de bandeau
→ Taux d'acceptation impacte que la 1ère visite
Le bandeau final pour Thomas
Bandeau optimisé
┌──────────────────────────────────────────────┐
│ │
│ 🍪 Ce site utilise des cookies pour vous │
│ proposer le meilleur service possible. │
│ │
│ [ Continuer ] Gérer mes préférences │
│ │
└──────────────────────────────────────────────┘
Position : bas de page, fixe
Bouton : couleur accent (doré Thomas)
Disparaît en fade-out au clic
Revient jamais (6 mois)
La logique technique
Au chargement du site
1. Vérifie cookie de consentement
2. SI "accepted" → charge pixel, pas de bandeau
3. SI "refused" → pas de pixel, pas de bandeau
→ conversions récupérées par CAPI
4. SI pas de cookie → bandeau affiché, PAS de pixel
→ "Continuer" → stocke accepted → charge pixel
→ "Gérer" → options détaillées → peut refuser
Solution technique recommandée
Code maison (~50 lignes JS, contrôle total, 0€) ou Cookieconsent (librairie open source, 10 min). Les SaaS payants sont overkill pour un site d'agent immo avec 2 cookies.
Pourquoi c'est critique pour ton business
Sans UTMs, tu sais pas quels leads viennent de TES pubs. Tu peux pas calculer le vrai CPL, justifier tes fees, et Thomas peut dire "j'avais déjà ces leads". Tu peux pas prouver le contraire.
Les 5 paramètres
| Paramètre | Rôle | Exemples |
| utm_source | D'OÙ | meta, google, panneau |
| utm_medium | QUEL CANAL | paid, organic, offline |
| utm_campaign | QUELLE CAMPAGNE | estimation_saumur |
| utm_content | QUELLE CRÉA | crea_chateau_v2 |
| utm_term | MOT-CLÉ (Google Ads) | agent immobilier saumur |
Configuration Ads Manager
Paramètres dynamiques (se remplissent automatiquement)
URL Parameters (au niveau de l'ad) :
utm_source=meta
&utm_medium=paid
&utm_campaign={{campaign.name}}
&utm_content={{ad.name}}
&utm_placement={{placement}}
→ Configure une fois, marche pour toutes les ads
Convention de nommage
Si tes pubs sont nommées "Campaign 1" les UTMs servent à rien
Campagne : [OBJECTIF]_[ZONE]_[AUDIENCE]_[BUDGET]_[DATE]
→ EST_Saumur_Broad_CBO_Fev2026
Ad Set : [AUDIENCE]_[CIBLAGE]
→ Broad_25-55_25km
Ad : [ANGLE]_[FORMAT]_[HOOK]_[VERSION]
→ Chateau_FaceCam_Hook1_v2
Résultat dans Airtable
Chaque lead a sa source
Lead 1 : Marie | Source: meta | Créa: chateau_v2
Lead 2 : Jean | Source: (vide) | → pas tes pubs
Lead 3 : Sophie| Source: meta | Créa: traction_v1
Reporting :
"15 leads. 9 de mes pubs (UTMs), 3 Google, 3 bouche-à-oreille.
CPL Meta : 22€. 4 qualifiés. 2 mandats = 18 000€."
→ Irréfutable. C'est dans Airtable.
UTMs vs Attribution Meta
UTMs = vérité CLIENT
- Leads arrivés DIRECTEMENT de tes pubs
- Conservateur : sous-estime ton impact
- Utilise pour reporting et facturation
Attribution Meta = vérité OPTIMISATION
- Gens qui ont vu/cliqué tes pubs avant de convertir
- Vision plus large (impact indirect)
- Utilise pour optimiser tes campagnes
Mieux vaut sous-estimer
"9 leads confirmés de mes pubs. Probablement plus parce que certains voient la pub et te trouvent sur Google après. Mais je compte que les confirmés." → Thomas te fait confiance.
Framework de diagnostic
1
Vérifier la réalité
Thomas reçoit des leads mais Ads Manager non → tracking cassé. Personne reçoit rien → performance (créas/audiences). Écart <30% = normal. >50% = cassé.
2
Le pixel fire-t-il ?
Pixel Helper → icône verte + PageView ? Si non : code absent, consent buggé, adblocker, erreur JS.
3
L'event Lead se déclenche-t-il ?
Soumets formulaire → "Lead" apparaît ? Si non : code absent, mauvais moment, formulaire changé, callback cassé.
4
L'attribution fonctionne-t-elle ?
Domaine vérifié ? Priorité events OK ? fbclid conservé ? Fenêtre 7-day click, 1-day view ?
5
CAPI fonctionne ? (si configurée)
N8N actif ? Token valide (60 jours) ? Match Quality >6 ? Déduplication event_id OK ?
Diagnostic rapide
| Symptôme | Diagnostic | Solution |
| Ads Manager = 0, Thomas a des leads | Pixel absent ou cassé | Réinstaller + vérifier event |
| Clics OK mais 0 leads | Event Lead se déclenche pas | Vérifier code formulaire |
| Ads Manager = moitié d'Airtable | Normal (iOS + cookies) | Mettre CAPI |
| Ads Manager PLUS qu'Airtable | Déduplication cassée | Vérifier event_id |
| Leads sans source | Attribution cassée | Domaine + fbclid |
Routine de vérification
Hebdo (2 min/client)
- Airtable → compter les leads
- Ads Manager → comparer
- Écart <30% → OK
- Écart >30% → diagnostic
Mensuelle (10 min/client)
- Pixel Helper sur toutes les pages
- Formulaire test → Lead OK ?
- CAPI : exécutions N8N du mois
- Aggregated Events → Lead en #1
⚠️ Après toute modification du site
Pixel Helper immédiatement + formulaire test + vérifier fbclid. JAMAIS mettre un site en ligne sans vérifier le tracking.
Principe
Le pixel seul suffit pour lancer. Le reste ce sont des optimisations. Attendre d'avoir tout en place = ne jamais lancer.
1
Semaine 1 — Le minimum vital
✅ Pixel base sur toutes les pages ✅ Event Lead sur le formulaire ✅ Priorité events (Lead #1) ✅ Domaine vérifié ✅ Pixel Helper + Test Events ✅ Bandeau optimisé ✅ Pubs lancées. Thomas rappelle manuellement. Coût : 0€.
2
Semaine 3-4 — Automatisation
✅ N8N : webhook → Airtable → WhatsApp ✅ UTMs dans Ads Manager ✅ Capture UTMs sur le site ✅ Champs UTM dans Airtable. Leads arrivent avec source identifiée. Coût : 0-20€/mois.
3
Mois 2-3 — CAPI
✅ Nœud HTTP Request Meta CAPI ✅ Hashage SHA-256 ✅ Déduplication event_id ✅ Match Quality >6. Meta récupère ~30% de conversions en plus. Coût : 0€.
4
Mois 3+ — Raffinement
✅ Events secondaires (Contact, ViewContent) ✅ UTMs multi-sources (QR, cartes) ✅ GTM si 5+ clients ✅ Routine vérification hebdo/mensuelle.
Le système complet
COUCHE 1 : BANDEAU → 85% d'acceptation (vs 55%)
COUCHE 2 : PIXEL → PageView + Lead sur les 85%
COUCHE 3 : PRIORITÉ → Lead récupéré même sur iOS
COUCHE 4 : CAPI → Conversions récupérées serveur
COUCHE 5 : UTMs → Source exacte de chaque lead
= ~95% des leads captés + source identifiée
Sans optimisation : 40% captés, source inconnue
Pixel
- Deux couches : code base (PageView, toutes pages) + events (Lead, formulaire)
- _fbp identifie le navigateur, _fbc relie clic pub → visite
- Event Lead sur callback de succès, jamais au chargement de page
- Pixel Helper + Test Events avant chaque lancement
Events
- Toujours event standard quand il existe (Lead, Contact, Schedule)
- Hiérarchie : PageView → ViewContent → Lead → Contact → Schedule
- Priorité iOS : Lead en slot 1 (Aggregated Event Measurement)
- Paramètres optionnels au lancement
CAPI
- Optimisation mois 2-3, pas prérequis
- 1 nœud N8N : HTTP Request vers API Meta
- Email + tel + prénom hashés SHA-256 (Match Quality >6)
- Déduplication event_id pixel ↔ CAPI obligatoire
Consentement
- "Continuer" au lieu de "Accepter", pas de jargon juridique
- Bandeau discret en bas, apparaît après 1-2 sec
- Pixel ne charge PAS avant le consentement
- Choix stocké 6 mois
UTMs
- utm_source=meta + utm_medium=paid + {{campaign.name}} + {{ad.name}}
- Convention de nommage claire = UTMs exploitables
- Capturer côté site, injecter dans webhook
- Lead avec UTM = toi. Sans UTM = pas toi.
Diagnostic
- 5 étapes : réalité → pixel ? → event ? → attribution ? → CAPI ?
- Écart <30% Airtable/Ads Manager = normal
- Vérif hebdo (2 min) + mensuelle (10 min) + après chaque modif
- Airtable = vérité client, Ads Manager = vérité optimisation
📡 Bloc 5 — Tracking & Mesure
Le tracking transforme des intuitions en données. Sans tracking, tu pilotes dans le noir. Avec un tracking propre, tu prouves ta valeur, tu optimises avec la data, et tu deviens irremplaçable. Le pixel seul suffit pour démarrer. Le reste s'ajoute couche par couche.