[{"data":1,"prerenderedAt":977},["ShallowReactive",2],{"article-alternates":3,"article-\u002Ffr\u002Fmarketing\u002Fconfigurer-api-conversions-meta-capi-zero-a-heros":13},{"i18nKey":4,"paths":5},"marketing-001-2026-05",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fmarketing\u002Fserver-side-conversions-meta-capi-richtig-einrichten","\u002Fen\u002Fmarketing\u002Fserver-side-conversions-setting-up-meta-capi-correctly","\u002Fes\u002Fmarketing\u002Fconfigurar-conversiones-del-lado-del-servidor-meta-capi-desde-cero","\u002Ffr\u002Fmarketing\u002Fconfigurer-api-conversions-meta-capi-zero-a-heros","\u002Fit\u002Fmarketing\u002Fconfigurare-conversion-api-meta-da-zero","\u002Fru\u002Fmarketing\u002Fserver-side-conversions-meta-capi-sglm-setup","\u002Ftr\u002Fmarketing\u002Fserver-side-conversions-meta-capiyi-sifirdan-dogru-kurmak",{"_path":9,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":17,"description":18,"publishedAt":19,"modifiedAt":19,"category":14,"i18nKey":4,"tags":20,"readingTime":26,"author":27,"body":28,"_type":971,"_id":972,"_source":973,"_file":974,"_stem":975,"_extension":976},"marketing",false,"","Conversions API Meta : Mettre en Place une Architecture sGTM Correctement","Architecture sGTM + Conversion API, quality d'appariement d'événements, stratégies de déduplication et pipeline first-party data pour l'attribution post-iOS 17.","2026-05-07",[21,22,23,24,25],"conversion-api","server-side-gtm","attribution","meta-ads","first-party-data",8,"Roibase",{"type":29,"children":30,"toc":962},"root",[31,39,46,92,143,149,154,159,244,290,296,337,498,511,662,697,703,729,734,781,800,812,818,823,841,847,868,887,893,933,951,956],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Depuis iOS 14.5, la puissance de mesure du pixel orienté navigateur a chuté de 40 à 60 %. Selon les données Q4 2025 de Meta, les annonceurs n'utilisant pas CAPI affichent un score Event Match Quality (EMQ) moyen inférieur à 3,8\u002F10. Cela signifie que l'algorithme d'optimisation dispose d'un nombre insuffisant de signaux. La première phase du monde sans cookies a été perdue par les trackers côté navigateur. La deuxième phase — celle où l'architecture côté serveur est soit correctement implémentée, soit bâclée — se déroule actuellement. Configurer correctement Meta Conversion API via sGTM n'est plus optionnel : c'est devenu un élément indispensable de l'infrastructure du marketing de performance.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"pourquoi-la-différence-entre-pixel-et-capi-est-critique",[44],{"type":37,"value":45},"Pourquoi la différence entre pixel et CAPI est critique",{"type":32,"tag":33,"props":47,"children":48},{},[49,51,58,60,66,68,74,76,82,84,90],{"type":37,"value":50},"Meta Pixel s'exécute dans le navigateur. Son fonctionnement dépend du consentement de l'utilisateur, il ne peut pas filtrer le trafic bot et est affecté par la latence réseau. CAPI, en revanche, envoie une requête HTTP POST directement depuis le serveur vers Meta. Deux différences clés : le timing et la qualité des données. Le Pixel déclenche un événement ",{"type":32,"tag":52,"props":53,"children":55},"code",{"className":54},[],[56],{"type":37,"value":57},"PageView",{"type":37,"value":59}," lorsque l'utilisateur charge la page ; CAPI peut envoyer le même événement depuis le backend une fois que le checkout est terminé. Cette différence temporelle constitue la base de la déduplication — Meta doit fusionner les événements identiques provenant de deux sources. La deuxième différence : avec CAPI, tu contrôles les identifiants utilisateur. Si tu ne hashes pas correctement les paramètres ",{"type":32,"tag":52,"props":61,"children":63},{"className":62},[],[64],{"type":37,"value":65},"em",{"type":37,"value":67}," (hash email), ",{"type":32,"tag":52,"props":69,"children":71},{"className":70},[],[72],{"type":37,"value":73},"ph",{"type":37,"value":75}," (hash téléphone), ",{"type":32,"tag":52,"props":77,"children":79},{"className":78},[],[80],{"type":37,"value":81},"fbc",{"type":37,"value":83}," (Facebook Click ID) et ",{"type":32,"tag":52,"props":85,"children":87},{"className":86},[],[88],{"type":37,"value":89},"fbp",{"type":37,"value":91}," (Browser ID), l'Event Match Quality baisse. Un EMQ faible signifie que l'algorithme ne comprend pas à 100 % quel utilisateur a déclenché quel événement. Cela paralyse l'optimisation des enchères. Selon le whitepaper 2024 de Meta, lorsque CAPI et Pixel sont utilisés ensemble, le ROAS augmente en moyenne de 13 % (n=4200 annonceurs, fenêtre de 60 jours). Cependant, cette amélioration ne se concrétise que si la déduplication est correctement configurée.",{"type":32,"tag":33,"props":93,"children":94},{},[95,97,103,105,111,113,119,121,127,128,134,136,141],{"type":37,"value":96},"Désactiver le pixel et basculer uniquement sur CAPI est aussi une erreur. Car le pixel côté navigateur collecte en temps réel les événements intermédiaires comme ",{"type":32,"tag":52,"props":98,"children":100},{"className":99},[],[101],{"type":37,"value":102},"ViewContent",{"type":37,"value":104}," et ",{"type":32,"tag":52,"props":106,"children":108},{"className":107},[],[109],{"type":37,"value":110},"AddToCart",{"type":37,"value":112}," ; CAPI est généralement utilisé uniquement pour ",{"type":32,"tag":52,"props":114,"children":116},{"className":115},[],[117],{"type":37,"value":118},"Purchase",{"type":37,"value":120},". Il faut trouver un équilibre : maintenir le pixel léger et envoyer les conversions critiques via CAPI en doublon. C'est ici que les paramètres de déduplication entrent en jeu. Le système Meta examine la combinaison ",{"type":32,"tag":52,"props":122,"children":124},{"className":123},[],[125],{"type":37,"value":126},"event_id",{"type":37,"value":104},{"type":32,"tag":52,"props":129,"children":131},{"className":130},[],[132],{"type":37,"value":133},"event_time",{"type":37,"value":135}," pour éviter de compter deux fois le même événement. Mais si tu ne fournis pas exactement les mêmes paramètres au pixel et à CAPI, la dédup ne fonctionne pas. La plupart des implémentations échouent à cette étape : l'",{"type":32,"tag":52,"props":137,"children":139},{"className":138},[],[140],{"type":37,"value":126},{"type":37,"value":142}," est généré avec UUID côté frontend, avec un ID différent côté backend. Résultat : deux événements séparés sont détectés, et l'inflation commence dans les rapports ROAS.",{"type":32,"tag":40,"props":144,"children":146},{"id":145},"étapes-de-mise-en-place-de-linfrastructure-sgtm",[147],{"type":37,"value":148},"Étapes de mise en place de l'infrastructure sGTM",{"type":32,"tag":33,"props":150,"children":151},{},[152],{"type":37,"value":153},"Tu peux configurer CAPI sans Google Tag Manager côté serveur — en envoyant directement une requête POST depuis ton backend vers Meta. Mais cette approche crée des problèmes à l'échelle. Lorsque tu ajoutes plusieurs destinations (Google Ads Enhanced Conversions, TikTok Events API, Snapchat CAPI), tu dois rédiger un endpoint séparé pour chacune. sGTM fournit une couche d'abstraction : un seul conteneur serveur gère tous tes besoins de tagging. Il est hébergé sur Google Cloud Run ou App Engine. Il intercepte les requêtes HTTP entrantes du conteneur GTM côté client, déclenche les tags côté serveur, puis envoie des POST parallèles vers Meta, Google, TikTok.",{"type":32,"tag":33,"props":155,"children":156},{},[157],{"type":37,"value":158},"Le flux de configuration se déroule ainsi :",{"type":32,"tag":160,"props":161,"children":162},"ol",{},[163,183,209,219],{"type":32,"tag":164,"props":165,"children":166},"li",{},[167,173,175,181],{"type":32,"tag":168,"props":169,"children":170},"strong",{},[171],{"type":37,"value":172},"Crée une instance Cloud Run :",{"type":37,"value":174}," ",{"type":32,"tag":52,"props":176,"children":178},{"className":177},[],[179],{"type":37,"value":180},"gcloud run deploy gtm-server --image=gcr.io\u002Fcloud-tagging-10302018\u002Fgtm-cloud-image:stable --platform=managed --region=europe-west1",{"type":37,"value":182},". Cette commande déploie l'image officielle de sGTM de Google.",{"type":32,"tag":164,"props":184,"children":185},{},[186,191,193,199,201,207],{"type":32,"tag":168,"props":187,"children":188},{},[189],{"type":37,"value":190},"Obtiens l'URL du serveur de tagging :",{"type":37,"value":192}," Une fois le déploiement terminé, tu reçois une URL du type ",{"type":32,"tag":52,"props":194,"children":196},{"className":195},[],[197],{"type":37,"value":198},"https:\u002F\u002Fgtm-server-xxxxx-ew.a.run.app",{"type":37,"value":200},". Tu inscriviras cette URL dans le paramètre ",{"type":32,"tag":52,"props":202,"children":204},{"className":203},[],[205],{"type":37,"value":206},"serverContainerUrl",{"type":37,"value":208}," de ton GTM côté client.",{"type":32,"tag":164,"props":210,"children":211},{},[212,217],{"type":32,"tag":168,"props":213,"children":214},{},[215],{"type":37,"value":216},"Modifie le tag GA4 dans ton GTM côté client :",{"type":37,"value":218}," Normalement, l'événement GA4 est envoyé directement à Google. Si tu définis sGTM comme l'URL de transport, les données GA4 passent d'abord par ton serveur, puis vers Google. Cela te permet aussi de normaliser l'anonymisation IP et l'user-agent côté serveur.",{"type":32,"tag":164,"props":220,"children":221},{},[222,227,229,235,236,242],{"type":32,"tag":168,"props":223,"children":224},{},[225],{"type":37,"value":226},"Ajoute le tag Meta CAPI dans ton conteneur sGTM :",{"type":37,"value":228}," Utilise le modèle « Meta Conversions API ». Entre ton ",{"type":32,"tag":52,"props":230,"children":232},{"className":231},[],[233],{"type":37,"value":234},"Pixel ID",{"type":37,"value":104},{"type":32,"tag":52,"props":237,"children":239},{"className":238},[],[240],{"type":37,"value":241},"Access Token",{"type":37,"value":243},". Tu trouveras l'Access Token dans Events Manager > Settings > Conversions API. Tu peux tester la connexion en envoyant un événement test.",{"type":32,"tag":33,"props":245,"children":246},{},[247,249,255,257,263,265,270,272,277,279,288],{"type":37,"value":248},"Un avantage de sGTM : une seule requête peut déclencher GA4 et CAPI. Une action ",{"type":32,"tag":52,"props":250,"children":252},{"className":251},[],[253],{"type":37,"value":254},"dataLayer.push",{"type":37,"value":256}," côté client déclenche deux tags côté serveur différents. Tu n'as pas besoin d'écrire deux appels d'API séparés dans ton backend. Mais attention : le ",{"type":32,"tag":52,"props":258,"children":260},{"className":259},[],[261],{"type":37,"value":262},"client_id",{"type":37,"value":264}," provenant de GA4 n'est pas la même chose que le ",{"type":32,"tag":52,"props":266,"children":268},{"className":267},[],[269],{"type":37,"value":89},{"type":37,"value":271}," attendu par Meta. Tu dois créer une variable de transformation dans ton conteneur sGTM — récupérer le cookie ",{"type":32,"tag":52,"props":273,"children":275},{"className":274},[],[276],{"type":37,"value":89},{"type":37,"value":278}," et le mapper au tag CAPI. Ce mapping nécessite une ",{"type":32,"tag":280,"props":281,"children":285},"a",{"href":282,"rel":283},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Fppc",[284],"nofollow",[286],{"type":37,"value":287},"architecture de données first-party",{"type":37,"value":289}," ; sinon, les identifiants ne se synchronisent pas et l'EMQ baisse.",{"type":32,"tag":40,"props":291,"children":293},{"id":292},"augmenter-levent-match-quality",[294],{"type":37,"value":295},"Augmenter l'Event Match Quality",{"type":32,"tag":33,"props":297,"children":298},{},[299,301,306,308,313,315,321,323,328,330,335],{"type":37,"value":300},"L'EMQ est le score de confiance de Meta répondant à la question « puis-je attribuer cet événement à quel utilisateur ». Maximum 10. Au-dessus de 8 est excellent, en dessous de 6 est problématique. Ce qui augmente l'EMQ est la bonne combinaison d'identifiants. Selon la documentation Meta, l'ordre de priorité est : ",{"type":32,"tag":52,"props":302,"children":304},{"className":303},[],[305],{"type":37,"value":65},{"type":37,"value":307}," (email) > ",{"type":32,"tag":52,"props":309,"children":311},{"className":310},[],[312],{"type":37,"value":73},{"type":37,"value":314}," (téléphone) > ",{"type":32,"tag":52,"props":316,"children":318},{"className":317},[],[319],{"type":37,"value":320},"external_id",{"type":37,"value":322}," (CRM ID) > ",{"type":32,"tag":52,"props":324,"children":326},{"className":325},[],[327],{"type":37,"value":81},{"type":37,"value":329}," > ",{"type":32,"tag":52,"props":331,"children":333},{"className":332},[],[334],{"type":37,"value":89},{"type":37,"value":336},". Hash l'email et le téléphone avec SHA-256, convertis en minuscules, sans espaces. Exemple :",{"type":32,"tag":338,"props":339,"children":343},"pre",{"className":340,"code":341,"language":342,"meta":16,"style":16},"language-javascript shiki shiki-themes github-dark","\u002F\u002F Hash incorrect\nconst email = \" John@Example.com \";\nconst hash = sha256(email); \u002F\u002F Les espaces et majuscules posent problème\n\n\u002F\u002F Hash correct\nconst email = \"john@example.com\";\nconst hash = sha256(email); \u002F\u002F SHA-256: a665a...\n","javascript",[344],{"type":32,"tag":52,"props":345,"children":346},{"__ignoreMap":16},[347,359,392,425,435,444,469],{"type":32,"tag":348,"props":349,"children":352},"span",{"class":350,"line":351},"line",1,[353],{"type":32,"tag":348,"props":354,"children":356},{"style":355},"--shiki-default:#6A737D",[357],{"type":37,"value":358},"\u002F\u002F Hash incorrect\n",{"type":32,"tag":348,"props":360,"children":362},{"class":350,"line":361},2,[363,369,375,380,386],{"type":32,"tag":348,"props":364,"children":366},{"style":365},"--shiki-default:#F97583",[367],{"type":37,"value":368},"const",{"type":32,"tag":348,"props":370,"children":372},{"style":371},"--shiki-default:#79B8FF",[373],{"type":37,"value":374}," email",{"type":32,"tag":348,"props":376,"children":377},{"style":365},[378],{"type":37,"value":379}," =",{"type":32,"tag":348,"props":381,"children":383},{"style":382},"--shiki-default:#9ECBFF",[384],{"type":37,"value":385}," \" John@Example.com \"",{"type":32,"tag":348,"props":387,"children":389},{"style":388},"--shiki-default:#E1E4E8",[390],{"type":37,"value":391},";\n",{"type":32,"tag":348,"props":393,"children":395},{"class":350,"line":394},3,[396,400,405,409,415,420],{"type":32,"tag":348,"props":397,"children":398},{"style":365},[399],{"type":37,"value":368},{"type":32,"tag":348,"props":401,"children":402},{"style":371},[403],{"type":37,"value":404}," hash",{"type":32,"tag":348,"props":406,"children":407},{"style":365},[408],{"type":37,"value":379},{"type":32,"tag":348,"props":410,"children":412},{"style":411},"--shiki-default:#B392F0",[413],{"type":37,"value":414}," sha256",{"type":32,"tag":348,"props":416,"children":417},{"style":388},[418],{"type":37,"value":419},"(email); ",{"type":32,"tag":348,"props":421,"children":422},{"style":355},[423],{"type":37,"value":424},"\u002F\u002F Les espaces et majuscules posent problème\n",{"type":32,"tag":348,"props":426,"children":428},{"class":350,"line":427},4,[429],{"type":32,"tag":348,"props":430,"children":432},{"emptyLinePlaceholder":431},true,[433],{"type":37,"value":434},"\n",{"type":32,"tag":348,"props":436,"children":438},{"class":350,"line":437},5,[439],{"type":32,"tag":348,"props":440,"children":441},{"style":355},[442],{"type":37,"value":443},"\u002F\u002F Hash correct\n",{"type":32,"tag":348,"props":445,"children":447},{"class":350,"line":446},6,[448,452,456,460,465],{"type":32,"tag":348,"props":449,"children":450},{"style":365},[451],{"type":37,"value":368},{"type":32,"tag":348,"props":453,"children":454},{"style":371},[455],{"type":37,"value":374},{"type":32,"tag":348,"props":457,"children":458},{"style":365},[459],{"type":37,"value":379},{"type":32,"tag":348,"props":461,"children":462},{"style":382},[463],{"type":37,"value":464}," \"john@example.com\"",{"type":32,"tag":348,"props":466,"children":467},{"style":388},[468],{"type":37,"value":391},{"type":32,"tag":348,"props":470,"children":472},{"class":350,"line":471},7,[473,477,481,485,489,493],{"type":32,"tag":348,"props":474,"children":475},{"style":365},[476],{"type":37,"value":368},{"type":32,"tag":348,"props":478,"children":479},{"style":371},[480],{"type":37,"value":404},{"type":32,"tag":348,"props":482,"children":483},{"style":365},[484],{"type":37,"value":379},{"type":32,"tag":348,"props":486,"children":487},{"style":411},[488],{"type":37,"value":414},{"type":32,"tag":348,"props":490,"children":491},{"style":388},[492],{"type":37,"value":419},{"type":32,"tag":348,"props":494,"children":495},{"style":355},[496],{"type":37,"value":497},"\u002F\u002F SHA-256: a665a...\n",{"type":32,"tag":33,"props":499,"children":500},{},[501,503,509],{"type":37,"value":502},"La requête CAPI doit contenir l'objet ",{"type":32,"tag":52,"props":504,"children":506},{"className":505},[],[507],{"type":37,"value":508},"user_data",{"type":37,"value":510}," de cette manière :",{"type":32,"tag":338,"props":512,"children":516},{"className":513,"code":514,"language":515,"meta":16,"style":16},"language-json shiki shiki-themes github-dark","{\n  \"em\": [\"a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3\"],\n  \"ph\": [\"sha256_hash_telephone\"],\n  \"fbc\": \"fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz\",\n  \"fbp\": \"fb.1.1558571054389.1098115397\",\n  \"client_ip_address\": \"93.184.216.34\",\n  \"client_user_agent\": \"Mozilla\u002F5.0...\"\n}\n","json",[517],{"type":32,"tag":52,"props":518,"children":519},{"__ignoreMap":16},[520,528,551,572,595,616,637,654],{"type":32,"tag":348,"props":521,"children":522},{"class":350,"line":351},[523],{"type":32,"tag":348,"props":524,"children":525},{"style":388},[526],{"type":37,"value":527},"{\n",{"type":32,"tag":348,"props":529,"children":530},{"class":350,"line":361},[531,536,541,546],{"type":32,"tag":348,"props":532,"children":533},{"style":371},[534],{"type":37,"value":535},"  \"em\"",{"type":32,"tag":348,"props":537,"children":538},{"style":388},[539],{"type":37,"value":540},": [",{"type":32,"tag":348,"props":542,"children":543},{"style":382},[544],{"type":37,"value":545},"\"a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3\"",{"type":32,"tag":348,"props":547,"children":548},{"style":388},[549],{"type":37,"value":550},"],\n",{"type":32,"tag":348,"props":552,"children":553},{"class":350,"line":394},[554,559,563,568],{"type":32,"tag":348,"props":555,"children":556},{"style":371},[557],{"type":37,"value":558},"  \"ph\"",{"type":32,"tag":348,"props":560,"children":561},{"style":388},[562],{"type":37,"value":540},{"type":32,"tag":348,"props":564,"children":565},{"style":382},[566],{"type":37,"value":567},"\"sha256_hash_telephone\"",{"type":32,"tag":348,"props":569,"children":570},{"style":388},[571],{"type":37,"value":550},{"type":32,"tag":348,"props":573,"children":574},{"class":350,"line":427},[575,580,585,590],{"type":32,"tag":348,"props":576,"children":577},{"style":371},[578],{"type":37,"value":579},"  \"fbc\"",{"type":32,"tag":348,"props":581,"children":582},{"style":388},[583],{"type":37,"value":584},": ",{"type":32,"tag":348,"props":586,"children":587},{"style":382},[588],{"type":37,"value":589},"\"fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz\"",{"type":32,"tag":348,"props":591,"children":592},{"style":388},[593],{"type":37,"value":594},",\n",{"type":32,"tag":348,"props":596,"children":597},{"class":350,"line":437},[598,603,607,612],{"type":32,"tag":348,"props":599,"children":600},{"style":371},[601],{"type":37,"value":602},"  \"fbp\"",{"type":32,"tag":348,"props":604,"children":605},{"style":388},[606],{"type":37,"value":584},{"type":32,"tag":348,"props":608,"children":609},{"style":382},[610],{"type":37,"value":611},"\"fb.1.1558571054389.1098115397\"",{"type":32,"tag":348,"props":613,"children":614},{"style":388},[615],{"type":37,"value":594},{"type":32,"tag":348,"props":617,"children":618},{"class":350,"line":446},[619,624,628,633],{"type":32,"tag":348,"props":620,"children":621},{"style":371},[622],{"type":37,"value":623},"  \"client_ip_address\"",{"type":32,"tag":348,"props":625,"children":626},{"style":388},[627],{"type":37,"value":584},{"type":32,"tag":348,"props":629,"children":630},{"style":382},[631],{"type":37,"value":632},"\"93.184.216.34\"",{"type":32,"tag":348,"props":634,"children":635},{"style":388},[636],{"type":37,"value":594},{"type":32,"tag":348,"props":638,"children":639},{"class":350,"line":471},[640,645,649],{"type":32,"tag":348,"props":641,"children":642},{"style":371},[643],{"type":37,"value":644},"  \"client_user_agent\"",{"type":32,"tag":348,"props":646,"children":647},{"style":388},[648],{"type":37,"value":584},{"type":32,"tag":348,"props":650,"children":651},{"style":382},[652],{"type":37,"value":653},"\"Mozilla\u002F5.0...\"\n",{"type":32,"tag":348,"props":655,"children":656},{"class":350,"line":26},[657],{"type":32,"tag":348,"props":658,"children":659},{"style":388},[660],{"type":37,"value":661},"}\n",{"type":32,"tag":33,"props":663,"children":664},{},[665,667,673,675,680,682,688,690,695],{"type":37,"value":666},"sGTM récupère automatiquement l'IP et l'user-agent, mais dans certains environnements d'hébergement (proxy Cloudflare), tu devras parser l'en-tête ",{"type":32,"tag":52,"props":668,"children":670},{"className":669},[],[671],{"type":37,"value":672},"X-Forwarded-For",{"type":37,"value":674},". Le paramètre ",{"type":32,"tag":52,"props":676,"children":678},{"className":677},[],[679],{"type":37,"value":81},{"type":37,"value":681}," est le Facebook Click ID — lorsqu'un utilisateur clique sur une annonce Meta, l'URL contient ",{"type":32,"tag":52,"props":683,"children":685},{"className":684},[],[686],{"type":37,"value":687},"fbclid=...",{"type":37,"value":689},". Si tu enregistres cette valeur dans un cookie et l'envoies à CAPI, tu fermes la boucle d'attribution. La plupart des implémentations omettent le ",{"type":32,"tag":52,"props":691,"children":693},{"className":692},[],[694],{"type":37,"value":81},{"type":37,"value":696}," ; Meta ne peut alors pas déterminer quelle annonce a déclenché la conversion. L'EMQ stagne à 4,2.",{"type":32,"tag":40,"props":698,"children":700},{"id":699},"stratégie-de-déduplication",[701],{"type":37,"value":702},"Stratégie de déduplication",{"type":32,"tag":33,"props":704,"children":705},{},[706,708,713,715,720,722,727],{"type":37,"value":707},"Lorsque le même événement ",{"type":32,"tag":52,"props":709,"children":711},{"className":710},[],[712],{"type":37,"value":118},{"type":37,"value":714}," arrive à la fois du pixel et de CAPI, Meta doit le compter comme un seul événement. Pour cela, l'",{"type":32,"tag":52,"props":716,"children":718},{"className":717},[],[719],{"type":37,"value":126},{"type":37,"value":721}," doit être identique. Généralement, on utilise UUID v4. Cependant, si l'UUID est généré côté frontend, il doit être transmis au backend. Solution : inclure l'event_id comme champ masqué dans le formulaire de checkout ou l'enregistrer dans localStorage. Lorsque le backend termine la commande, il récupère le même ID et l'inclut dans la requête CAPI. La différence d'heure doit être inférieure à 48 heures (fenêtre de dédup de Meta). Si la différence ",{"type":32,"tag":52,"props":723,"children":725},{"className":724},[],[726],{"type":37,"value":133},{"type":37,"value":728}," dépasse 48 heures, les deux événements sont comptabilisés séparément.",{"type":32,"tag":33,"props":730,"children":731},{},[732],{"type":37,"value":733},"Exemple de flux :",{"type":32,"tag":160,"props":735,"children":736},{},[737,758,776],{"type":32,"tag":164,"props":738,"children":739},{},[740,742,748,750,756],{"type":37,"value":741},"L'utilisateur clique sur « Acheter » → le pixel envoie ",{"type":32,"tag":52,"props":743,"children":745},{"className":744},[],[746],{"type":37,"value":747},"InitiateCheckout",{"type":37,"value":749}," (event_id: ",{"type":32,"tag":52,"props":751,"children":753},{"className":752},[],[754],{"type":37,"value":755},"evt_12345",{"type":37,"value":757},", event_time: 1683820800)",{"type":32,"tag":164,"props":759,"children":760},{},[761,763,768,769,774],{"type":37,"value":762},"Le backend confirme le paiement → CAPI envoie ",{"type":32,"tag":52,"props":764,"children":766},{"className":765},[],[767],{"type":37,"value":118},{"type":37,"value":749},{"type":32,"tag":52,"props":770,"children":772},{"className":771},[],[773],{"type":37,"value":755},{"type":37,"value":775},", event_time: 1683820802)",{"type":32,"tag":164,"props":777,"children":778},{},[779],{"type":37,"value":780},"Meta voit les deux événements, les event_id correspondent, la différence d'heure est de 2 secondes → traité comme un seul événement.",{"type":32,"tag":33,"props":782,"children":783},{},[784,786,791,793,798],{"type":37,"value":785},"Sans cette configuration, le ",{"type":32,"tag":52,"props":787,"children":789},{"className":788},[],[790],{"type":37,"value":118},{"type":37,"value":792}," du pixel et le ",{"type":32,"tag":52,"props":794,"children":796},{"className":795},[],[797],{"type":37,"value":118},{"type":37,"value":799}," de CAPI sont comptabilisés en double. La valeur de conversion est gonflée 2x dans le dashboard de campagne. Tu peux voir « 100 conversions » quand le nombre réel est 50. Si tu ne t'en aperçois pas, l'allocation du budget devient incorrecte.",{"type":32,"tag":33,"props":801,"children":802},{},[803,805,810],{"type":37,"value":804},"Dans certains cas, l'événement pixel est complètement perdu (bloqueur de publicités, pas de consentement). CAPI fonctionne seul. Pas de dédup, pas de problème. Mais si l'événement pixel arrive en retard (par exemple, l'utilisateur était hors ligne, le navigateur envoie l'événement en queue 10 minutes plus tard) et que l'event_id est incorrect, Meta le comptabilise comme un nouvel événement. Pour gérer ce cas limite, il est recommandé d'assigner l'",{"type":32,"tag":52,"props":806,"children":808},{"className":807},[],[809],{"type":37,"value":133},{"type":37,"value":811}," côté serveur au timestamp de la commande backend — pas à l'heure du navigateur utilisateur.",{"type":32,"tag":40,"props":813,"children":815},{"id":814},"incrementalité-et-test-de-capi",[816],{"type":37,"value":817},"Incrementalité et test de CAPI",{"type":32,"tag":33,"props":819,"children":820},{},[821],{"type":37,"value":822},"Une fois CAPI en place, un rapport « EMQ 8,5, dédup fonctionne » ne suffit pas. La vraie question : ces conversions se produiraient-elles sans CAPI ? Pour le mesurer, tu dois effectuer un test de holdout géographique ou une étude de conversion lift. Meta dispose d'un outil Conversion Lift intégré, mais le seuil de dépense minimum est élevé (30 000 $ +). Alternatif : un simple test A\u002FB. Moitié du trafic avec CAPI actif, moitié sans. Après 14 jours, examine le ROAS incrémental. Si le groupe CAPI affiche 15 % de meilleures performances, tu as prouvé la valeur de l'infrastructure.",{"type":32,"tag":33,"props":824,"children":825},{},[826,828,833,834,839],{"type":37,"value":827},"Un autre métrique : examiner les fenêtres d'attribution. Avec CAPI, la fiabilité de l'attribution au clic 7 jours s'améliore car les événements post-clic proviennent du backend, pas de bots. Le trafic bot représente 8-12 % sur le pixel. Avec CAPI et une liste blanche IP serveur, ce taux tombe en dessous de 1 %. Cela signifie que l'optimisation de campagne fonctionne avec un signal plus pur. Certains annonceurs, en fonction des résultats, ont complètement désactivé le pixel et ne fonctionnent que via CAPI (particulièrement en B2B lead gen). Mais pour l'ecommerce, cette stratégie est risquée car les signaux ",{"type":32,"tag":52,"props":829,"children":831},{"className":830},[],[832],{"type":37,"value":102},{"type":37,"value":104},{"type":32,"tag":52,"props":835,"children":837},{"className":836},[],[838],{"type":37,"value":110},{"type":37,"value":840}," disparaissent, affaiblissant les audiences de retargeting dynamique.",{"type":32,"tag":40,"props":842,"children":844},{"id":843},"avancé-événements-personnalisés-et-conversions-hors-ligne",[845],{"type":37,"value":846},"Avancé : événements personnalisés et conversions hors ligne",{"type":32,"tag":33,"props":848,"children":849},{},[850,852,858,860,866],{"type":37,"value":851},"CAPI ne se limite pas aux événements standards. Tu peux définir des événements personnalisés et les envoyer depuis le backend. Par exemple ",{"type":32,"tag":52,"props":853,"children":855},{"className":854},[],[856],{"type":37,"value":857},"SubscriptionRenewal",{"type":37,"value":859}," ou ",{"type":32,"tag":52,"props":861,"children":863},{"className":862},[],[864],{"type":37,"value":865},"TrialStarted",{"type":37,"value":867},". Tu peux définir ces événements comme des conversions personnalisées et les ajouter à l'objectif d'optimisation de campagne. Particulièrement en SaaS, envoyer via CAPI des événements long-terme (rétention 90 jours, upsell) et les inclure dans la stratégie d'enchères permet d'optimiser le LTV. C'est similaire à l'import de conversions hors ligne de Google Ads.",{"type":32,"tag":33,"props":869,"children":870},{},[871,873,878,880,885],{"type":37,"value":872},"Scénario de conversion hors ligne : l'utilisateur remplit un formulaire de prospect en ligne, l'équipe commerciale conclut un deal par téléphone 5 jours plus tard. Tu dois exporter ce deal depuis le CRM et l'envoyer à CAPI en tant que ",{"type":32,"tag":52,"props":874,"children":876},{"className":875},[],[877],{"type":37,"value":118},{"type":37,"value":879},". Dans ce cas, l'",{"type":32,"tag":52,"props":881,"children":883},{"className":882},[],[884],{"type":37,"value":133},{"type":37,"value":886}," sera une date passée. Meta accepte les événements rétroactifs jusqu'à 62 jours. Cependant, l'impact de cet événement sur l'algorithme d'attribution est limité car l'optimisation de campagne repose sur des signaux temps réel. Néanmoins, c'est nécessaire pour la précision du reporting. Tu peux automatiser l'intégration CRM-CAPI avec Zapier ou n8n ; chaque nouvel accord « Closed Won » déclenche une requête POST CAPI.",{"type":32,"tag":40,"props":888,"children":890},{"id":889},"erreurs-courantes-et-solutions",[891],{"type":37,"value":892},"Erreurs courantes et solutions",{"type":32,"tag":33,"props":894,"children":895},{},[896,908,910,916,918,924,926,931],{"type":32,"tag":168,"props":897,"children":898},{},[899,901,906],{"type":37,"value":900},"1. Paramètre ",{"type":32,"tag":52,"props":902,"children":904},{"className":903},[],[905],{"type":37,"value":81},{"type":37,"value":907}," manquant :",{"type":37,"value":909}," Lorsqu'un utilisateur clique sur une annonce Meta et accède au site, l'URL contient ",{"type":32,"tag":52,"props":911,"children":913},{"className":912},[],[914],{"type":37,"value":915},"fbclid",{"type":37,"value":917},". Si tu n'enregistres pas cette valeur dans un cookie, tu ne peux pas l'envoyer à CAPI. Solution : crée une variable de cookie dans GTM, nomme-la ",{"type":32,"tag":52,"props":919,"children":921},{"className":920},[],[922],{"type":37,"value":923},"_fbc",{"type":37,"value":925},", conserve-la 90 jours. Dans le tag CAPI, mappe cette variable au paramètre ",{"type":32,"tag":52,"props":927,"children":929},{"className":928},[],[930],{"type":37,"value":81},{"type":37,"value":932},".",{"type":32,"tag":33,"props":934,"children":935},{},[936,941,943,949],{"type":32,"tag":168,"props":937,"children":938},{},[939],{"type":37,"value":940},"2. Hash email incorrect :",{"type":37,"value":942}," Si des espaces ou majuscules subsistent, le hash ne correspond pas. Pour toutes les chaînes, applique ",{"type":32,"tag":52,"props":944,"children":946},{"className":945},[],[947],{"type":37,"value":948},"trim().toLowerCase()",{"type":37,"value":950}," avant SHA-256.",{"type":32,"tag":33,"props":952,"children":953},{},[954],{"type":37,"value":955},"**3. Le passage du mode test à la production n'a pas été",{"type":32,"tag":957,"props":958,"children":959},"style",{},[960],{"type":37,"value":961},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":16,"searchDepth":394,"depth":394,"links":963},[964,965,966,967,968,969,970],{"id":42,"depth":361,"text":45},{"id":145,"depth":361,"text":148},{"id":292,"depth":361,"text":295},{"id":699,"depth":361,"text":702},{"id":814,"depth":361,"text":817},{"id":843,"depth":361,"text":846},{"id":889,"depth":361,"text":892},"markdown","content:fr:marketing:configurer-api-conversions-meta-capi-zero-a-heros.md","content","fr\u002Fmarketing\u002Fconfigurer-api-conversions-meta-capi-zero-a-heros.md","fr\u002Fmarketing\u002Fconfigurer-api-conversions-meta-capi-zero-a-heros","md",1778164176362]