[{"data":1,"prerenderedAt":2699},["ShallowReactive",2],{"article-alternates":3,"article-\u002Ffr\u002Ftech\u002Froadmap-migration-headless-gestion-risques":11},{"i18nKey":4,"paths":5},"tech-006-2026-07",{"de":6,"es":7,"fr":8,"it":9,"ru":10},"\u002Fde\u002Ftech\u002Fheadless-e-commerce-migration-roadmap-risk-management","\u002Fes\u002Ftech\u002Fmigracion-a-comercio-headless-hoja-de-ruta-gestion-riesgos","\u002Ffr\u002Ftech\u002Froadmap-migration-headless-gestion-risques","\u002Fit\u002Ftech\u002Fheadless-e-commerce-migration-roadmap-e-risk-management","\u002Fru\u002Ftech\u002Fheadless-migracion-hoja-ruta-y-gestion-riesgos",{"_path":8,"_dir":12,"_draft":13,"_partial":13,"_locale":14,"title":15,"description":16,"publishedAt":17,"modifiedAt":17,"category":18,"i18nKey":4,"tags":19,"readingTime":25,"author":26,"body":27,"_type":2693,"_id":2694,"_source":2695,"_file":2696,"_stem":2697,"_extension":2698},"tech",false,"","E-commerce Headless : Roadmap de migration et gestion des risques","Stratégie de déploiement progressif préservant le SEO vers l'architecture headless. Analyse d'abandon de panier, tests de performance et méthodes de réduction des risques.","2026-07-16","techstack-partnership",[20,21,22,23,24],"headless-commerce","strategie-migration","preservation-seo","tests-performance","gestion-risques",9,"Roibase",{"type":28,"children":29,"toc":2686},"root",[30,38,45,58,80,361,374,399,409,419,425,438,446,482,1432,1437,1486,1492,1497,1505,1981,1999,2040,2045,2051,2056,2351,2361,2588,2593,2599,2604,2612,2625,2633,2654,2668,2680],{"type":31,"tag":32,"props":33,"children":34},"element","p",{},[35],{"type":36,"value":37},"text","La migration e-commerce vers l'architecture headless en 2026 n'est plus une question \"faire ou ne pas faire\". La question est \"comment le faire sans crash du site, sans perdre 40% en SEO, sans que l'abandon panier ne passe de 18% à 32%\". L'émergence de frameworks comme Shopify Hydrogen, Remix et Next.js Commerce a réduit le risque technique, mais le risque opérationnel reste élevé. Migrer un site e-commerce du monolithe vers headless ne ressemble pas à une migration de base de données — c'est une chirurgie à cœur ouvert. Cet article couvre la stratégie de déploiement progressif (phased rollout), les tests de préservation SEO et les méthodes pour prévenir les pics d'abandon de panier.",{"type":31,"tag":39,"props":40,"children":42},"h2",{"id":41},"stratégie-de-déploiement-progressif-canary-deployment-inter-domaines",[43],{"type":36,"value":44},"Stratégie de Déploiement Progressif : Canary Deployment Inter-domaines",{"type":31,"tag":32,"props":46,"children":47},{},[48,50,56],{"type":36,"value":49},"Pas de migration \"big-bang\". L'ensemble du site ne bascule pas simultanément vers un frontend headless car le coût de rollback devient prohibitif si une métrique se dégrade. Notre approche privilégiée : ",{"type":31,"tag":51,"props":52,"children":53},"strong",{},[54],{"type":36,"value":55},"routing basé sur les chemins d'URL",{"type":36,"value":57}," avec déploiement progressif.",{"type":31,"tag":32,"props":59,"children":60},{},[61,63,70,72,78],{"type":36,"value":62},"La première phase consiste à identifier un chemin avec trafic faible et peu de SKU (50-100 produits), tel ",{"type":31,"tag":64,"props":65,"children":67},"code",{"className":66},[],[68],{"type":36,"value":69},"\u002Fcategorie\u002Fnouvelles-arrivees",{"type":36,"value":71},". Un CDN (Cloudflare, Fastly) applique une règle de routing basée sur le chemin : le trafic vers ",{"type":31,"tag":64,"props":73,"children":75},{"className":74},[],[76],{"type":36,"value":77},"\u002Fcategorie\u002Fnouvelles-arrivees\u002F*",{"type":36,"value":79}," est dirigé vers l'origin headless, le reste reste sur Shopify Liquid legacy.",{"type":31,"tag":81,"props":82,"children":86},"pre",{"className":83,"code":84,"language":85,"meta":14,"style":14},"language-javascript shiki shiki-themes github-dark","\u002F\u002F Cloudflare Workers — routing basé sur le chemin\naddEventListener('fetch', event => {\n  const url = new URL(event.request.url);\n  \n  if (url.pathname.startsWith('\u002Fcategorie\u002Fnouvelles-arrivees')) {\n    return event.respondWith(fetch(event.request, {\n      backend: 'headless-origin' \u002F\u002F App Hydrogen sur Cloudflare Pages\n    }));\n  }\n  \n  return event.respondWith(fetch(event.request, {\n    backend: 'legacy-shopify'\n  }));\n});\n","javascript",[87],{"type":31,"tag":64,"props":88,"children":89},{"__ignoreMap":14},[90,102,146,181,190,223,256,275,284,292,300,329,343,352],{"type":31,"tag":91,"props":92,"children":95},"span",{"class":93,"line":94},"line",1,[96],{"type":31,"tag":91,"props":97,"children":99},{"style":98},"--shiki-default:#6A737D",[100],{"type":36,"value":101},"\u002F\u002F Cloudflare Workers — routing basé sur le chemin\n",{"type":31,"tag":91,"props":103,"children":105},{"class":93,"line":104},2,[106,112,118,124,129,135,141],{"type":31,"tag":91,"props":107,"children":109},{"style":108},"--shiki-default:#B392F0",[110],{"type":36,"value":111},"addEventListener",{"type":31,"tag":91,"props":113,"children":115},{"style":114},"--shiki-default:#E1E4E8",[116],{"type":36,"value":117},"(",{"type":31,"tag":91,"props":119,"children":121},{"style":120},"--shiki-default:#9ECBFF",[122],{"type":36,"value":123},"'fetch'",{"type":31,"tag":91,"props":125,"children":126},{"style":114},[127],{"type":36,"value":128},", ",{"type":31,"tag":91,"props":130,"children":132},{"style":131},"--shiki-default:#FFAB70",[133],{"type":36,"value":134},"event",{"type":31,"tag":91,"props":136,"children":138},{"style":137},"--shiki-default:#F97583",[139],{"type":36,"value":140}," =>",{"type":31,"tag":91,"props":142,"children":143},{"style":114},[144],{"type":36,"value":145}," {\n",{"type":31,"tag":91,"props":147,"children":149},{"class":93,"line":148},3,[150,155,161,166,171,176],{"type":31,"tag":91,"props":151,"children":152},{"style":137},[153],{"type":36,"value":154},"  const",{"type":31,"tag":91,"props":156,"children":158},{"style":157},"--shiki-default:#79B8FF",[159],{"type":36,"value":160}," url",{"type":31,"tag":91,"props":162,"children":163},{"style":137},[164],{"type":36,"value":165}," =",{"type":31,"tag":91,"props":167,"children":168},{"style":137},[169],{"type":36,"value":170}," new",{"type":31,"tag":91,"props":172,"children":173},{"style":108},[174],{"type":36,"value":175}," URL",{"type":31,"tag":91,"props":177,"children":178},{"style":114},[179],{"type":36,"value":180},"(event.request.url);\n",{"type":31,"tag":91,"props":182,"children":184},{"class":93,"line":183},4,[185],{"type":31,"tag":91,"props":186,"children":187},{"style":114},[188],{"type":36,"value":189},"  \n",{"type":31,"tag":91,"props":191,"children":193},{"class":93,"line":192},5,[194,199,204,209,213,218],{"type":31,"tag":91,"props":195,"children":196},{"style":137},[197],{"type":36,"value":198},"  if",{"type":31,"tag":91,"props":200,"children":201},{"style":114},[202],{"type":36,"value":203}," (url.pathname.",{"type":31,"tag":91,"props":205,"children":206},{"style":108},[207],{"type":36,"value":208},"startsWith",{"type":31,"tag":91,"props":210,"children":211},{"style":114},[212],{"type":36,"value":117},{"type":31,"tag":91,"props":214,"children":215},{"style":120},[216],{"type":36,"value":217},"'\u002Fcategorie\u002Fnouvelles-arrivees'",{"type":31,"tag":91,"props":219,"children":220},{"style":114},[221],{"type":36,"value":222},")) {\n",{"type":31,"tag":91,"props":224,"children":226},{"class":93,"line":225},6,[227,232,237,242,246,251],{"type":31,"tag":91,"props":228,"children":229},{"style":137},[230],{"type":36,"value":231},"    return",{"type":31,"tag":91,"props":233,"children":234},{"style":114},[235],{"type":36,"value":236}," event.",{"type":31,"tag":91,"props":238,"children":239},{"style":108},[240],{"type":36,"value":241},"respondWith",{"type":31,"tag":91,"props":243,"children":244},{"style":114},[245],{"type":36,"value":117},{"type":31,"tag":91,"props":247,"children":248},{"style":108},[249],{"type":36,"value":250},"fetch",{"type":31,"tag":91,"props":252,"children":253},{"style":114},[254],{"type":36,"value":255},"(event.request, {\n",{"type":31,"tag":91,"props":257,"children":259},{"class":93,"line":258},7,[260,265,270],{"type":31,"tag":91,"props":261,"children":262},{"style":114},[263],{"type":36,"value":264},"      backend: ",{"type":31,"tag":91,"props":266,"children":267},{"style":120},[268],{"type":36,"value":269},"'headless-origin'",{"type":31,"tag":91,"props":271,"children":272},{"style":98},[273],{"type":36,"value":274}," \u002F\u002F App Hydrogen sur Cloudflare Pages\n",{"type":31,"tag":91,"props":276,"children":278},{"class":93,"line":277},8,[279],{"type":31,"tag":91,"props":280,"children":281},{"style":114},[282],{"type":36,"value":283},"    }));\n",{"type":31,"tag":91,"props":285,"children":286},{"class":93,"line":25},[287],{"type":31,"tag":91,"props":288,"children":289},{"style":114},[290],{"type":36,"value":291},"  }\n",{"type":31,"tag":91,"props":293,"children":295},{"class":93,"line":294},10,[296],{"type":31,"tag":91,"props":297,"children":298},{"style":114},[299],{"type":36,"value":189},{"type":31,"tag":91,"props":301,"children":303},{"class":93,"line":302},11,[304,309,313,317,321,325],{"type":31,"tag":91,"props":305,"children":306},{"style":137},[307],{"type":36,"value":308},"  return",{"type":31,"tag":91,"props":310,"children":311},{"style":114},[312],{"type":36,"value":236},{"type":31,"tag":91,"props":314,"children":315},{"style":108},[316],{"type":36,"value":241},{"type":31,"tag":91,"props":318,"children":319},{"style":114},[320],{"type":36,"value":117},{"type":31,"tag":91,"props":322,"children":323},{"style":108},[324],{"type":36,"value":250},{"type":31,"tag":91,"props":326,"children":327},{"style":114},[328],{"type":36,"value":255},{"type":31,"tag":91,"props":330,"children":332},{"class":93,"line":331},12,[333,338],{"type":31,"tag":91,"props":334,"children":335},{"style":114},[336],{"type":36,"value":337},"    backend: ",{"type":31,"tag":91,"props":339,"children":340},{"style":120},[341],{"type":36,"value":342},"'legacy-shopify'\n",{"type":31,"tag":91,"props":344,"children":346},{"class":93,"line":345},13,[347],{"type":31,"tag":91,"props":348,"children":349},{"style":114},[350],{"type":36,"value":351},"  }));\n",{"type":31,"tag":91,"props":353,"children":355},{"class":93,"line":354},14,[356],{"type":31,"tag":91,"props":357,"children":358},{"style":114},[359],{"type":36,"value":360},"});\n",{"type":31,"tag":32,"props":362,"children":363},{},[364,366,372],{"type":36,"value":365},"Pendant 2-3 semaines, on surveille Core Web Vitals, conversion rate et les métriques de tunnel panier (ATC : add-to-cart). Les cibles : LCP \u003C2,5s, CLS \u003C0,1, transition ATC→checkout à ±2% près du legacy. Si le taux d'abandon de panier passe de 18% à 24% sur ",{"type":31,"tag":64,"props":367,"children":369},{"className":368},[],[370],{"type":36,"value":371},"nouvelles-arrivees",{"type":36,"value":373},", cela signale un problème logique dans le headless — par exemple, le TBT (Total Blocking Time) de l'hydratation React dépasse 800ms.",{"type":31,"tag":32,"props":375,"children":376},{},[377,382,384,390,391,397],{"type":31,"tag":51,"props":378,"children":379},{},[380],{"type":36,"value":381},"Deuxième phase :",{"type":36,"value":383}," pages principales de catégories (",{"type":31,"tag":64,"props":385,"children":387},{"className":386},[],[388],{"type":36,"value":389},"\u002Fcategorie\u002Fhomme",{"type":36,"value":128},{"type":31,"tag":64,"props":392,"children":394},{"className":393},[],[395],{"type":36,"value":396},"\u002Fcategorie\u002Ffemme",{"type":36,"value":398},"). Le trafic est multiplié par 10, SKU atteint 2000+. La stratégie d'hydratation change : hydratation partielle (inspirée d'Astro Islands) ou amélioration progressive (rendu HTML-first, interactivité lazy-loaded).",{"type":31,"tag":32,"props":400,"children":401},{},[402,407],{"type":31,"tag":51,"props":403,"children":404},{},[405],{"type":36,"value":406},"Troisième phase :",{"type":36,"value":408}," pages de détail produit (PDP). Puisque 60% du trafic SEO provient des PDP, cette étape inclut un test de parité title\u002Fmeta\u002Fstructured data (détail dans la section suivante).",{"type":31,"tag":32,"props":410,"children":411},{},[412,417],{"type":31,"tag":51,"props":413,"children":414},{},[415],{"type":36,"value":416},"Phase finale :",{"type":36,"value":418}," page d'accueil et checkout. Le checkout bascule vers headless en dernier car les intégrations de paiement (iyzico, PayTR) et les flux 3D Secure sont éprouvés en battle-test natif sur Shopify ; en headless, tout est nouveau. Même avec l'API Checkout Shopify, une erreur de rendu frontend = perte de commande.",{"type":31,"tag":39,"props":420,"children":422},{"id":421},"préservation-seo-test-de-parité-titlemetastructured-data",[423],{"type":36,"value":424},"Préservation SEO : Test de Parité Title\u002FMeta\u002FStructured Data",{"type":31,"tag":32,"props":426,"children":427},{},[428,430,436],{"type":36,"value":429},"Le plus grand risque SEO lors d'une migration headless vient de la re-crawl Google et du délai de mise à jour du ranking (4-6 semaines). Si durant ce laps de temps les title\u002Fmeta\u002Fstructured data d'URLs anciennes diffèrent (par exemple, le tag dynamique ",{"type":31,"tag":64,"props":431,"children":433},{"className":432},[],[434],{"type":36,"value":435},"og:price",{"type":36,"value":437}," ne se met pas à jour), le CTR chute.",{"type":31,"tag":32,"props":439,"children":440},{},[441],{"type":31,"tag":51,"props":442,"children":443},{},[444],{"type":36,"value":445},"Processus de test de parité :",{"type":31,"tag":447,"props":448,"children":449},"ol",{},[450,456,461],{"type":31,"tag":451,"props":452,"children":453},"li",{},[454],{"type":36,"value":455},"Extraire une liste d'URLs depuis Shopify legacy (top 500 landing pages organiques via GSC).",{"type":31,"tag":451,"props":457,"children":458},{},[459],{"type":36,"value":460},"Faire rendu des mêmes URLs sur le frontend headless, capturer les snapshots HTML.",{"type":31,"tag":451,"props":462,"children":463},{},[464,466,472,474,480],{"type":36,"value":465},"Comparer avec un outil diff (",{"type":31,"tag":64,"props":467,"children":469},{"className":468},[],[470],{"type":36,"value":471},"htmldiff",{"type":36,"value":473},", script custom avec ",{"type":31,"tag":64,"props":475,"children":477},{"className":476},[],[478],{"type":36,"value":479},"cheerio",{"type":36,"value":481},") :",{"type":31,"tag":81,"props":483,"children":485},{"className":83,"code":484,"language":85,"meta":14,"style":14},"\u002F\u002F headless-seo-parity.js\nimport fetch from 'node-fetch';\nimport * as cheerio from 'cheerio';\n\nasync function compareSEO(url) {\n  const [legacyHTML, headlessHTML] = await Promise.all([\n    fetch(`https:\u002F\u002Flegacy.example.com${url}`).then(r => r.text()),\n    fetch(`https:\u002F\u002Fheadless.example.com${url}`).then(r => r.text())\n  ]);\n  \n  const legacy$ = cheerio.load(legacyHTML);\n  const headless$ = cheerio.load(headlessHTML);\n  \n  const diffs = {\n    title: legacy$('title').text() !== headless$('title').text(),\n    metaDesc: legacy$('meta[name=\"description\"]').attr('content') !== \n              headless$('meta[name=\"description\"]').attr('content'),\n    canonical: legacy$('link[rel=\"canonical\"]').attr('href') !== \n               headless$('link[rel=\"canonical\"]').attr('href'),\n    jsonLD: legacy$('script[type=\"application\u002Fld+json\"]').html() !== \n            headless$('script[type=\"application\u002Fld+json\"]').html()\n  };\n  \n  return { url, diffs };\n}\n\n\u002F\u002F Exécution pour top 500 URLs\nconst results = await Promise.all(topUrls.map(compareSEO));\nconst failures = results.filter(r => Object.values(r.diffs).some(d => d));\nconsole.log(`${failures.length} URLs avec divergence SEO meta`);\n",[486],{"type":31,"tag":64,"props":487,"children":488},{"__ignoreMap":14},[489,497,525,560,569,601,662,725,782,790,797,828,857,864,884,950,1004,1042,1093,1130,1173,1203,1212,1220,1233,1242,1250,1259,1308,1385],{"type":31,"tag":91,"props":490,"children":491},{"class":93,"line":94},[492],{"type":31,"tag":91,"props":493,"children":494},{"style":98},[495],{"type":36,"value":496},"\u002F\u002F headless-seo-parity.js\n",{"type":31,"tag":91,"props":498,"children":499},{"class":93,"line":104},[500,505,510,515,520],{"type":31,"tag":91,"props":501,"children":502},{"style":137},[503],{"type":36,"value":504},"import",{"type":31,"tag":91,"props":506,"children":507},{"style":114},[508],{"type":36,"value":509}," fetch ",{"type":31,"tag":91,"props":511,"children":512},{"style":137},[513],{"type":36,"value":514},"from",{"type":31,"tag":91,"props":516,"children":517},{"style":120},[518],{"type":36,"value":519}," 'node-fetch'",{"type":31,"tag":91,"props":521,"children":522},{"style":114},[523],{"type":36,"value":524},";\n",{"type":31,"tag":91,"props":526,"children":527},{"class":93,"line":148},[528,532,537,542,547,551,556],{"type":31,"tag":91,"props":529,"children":530},{"style":137},[531],{"type":36,"value":504},{"type":31,"tag":91,"props":533,"children":534},{"style":157},[535],{"type":36,"value":536}," *",{"type":31,"tag":91,"props":538,"children":539},{"style":137},[540],{"type":36,"value":541}," as",{"type":31,"tag":91,"props":543,"children":544},{"style":114},[545],{"type":36,"value":546}," cheerio ",{"type":31,"tag":91,"props":548,"children":549},{"style":137},[550],{"type":36,"value":514},{"type":31,"tag":91,"props":552,"children":553},{"style":120},[554],{"type":36,"value":555}," 'cheerio'",{"type":31,"tag":91,"props":557,"children":558},{"style":114},[559],{"type":36,"value":524},{"type":31,"tag":91,"props":561,"children":562},{"class":93,"line":183},[563],{"type":31,"tag":91,"props":564,"children":566},{"emptyLinePlaceholder":565},true,[567],{"type":36,"value":568},"\n",{"type":31,"tag":91,"props":570,"children":571},{"class":93,"line":192},[572,577,582,587,591,596],{"type":31,"tag":91,"props":573,"children":574},{"style":137},[575],{"type":36,"value":576},"async",{"type":31,"tag":91,"props":578,"children":579},{"style":137},[580],{"type":36,"value":581}," function",{"type":31,"tag":91,"props":583,"children":584},{"style":108},[585],{"type":36,"value":586}," compareSEO",{"type":31,"tag":91,"props":588,"children":589},{"style":114},[590],{"type":36,"value":117},{"type":31,"tag":91,"props":592,"children":593},{"style":131},[594],{"type":36,"value":595},"url",{"type":31,"tag":91,"props":597,"children":598},{"style":114},[599],{"type":36,"value":600},") {\n",{"type":31,"tag":91,"props":602,"children":603},{"class":93,"line":225},[604,608,613,618,622,627,632,637,642,647,652,657],{"type":31,"tag":91,"props":605,"children":606},{"style":137},[607],{"type":36,"value":154},{"type":31,"tag":91,"props":609,"children":610},{"style":114},[611],{"type":36,"value":612}," [",{"type":31,"tag":91,"props":614,"children":615},{"style":157},[616],{"type":36,"value":617},"legacyHTML",{"type":31,"tag":91,"props":619,"children":620},{"style":114},[621],{"type":36,"value":128},{"type":31,"tag":91,"props":623,"children":624},{"style":157},[625],{"type":36,"value":626},"headlessHTML",{"type":31,"tag":91,"props":628,"children":629},{"style":114},[630],{"type":36,"value":631},"] ",{"type":31,"tag":91,"props":633,"children":634},{"style":137},[635],{"type":36,"value":636},"=",{"type":31,"tag":91,"props":638,"children":639},{"style":137},[640],{"type":36,"value":641}," await",{"type":31,"tag":91,"props":643,"children":644},{"style":157},[645],{"type":36,"value":646}," Promise",{"type":31,"tag":91,"props":648,"children":649},{"style":114},[650],{"type":36,"value":651},".",{"type":31,"tag":91,"props":653,"children":654},{"style":108},[655],{"type":36,"value":656},"all",{"type":31,"tag":91,"props":658,"children":659},{"style":114},[660],{"type":36,"value":661},"([\n",{"type":31,"tag":91,"props":663,"children":664},{"class":93,"line":258},[665,670,674,679,683,688,693,698,702,707,711,716,720],{"type":31,"tag":91,"props":666,"children":667},{"style":108},[668],{"type":36,"value":669},"    fetch",{"type":31,"tag":91,"props":671,"children":672},{"style":114},[673],{"type":36,"value":117},{"type":31,"tag":91,"props":675,"children":676},{"style":120},[677],{"type":36,"value":678},"`https:\u002F\u002Flegacy.example.com${",{"type":31,"tag":91,"props":680,"children":681},{"style":114},[682],{"type":36,"value":595},{"type":31,"tag":91,"props":684,"children":685},{"style":120},[686],{"type":36,"value":687},"}`",{"type":31,"tag":91,"props":689,"children":690},{"style":114},[691],{"type":36,"value":692},").",{"type":31,"tag":91,"props":694,"children":695},{"style":108},[696],{"type":36,"value":697},"then",{"type":31,"tag":91,"props":699,"children":700},{"style":114},[701],{"type":36,"value":117},{"type":31,"tag":91,"props":703,"children":704},{"style":131},[705],{"type":36,"value":706},"r",{"type":31,"tag":91,"props":708,"children":709},{"style":137},[710],{"type":36,"value":140},{"type":31,"tag":91,"props":712,"children":713},{"style":114},[714],{"type":36,"value":715}," r.",{"type":31,"tag":91,"props":717,"children":718},{"style":108},[719],{"type":36,"value":36},{"type":31,"tag":91,"props":721,"children":722},{"style":114},[723],{"type":36,"value":724},"()),\n",{"type":31,"tag":91,"props":726,"children":727},{"class":93,"line":277},[728,732,736,741,745,749,753,757,761,765,769,773,777],{"type":31,"tag":91,"props":729,"children":730},{"style":108},[731],{"type":36,"value":669},{"type":31,"tag":91,"props":733,"children":734},{"style":114},[735],{"type":36,"value":117},{"type":31,"tag":91,"props":737,"children":738},{"style":120},[739],{"type":36,"value":740},"`https:\u002F\u002Fheadless.example.com${",{"type":31,"tag":91,"props":742,"children":743},{"style":114},[744],{"type":36,"value":595},{"type":31,"tag":91,"props":746,"children":747},{"style":120},[748],{"type":36,"value":687},{"type":31,"tag":91,"props":750,"children":751},{"style":114},[752],{"type":36,"value":692},{"type":31,"tag":91,"props":754,"children":755},{"style":108},[756],{"type":36,"value":697},{"type":31,"tag":91,"props":758,"children":759},{"style":114},[760],{"type":36,"value":117},{"type":31,"tag":91,"props":762,"children":763},{"style":131},[764],{"type":36,"value":706},{"type":31,"tag":91,"props":766,"children":767},{"style":137},[768],{"type":36,"value":140},{"type":31,"tag":91,"props":770,"children":771},{"style":114},[772],{"type":36,"value":715},{"type":31,"tag":91,"props":774,"children":775},{"style":108},[776],{"type":36,"value":36},{"type":31,"tag":91,"props":778,"children":779},{"style":114},[780],{"type":36,"value":781},"())\n",{"type":31,"tag":91,"props":783,"children":784},{"class":93,"line":25},[785],{"type":31,"tag":91,"props":786,"children":787},{"style":114},[788],{"type":36,"value":789},"  ]);\n",{"type":31,"tag":91,"props":791,"children":792},{"class":93,"line":294},[793],{"type":31,"tag":91,"props":794,"children":795},{"style":114},[796],{"type":36,"value":189},{"type":31,"tag":91,"props":798,"children":799},{"class":93,"line":302},[800,804,809,813,818,823],{"type":31,"tag":91,"props":801,"children":802},{"style":137},[803],{"type":36,"value":154},{"type":31,"tag":91,"props":805,"children":806},{"style":157},[807],{"type":36,"value":808}," legacy$",{"type":31,"tag":91,"props":810,"children":811},{"style":137},[812],{"type":36,"value":165},{"type":31,"tag":91,"props":814,"children":815},{"style":114},[816],{"type":36,"value":817}," cheerio.",{"type":31,"tag":91,"props":819,"children":820},{"style":108},[821],{"type":36,"value":822},"load",{"type":31,"tag":91,"props":824,"children":825},{"style":114},[826],{"type":36,"value":827},"(legacyHTML);\n",{"type":31,"tag":91,"props":829,"children":830},{"class":93,"line":331},[831,835,840,844,848,852],{"type":31,"tag":91,"props":832,"children":833},{"style":137},[834],{"type":36,"value":154},{"type":31,"tag":91,"props":836,"children":837},{"style":157},[838],{"type":36,"value":839}," headless$",{"type":31,"tag":91,"props":841,"children":842},{"style":137},[843],{"type":36,"value":165},{"type":31,"tag":91,"props":845,"children":846},{"style":114},[847],{"type":36,"value":817},{"type":31,"tag":91,"props":849,"children":850},{"style":108},[851],{"type":36,"value":822},{"type":31,"tag":91,"props":853,"children":854},{"style":114},[855],{"type":36,"value":856},"(headlessHTML);\n",{"type":31,"tag":91,"props":858,"children":859},{"class":93,"line":345},[860],{"type":31,"tag":91,"props":861,"children":862},{"style":114},[863],{"type":36,"value":189},{"type":31,"tag":91,"props":865,"children":866},{"class":93,"line":354},[867,871,876,880],{"type":31,"tag":91,"props":868,"children":869},{"style":137},[870],{"type":36,"value":154},{"type":31,"tag":91,"props":872,"children":873},{"style":157},[874],{"type":36,"value":875}," diffs",{"type":31,"tag":91,"props":877,"children":878},{"style":137},[879],{"type":36,"value":165},{"type":31,"tag":91,"props":881,"children":882},{"style":114},[883],{"type":36,"value":145},{"type":31,"tag":91,"props":885,"children":887},{"class":93,"line":886},15,[888,893,898,902,907,911,915,920,925,929,933,937,941,945],{"type":31,"tag":91,"props":889,"children":890},{"style":114},[891],{"type":36,"value":892},"    title: ",{"type":31,"tag":91,"props":894,"children":895},{"style":108},[896],{"type":36,"value":897},"legacy$",{"type":31,"tag":91,"props":899,"children":900},{"style":114},[901],{"type":36,"value":117},{"type":31,"tag":91,"props":903,"children":904},{"style":120},[905],{"type":36,"value":906},"'title'",{"type":31,"tag":91,"props":908,"children":909},{"style":114},[910],{"type":36,"value":692},{"type":31,"tag":91,"props":912,"children":913},{"style":108},[914],{"type":36,"value":36},{"type":31,"tag":91,"props":916,"children":917},{"style":114},[918],{"type":36,"value":919},"() ",{"type":31,"tag":91,"props":921,"children":922},{"style":137},[923],{"type":36,"value":924},"!==",{"type":31,"tag":91,"props":926,"children":927},{"style":108},[928],{"type":36,"value":839},{"type":31,"tag":91,"props":930,"children":931},{"style":114},[932],{"type":36,"value":117},{"type":31,"tag":91,"props":934,"children":935},{"style":120},[936],{"type":36,"value":906},{"type":31,"tag":91,"props":938,"children":939},{"style":114},[940],{"type":36,"value":692},{"type":31,"tag":91,"props":942,"children":943},{"style":108},[944],{"type":36,"value":36},{"type":31,"tag":91,"props":946,"children":947},{"style":114},[948],{"type":36,"value":949},"(),\n",{"type":31,"tag":91,"props":951,"children":953},{"class":93,"line":952},16,[954,959,963,967,972,976,981,985,990,995,999],{"type":31,"tag":91,"props":955,"children":956},{"style":114},[957],{"type":36,"value":958},"    metaDesc: ",{"type":31,"tag":91,"props":960,"children":961},{"style":108},[962],{"type":36,"value":897},{"type":31,"tag":91,"props":964,"children":965},{"style":114},[966],{"type":36,"value":117},{"type":31,"tag":91,"props":968,"children":969},{"style":120},[970],{"type":36,"value":971},"'meta[name=\"description\"]'",{"type":31,"tag":91,"props":973,"children":974},{"style":114},[975],{"type":36,"value":692},{"type":31,"tag":91,"props":977,"children":978},{"style":108},[979],{"type":36,"value":980},"attr",{"type":31,"tag":91,"props":982,"children":983},{"style":114},[984],{"type":36,"value":117},{"type":31,"tag":91,"props":986,"children":987},{"style":120},[988],{"type":36,"value":989},"'content'",{"type":31,"tag":91,"props":991,"children":992},{"style":114},[993],{"type":36,"value":994},") ",{"type":31,"tag":91,"props":996,"children":997},{"style":137},[998],{"type":36,"value":924},{"type":31,"tag":91,"props":1000,"children":1001},{"style":114},[1002],{"type":36,"value":1003}," \n",{"type":31,"tag":91,"props":1005,"children":1007},{"class":93,"line":1006},17,[1008,1013,1017,1021,1025,1029,1033,1037],{"type":31,"tag":91,"props":1009,"children":1010},{"style":108},[1011],{"type":36,"value":1012},"              headless$",{"type":31,"tag":91,"props":1014,"children":1015},{"style":114},[1016],{"type":36,"value":117},{"type":31,"tag":91,"props":1018,"children":1019},{"style":120},[1020],{"type":36,"value":971},{"type":31,"tag":91,"props":1022,"children":1023},{"style":114},[1024],{"type":36,"value":692},{"type":31,"tag":91,"props":1026,"children":1027},{"style":108},[1028],{"type":36,"value":980},{"type":31,"tag":91,"props":1030,"children":1031},{"style":114},[1032],{"type":36,"value":117},{"type":31,"tag":91,"props":1034,"children":1035},{"style":120},[1036],{"type":36,"value":989},{"type":31,"tag":91,"props":1038,"children":1039},{"style":114},[1040],{"type":36,"value":1041},"),\n",{"type":31,"tag":91,"props":1043,"children":1045},{"class":93,"line":1044},18,[1046,1051,1055,1059,1064,1068,1072,1076,1081,1085,1089],{"type":31,"tag":91,"props":1047,"children":1048},{"style":114},[1049],{"type":36,"value":1050},"    canonical: ",{"type":31,"tag":91,"props":1052,"children":1053},{"style":108},[1054],{"type":36,"value":897},{"type":31,"tag":91,"props":1056,"children":1057},{"style":114},[1058],{"type":36,"value":117},{"type":31,"tag":91,"props":1060,"children":1061},{"style":120},[1062],{"type":36,"value":1063},"'link[rel=\"canonical\"]'",{"type":31,"tag":91,"props":1065,"children":1066},{"style":114},[1067],{"type":36,"value":692},{"type":31,"tag":91,"props":1069,"children":1070},{"style":108},[1071],{"type":36,"value":980},{"type":31,"tag":91,"props":1073,"children":1074},{"style":114},[1075],{"type":36,"value":117},{"type":31,"tag":91,"props":1077,"children":1078},{"style":120},[1079],{"type":36,"value":1080},"'href'",{"type":31,"tag":91,"props":1082,"children":1083},{"style":114},[1084],{"type":36,"value":994},{"type":31,"tag":91,"props":1086,"children":1087},{"style":137},[1088],{"type":36,"value":924},{"type":31,"tag":91,"props":1090,"children":1091},{"style":114},[1092],{"type":36,"value":1003},{"type":31,"tag":91,"props":1094,"children":1096},{"class":93,"line":1095},19,[1097,1102,1106,1110,1114,1118,1122,1126],{"type":31,"tag":91,"props":1098,"children":1099},{"style":108},[1100],{"type":36,"value":1101},"               headless$",{"type":31,"tag":91,"props":1103,"children":1104},{"style":114},[1105],{"type":36,"value":117},{"type":31,"tag":91,"props":1107,"children":1108},{"style":120},[1109],{"type":36,"value":1063},{"type":31,"tag":91,"props":1111,"children":1112},{"style":114},[1113],{"type":36,"value":692},{"type":31,"tag":91,"props":1115,"children":1116},{"style":108},[1117],{"type":36,"value":980},{"type":31,"tag":91,"props":1119,"children":1120},{"style":114},[1121],{"type":36,"value":117},{"type":31,"tag":91,"props":1123,"children":1124},{"style":120},[1125],{"type":36,"value":1080},{"type":31,"tag":91,"props":1127,"children":1128},{"style":114},[1129],{"type":36,"value":1041},{"type":31,"tag":91,"props":1131,"children":1133},{"class":93,"line":1132},20,[1134,1139,1143,1147,1152,1156,1161,1165,1169],{"type":31,"tag":91,"props":1135,"children":1136},{"style":114},[1137],{"type":36,"value":1138},"    jsonLD: ",{"type":31,"tag":91,"props":1140,"children":1141},{"style":108},[1142],{"type":36,"value":897},{"type":31,"tag":91,"props":1144,"children":1145},{"style":114},[1146],{"type":36,"value":117},{"type":31,"tag":91,"props":1148,"children":1149},{"style":120},[1150],{"type":36,"value":1151},"'script[type=\"application\u002Fld+json\"]'",{"type":31,"tag":91,"props":1153,"children":1154},{"style":114},[1155],{"type":36,"value":692},{"type":31,"tag":91,"props":1157,"children":1158},{"style":108},[1159],{"type":36,"value":1160},"html",{"type":31,"tag":91,"props":1162,"children":1163},{"style":114},[1164],{"type":36,"value":919},{"type":31,"tag":91,"props":1166,"children":1167},{"style":137},[1168],{"type":36,"value":924},{"type":31,"tag":91,"props":1170,"children":1171},{"style":114},[1172],{"type":36,"value":1003},{"type":31,"tag":91,"props":1174,"children":1176},{"class":93,"line":1175},21,[1177,1182,1186,1190,1194,1198],{"type":31,"tag":91,"props":1178,"children":1179},{"style":108},[1180],{"type":36,"value":1181},"            headless$",{"type":31,"tag":91,"props":1183,"children":1184},{"style":114},[1185],{"type":36,"value":117},{"type":31,"tag":91,"props":1187,"children":1188},{"style":120},[1189],{"type":36,"value":1151},{"type":31,"tag":91,"props":1191,"children":1192},{"style":114},[1193],{"type":36,"value":692},{"type":31,"tag":91,"props":1195,"children":1196},{"style":108},[1197],{"type":36,"value":1160},{"type":31,"tag":91,"props":1199,"children":1200},{"style":114},[1201],{"type":36,"value":1202},"()\n",{"type":31,"tag":91,"props":1204,"children":1206},{"class":93,"line":1205},22,[1207],{"type":31,"tag":91,"props":1208,"children":1209},{"style":114},[1210],{"type":36,"value":1211},"  };\n",{"type":31,"tag":91,"props":1213,"children":1215},{"class":93,"line":1214},23,[1216],{"type":31,"tag":91,"props":1217,"children":1218},{"style":114},[1219],{"type":36,"value":189},{"type":31,"tag":91,"props":1221,"children":1223},{"class":93,"line":1222},24,[1224,1228],{"type":31,"tag":91,"props":1225,"children":1226},{"style":137},[1227],{"type":36,"value":308},{"type":31,"tag":91,"props":1229,"children":1230},{"style":114},[1231],{"type":36,"value":1232}," { url, diffs };\n",{"type":31,"tag":91,"props":1234,"children":1236},{"class":93,"line":1235},25,[1237],{"type":31,"tag":91,"props":1238,"children":1239},{"style":114},[1240],{"type":36,"value":1241},"}\n",{"type":31,"tag":91,"props":1243,"children":1245},{"class":93,"line":1244},26,[1246],{"type":31,"tag":91,"props":1247,"children":1248},{"emptyLinePlaceholder":565},[1249],{"type":36,"value":568},{"type":31,"tag":91,"props":1251,"children":1253},{"class":93,"line":1252},27,[1254],{"type":31,"tag":91,"props":1255,"children":1256},{"style":98},[1257],{"type":36,"value":1258},"\u002F\u002F Exécution pour top 500 URLs\n",{"type":31,"tag":91,"props":1260,"children":1262},{"class":93,"line":1261},28,[1263,1268,1273,1277,1281,1285,1289,1293,1298,1303],{"type":31,"tag":91,"props":1264,"children":1265},{"style":137},[1266],{"type":36,"value":1267},"const",{"type":31,"tag":91,"props":1269,"children":1270},{"style":157},[1271],{"type":36,"value":1272}," results",{"type":31,"tag":91,"props":1274,"children":1275},{"style":137},[1276],{"type":36,"value":165},{"type":31,"tag":91,"props":1278,"children":1279},{"style":137},[1280],{"type":36,"value":641},{"type":31,"tag":91,"props":1282,"children":1283},{"style":157},[1284],{"type":36,"value":646},{"type":31,"tag":91,"props":1286,"children":1287},{"style":114},[1288],{"type":36,"value":651},{"type":31,"tag":91,"props":1290,"children":1291},{"style":108},[1292],{"type":36,"value":656},{"type":31,"tag":91,"props":1294,"children":1295},{"style":114},[1296],{"type":36,"value":1297},"(topUrls.",{"type":31,"tag":91,"props":1299,"children":1300},{"style":108},[1301],{"type":36,"value":1302},"map",{"type":31,"tag":91,"props":1304,"children":1305},{"style":114},[1306],{"type":36,"value":1307},"(compareSEO));\n",{"type":31,"tag":91,"props":1309,"children":1311},{"class":93,"line":1310},29,[1312,1316,1321,1325,1330,1335,1339,1343,1347,1352,1357,1362,1367,1371,1376,1380],{"type":31,"tag":91,"props":1313,"children":1314},{"style":137},[1315],{"type":36,"value":1267},{"type":31,"tag":91,"props":1317,"children":1318},{"style":157},[1319],{"type":36,"value":1320}," failures",{"type":31,"tag":91,"props":1322,"children":1323},{"style":137},[1324],{"type":36,"value":165},{"type":31,"tag":91,"props":1326,"children":1327},{"style":114},[1328],{"type":36,"value":1329}," results.",{"type":31,"tag":91,"props":1331,"children":1332},{"style":108},[1333],{"type":36,"value":1334},"filter",{"type":31,"tag":91,"props":1336,"children":1337},{"style":114},[1338],{"type":36,"value":117},{"type":31,"tag":91,"props":1340,"children":1341},{"style":131},[1342],{"type":36,"value":706},{"type":31,"tag":91,"props":1344,"children":1345},{"style":137},[1346],{"type":36,"value":140},{"type":31,"tag":91,"props":1348,"children":1349},{"style":114},[1350],{"type":36,"value":1351}," Object.",{"type":31,"tag":91,"props":1353,"children":1354},{"style":108},[1355],{"type":36,"value":1356},"values",{"type":31,"tag":91,"props":1358,"children":1359},{"style":114},[1360],{"type":36,"value":1361},"(r.diffs).",{"type":31,"tag":91,"props":1363,"children":1364},{"style":108},[1365],{"type":36,"value":1366},"some",{"type":31,"tag":91,"props":1368,"children":1369},{"style":114},[1370],{"type":36,"value":117},{"type":31,"tag":91,"props":1372,"children":1373},{"style":131},[1374],{"type":36,"value":1375},"d",{"type":31,"tag":91,"props":1377,"children":1378},{"style":137},[1379],{"type":36,"value":140},{"type":31,"tag":91,"props":1381,"children":1382},{"style":114},[1383],{"type":36,"value":1384}," d));\n",{"type":31,"tag":91,"props":1386,"children":1388},{"class":93,"line":1387},30,[1389,1394,1399,1403,1408,1413,1417,1422,1427],{"type":31,"tag":91,"props":1390,"children":1391},{"style":114},[1392],{"type":36,"value":1393},"console.",{"type":31,"tag":91,"props":1395,"children":1396},{"style":108},[1397],{"type":36,"value":1398},"log",{"type":31,"tag":91,"props":1400,"children":1401},{"style":114},[1402],{"type":36,"value":117},{"type":31,"tag":91,"props":1404,"children":1405},{"style":120},[1406],{"type":36,"value":1407},"`${",{"type":31,"tag":91,"props":1409,"children":1410},{"style":114},[1411],{"type":36,"value":1412},"failures",{"type":31,"tag":91,"props":1414,"children":1415},{"style":120},[1416],{"type":36,"value":651},{"type":31,"tag":91,"props":1418,"children":1419},{"style":157},[1420],{"type":36,"value":1421},"length",{"type":31,"tag":91,"props":1423,"children":1424},{"style":120},[1425],{"type":36,"value":1426},"} URLs avec divergence SEO meta`",{"type":31,"tag":91,"props":1428,"children":1429},{"style":114},[1430],{"type":36,"value":1431},");\n",{"type":31,"tag":32,"props":1433,"children":1434},{},[1435],{"type":36,"value":1436},"Si >5% des URLs présentent des divergences, arrêter la migration. Par exemple, si les meta descriptions dynamiques tirées des metafields Shopify sont absentes de la query GraphQL headless, cette perte affecte 500 pages organiques et peut entraîner une chute de trafic de 12-18% (données Search Console 2025).",{"type":31,"tag":32,"props":1438,"children":1439},{},[1440,1445,1447,1453,1455,1461,1463,1469,1471,1477,1479,1485],{"type":31,"tag":51,"props":1441,"children":1442},{},[1443],{"type":36,"value":1444},"Test d'URL canonique :",{"type":36,"value":1446}," En headless, le chemin passe souvent de ",{"type":31,"tag":64,"props":1448,"children":1450},{"className":1449},[],[1451],{"type":36,"value":1452},"\u002Fproducts\u002F{handle}",{"type":36,"value":1454}," à ",{"type":31,"tag":64,"props":1456,"children":1458},{"className":1457},[],[1459],{"type":36,"value":1460},"\u002Fp\u002F{id}",{"type":36,"value":1462}," (optimisation routing). Cela exige une combinaison redirection 301 + tag canonical sur les URLs anciennes. Vérification : ",{"type":31,"tag":64,"props":1464,"children":1466},{"className":1465},[],[1467],{"type":36,"value":1468},"curl -I https:\u002F\u002Fheadless.example.com\u002Fold-path",{"type":36,"value":1470}," → ",{"type":31,"tag":64,"props":1472,"children":1474},{"className":1473},[],[1475],{"type":36,"value":1476},"301 → \u002Fnew-path",{"type":36,"value":1478}," et ",{"type":31,"tag":64,"props":1480,"children":1482},{"className":1481},[],[1483],{"type":36,"value":1484},"\u003Clink rel=\"canonical\" href=\"\u002Fnew-path\">",{"type":36,"value":651},{"type":31,"tag":39,"props":1487,"children":1489},{"id":1488},"analyse-de-spike-dabandon-panier-atc",[1490],{"type":36,"value":1491},"Analyse de Spike d'Abandon Panier ATC",{"type":31,"tag":32,"props":1493,"children":1494},{},[1495],{"type":36,"value":1496},"Le problème le plus courant après migration headless : l'utilisateur clique sur \"Ajouter au panier\", rien ne se passe ou le spinner tourne 3 secondes avant timeout. Cause : généralement le rate limit de l'API Storefront Shopify (50 req\u002Fs par défaut, burst jusqu'à 100).",{"type":31,"tag":32,"props":1498,"children":1499},{},[1500],{"type":31,"tag":51,"props":1501,"children":1502},{},[1503],{"type":36,"value":1504},"Configuration du monitoring :",{"type":31,"tag":81,"props":1506,"children":1508},{"className":83,"code":1507,"language":85,"meta":14,"style":14},"\u002F\u002F Suivi événement ATC — app headless\nasync function addToCart(variantId, quantity) {\n  const startTime = performance.now();\n  \n  try {\n    const response = await fetch('\u002Fapi\u002Fcart\u002Fadd', {\n      method: 'POST',\n      body: JSON.stringify({ variantId, quantity })\n    });\n    \n    const duration = performance.now() - startTime;\n    \n    \u002F\u002F RUM beacon\n    navigator.sendBeacon('\u002Fanalytics\u002Fatc', JSON.stringify({\n      success: response.ok,\n      duration,\n      variantId,\n      timestamp: Date.now()\n    }));\n    \n    if (!response.ok) {\n      \u002F\u002F UI fallback en cas d'erreur\n      showErrorToast('Erreur mise à jour panier, veuillez réessayer');\n    }\n  } catch (err) {\n    \u002F\u002F Network timeout — critique\n    reportError('ATC_TIMEOUT', { variantId, error: err.message });\n  }\n}\n",[1509],{"type":31,"tag":64,"props":1510,"children":1511},{"__ignoreMap":14},[1512,1520,1558,1589,1596,1608,1648,1666,1693,1701,1709,1747,1754,1762,1805,1813,1821,1829,1845,1852,1859,1882,1890,1911,1919,1937,1945,1967,1974],{"type":31,"tag":91,"props":1513,"children":1514},{"class":93,"line":94},[1515],{"type":31,"tag":91,"props":1516,"children":1517},{"style":98},[1518],{"type":36,"value":1519},"\u002F\u002F Suivi événement ATC — app headless\n",{"type":31,"tag":91,"props":1521,"children":1522},{"class":93,"line":104},[1523,1527,1531,1536,1540,1545,1549,1554],{"type":31,"tag":91,"props":1524,"children":1525},{"style":137},[1526],{"type":36,"value":576},{"type":31,"tag":91,"props":1528,"children":1529},{"style":137},[1530],{"type":36,"value":581},{"type":31,"tag":91,"props":1532,"children":1533},{"style":108},[1534],{"type":36,"value":1535}," addToCart",{"type":31,"tag":91,"props":1537,"children":1538},{"style":114},[1539],{"type":36,"value":117},{"type":31,"tag":91,"props":1541,"children":1542},{"style":131},[1543],{"type":36,"value":1544},"variantId",{"type":31,"tag":91,"props":1546,"children":1547},{"style":114},[1548],{"type":36,"value":128},{"type":31,"tag":91,"props":1550,"children":1551},{"style":131},[1552],{"type":36,"value":1553},"quantity",{"type":31,"tag":91,"props":1555,"children":1556},{"style":114},[1557],{"type":36,"value":600},{"type":31,"tag":91,"props":1559,"children":1560},{"class":93,"line":148},[1561,1565,1570,1574,1579,1584],{"type":31,"tag":91,"props":1562,"children":1563},{"style":137},[1564],{"type":36,"value":154},{"type":31,"tag":91,"props":1566,"children":1567},{"style":157},[1568],{"type":36,"value":1569}," startTime",{"type":31,"tag":91,"props":1571,"children":1572},{"style":137},[1573],{"type":36,"value":165},{"type":31,"tag":91,"props":1575,"children":1576},{"style":114},[1577],{"type":36,"value":1578}," performance.",{"type":31,"tag":91,"props":1580,"children":1581},{"style":108},[1582],{"type":36,"value":1583},"now",{"type":31,"tag":91,"props":1585,"children":1586},{"style":114},[1587],{"type":36,"value":1588},"();\n",{"type":31,"tag":91,"props":1590,"children":1591},{"class":93,"line":183},[1592],{"type":31,"tag":91,"props":1593,"children":1594},{"style":114},[1595],{"type":36,"value":189},{"type":31,"tag":91,"props":1597,"children":1598},{"class":93,"line":192},[1599,1604],{"type":31,"tag":91,"props":1600,"children":1601},{"style":137},[1602],{"type":36,"value":1603},"  try",{"type":31,"tag":91,"props":1605,"children":1606},{"style":114},[1607],{"type":36,"value":145},{"type":31,"tag":91,"props":1609,"children":1610},{"class":93,"line":225},[1611,1616,1621,1625,1629,1634,1638,1643],{"type":31,"tag":91,"props":1612,"children":1613},{"style":137},[1614],{"type":36,"value":1615},"    const",{"type":31,"tag":91,"props":1617,"children":1618},{"style":157},[1619],{"type":36,"value":1620}," response",{"type":31,"tag":91,"props":1622,"children":1623},{"style":137},[1624],{"type":36,"value":165},{"type":31,"tag":91,"props":1626,"children":1627},{"style":137},[1628],{"type":36,"value":641},{"type":31,"tag":91,"props":1630,"children":1631},{"style":108},[1632],{"type":36,"value":1633}," fetch",{"type":31,"tag":91,"props":1635,"children":1636},{"style":114},[1637],{"type":36,"value":117},{"type":31,"tag":91,"props":1639,"children":1640},{"style":120},[1641],{"type":36,"value":1642},"'\u002Fapi\u002Fcart\u002Fadd'",{"type":31,"tag":91,"props":1644,"children":1645},{"style":114},[1646],{"type":36,"value":1647},", {\n",{"type":31,"tag":91,"props":1649,"children":1650},{"class":93,"line":258},[1651,1656,1661],{"type":31,"tag":91,"props":1652,"children":1653},{"style":114},[1654],{"type":36,"value":1655},"      method: ",{"type":31,"tag":91,"props":1657,"children":1658},{"style":120},[1659],{"type":36,"value":1660},"'POST'",{"type":31,"tag":91,"props":1662,"children":1663},{"style":114},[1664],{"type":36,"value":1665},",\n",{"type":31,"tag":91,"props":1667,"children":1668},{"class":93,"line":277},[1669,1674,1679,1683,1688],{"type":31,"tag":91,"props":1670,"children":1671},{"style":114},[1672],{"type":36,"value":1673},"      body: ",{"type":31,"tag":91,"props":1675,"children":1676},{"style":157},[1677],{"type":36,"value":1678},"JSON",{"type":31,"tag":91,"props":1680,"children":1681},{"style":114},[1682],{"type":36,"value":651},{"type":31,"tag":91,"props":1684,"children":1685},{"style":108},[1686],{"type":36,"value":1687},"stringify",{"type":31,"tag":91,"props":1689,"children":1690},{"style":114},[1691],{"type":36,"value":1692},"({ variantId, quantity })\n",{"type":31,"tag":91,"props":1694,"children":1695},{"class":93,"line":25},[1696],{"type":31,"tag":91,"props":1697,"children":1698},{"style":114},[1699],{"type":36,"value":1700},"    });\n",{"type":31,"tag":91,"props":1702,"children":1703},{"class":93,"line":294},[1704],{"type":31,"tag":91,"props":1705,"children":1706},{"style":114},[1707],{"type":36,"value":1708},"    \n",{"type":31,"tag":91,"props":1710,"children":1711},{"class":93,"line":302},[1712,1716,1721,1725,1729,1733,1737,1742],{"type":31,"tag":91,"props":1713,"children":1714},{"style":137},[1715],{"type":36,"value":1615},{"type":31,"tag":91,"props":1717,"children":1718},{"style":157},[1719],{"type":36,"value":1720}," duration",{"type":31,"tag":91,"props":1722,"children":1723},{"style":137},[1724],{"type":36,"value":165},{"type":31,"tag":91,"props":1726,"children":1727},{"style":114},[1728],{"type":36,"value":1578},{"type":31,"tag":91,"props":1730,"children":1731},{"style":108},[1732],{"type":36,"value":1583},{"type":31,"tag":91,"props":1734,"children":1735},{"style":114},[1736],{"type":36,"value":919},{"type":31,"tag":91,"props":1738,"children":1739},{"style":137},[1740],{"type":36,"value":1741},"-",{"type":31,"tag":91,"props":1743,"children":1744},{"style":114},[1745],{"type":36,"value":1746}," startTime;\n",{"type":31,"tag":91,"props":1748,"children":1749},{"class":93,"line":331},[1750],{"type":31,"tag":91,"props":1751,"children":1752},{"style":114},[1753],{"type":36,"value":1708},{"type":31,"tag":91,"props":1755,"children":1756},{"class":93,"line":345},[1757],{"type":31,"tag":91,"props":1758,"children":1759},{"style":98},[1760],{"type":36,"value":1761},"    \u002F\u002F RUM beacon\n",{"type":31,"tag":91,"props":1763,"children":1764},{"class":93,"line":354},[1765,1770,1775,1779,1784,1788,1792,1796,1800],{"type":31,"tag":91,"props":1766,"children":1767},{"style":114},[1768],{"type":36,"value":1769},"    navigator.",{"type":31,"tag":91,"props":1771,"children":1772},{"style":108},[1773],{"type":36,"value":1774},"sendBeacon",{"type":31,"tag":91,"props":1776,"children":1777},{"style":114},[1778],{"type":36,"value":117},{"type":31,"tag":91,"props":1780,"children":1781},{"style":120},[1782],{"type":36,"value":1783},"'\u002Fanalytics\u002Fatc'",{"type":31,"tag":91,"props":1785,"children":1786},{"style":114},[1787],{"type":36,"value":128},{"type":31,"tag":91,"props":1789,"children":1790},{"style":157},[1791],{"type":36,"value":1678},{"type":31,"tag":91,"props":1793,"children":1794},{"style":114},[1795],{"type":36,"value":651},{"type":31,"tag":91,"props":1797,"children":1798},{"style":108},[1799],{"type":36,"value":1687},{"type":31,"tag":91,"props":1801,"children":1802},{"style":114},[1803],{"type":36,"value":1804},"({\n",{"type":31,"tag":91,"props":1806,"children":1807},{"class":93,"line":886},[1808],{"type":31,"tag":91,"props":1809,"children":1810},{"style":114},[1811],{"type":36,"value":1812},"      success: response.ok,\n",{"type":31,"tag":91,"props":1814,"children":1815},{"class":93,"line":952},[1816],{"type":31,"tag":91,"props":1817,"children":1818},{"style":114},[1819],{"type":36,"value":1820},"      duration,\n",{"type":31,"tag":91,"props":1822,"children":1823},{"class":93,"line":1006},[1824],{"type":31,"tag":91,"props":1825,"children":1826},{"style":114},[1827],{"type":36,"value":1828},"      variantId,\n",{"type":31,"tag":91,"props":1830,"children":1831},{"class":93,"line":1044},[1832,1837,1841],{"type":31,"tag":91,"props":1833,"children":1834},{"style":114},[1835],{"type":36,"value":1836},"      timestamp: Date.",{"type":31,"tag":91,"props":1838,"children":1839},{"style":108},[1840],{"type":36,"value":1583},{"type":31,"tag":91,"props":1842,"children":1843},{"style":114},[1844],{"type":36,"value":1202},{"type":31,"tag":91,"props":1846,"children":1847},{"class":93,"line":1095},[1848],{"type":31,"tag":91,"props":1849,"children":1850},{"style":114},[1851],{"type":36,"value":283},{"type":31,"tag":91,"props":1853,"children":1854},{"class":93,"line":1132},[1855],{"type":31,"tag":91,"props":1856,"children":1857},{"style":114},[1858],{"type":36,"value":1708},{"type":31,"tag":91,"props":1860,"children":1861},{"class":93,"line":1175},[1862,1867,1872,1877],{"type":31,"tag":91,"props":1863,"children":1864},{"style":137},[1865],{"type":36,"value":1866},"    if",{"type":31,"tag":91,"props":1868,"children":1869},{"style":114},[1870],{"type":36,"value":1871}," (",{"type":31,"tag":91,"props":1873,"children":1874},{"style":137},[1875],{"type":36,"value":1876},"!",{"type":31,"tag":91,"props":1878,"children":1879},{"style":114},[1880],{"type":36,"value":1881},"response.ok) {\n",{"type":31,"tag":91,"props":1883,"children":1884},{"class":93,"line":1205},[1885],{"type":31,"tag":91,"props":1886,"children":1887},{"style":98},[1888],{"type":36,"value":1889},"      \u002F\u002F UI fallback en cas d'erreur\n",{"type":31,"tag":91,"props":1891,"children":1892},{"class":93,"line":1214},[1893,1898,1902,1907],{"type":31,"tag":91,"props":1894,"children":1895},{"style":108},[1896],{"type":36,"value":1897},"      showErrorToast",{"type":31,"tag":91,"props":1899,"children":1900},{"style":114},[1901],{"type":36,"value":117},{"type":31,"tag":91,"props":1903,"children":1904},{"style":120},[1905],{"type":36,"value":1906},"'Erreur mise à jour panier, veuillez réessayer'",{"type":31,"tag":91,"props":1908,"children":1909},{"style":114},[1910],{"type":36,"value":1431},{"type":31,"tag":91,"props":1912,"children":1913},{"class":93,"line":1222},[1914],{"type":31,"tag":91,"props":1915,"children":1916},{"style":114},[1917],{"type":36,"value":1918},"    }\n",{"type":31,"tag":91,"props":1920,"children":1921},{"class":93,"line":1235},[1922,1927,1932],{"type":31,"tag":91,"props":1923,"children":1924},{"style":114},[1925],{"type":36,"value":1926},"  } ",{"type":31,"tag":91,"props":1928,"children":1929},{"style":137},[1930],{"type":36,"value":1931},"catch",{"type":31,"tag":91,"props":1933,"children":1934},{"style":114},[1935],{"type":36,"value":1936}," (err) {\n",{"type":31,"tag":91,"props":1938,"children":1939},{"class":93,"line":1244},[1940],{"type":31,"tag":91,"props":1941,"children":1942},{"style":98},[1943],{"type":36,"value":1944},"    \u002F\u002F Network timeout — critique\n",{"type":31,"tag":91,"props":1946,"children":1947},{"class":93,"line":1252},[1948,1953,1957,1962],{"type":31,"tag":91,"props":1949,"children":1950},{"style":108},[1951],{"type":36,"value":1952},"    reportError",{"type":31,"tag":91,"props":1954,"children":1955},{"style":114},[1956],{"type":36,"value":117},{"type":31,"tag":91,"props":1958,"children":1959},{"style":120},[1960],{"type":36,"value":1961},"'ATC_TIMEOUT'",{"type":31,"tag":91,"props":1963,"children":1964},{"style":114},[1965],{"type":36,"value":1966},", { variantId, error: err.message });\n",{"type":31,"tag":91,"props":1968,"children":1969},{"class":93,"line":1261},[1970],{"type":31,"tag":91,"props":1971,"children":1972},{"style":114},[1973],{"type":36,"value":291},{"type":31,"tag":91,"props":1975,"children":1976},{"class":93,"line":1310},[1977],{"type":31,"tag":91,"props":1978,"children":1979},{"style":114},[1980],{"type":36,"value":1241},{"type":31,"tag":32,"props":1982,"children":1983},{},[1984,1989,1991,1997],{"type":31,"tag":51,"props":1985,"children":1986},{},[1987],{"type":36,"value":1988},"Analyse :",{"type":36,"value":1990}," Sur un dashboard Grafana\u002FDatadog, si la métrique ",{"type":31,"tag":64,"props":1992,"children":1994},{"className":1993},[],[1995],{"type":36,"value":1996},"atc_duration_p95",{"type":36,"value":1998}," dépasse 2000ms, problème. Causes possibles :",{"type":31,"tag":2000,"props":2001,"children":2002},"ul",{},[2003,2013,2030],{"type":31,"tag":451,"props":2004,"children":2005},{},[2006,2011],{"type":31,"tag":51,"props":2007,"children":2008},{},[2009],{"type":36,"value":2010},"Latence API :",{"type":36,"value":2012}," l'API Storefront Shopify répond en >800ms. Solution : cache l'état du panier côté client (optimistic UI update, sync en arrière-plan).",{"type":31,"tag":451,"props":2014,"children":2015},{},[2016,2021,2023,2029],{"type":31,"tag":51,"props":2017,"children":2018},{},[2019],{"type":36,"value":2020},"Délai d'hydratation :",{"type":36,"value":2022}," si le bouton est cliqué avant que React ne finisse l'hydratation, le handler événement n'est pas attaché. Solution : SSR + amélioration progressive, interactivité immédiate du bouton via ",{"type":31,"tag":64,"props":2024,"children":2026},{"className":2025},[],[2027],{"type":36,"value":2028},"onLoad",{"type":36,"value":651},{"type":31,"tag":451,"props":2031,"children":2032},{},[2033,2038],{"type":31,"tag":51,"props":2034,"children":2035},{},[2036],{"type":36,"value":2037},"Queue réseau :",{"type":36,"value":2039}," sur réseau 3G, bundle JS énorme (>500kb) bloque parse. Solution : code splitting, CSS critique inline.",{"type":31,"tag":32,"props":2041,"children":2042},{},[2043],{"type":36,"value":2044},"Lors d'une migration passée, le taux de succès ATC est passé de 96% à 89%. L'analyse RUM montrait que sur mobile, l'hydratation prenait 4,2 secondes (app Hydrogen chargeait 780kb JS). Après lazy load et splitting par route, le bundle a été réduit à 210kb et le taux remonte à 95%.",{"type":31,"tag":39,"props":2046,"children":2048},{"id":2047},"réduction-des-risques-feature-flags-et-rollback-instantané",[2049],{"type":36,"value":2050},"Réduction des risques : Feature Flags et Rollback Instantané",{"type":31,"tag":32,"props":2052,"children":2053},{},[2054],{"type":36,"value":2055},"Pas de migration headless sans système de feature flag. LaunchDarkly, Statsig ou un service custom Redis-backed permet de contrôler headless on\u002Foff pour chaque cohorte utilisateur.",{"type":31,"tag":81,"props":2057,"children":2059},{"className":83,"code":2058,"language":85,"meta":14,"style":14},"\u002F\u002F Vérification feature flag — middleware edge\nexport async function middleware(request) {\n  const userId = request.cookies.get('user_id');\n  const country = request.geo.country;\n  \n  const headlessEnabled = await checkFlag('headless-rollout', {\n    userId,\n    country,\n    trafficPercentage: 10 \u002F\u002F Premiers 10% du trafic\n  });\n  \n  if (headlessEnabled) {\n    return NextResponse.rewrite('\u002Fheadless-app');\n  }\n  \n  return NextResponse.rewrite('\u002Flegacy-shopify');\n}\n",[2060],{"type":31,"tag":64,"props":2061,"children":2062},{"__ignoreMap":14},[2063,2071,2106,2145,2166,2173,2211,2219,2227,2245,2253,2260,2272,2302,2309,2316,2344],{"type":31,"tag":91,"props":2064,"children":2065},{"class":93,"line":94},[2066],{"type":31,"tag":91,"props":2067,"children":2068},{"style":98},[2069],{"type":36,"value":2070},"\u002F\u002F Vérification feature flag — middleware edge\n",{"type":31,"tag":91,"props":2072,"children":2073},{"class":93,"line":104},[2074,2079,2084,2088,2093,2097,2102],{"type":31,"tag":91,"props":2075,"children":2076},{"style":137},[2077],{"type":36,"value":2078},"export",{"type":31,"tag":91,"props":2080,"children":2081},{"style":137},[2082],{"type":36,"value":2083}," async",{"type":31,"tag":91,"props":2085,"children":2086},{"style":137},[2087],{"type":36,"value":581},{"type":31,"tag":91,"props":2089,"children":2090},{"style":108},[2091],{"type":36,"value":2092}," middleware",{"type":31,"tag":91,"props":2094,"children":2095},{"style":114},[2096],{"type":36,"value":117},{"type":31,"tag":91,"props":2098,"children":2099},{"style":131},[2100],{"type":36,"value":2101},"request",{"type":31,"tag":91,"props":2103,"children":2104},{"style":114},[2105],{"type":36,"value":600},{"type":31,"tag":91,"props":2107,"children":2108},{"class":93,"line":148},[2109,2113,2118,2122,2127,2132,2136,2141],{"type":31,"tag":91,"props":2110,"children":2111},{"style":137},[2112],{"type":36,"value":154},{"type":31,"tag":91,"props":2114,"children":2115},{"style":157},[2116],{"type":36,"value":2117}," userId",{"type":31,"tag":91,"props":2119,"children":2120},{"style":137},[2121],{"type":36,"value":165},{"type":31,"tag":91,"props":2123,"children":2124},{"style":114},[2125],{"type":36,"value":2126}," request.cookies.",{"type":31,"tag":91,"props":2128,"children":2129},{"style":108},[2130],{"type":36,"value":2131},"get",{"type":31,"tag":91,"props":2133,"children":2134},{"style":114},[2135],{"type":36,"value":117},{"type":31,"tag":91,"props":2137,"children":2138},{"style":120},[2139],{"type":36,"value":2140},"'user_id'",{"type":31,"tag":91,"props":2142,"children":2143},{"style":114},[2144],{"type":36,"value":1431},{"type":31,"tag":91,"props":2146,"children":2147},{"class":93,"line":183},[2148,2152,2157,2161],{"type":31,"tag":91,"props":2149,"children":2150},{"style":137},[2151],{"type":36,"value":154},{"type":31,"tag":91,"props":2153,"children":2154},{"style":157},[2155],{"type":36,"value":2156}," country",{"type":31,"tag":91,"props":2158,"children":2159},{"style":137},[2160],{"type":36,"value":165},{"type":31,"tag":91,"props":2162,"children":2163},{"style":114},[2164],{"type":36,"value":2165}," request.geo.country;\n",{"type":31,"tag":91,"props":2167,"children":2168},{"class":93,"line":192},[2169],{"type":31,"tag":91,"props":2170,"children":2171},{"style":114},[2172],{"type":36,"value":189},{"type":31,"tag":91,"props":2174,"children":2175},{"class":93,"line":225},[2176,2180,2185,2189,2193,2198,2202,2207],{"type":31,"tag":91,"props":2177,"children":2178},{"style":137},[2179],{"type":36,"value":154},{"type":31,"tag":91,"props":2181,"children":2182},{"style":157},[2183],{"type":36,"value":2184}," headlessEnabled",{"type":31,"tag":91,"props":2186,"children":2187},{"style":137},[2188],{"type":36,"value":165},{"type":31,"tag":91,"props":2190,"children":2191},{"style":137},[2192],{"type":36,"value":641},{"type":31,"tag":91,"props":2194,"children":2195},{"style":108},[2196],{"type":36,"value":2197}," checkFlag",{"type":31,"tag":91,"props":2199,"children":2200},{"style":114},[2201],{"type":36,"value":117},{"type":31,"tag":91,"props":2203,"children":2204},{"style":120},[2205],{"type":36,"value":2206},"'headless-rollout'",{"type":31,"tag":91,"props":2208,"children":2209},{"style":114},[2210],{"type":36,"value":1647},{"type":31,"tag":91,"props":2212,"children":2213},{"class":93,"line":258},[2214],{"type":31,"tag":91,"props":2215,"children":2216},{"style":114},[2217],{"type":36,"value":2218},"    userId,\n",{"type":31,"tag":91,"props":2220,"children":2221},{"class":93,"line":277},[2222],{"type":31,"tag":91,"props":2223,"children":2224},{"style":114},[2225],{"type":36,"value":2226},"    country,\n",{"type":31,"tag":91,"props":2228,"children":2229},{"class":93,"line":25},[2230,2235,2240],{"type":31,"tag":91,"props":2231,"children":2232},{"style":114},[2233],{"type":36,"value":2234},"    trafficPercentage: ",{"type":31,"tag":91,"props":2236,"children":2237},{"style":157},[2238],{"type":36,"value":2239},"10",{"type":31,"tag":91,"props":2241,"children":2242},{"style":98},[2243],{"type":36,"value":2244}," \u002F\u002F Premiers 10% du trafic\n",{"type":31,"tag":91,"props":2246,"children":2247},{"class":93,"line":294},[2248],{"type":31,"tag":91,"props":2249,"children":2250},{"style":114},[2251],{"type":36,"value":2252},"  });\n",{"type":31,"tag":91,"props":2254,"children":2255},{"class":93,"line":302},[2256],{"type":31,"tag":91,"props":2257,"children":2258},{"style":114},[2259],{"type":36,"value":189},{"type":31,"tag":91,"props":2261,"children":2262},{"class":93,"line":331},[2263,2267],{"type":31,"tag":91,"props":2264,"children":2265},{"style":137},[2266],{"type":36,"value":198},{"type":31,"tag":91,"props":2268,"children":2269},{"style":114},[2270],{"type":36,"value":2271}," (headlessEnabled) {\n",{"type":31,"tag":91,"props":2273,"children":2274},{"class":93,"line":345},[2275,2279,2284,2289,2293,2298],{"type":31,"tag":91,"props":2276,"children":2277},{"style":137},[2278],{"type":36,"value":231},{"type":31,"tag":91,"props":2280,"children":2281},{"style":114},[2282],{"type":36,"value":2283}," NextResponse.",{"type":31,"tag":91,"props":2285,"children":2286},{"style":108},[2287],{"type":36,"value":2288},"rewrite",{"type":31,"tag":91,"props":2290,"children":2291},{"style":114},[2292],{"type":36,"value":117},{"type":31,"tag":91,"props":2294,"children":2295},{"style":120},[2296],{"type":36,"value":2297},"'\u002Fheadless-app'",{"type":31,"tag":91,"props":2299,"children":2300},{"style":114},[2301],{"type":36,"value":1431},{"type":31,"tag":91,"props":2303,"children":2304},{"class":93,"line":354},[2305],{"type":31,"tag":91,"props":2306,"children":2307},{"style":114},[2308],{"type":36,"value":291},{"type":31,"tag":91,"props":2310,"children":2311},{"class":93,"line":886},[2312],{"type":31,"tag":91,"props":2313,"children":2314},{"style":114},[2315],{"type":36,"value":189},{"type":31,"tag":91,"props":2317,"children":2318},{"class":93,"line":952},[2319,2323,2327,2331,2335,2340],{"type":31,"tag":91,"props":2320,"children":2321},{"style":137},[2322],{"type":36,"value":308},{"type":31,"tag":91,"props":2324,"children":2325},{"style":114},[2326],{"type":36,"value":2283},{"type":31,"tag":91,"props":2328,"children":2329},{"style":108},[2330],{"type":36,"value":2288},{"type":31,"tag":91,"props":2332,"children":2333},{"style":114},[2334],{"type":36,"value":117},{"type":31,"tag":91,"props":2336,"children":2337},{"style":120},[2338],{"type":36,"value":2339},"'\u002Flegacy-shopify'",{"type":31,"tag":91,"props":2341,"children":2342},{"style":114},[2343],{"type":36,"value":1431},{"type":31,"tag":91,"props":2345,"children":2346},{"class":93,"line":1006},[2347],{"type":31,"tag":91,"props":2348,"children":2349},{"style":114},[2350],{"type":36,"value":1241},{"type":31,"tag":32,"props":2352,"children":2353},{},[2354,2359],{"type":31,"tag":51,"props":2355,"children":2356},{},[2357],{"type":36,"value":2358},"Stratégie rollback instantané :",{"type":36,"value":2360}," si le taux d'erreur ATC dépasse 3% sur une fenêtre glissante de 5 minutes, rollback automatique (alerte PagerDuty + basculement flag).",{"type":31,"tag":81,"props":2362,"children":2366},{"className":2363,"code":2364,"language":2365,"meta":14,"style":14},"language-yaml shiki shiki-themes github-dark","# rollback-policy.yaml\nthresholds:\n  atc_error_rate: 3.0  # percent\n  lcp_p75: 3500        # milliseconds\n  revenue_drop: 5.0    # percent vs dernière heure de la semaine précédente\n\nactions:\n  - type: flag_override\n    target: headless-rollout\n    value: false\n  - type: alert\n    channel: slack-ops\n    message: \"Rollback headless déclenché : pic erreur ATC\"\n","yaml",[2367],{"type":31,"tag":64,"props":2368,"children":2369},{"__ignoreMap":14},[2370,2378,2392,2415,2437,2459,2466,2478,2500,2517,2534,2554,2571],{"type":31,"tag":91,"props":2371,"children":2372},{"class":93,"line":94},[2373],{"type":31,"tag":91,"props":2374,"children":2375},{"style":98},[2376],{"type":36,"value":2377},"# rollback-policy.yaml\n",{"type":31,"tag":91,"props":2379,"children":2380},{"class":93,"line":104},[2381,2387],{"type":31,"tag":91,"props":2382,"children":2384},{"style":2383},"--shiki-default:#85E89D",[2385],{"type":36,"value":2386},"thresholds",{"type":31,"tag":91,"props":2388,"children":2389},{"style":114},[2390],{"type":36,"value":2391},":\n",{"type":31,"tag":91,"props":2393,"children":2394},{"class":93,"line":148},[2395,2400,2405,2410],{"type":31,"tag":91,"props":2396,"children":2397},{"style":2383},[2398],{"type":36,"value":2399},"  atc_error_rate",{"type":31,"tag":91,"props":2401,"children":2402},{"style":114},[2403],{"type":36,"value":2404},": ",{"type":31,"tag":91,"props":2406,"children":2407},{"style":157},[2408],{"type":36,"value":2409},"3.0",{"type":31,"tag":91,"props":2411,"children":2412},{"style":98},[2413],{"type":36,"value":2414},"  # percent\n",{"type":31,"tag":91,"props":2416,"children":2417},{"class":93,"line":183},[2418,2423,2427,2432],{"type":31,"tag":91,"props":2419,"children":2420},{"style":2383},[2421],{"type":36,"value":2422},"  lcp_p75",{"type":31,"tag":91,"props":2424,"children":2425},{"style":114},[2426],{"type":36,"value":2404},{"type":31,"tag":91,"props":2428,"children":2429},{"style":157},[2430],{"type":36,"value":2431},"3500",{"type":31,"tag":91,"props":2433,"children":2434},{"style":98},[2435],{"type":36,"value":2436},"        # milliseconds\n",{"type":31,"tag":91,"props":2438,"children":2439},{"class":93,"line":192},[2440,2445,2449,2454],{"type":31,"tag":91,"props":2441,"children":2442},{"style":2383},[2443],{"type":36,"value":2444},"  revenue_drop",{"type":31,"tag":91,"props":2446,"children":2447},{"style":114},[2448],{"type":36,"value":2404},{"type":31,"tag":91,"props":2450,"children":2451},{"style":157},[2452],{"type":36,"value":2453},"5.0",{"type":31,"tag":91,"props":2455,"children":2456},{"style":98},[2457],{"type":36,"value":2458},"    # percent vs dernière heure de la semaine précédente\n",{"type":31,"tag":91,"props":2460,"children":2461},{"class":93,"line":225},[2462],{"type":31,"tag":91,"props":2463,"children":2464},{"emptyLinePlaceholder":565},[2465],{"type":36,"value":568},{"type":31,"tag":91,"props":2467,"children":2468},{"class":93,"line":258},[2469,2474],{"type":31,"tag":91,"props":2470,"children":2471},{"style":2383},[2472],{"type":36,"value":2473},"actions",{"type":31,"tag":91,"props":2475,"children":2476},{"style":114},[2477],{"type":36,"value":2391},{"type":31,"tag":91,"props":2479,"children":2480},{"class":93,"line":277},[2481,2486,2491,2495],{"type":31,"tag":91,"props":2482,"children":2483},{"style":114},[2484],{"type":36,"value":2485},"  - ",{"type":31,"tag":91,"props":2487,"children":2488},{"style":2383},[2489],{"type":36,"value":2490},"type",{"type":31,"tag":91,"props":2492,"children":2493},{"style":114},[2494],{"type":36,"value":2404},{"type":31,"tag":91,"props":2496,"children":2497},{"style":120},[2498],{"type":36,"value":2499},"flag_override\n",{"type":31,"tag":91,"props":2501,"children":2502},{"class":93,"line":25},[2503,2508,2512],{"type":31,"tag":91,"props":2504,"children":2505},{"style":2383},[2506],{"type":36,"value":2507},"    target",{"type":31,"tag":91,"props":2509,"children":2510},{"style":114},[2511],{"type":36,"value":2404},{"type":31,"tag":91,"props":2513,"children":2514},{"style":120},[2515],{"type":36,"value":2516},"headless-rollout\n",{"type":31,"tag":91,"props":2518,"children":2519},{"class":93,"line":294},[2520,2525,2529],{"type":31,"tag":91,"props":2521,"children":2522},{"style":2383},[2523],{"type":36,"value":2524},"    value",{"type":31,"tag":91,"props":2526,"children":2527},{"style":114},[2528],{"type":36,"value":2404},{"type":31,"tag":91,"props":2530,"children":2531},{"style":157},[2532],{"type":36,"value":2533},"false\n",{"type":31,"tag":91,"props":2535,"children":2536},{"class":93,"line":302},[2537,2541,2545,2549],{"type":31,"tag":91,"props":2538,"children":2539},{"style":114},[2540],{"type":36,"value":2485},{"type":31,"tag":91,"props":2542,"children":2543},{"style":2383},[2544],{"type":36,"value":2490},{"type":31,"tag":91,"props":2546,"children":2547},{"style":114},[2548],{"type":36,"value":2404},{"type":31,"tag":91,"props":2550,"children":2551},{"style":120},[2552],{"type":36,"value":2553},"alert\n",{"type":31,"tag":91,"props":2555,"children":2556},{"class":93,"line":331},[2557,2562,2566],{"type":31,"tag":91,"props":2558,"children":2559},{"style":2383},[2560],{"type":36,"value":2561},"    channel",{"type":31,"tag":91,"props":2563,"children":2564},{"style":114},[2565],{"type":36,"value":2404},{"type":31,"tag":91,"props":2567,"children":2568},{"style":120},[2569],{"type":36,"value":2570},"slack-ops\n",{"type":31,"tag":91,"props":2572,"children":2573},{"class":93,"line":345},[2574,2579,2583],{"type":31,"tag":91,"props":2575,"children":2576},{"style":2383},[2577],{"type":36,"value":2578},"    message",{"type":31,"tag":91,"props":2580,"children":2581},{"style":114},[2582],{"type":36,"value":2404},{"type":31,"tag":91,"props":2584,"children":2585},{"style":120},[2586],{"type":36,"value":2587},"\"Rollback headless déclenché : pic erreur ATC\"\n",{"type":31,"tag":32,"props":2589,"children":2590},{},[2591],{"type":36,"value":2592},"Avec cette approche, la migration s'étend sur 8 semaines mais la perte revenue reste \u003C2%. Les gains headless (LCP 4,8s → 1,9s, conversion rate +12%) se concrétisent seulement après la bascule totale, mais chaque étape évite la \"crise\".",{"type":31,"tag":39,"props":2594,"children":2596},{"id":2595},"scénarios-de-tests-de-performance-migration",[2597],{"type":36,"value":2598},"Scénarios de Tests de Performance Migration",{"type":31,"tag":32,"props":2600,"children":2601},{},[2602],{"type":36,"value":2603},"Lors de la transition vers headless, on ne teste pas juste \"le nouveau site est-il rapide\" mais \"est-ce que les anciens comportements utilisateurs se dégradent post-migration\". Combination test synthétique + RUM :",{"type":31,"tag":32,"props":2605,"children":2606},{},[2607],{"type":31,"tag":51,"props":2608,"children":2609},{},[2610],{"type":36,"value":2611},"Synthétique :",{"type":31,"tag":2000,"props":2613,"children":2614},{},[2615,2620],{"type":31,"tag":451,"props":2616,"children":2617},{},[2618],{"type":36,"value":2619},"Pipeline Lighthouse CI — pour chaque déploiement, check LCP\u002FTBT\u002FCLS sur PDP, PLP, homepage",{"type":31,"tag":451,"props":2621,"children":2622},{},[2623],{"type":36,"value":2624},"Test WebPageTest scripté : \"parcourir catégorie, cliquer 3e produit, ajouter panier, aller checkout\" depuis 10 géolocalisations (Istanbul, Berlin, New York)",{"type":31,"tag":32,"props":2626,"children":2627},{},[2628],{"type":31,"tag":51,"props":2629,"children":2630},{},[2631],{"type":36,"value":2632},"RUM :",{"type":31,"tag":2000,"props":2634,"children":2635},{},[2636,2649],{"type":31,"tag":451,"props":2637,"children":2638},{},[2639,2641,2647],{"type":36,"value":2640},"Chaque page view collecte ",{"type":31,"tag":64,"props":2642,"children":2644},{"className":2643},[],[2645],{"type":36,"value":2646},"performance.getEntriesByType('navigation')",{"type":36,"value":2648},", stream vers BigQuery",{"type":31,"tag":451,"props":2650,"children":2651},{},[2652],{"type":36,"value":2653},"Comparaison cohorte : 10K derniers utilisateurs ancien frontend vs 10K premiers nouveau frontend → median session duration, pages\u002Fsession, bounce rate",{"type":31,"tag":32,"props":2655,"children":2656},{},[2657,2666],{"type":31,"tag":2658,"props":2659,"children":2663},"a",{"href":2660,"rel":2661},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Fheadless",[2662],"nofollow",[2664],{"type":36,"value":2665},"L'e-commerce Headless",{"type":36,"value":2667}," sur stack Nuxt 3 + Cloudflare Pages convient car la latence SSR edge reste \u003C50ms et le routing Workers supporte nativement le phased rollout.",{"type":31,"tag":32,"props":2669,"children":2670},{},[2671,2673,2678],{"type":36,"value":2672},"La partie la plus critique du roadmap migration headless est la ",{"type":31,"tag":51,"props":2674,"children":2675},{},[2676],{"type":36,"value":2677},"capacité de recul",{"type":36,"value":2679},". Chaque phase est indépendamment déployable, contrôlée par flag, guidée par métriques. Si les tests de parité SEO ne s'automatisent pas, l'assurance qualité manuelle ne peut valider 500 URLs et la perte de ranking Google se découvre 6 semaines plus tard — trop tard pour rollback. L'analyse d'abandon ATC doit être en temps réel, pas sur un dashboard retardé 24h. Avec cette discipline, la migration headless cesse d'être un risque pour devenir un processus d'optimisation mesurable.",{"type":31,"tag":2681,"props":2682,"children":2683},"style",{},[2684],{"type":36,"value":2685},"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":14,"searchDepth":148,"depth":148,"links":2687},[2688,2689,2690,2691,2692],{"id":41,"depth":104,"text":44},{"id":421,"depth":104,"text":424},{"id":1488,"depth":104,"text":1491},{"id":2047,"depth":104,"text":2050},{"id":2595,"depth":104,"text":2598},"markdown","content:fr:tech:roadmap-migration-headless-gestion-risques.md","content","fr\u002Ftech\u002Froadmap-migration-headless-gestion-risques.md","fr\u002Ftech\u002Froadmap-migration-headless-gestion-risques","md",1785967499784]