[{"data":1,"prerenderedAt":3387},["ShallowReactive",2],{"article-alternates":3,"article-\u002Ffr\u002Ftech\u002Fstrategie-migration-headless-commerce":13},{"i18nKey":4,"paths":5},"tech-006-2026-06",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Ftech\u002Fheadless-ecommerce-migration-roadmap","\u002Fen\u002Ftech\u002Fheadless-ecommerce-migration-roadmap-risk-management","\u002Fes\u002Ftech\u002Fmigracion-headless-hoja-ruta-gestion-riesgos","\u002Ffr\u002Ftech\u002Fstrategie-migration-headless-commerce","\u002Fit\u002Ftech\u002Fmigrazione-headless-e-commerce-roadmap-e-gestione-rischi","\u002Fru\u002Ftech\u002Fmigracao-ecommerce-headless-roadmap-gestao-risco","\u002Ftr\u002Ftech\u002Fheadless-e-ticaret-migration-roadmap-ve-risk-yonetimi",{"_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":3381,"_id":3382,"_source":3383,"_file":3384,"_stem":3385,"_extension":3386},"tech",false,"","Migration vers l'Architecture Headless : Feuille de Route et Gestion des Risques","Stratégie de déploiement progressif, préservation SEO et analyse des abandons de panier : planifiez votre migration headless avec des chiffres concrets.","2026-06-28",[21,22,23,24,25],"headless-commerce","migration","preservation-seo","optimisation-performance","gestion-risques",8,"Roibase",{"type":29,"children":30,"toc":3369},"root",[31,39,46,51,792,805,818,825,830,1003,1008,1014,1019,1024,1134,1139,1409,1430,1839,1844,1850,1882,1888,1893,1898,2557,2562,2887,2900,2906,2911,2917,2922,2927,3330,3335,3340,3363],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Migrer d'une plateforme e-commerce monolithique vers une architecture headless n'est pas une basculade d'une nuit. En 2026, un site e-commerce moyen reçoit plus de 50 000 requêtes par jour, dont 40 % proviennent de la recherche organique ; chaque seconde d'indisponibilité représente une perte de 5 000 $ de chiffre d'affaires. Avec ces chiffres en tête, une stratégie de migration exige une discipline d'ingénierie : déploiement progressif, préservation des URLs canoniques, mesure microscopique du flux d'ajout au panier. Cet article partage une feuille de route éprouvée pour la migration headless, les décisions techniques qui préviennent les baisses SEO, et les métriques de suivi des taux d'abandon de panier, le tout avec des exemples de code concrets.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"déploiement-progressif-segmentation-du-trafic-et-canary-deployment",[44],{"type":37,"value":45},"Déploiement Progressif : Segmentation du Trafic et Canary Deployment",{"type":32,"tag":33,"props":47,"children":48},{},[49],{"type":37,"value":50},"La décision la plus critique dans une migration headless est celle-ci : quel segment d'utilisateurs basculer en premier vers le nouveau système ? Un déploiement big-bang porte le risque d'indisponibilité à 100 % ; l'approche correcte consiste à segmenter le trafic au niveau de l'Edge CDN. Avec Cloudflare Workers, vous pouvez rediriger 5 % des nouveaux utilisateurs vers votre frontend headless tout en proxifiant le reste vers l'ancienne stack.",{"type":32,"tag":52,"props":53,"children":57},"pre",{"className":54,"code":55,"language":56,"meta":16,"style":16},"language-javascript shiki shiki-themes github-dark","\u002F\u002F Cloudflare Worker : Routage headless progressif\naddEventListener('fetch', event => {\n  event.respondWith(handleRequest(event.request))\n})\n\nasync function handleRequest(request) {\n  const url = new URL(request.url)\n  const userId = request.headers.get('X-User-ID') || Math.random()\n  const rolloutPercent = 5 \u002F\u002F Rediriger 5 % vers headless\n  \n  const isNewStack = (hashCode(userId) % 100) \u003C rolloutPercent\n  \n  if (isNewStack && url.pathname.startsWith('\u002Fproducts')) {\n    \u002F\u002F Rediriger vers l'origin Nuxt\u002FNext headless\n    return fetch('https:\u002F\u002Fheadless-origin.example.com' + url.pathname, request)\n  } else {\n    \u002F\u002F Rediriger vers l'origin legacy Shopify Liquid\n    return fetch('https:\u002F\u002Flegacy-origin.example.com' + url.pathname, request)\n  }\n}\n\nfunction hashCode(str) {\n  let hash = 0\n  for (let i = 0; i \u003C str.length; i++) {\n    hash = ((hash \u003C\u003C 5) - hash) + str.charCodeAt(i)\n    hash |= 0\n  }\n  return Math.abs(hash)\n}\n","javascript",[58],{"type":32,"tag":59,"props":60,"children":61},"code",{"__ignoreMap":16},[62,74,118,146,155,165,198,233,293,320,329,385,393,436,445,478,496,505,534,543,552,560,587,611,676,736,753,761,784],{"type":32,"tag":63,"props":64,"children":67},"span",{"class":65,"line":66},"line",1,[68],{"type":32,"tag":63,"props":69,"children":71},{"style":70},"--shiki-default:#6A737D",[72],{"type":37,"value":73},"\u002F\u002F Cloudflare Worker : Routage headless progressif\n",{"type":32,"tag":63,"props":75,"children":77},{"class":65,"line":76},2,[78,84,90,96,101,107,113],{"type":32,"tag":63,"props":79,"children":81},{"style":80},"--shiki-default:#B392F0",[82],{"type":37,"value":83},"addEventListener",{"type":32,"tag":63,"props":85,"children":87},{"style":86},"--shiki-default:#E1E4E8",[88],{"type":37,"value":89},"(",{"type":32,"tag":63,"props":91,"children":93},{"style":92},"--shiki-default:#9ECBFF",[94],{"type":37,"value":95},"'fetch'",{"type":32,"tag":63,"props":97,"children":98},{"style":86},[99],{"type":37,"value":100},", ",{"type":32,"tag":63,"props":102,"children":104},{"style":103},"--shiki-default:#FFAB70",[105],{"type":37,"value":106},"event",{"type":32,"tag":63,"props":108,"children":110},{"style":109},"--shiki-default:#F97583",[111],{"type":37,"value":112}," =>",{"type":32,"tag":63,"props":114,"children":115},{"style":86},[116],{"type":37,"value":117}," {\n",{"type":32,"tag":63,"props":119,"children":121},{"class":65,"line":120},3,[122,127,132,136,141],{"type":32,"tag":63,"props":123,"children":124},{"style":86},[125],{"type":37,"value":126},"  event.",{"type":32,"tag":63,"props":128,"children":129},{"style":80},[130],{"type":37,"value":131},"respondWith",{"type":32,"tag":63,"props":133,"children":134},{"style":86},[135],{"type":37,"value":89},{"type":32,"tag":63,"props":137,"children":138},{"style":80},[139],{"type":37,"value":140},"handleRequest",{"type":32,"tag":63,"props":142,"children":143},{"style":86},[144],{"type":37,"value":145},"(event.request))\n",{"type":32,"tag":63,"props":147,"children":149},{"class":65,"line":148},4,[150],{"type":32,"tag":63,"props":151,"children":152},{"style":86},[153],{"type":37,"value":154},"})\n",{"type":32,"tag":63,"props":156,"children":158},{"class":65,"line":157},5,[159],{"type":32,"tag":63,"props":160,"children":162},{"emptyLinePlaceholder":161},true,[163],{"type":37,"value":164},"\n",{"type":32,"tag":63,"props":166,"children":168},{"class":65,"line":167},6,[169,174,179,184,188,193],{"type":32,"tag":63,"props":170,"children":171},{"style":109},[172],{"type":37,"value":173},"async",{"type":32,"tag":63,"props":175,"children":176},{"style":109},[177],{"type":37,"value":178}," function",{"type":32,"tag":63,"props":180,"children":181},{"style":80},[182],{"type":37,"value":183}," handleRequest",{"type":32,"tag":63,"props":185,"children":186},{"style":86},[187],{"type":37,"value":89},{"type":32,"tag":63,"props":189,"children":190},{"style":103},[191],{"type":37,"value":192},"request",{"type":32,"tag":63,"props":194,"children":195},{"style":86},[196],{"type":37,"value":197},") {\n",{"type":32,"tag":63,"props":199,"children":201},{"class":65,"line":200},7,[202,207,213,218,223,228],{"type":32,"tag":63,"props":203,"children":204},{"style":109},[205],{"type":37,"value":206},"  const",{"type":32,"tag":63,"props":208,"children":210},{"style":209},"--shiki-default:#79B8FF",[211],{"type":37,"value":212}," url",{"type":32,"tag":63,"props":214,"children":215},{"style":109},[216],{"type":37,"value":217}," =",{"type":32,"tag":63,"props":219,"children":220},{"style":109},[221],{"type":37,"value":222}," new",{"type":32,"tag":63,"props":224,"children":225},{"style":80},[226],{"type":37,"value":227}," URL",{"type":32,"tag":63,"props":229,"children":230},{"style":86},[231],{"type":37,"value":232},"(request.url)\n",{"type":32,"tag":63,"props":234,"children":235},{"class":65,"line":26},[236,240,245,249,254,259,263,268,273,278,283,288],{"type":32,"tag":63,"props":237,"children":238},{"style":109},[239],{"type":37,"value":206},{"type":32,"tag":63,"props":241,"children":242},{"style":209},[243],{"type":37,"value":244}," userId",{"type":32,"tag":63,"props":246,"children":247},{"style":109},[248],{"type":37,"value":217},{"type":32,"tag":63,"props":250,"children":251},{"style":86},[252],{"type":37,"value":253}," request.headers.",{"type":32,"tag":63,"props":255,"children":256},{"style":80},[257],{"type":37,"value":258},"get",{"type":32,"tag":63,"props":260,"children":261},{"style":86},[262],{"type":37,"value":89},{"type":32,"tag":63,"props":264,"children":265},{"style":92},[266],{"type":37,"value":267},"'X-User-ID'",{"type":32,"tag":63,"props":269,"children":270},{"style":86},[271],{"type":37,"value":272},") ",{"type":32,"tag":63,"props":274,"children":275},{"style":109},[276],{"type":37,"value":277},"||",{"type":32,"tag":63,"props":279,"children":280},{"style":86},[281],{"type":37,"value":282}," Math.",{"type":32,"tag":63,"props":284,"children":285},{"style":80},[286],{"type":37,"value":287},"random",{"type":32,"tag":63,"props":289,"children":290},{"style":86},[291],{"type":37,"value":292},"()\n",{"type":32,"tag":63,"props":294,"children":296},{"class":65,"line":295},9,[297,301,306,310,315],{"type":32,"tag":63,"props":298,"children":299},{"style":109},[300],{"type":37,"value":206},{"type":32,"tag":63,"props":302,"children":303},{"style":209},[304],{"type":37,"value":305}," rolloutPercent",{"type":32,"tag":63,"props":307,"children":308},{"style":109},[309],{"type":37,"value":217},{"type":32,"tag":63,"props":311,"children":312},{"style":209},[313],{"type":37,"value":314}," 5",{"type":32,"tag":63,"props":316,"children":317},{"style":70},[318],{"type":37,"value":319}," \u002F\u002F Rediriger 5 % vers headless\n",{"type":32,"tag":63,"props":321,"children":323},{"class":65,"line":322},10,[324],{"type":32,"tag":63,"props":325,"children":326},{"style":86},[327],{"type":37,"value":328},"  \n",{"type":32,"tag":63,"props":330,"children":332},{"class":65,"line":331},11,[333,337,342,346,351,356,361,366,371,375,380],{"type":32,"tag":63,"props":334,"children":335},{"style":109},[336],{"type":37,"value":206},{"type":32,"tag":63,"props":338,"children":339},{"style":209},[340],{"type":37,"value":341}," isNewStack",{"type":32,"tag":63,"props":343,"children":344},{"style":109},[345],{"type":37,"value":217},{"type":32,"tag":63,"props":347,"children":348},{"style":86},[349],{"type":37,"value":350}," (",{"type":32,"tag":63,"props":352,"children":353},{"style":80},[354],{"type":37,"value":355},"hashCode",{"type":32,"tag":63,"props":357,"children":358},{"style":86},[359],{"type":37,"value":360},"(userId) ",{"type":32,"tag":63,"props":362,"children":363},{"style":109},[364],{"type":37,"value":365},"%",{"type":32,"tag":63,"props":367,"children":368},{"style":209},[369],{"type":37,"value":370}," 100",{"type":32,"tag":63,"props":372,"children":373},{"style":86},[374],{"type":37,"value":272},{"type":32,"tag":63,"props":376,"children":377},{"style":109},[378],{"type":37,"value":379},"\u003C",{"type":32,"tag":63,"props":381,"children":382},{"style":86},[383],{"type":37,"value":384}," rolloutPercent\n",{"type":32,"tag":63,"props":386,"children":388},{"class":65,"line":387},12,[389],{"type":32,"tag":63,"props":390,"children":391},{"style":86},[392],{"type":37,"value":328},{"type":32,"tag":63,"props":394,"children":396},{"class":65,"line":395},13,[397,402,407,412,417,422,426,431],{"type":32,"tag":63,"props":398,"children":399},{"style":109},[400],{"type":37,"value":401},"  if",{"type":32,"tag":63,"props":403,"children":404},{"style":86},[405],{"type":37,"value":406}," (isNewStack ",{"type":32,"tag":63,"props":408,"children":409},{"style":109},[410],{"type":37,"value":411},"&&",{"type":32,"tag":63,"props":413,"children":414},{"style":86},[415],{"type":37,"value":416}," url.pathname.",{"type":32,"tag":63,"props":418,"children":419},{"style":80},[420],{"type":37,"value":421},"startsWith",{"type":32,"tag":63,"props":423,"children":424},{"style":86},[425],{"type":37,"value":89},{"type":32,"tag":63,"props":427,"children":428},{"style":92},[429],{"type":37,"value":430},"'\u002Fproducts'",{"type":32,"tag":63,"props":432,"children":433},{"style":86},[434],{"type":37,"value":435},")) {\n",{"type":32,"tag":63,"props":437,"children":439},{"class":65,"line":438},14,[440],{"type":32,"tag":63,"props":441,"children":442},{"style":70},[443],{"type":37,"value":444},"    \u002F\u002F Rediriger vers l'origin Nuxt\u002FNext headless\n",{"type":32,"tag":63,"props":446,"children":448},{"class":65,"line":447},15,[449,454,459,463,468,473],{"type":32,"tag":63,"props":450,"children":451},{"style":109},[452],{"type":37,"value":453},"    return",{"type":32,"tag":63,"props":455,"children":456},{"style":80},[457],{"type":37,"value":458}," fetch",{"type":32,"tag":63,"props":460,"children":461},{"style":86},[462],{"type":37,"value":89},{"type":32,"tag":63,"props":464,"children":465},{"style":92},[466],{"type":37,"value":467},"'https:\u002F\u002Fheadless-origin.example.com'",{"type":32,"tag":63,"props":469,"children":470},{"style":109},[471],{"type":37,"value":472}," +",{"type":32,"tag":63,"props":474,"children":475},{"style":86},[476],{"type":37,"value":477}," url.pathname, request)\n",{"type":32,"tag":63,"props":479,"children":481},{"class":65,"line":480},16,[482,487,492],{"type":32,"tag":63,"props":483,"children":484},{"style":86},[485],{"type":37,"value":486},"  } ",{"type":32,"tag":63,"props":488,"children":489},{"style":109},[490],{"type":37,"value":491},"else",{"type":32,"tag":63,"props":493,"children":494},{"style":86},[495],{"type":37,"value":117},{"type":32,"tag":63,"props":497,"children":499},{"class":65,"line":498},17,[500],{"type":32,"tag":63,"props":501,"children":502},{"style":70},[503],{"type":37,"value":504},"    \u002F\u002F Rediriger vers l'origin legacy Shopify Liquid\n",{"type":32,"tag":63,"props":506,"children":508},{"class":65,"line":507},18,[509,513,517,521,526,530],{"type":32,"tag":63,"props":510,"children":511},{"style":109},[512],{"type":37,"value":453},{"type":32,"tag":63,"props":514,"children":515},{"style":80},[516],{"type":37,"value":458},{"type":32,"tag":63,"props":518,"children":519},{"style":86},[520],{"type":37,"value":89},{"type":32,"tag":63,"props":522,"children":523},{"style":92},[524],{"type":37,"value":525},"'https:\u002F\u002Flegacy-origin.example.com'",{"type":32,"tag":63,"props":527,"children":528},{"style":109},[529],{"type":37,"value":472},{"type":32,"tag":63,"props":531,"children":532},{"style":86},[533],{"type":37,"value":477},{"type":32,"tag":63,"props":535,"children":537},{"class":65,"line":536},19,[538],{"type":32,"tag":63,"props":539,"children":540},{"style":86},[541],{"type":37,"value":542},"  }\n",{"type":32,"tag":63,"props":544,"children":546},{"class":65,"line":545},20,[547],{"type":32,"tag":63,"props":548,"children":549},{"style":86},[550],{"type":37,"value":551},"}\n",{"type":32,"tag":63,"props":553,"children":555},{"class":65,"line":554},21,[556],{"type":32,"tag":63,"props":557,"children":558},{"emptyLinePlaceholder":161},[559],{"type":37,"value":164},{"type":32,"tag":63,"props":561,"children":563},{"class":65,"line":562},22,[564,569,574,578,583],{"type":32,"tag":63,"props":565,"children":566},{"style":109},[567],{"type":37,"value":568},"function",{"type":32,"tag":63,"props":570,"children":571},{"style":80},[572],{"type":37,"value":573}," hashCode",{"type":32,"tag":63,"props":575,"children":576},{"style":86},[577],{"type":37,"value":89},{"type":32,"tag":63,"props":579,"children":580},{"style":103},[581],{"type":37,"value":582},"str",{"type":32,"tag":63,"props":584,"children":585},{"style":86},[586],{"type":37,"value":197},{"type":32,"tag":63,"props":588,"children":590},{"class":65,"line":589},23,[591,596,601,606],{"type":32,"tag":63,"props":592,"children":593},{"style":109},[594],{"type":37,"value":595},"  let",{"type":32,"tag":63,"props":597,"children":598},{"style":86},[599],{"type":37,"value":600}," hash ",{"type":32,"tag":63,"props":602,"children":603},{"style":109},[604],{"type":37,"value":605},"=",{"type":32,"tag":63,"props":607,"children":608},{"style":209},[609],{"type":37,"value":610}," 0\n",{"type":32,"tag":63,"props":612,"children":614},{"class":65,"line":613},24,[615,620,624,629,634,638,643,648,652,657,662,667,672],{"type":32,"tag":63,"props":616,"children":617},{"style":109},[618],{"type":37,"value":619},"  for",{"type":32,"tag":63,"props":621,"children":622},{"style":86},[623],{"type":37,"value":350},{"type":32,"tag":63,"props":625,"children":626},{"style":109},[627],{"type":37,"value":628},"let",{"type":32,"tag":63,"props":630,"children":631},{"style":86},[632],{"type":37,"value":633}," i ",{"type":32,"tag":63,"props":635,"children":636},{"style":109},[637],{"type":37,"value":605},{"type":32,"tag":63,"props":639,"children":640},{"style":209},[641],{"type":37,"value":642}," 0",{"type":32,"tag":63,"props":644,"children":645},{"style":86},[646],{"type":37,"value":647},"; i ",{"type":32,"tag":63,"props":649,"children":650},{"style":109},[651],{"type":37,"value":379},{"type":32,"tag":63,"props":653,"children":654},{"style":86},[655],{"type":37,"value":656}," str.",{"type":32,"tag":63,"props":658,"children":659},{"style":209},[660],{"type":37,"value":661},"length",{"type":32,"tag":63,"props":663,"children":664},{"style":86},[665],{"type":37,"value":666},"; i",{"type":32,"tag":63,"props":668,"children":669},{"style":109},[670],{"type":37,"value":671},"++",{"type":32,"tag":63,"props":673,"children":674},{"style":86},[675],{"type":37,"value":197},{"type":32,"tag":63,"props":677,"children":679},{"class":65,"line":678},25,[680,685,689,694,699,703,707,712,717,722,726,731],{"type":32,"tag":63,"props":681,"children":682},{"style":86},[683],{"type":37,"value":684},"    hash ",{"type":32,"tag":63,"props":686,"children":687},{"style":109},[688],{"type":37,"value":605},{"type":32,"tag":63,"props":690,"children":691},{"style":86},[692],{"type":37,"value":693}," ((hash ",{"type":32,"tag":63,"props":695,"children":696},{"style":109},[697],{"type":37,"value":698},"\u003C\u003C",{"type":32,"tag":63,"props":700,"children":701},{"style":209},[702],{"type":37,"value":314},{"type":32,"tag":63,"props":704,"children":705},{"style":86},[706],{"type":37,"value":272},{"type":32,"tag":63,"props":708,"children":709},{"style":109},[710],{"type":37,"value":711},"-",{"type":32,"tag":63,"props":713,"children":714},{"style":86},[715],{"type":37,"value":716}," hash) ",{"type":32,"tag":63,"props":718,"children":719},{"style":109},[720],{"type":37,"value":721},"+",{"type":32,"tag":63,"props":723,"children":724},{"style":86},[725],{"type":37,"value":656},{"type":32,"tag":63,"props":727,"children":728},{"style":80},[729],{"type":37,"value":730},"charCodeAt",{"type":32,"tag":63,"props":732,"children":733},{"style":86},[734],{"type":37,"value":735},"(i)\n",{"type":32,"tag":63,"props":737,"children":739},{"class":65,"line":738},26,[740,744,749],{"type":32,"tag":63,"props":741,"children":742},{"style":86},[743],{"type":37,"value":684},{"type":32,"tag":63,"props":745,"children":746},{"style":109},[747],{"type":37,"value":748},"|=",{"type":32,"tag":63,"props":750,"children":751},{"style":209},[752],{"type":37,"value":610},{"type":32,"tag":63,"props":754,"children":756},{"class":65,"line":755},27,[757],{"type":32,"tag":63,"props":758,"children":759},{"style":86},[760],{"type":37,"value":542},{"type":32,"tag":63,"props":762,"children":764},{"class":65,"line":763},28,[765,770,774,779],{"type":32,"tag":63,"props":766,"children":767},{"style":109},[768],{"type":37,"value":769},"  return",{"type":32,"tag":63,"props":771,"children":772},{"style":86},[773],{"type":37,"value":282},{"type":32,"tag":63,"props":775,"children":776},{"style":80},[777],{"type":37,"value":778},"abs",{"type":32,"tag":63,"props":780,"children":781},{"style":86},[782],{"type":37,"value":783},"(hash)\n",{"type":32,"tag":63,"props":785,"children":787},{"class":65,"line":786},29,[788],{"type":32,"tag":63,"props":789,"children":790},{"style":86},[791],{"type":37,"value":551},{"type":32,"tag":33,"props":793,"children":794},{},[795,797,803],{"type":37,"value":796},"Dans cette approche, vous augmentez progressivement la variable ",{"type":32,"tag":59,"props":798,"children":800},{"className":799},[],[801],{"type":37,"value":802},"rolloutPercent",{"type":37,"value":804}," : 5 % → 25 % → 50 % → 100 %. À chaque étape, vous attendez 72 heures avant de continuer, en l'absence d'anomalies. Surveillez les métriques critiques : si le Largest Contentful Paint (LCP) passe de 2,3 s en ancienne stack à 1,8 s en headless, c'est bon signe ; mais si le taux de succès de l'ajout au panier tombe en dessous de 99,2 %, vous déclenchez un rollback immédiat.",{"type":32,"tag":33,"props":806,"children":807},{},[808,810,816],{"type":37,"value":809},"La deuxième dimension du déploiement progressif est la segmentation géographique : commencez par une région à faible trafic (par exemple l'Europe centrale), puis progressez vers vos principaux marchés (États-Unis, Turquie). Utilisez le header ",{"type":32,"tag":59,"props":811,"children":813},{"className":812},[],[814],{"type":37,"value":815},"request.cf.country",{"type":37,"value":817}," de Cloudflare pour implémenter un routage basé sur le pays.",{"type":32,"tag":819,"props":820,"children":822},"h3",{"id":821},"canary-deployment-et-rollback-automatique",[823],{"type":37,"value":824},"Canary Deployment et Rollback Automatique",{"type":32,"tag":33,"props":826,"children":827},{},[828],{"type":37,"value":829},"Intégrez un mécanisme de rollback automatique dans votre pipeline de déploiement. Si vous utilisez Vercel ou Netlify, ajoutez une vérification de santé personnalisée au hook de déploiement :",{"type":32,"tag":52,"props":831,"children":835},{"className":832,"code":833,"language":834,"meta":16,"style":16},"language-yaml shiki shiki-themes github-dark","# .github\u002Fworkflows\u002Fdeploy-headless.yml\n- name: Deploy vers production\n  run: vercel --prod\n  \n- name: Health check (sonde de 30s)\n  run: |\n    for i in {1..6}; do\n      STATUS=$(curl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" https:\u002F\u002Fheadless-origin.example.com\u002Fapi\u002Fhealth)\n      if [ $STATUS -ne 200 ]; then\n        echo \"Vérification de santé échouée, rollback en cours\"\n        vercel rollback\n        exit 1\n      fi\n      sleep 5\n    done\n","yaml",[836],{"type":32,"tag":59,"props":837,"children":838},{"__ignoreMap":16},[839,847,871,888,895,915,931,939,947,955,963,971,979,987,995],{"type":32,"tag":63,"props":840,"children":841},{"class":65,"line":66},[842],{"type":32,"tag":63,"props":843,"children":844},{"style":70},[845],{"type":37,"value":846},"# .github\u002Fworkflows\u002Fdeploy-headless.yml\n",{"type":32,"tag":63,"props":848,"children":849},{"class":65,"line":76},[850,855,861,866],{"type":32,"tag":63,"props":851,"children":852},{"style":86},[853],{"type":37,"value":854},"- ",{"type":32,"tag":63,"props":856,"children":858},{"style":857},"--shiki-default:#85E89D",[859],{"type":37,"value":860},"name",{"type":32,"tag":63,"props":862,"children":863},{"style":86},[864],{"type":37,"value":865},": ",{"type":32,"tag":63,"props":867,"children":868},{"style":92},[869],{"type":37,"value":870},"Deploy vers production\n",{"type":32,"tag":63,"props":872,"children":873},{"class":65,"line":120},[874,879,883],{"type":32,"tag":63,"props":875,"children":876},{"style":857},[877],{"type":37,"value":878},"  run",{"type":32,"tag":63,"props":880,"children":881},{"style":86},[882],{"type":37,"value":865},{"type":32,"tag":63,"props":884,"children":885},{"style":92},[886],{"type":37,"value":887},"vercel --prod\n",{"type":32,"tag":63,"props":889,"children":890},{"class":65,"line":148},[891],{"type":32,"tag":63,"props":892,"children":893},{"style":86},[894],{"type":37,"value":328},{"type":32,"tag":63,"props":896,"children":897},{"class":65,"line":157},[898,902,906,910],{"type":32,"tag":63,"props":899,"children":900},{"style":86},[901],{"type":37,"value":854},{"type":32,"tag":63,"props":903,"children":904},{"style":857},[905],{"type":37,"value":860},{"type":32,"tag":63,"props":907,"children":908},{"style":86},[909],{"type":37,"value":865},{"type":32,"tag":63,"props":911,"children":912},{"style":92},[913],{"type":37,"value":914},"Health check (sonde de 30s)\n",{"type":32,"tag":63,"props":916,"children":917},{"class":65,"line":167},[918,922,926],{"type":32,"tag":63,"props":919,"children":920},{"style":857},[921],{"type":37,"value":878},{"type":32,"tag":63,"props":923,"children":924},{"style":86},[925],{"type":37,"value":865},{"type":32,"tag":63,"props":927,"children":928},{"style":109},[929],{"type":37,"value":930},"|\n",{"type":32,"tag":63,"props":932,"children":933},{"class":65,"line":200},[934],{"type":32,"tag":63,"props":935,"children":936},{"style":92},[937],{"type":37,"value":938},"    for i in {1..6}; do\n",{"type":32,"tag":63,"props":940,"children":941},{"class":65,"line":26},[942],{"type":32,"tag":63,"props":943,"children":944},{"style":92},[945],{"type":37,"value":946},"      STATUS=$(curl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" https:\u002F\u002Fheadless-origin.example.com\u002Fapi\u002Fhealth)\n",{"type":32,"tag":63,"props":948,"children":949},{"class":65,"line":295},[950],{"type":32,"tag":63,"props":951,"children":952},{"style":92},[953],{"type":37,"value":954},"      if [ $STATUS -ne 200 ]; then\n",{"type":32,"tag":63,"props":956,"children":957},{"class":65,"line":322},[958],{"type":32,"tag":63,"props":959,"children":960},{"style":92},[961],{"type":37,"value":962},"        echo \"Vérification de santé échouée, rollback en cours\"\n",{"type":32,"tag":63,"props":964,"children":965},{"class":65,"line":331},[966],{"type":32,"tag":63,"props":967,"children":968},{"style":92},[969],{"type":37,"value":970},"        vercel rollback\n",{"type":32,"tag":63,"props":972,"children":973},{"class":65,"line":387},[974],{"type":32,"tag":63,"props":975,"children":976},{"style":92},[977],{"type":37,"value":978},"        exit 1\n",{"type":32,"tag":63,"props":980,"children":981},{"class":65,"line":395},[982],{"type":32,"tag":63,"props":983,"children":984},{"style":92},[985],{"type":37,"value":986},"      fi\n",{"type":32,"tag":63,"props":988,"children":989},{"class":65,"line":438},[990],{"type":32,"tag":63,"props":991,"children":992},{"style":92},[993],{"type":37,"value":994},"      sleep 5\n",{"type":32,"tag":63,"props":996,"children":997},{"class":65,"line":447},[998],{"type":32,"tag":63,"props":999,"children":1000},{"style":92},[1001],{"type":37,"value":1002},"    done\n",{"type":32,"tag":33,"props":1004,"children":1005},{},[1006],{"type":37,"value":1007},"Votre endpoint de vérification de santé doit tester les systèmes critiques : pool de connexions à la base de données, taux de succès du cache, ping vers la passerelle de paiement. Sans un taux de succès de 100 % en 30 secondes, le déploiement est automatiquement annulé.",{"type":32,"tag":40,"props":1009,"children":1011},{"id":1010},"préservation-seo-urls-canoniques-et-données-structurées",[1012],{"type":37,"value":1013},"Préservation SEO : URLs Canoniques et Données Structurées",{"type":32,"tag":33,"props":1015,"children":1016},{},[1017],{"type":37,"value":1018},"La plus grande peur lors d'une migration headless est la chute du trafic organique. Selon les données Merchant Center 2025 de Google, 68 % des sites e-commerce connaissent une baisse du trafic organique de 15 % ou plus au cours des 90 premiers jours suivant une replatformisation. Cela est dû au changement des URLs canoniques, à la perte de données structurées, et aux chaînes de redirection mal configurées.",{"type":32,"tag":33,"props":1020,"children":1021},{},[1022],{"type":37,"value":1023},"Commencez par aligner 1:1 la structure d'URL entre l'ancien et le nouveau système. Si vous migrez de Shopify vers Next.js :",{"type":32,"tag":1025,"props":1026,"children":1027},"table",{},[1028,1052],{"type":32,"tag":1029,"props":1030,"children":1031},"thead",{},[1032],{"type":32,"tag":1033,"props":1034,"children":1035},"tr",{},[1036,1042,1047],{"type":32,"tag":1037,"props":1038,"children":1039},"th",{},[1040],{"type":37,"value":1041},"Ancien (Shopify Liquid)",{"type":32,"tag":1037,"props":1043,"children":1044},{},[1045],{"type":37,"value":1046},"Nouveau (Next.js)",{"type":32,"tag":1037,"props":1048,"children":1049},{},[1050],{"type":37,"value":1051},"État",{"type":32,"tag":1053,"props":1054,"children":1055},"tbody",{},[1056,1082,1108],{"type":32,"tag":1033,"props":1057,"children":1058},{},[1059,1069,1077],{"type":32,"tag":1060,"props":1061,"children":1062},"td",{},[1063],{"type":32,"tag":59,"props":1064,"children":1066},{"className":1065},[],[1067],{"type":37,"value":1068},"\u002Fproducts\u002Fwireless-headphones",{"type":32,"tag":1060,"props":1070,"children":1071},{},[1072],{"type":32,"tag":59,"props":1073,"children":1075},{"className":1074},[],[1076],{"type":37,"value":1068},{"type":32,"tag":1060,"props":1078,"children":1079},{},[1080],{"type":37,"value":1081},"✅ Slug identique",{"type":32,"tag":1033,"props":1083,"children":1084},{},[1085,1094,1103],{"type":32,"tag":1060,"props":1086,"children":1087},{},[1088],{"type":32,"tag":59,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":37,"value":1093},"\u002Fcollections\u002Felectronics",{"type":32,"tag":1060,"props":1095,"children":1096},{},[1097],{"type":32,"tag":59,"props":1098,"children":1100},{"className":1099},[],[1101],{"type":37,"value":1102},"\u002Fcategories\u002Felectronics",{"type":32,"tag":1060,"props":1104,"children":1105},{},[1106],{"type":37,"value":1107},"❌ Chemin modifié — redirection 301 requise",{"type":32,"tag":1033,"props":1109,"children":1110},{},[1111,1120,1129],{"type":32,"tag":1060,"props":1112,"children":1113},{},[1114],{"type":32,"tag":59,"props":1115,"children":1117},{"className":1116},[],[1118],{"type":37,"value":1119},"\u002Fpages\u002Fabout",{"type":32,"tag":1060,"props":1121,"children":1122},{},[1123],{"type":32,"tag":59,"props":1124,"children":1126},{"className":1125},[],[1127],{"type":37,"value":1128},"\u002Fabout",{"type":32,"tag":1060,"props":1130,"children":1131},{},[1132],{"type":37,"value":1133},"⚠️ Chemin raccourci — ajouter tag canonique",{"type":32,"tag":33,"props":1135,"children":1136},{},[1137],{"type":37,"value":1138},"Quand le chemin doit changer, mettez en place une redirection 301 au niveau de l'Edge. Exemple avec Cloudflare Workers :",{"type":32,"tag":52,"props":1140,"children":1142},{"className":54,"code":1141,"language":56,"meta":16,"style":16},"const REDIRECT_MAP = {\n  '\u002Fcollections\u002Felectronics': '\u002Fcategories\u002Felectronics',\n  '\u002Fpages\u002Fabout': '\u002Fabout'\n}\n\naddEventListener('fetch', event => {\n  const url = new URL(event.request.url)\n  const newPath = REDIRECT_MAP[url.pathname]\n  \n  if (newPath) {\n    return Response.redirect(url.origin + newPath, 301)\n  }\n  \n  event.respondWith(fetch(event.request))\n})\n",[1143],{"type":32,"tag":59,"props":1144,"children":1145},{"__ignoreMap":16},[1146,1167,1189,1206,1213,1220,1251,1279,1304,1311,1323,1364,1371,1378,1402],{"type":32,"tag":63,"props":1147,"children":1148},{"class":65,"line":66},[1149,1154,1159,1163],{"type":32,"tag":63,"props":1150,"children":1151},{"style":109},[1152],{"type":37,"value":1153},"const",{"type":32,"tag":63,"props":1155,"children":1156},{"style":209},[1157],{"type":37,"value":1158}," REDIRECT_MAP",{"type":32,"tag":63,"props":1160,"children":1161},{"style":109},[1162],{"type":37,"value":217},{"type":32,"tag":63,"props":1164,"children":1165},{"style":86},[1166],{"type":37,"value":117},{"type":32,"tag":63,"props":1168,"children":1169},{"class":65,"line":76},[1170,1175,1179,1184],{"type":32,"tag":63,"props":1171,"children":1172},{"style":92},[1173],{"type":37,"value":1174},"  '\u002Fcollections\u002Felectronics'",{"type":32,"tag":63,"props":1176,"children":1177},{"style":86},[1178],{"type":37,"value":865},{"type":32,"tag":63,"props":1180,"children":1181},{"style":92},[1182],{"type":37,"value":1183},"'\u002Fcategories\u002Felectronics'",{"type":32,"tag":63,"props":1185,"children":1186},{"style":86},[1187],{"type":37,"value":1188},",\n",{"type":32,"tag":63,"props":1190,"children":1191},{"class":65,"line":120},[1192,1197,1201],{"type":32,"tag":63,"props":1193,"children":1194},{"style":92},[1195],{"type":37,"value":1196},"  '\u002Fpages\u002Fabout'",{"type":32,"tag":63,"props":1198,"children":1199},{"style":86},[1200],{"type":37,"value":865},{"type":32,"tag":63,"props":1202,"children":1203},{"style":92},[1204],{"type":37,"value":1205},"'\u002Fabout'\n",{"type":32,"tag":63,"props":1207,"children":1208},{"class":65,"line":148},[1209],{"type":32,"tag":63,"props":1210,"children":1211},{"style":86},[1212],{"type":37,"value":551},{"type":32,"tag":63,"props":1214,"children":1215},{"class":65,"line":157},[1216],{"type":32,"tag":63,"props":1217,"children":1218},{"emptyLinePlaceholder":161},[1219],{"type":37,"value":164},{"type":32,"tag":63,"props":1221,"children":1222},{"class":65,"line":167},[1223,1227,1231,1235,1239,1243,1247],{"type":32,"tag":63,"props":1224,"children":1225},{"style":80},[1226],{"type":37,"value":83},{"type":32,"tag":63,"props":1228,"children":1229},{"style":86},[1230],{"type":37,"value":89},{"type":32,"tag":63,"props":1232,"children":1233},{"style":92},[1234],{"type":37,"value":95},{"type":32,"tag":63,"props":1236,"children":1237},{"style":86},[1238],{"type":37,"value":100},{"type":32,"tag":63,"props":1240,"children":1241},{"style":103},[1242],{"type":37,"value":106},{"type":32,"tag":63,"props":1244,"children":1245},{"style":109},[1246],{"type":37,"value":112},{"type":32,"tag":63,"props":1248,"children":1249},{"style":86},[1250],{"type":37,"value":117},{"type":32,"tag":63,"props":1252,"children":1253},{"class":65,"line":200},[1254,1258,1262,1266,1270,1274],{"type":32,"tag":63,"props":1255,"children":1256},{"style":109},[1257],{"type":37,"value":206},{"type":32,"tag":63,"props":1259,"children":1260},{"style":209},[1261],{"type":37,"value":212},{"type":32,"tag":63,"props":1263,"children":1264},{"style":109},[1265],{"type":37,"value":217},{"type":32,"tag":63,"props":1267,"children":1268},{"style":109},[1269],{"type":37,"value":222},{"type":32,"tag":63,"props":1271,"children":1272},{"style":80},[1273],{"type":37,"value":227},{"type":32,"tag":63,"props":1275,"children":1276},{"style":86},[1277],{"type":37,"value":1278},"(event.request.url)\n",{"type":32,"tag":63,"props":1280,"children":1281},{"class":65,"line":26},[1282,1286,1291,1295,1299],{"type":32,"tag":63,"props":1283,"children":1284},{"style":109},[1285],{"type":37,"value":206},{"type":32,"tag":63,"props":1287,"children":1288},{"style":209},[1289],{"type":37,"value":1290}," newPath",{"type":32,"tag":63,"props":1292,"children":1293},{"style":109},[1294],{"type":37,"value":217},{"type":32,"tag":63,"props":1296,"children":1297},{"style":209},[1298],{"type":37,"value":1158},{"type":32,"tag":63,"props":1300,"children":1301},{"style":86},[1302],{"type":37,"value":1303},"[url.pathname]\n",{"type":32,"tag":63,"props":1305,"children":1306},{"class":65,"line":295},[1307],{"type":32,"tag":63,"props":1308,"children":1309},{"style":86},[1310],{"type":37,"value":328},{"type":32,"tag":63,"props":1312,"children":1313},{"class":65,"line":322},[1314,1318],{"type":32,"tag":63,"props":1315,"children":1316},{"style":109},[1317],{"type":37,"value":401},{"type":32,"tag":63,"props":1319,"children":1320},{"style":86},[1321],{"type":37,"value":1322}," (newPath) {\n",{"type":32,"tag":63,"props":1324,"children":1325},{"class":65,"line":331},[1326,1330,1335,1340,1345,1349,1354,1359],{"type":32,"tag":63,"props":1327,"children":1328},{"style":109},[1329],{"type":37,"value":453},{"type":32,"tag":63,"props":1331,"children":1332},{"style":86},[1333],{"type":37,"value":1334}," Response.",{"type":32,"tag":63,"props":1336,"children":1337},{"style":80},[1338],{"type":37,"value":1339},"redirect",{"type":32,"tag":63,"props":1341,"children":1342},{"style":86},[1343],{"type":37,"value":1344},"(url.origin ",{"type":32,"tag":63,"props":1346,"children":1347},{"style":109},[1348],{"type":37,"value":721},{"type":32,"tag":63,"props":1350,"children":1351},{"style":86},[1352],{"type":37,"value":1353}," newPath, ",{"type":32,"tag":63,"props":1355,"children":1356},{"style":209},[1357],{"type":37,"value":1358},"301",{"type":32,"tag":63,"props":1360,"children":1361},{"style":86},[1362],{"type":37,"value":1363},")\n",{"type":32,"tag":63,"props":1365,"children":1366},{"class":65,"line":387},[1367],{"type":32,"tag":63,"props":1368,"children":1369},{"style":86},[1370],{"type":37,"value":542},{"type":32,"tag":63,"props":1372,"children":1373},{"class":65,"line":395},[1374],{"type":32,"tag":63,"props":1375,"children":1376},{"style":86},[1377],{"type":37,"value":328},{"type":32,"tag":63,"props":1379,"children":1380},{"class":65,"line":438},[1381,1385,1389,1393,1398],{"type":32,"tag":63,"props":1382,"children":1383},{"style":86},[1384],{"type":37,"value":126},{"type":32,"tag":63,"props":1386,"children":1387},{"style":80},[1388],{"type":37,"value":131},{"type":32,"tag":63,"props":1390,"children":1391},{"style":86},[1392],{"type":37,"value":89},{"type":32,"tag":63,"props":1394,"children":1395},{"style":80},[1396],{"type":37,"value":1397},"fetch",{"type":32,"tag":63,"props":1399,"children":1400},{"style":86},[1401],{"type":37,"value":145},{"type":32,"tag":63,"props":1403,"children":1404},{"class":65,"line":447},[1405],{"type":32,"tag":63,"props":1406,"children":1407},{"style":86},[1408],{"type":37,"value":154},{"type":32,"tag":33,"props":1410,"children":1411},{},[1412,1414,1420,1422,1428],{"type":37,"value":1413},"Vérifiez les données structurées : si vous aviez des schémas Product, BreadcrumbList ou Organization en ancien système, ils doivent exister dans le même format en nouveau système. Dans Next.js, plutôt que d'utiliser ",{"type":32,"tag":59,"props":1415,"children":1417},{"className":1416},[],[1418],{"type":37,"value":1419},"next-seo",{"type":37,"value":1421},", préférez un tag ",{"type":32,"tag":59,"props":1423,"children":1425},{"className":1424},[],[1426],{"type":37,"value":1427},"\u003Cscript type=\"application\u002Fld+json\">",{"type":37,"value":1429}," manuel — le taux de rendu est plus fiable :",{"type":32,"tag":52,"props":1431,"children":1435},{"className":1432,"code":1433,"language":1434,"meta":16,"style":16},"language-jsx shiki shiki-themes github-dark","\u002F\u002F app\u002Fproducts\u002F[slug]\u002Fpage.tsx\nexport default function ProductPage({ product }) {\n  const structuredData = {\n    \"@context\": \"https:\u002F\u002Fschema.org\",\n    \"@type\": \"Product\",\n    \"name\": product.title,\n    \"sku\": product.sku,\n    \"offers\": {\n      \"@type\": \"Offer\",\n      \"price\": product.price,\n      \"priceCurrency\": \"EUR\",\n      \"availability\": product.stock > 0 ? \"InStock\" : \"OutOfStock\"\n    }\n  }\n  \n  return (\n    \u003C>\n      \u003Cscript\n        type=\"application\u002Fld+json\"\n        dangerouslySetInnerHTML={{ __html: JSON.stringify(structuredData) }}\n      \u002F>\n      {\u002F* Rendu du produit *\u002F}\n    \u003C\u002F>\n  )\n}\n","jsx",[1436],{"type":32,"tag":59,"props":1437,"children":1438},{"__ignoreMap":16},[1439,1447,1484,1504,1525,1546,1559,1572,1585,1606,1619,1640,1682,1690,1697,1704,1716,1724,1737,1754,1791,1799,1816,1824,1832],{"type":32,"tag":63,"props":1440,"children":1441},{"class":65,"line":66},[1442],{"type":32,"tag":63,"props":1443,"children":1444},{"style":70},[1445],{"type":37,"value":1446},"\u002F\u002F app\u002Fproducts\u002F[slug]\u002Fpage.tsx\n",{"type":32,"tag":63,"props":1448,"children":1449},{"class":65,"line":76},[1450,1455,1460,1464,1469,1474,1479],{"type":32,"tag":63,"props":1451,"children":1452},{"style":109},[1453],{"type":37,"value":1454},"export",{"type":32,"tag":63,"props":1456,"children":1457},{"style":109},[1458],{"type":37,"value":1459}," default",{"type":32,"tag":63,"props":1461,"children":1462},{"style":109},[1463],{"type":37,"value":178},{"type":32,"tag":63,"props":1465,"children":1466},{"style":80},[1467],{"type":37,"value":1468}," ProductPage",{"type":32,"tag":63,"props":1470,"children":1471},{"style":86},[1472],{"type":37,"value":1473},"({ ",{"type":32,"tag":63,"props":1475,"children":1476},{"style":103},[1477],{"type":37,"value":1478},"product",{"type":32,"tag":63,"props":1480,"children":1481},{"style":86},[1482],{"type":37,"value":1483}," }) {\n",{"type":32,"tag":63,"props":1485,"children":1486},{"class":65,"line":120},[1487,1491,1496,1500],{"type":32,"tag":63,"props":1488,"children":1489},{"style":109},[1490],{"type":37,"value":206},{"type":32,"tag":63,"props":1492,"children":1493},{"style":209},[1494],{"type":37,"value":1495}," structuredData",{"type":32,"tag":63,"props":1497,"children":1498},{"style":109},[1499],{"type":37,"value":217},{"type":32,"tag":63,"props":1501,"children":1502},{"style":86},[1503],{"type":37,"value":117},{"type":32,"tag":63,"props":1505,"children":1506},{"class":65,"line":148},[1507,1512,1516,1521],{"type":32,"tag":63,"props":1508,"children":1509},{"style":92},[1510],{"type":37,"value":1511},"    \"@context\"",{"type":32,"tag":63,"props":1513,"children":1514},{"style":86},[1515],{"type":37,"value":865},{"type":32,"tag":63,"props":1517,"children":1518},{"style":92},[1519],{"type":37,"value":1520},"\"https:\u002F\u002Fschema.org\"",{"type":32,"tag":63,"props":1522,"children":1523},{"style":86},[1524],{"type":37,"value":1188},{"type":32,"tag":63,"props":1526,"children":1527},{"class":65,"line":157},[1528,1533,1537,1542],{"type":32,"tag":63,"props":1529,"children":1530},{"style":92},[1531],{"type":37,"value":1532},"    \"@type\"",{"type":32,"tag":63,"props":1534,"children":1535},{"style":86},[1536],{"type":37,"value":865},{"type":32,"tag":63,"props":1538,"children":1539},{"style":92},[1540],{"type":37,"value":1541},"\"Product\"",{"type":32,"tag":63,"props":1543,"children":1544},{"style":86},[1545],{"type":37,"value":1188},{"type":32,"tag":63,"props":1547,"children":1548},{"class":65,"line":167},[1549,1554],{"type":32,"tag":63,"props":1550,"children":1551},{"style":92},[1552],{"type":37,"value":1553},"    \"name\"",{"type":32,"tag":63,"props":1555,"children":1556},{"style":86},[1557],{"type":37,"value":1558},": product.title,\n",{"type":32,"tag":63,"props":1560,"children":1561},{"class":65,"line":200},[1562,1567],{"type":32,"tag":63,"props":1563,"children":1564},{"style":92},[1565],{"type":37,"value":1566},"    \"sku\"",{"type":32,"tag":63,"props":1568,"children":1569},{"style":86},[1570],{"type":37,"value":1571},": product.sku,\n",{"type":32,"tag":63,"props":1573,"children":1574},{"class":65,"line":26},[1575,1580],{"type":32,"tag":63,"props":1576,"children":1577},{"style":92},[1578],{"type":37,"value":1579},"    \"offers\"",{"type":32,"tag":63,"props":1581,"children":1582},{"style":86},[1583],{"type":37,"value":1584},": {\n",{"type":32,"tag":63,"props":1586,"children":1587},{"class":65,"line":295},[1588,1593,1597,1602],{"type":32,"tag":63,"props":1589,"children":1590},{"style":92},[1591],{"type":37,"value":1592},"      \"@type\"",{"type":32,"tag":63,"props":1594,"children":1595},{"style":86},[1596],{"type":37,"value":865},{"type":32,"tag":63,"props":1598,"children":1599},{"style":92},[1600],{"type":37,"value":1601},"\"Offer\"",{"type":32,"tag":63,"props":1603,"children":1604},{"style":86},[1605],{"type":37,"value":1188},{"type":32,"tag":63,"props":1607,"children":1608},{"class":65,"line":322},[1609,1614],{"type":32,"tag":63,"props":1610,"children":1611},{"style":92},[1612],{"type":37,"value":1613},"      \"price\"",{"type":32,"tag":63,"props":1615,"children":1616},{"style":86},[1617],{"type":37,"value":1618},": product.price,\n",{"type":32,"tag":63,"props":1620,"children":1621},{"class":65,"line":331},[1622,1627,1631,1636],{"type":32,"tag":63,"props":1623,"children":1624},{"style":92},[1625],{"type":37,"value":1626},"      \"priceCurrency\"",{"type":32,"tag":63,"props":1628,"children":1629},{"style":86},[1630],{"type":37,"value":865},{"type":32,"tag":63,"props":1632,"children":1633},{"style":92},[1634],{"type":37,"value":1635},"\"EUR\"",{"type":32,"tag":63,"props":1637,"children":1638},{"style":86},[1639],{"type":37,"value":1188},{"type":32,"tag":63,"props":1641,"children":1642},{"class":65,"line":387},[1643,1648,1653,1658,1662,1667,1672,1677],{"type":32,"tag":63,"props":1644,"children":1645},{"style":92},[1646],{"type":37,"value":1647},"      \"availability\"",{"type":32,"tag":63,"props":1649,"children":1650},{"style":86},[1651],{"type":37,"value":1652},": product.stock ",{"type":32,"tag":63,"props":1654,"children":1655},{"style":109},[1656],{"type":37,"value":1657},">",{"type":32,"tag":63,"props":1659,"children":1660},{"style":209},[1661],{"type":37,"value":642},{"type":32,"tag":63,"props":1663,"children":1664},{"style":109},[1665],{"type":37,"value":1666}," ?",{"type":32,"tag":63,"props":1668,"children":1669},{"style":92},[1670],{"type":37,"value":1671}," \"InStock\"",{"type":32,"tag":63,"props":1673,"children":1674},{"style":109},[1675],{"type":37,"value":1676}," :",{"type":32,"tag":63,"props":1678,"children":1679},{"style":92},[1680],{"type":37,"value":1681}," \"OutOfStock\"\n",{"type":32,"tag":63,"props":1683,"children":1684},{"class":65,"line":395},[1685],{"type":32,"tag":63,"props":1686,"children":1687},{"style":86},[1688],{"type":37,"value":1689},"    }\n",{"type":32,"tag":63,"props":1691,"children":1692},{"class":65,"line":438},[1693],{"type":32,"tag":63,"props":1694,"children":1695},{"style":86},[1696],{"type":37,"value":542},{"type":32,"tag":63,"props":1698,"children":1699},{"class":65,"line":447},[1700],{"type":32,"tag":63,"props":1701,"children":1702},{"style":86},[1703],{"type":37,"value":328},{"type":32,"tag":63,"props":1705,"children":1706},{"class":65,"line":480},[1707,1711],{"type":32,"tag":63,"props":1708,"children":1709},{"style":109},[1710],{"type":37,"value":769},{"type":32,"tag":63,"props":1712,"children":1713},{"style":86},[1714],{"type":37,"value":1715}," (\n",{"type":32,"tag":63,"props":1717,"children":1718},{"class":65,"line":498},[1719],{"type":32,"tag":63,"props":1720,"children":1721},{"style":86},[1722],{"type":37,"value":1723},"    \u003C>\n",{"type":32,"tag":63,"props":1725,"children":1726},{"class":65,"line":507},[1727,1732],{"type":32,"tag":63,"props":1728,"children":1729},{"style":86},[1730],{"type":37,"value":1731},"      \u003C",{"type":32,"tag":63,"props":1733,"children":1734},{"style":857},[1735],{"type":37,"value":1736},"script\n",{"type":32,"tag":63,"props":1738,"children":1739},{"class":65,"line":536},[1740,1745,1749],{"type":32,"tag":63,"props":1741,"children":1742},{"style":80},[1743],{"type":37,"value":1744},"        type",{"type":32,"tag":63,"props":1746,"children":1747},{"style":109},[1748],{"type":37,"value":605},{"type":32,"tag":63,"props":1750,"children":1751},{"style":92},[1752],{"type":37,"value":1753},"\"application\u002Fld+json\"\n",{"type":32,"tag":63,"props":1755,"children":1756},{"class":65,"line":545},[1757,1762,1766,1771,1776,1781,1786],{"type":32,"tag":63,"props":1758,"children":1759},{"style":80},[1760],{"type":37,"value":1761},"        dangerouslySetInnerHTML",{"type":32,"tag":63,"props":1763,"children":1764},{"style":109},[1765],{"type":37,"value":605},{"type":32,"tag":63,"props":1767,"children":1768},{"style":86},[1769],{"type":37,"value":1770},"{{ __html: ",{"type":32,"tag":63,"props":1772,"children":1773},{"style":209},[1774],{"type":37,"value":1775},"JSON",{"type":32,"tag":63,"props":1777,"children":1778},{"style":86},[1779],{"type":37,"value":1780},".",{"type":32,"tag":63,"props":1782,"children":1783},{"style":80},[1784],{"type":37,"value":1785},"stringify",{"type":32,"tag":63,"props":1787,"children":1788},{"style":86},[1789],{"type":37,"value":1790},"(structuredData) }}\n",{"type":32,"tag":63,"props":1792,"children":1793},{"class":65,"line":554},[1794],{"type":32,"tag":63,"props":1795,"children":1796},{"style":86},[1797],{"type":37,"value":1798},"      \u002F>\n",{"type":32,"tag":63,"props":1800,"children":1801},{"class":65,"line":562},[1802,1807,1812],{"type":32,"tag":63,"props":1803,"children":1804},{"style":86},[1805],{"type":37,"value":1806},"      {",{"type":32,"tag":63,"props":1808,"children":1809},{"style":70},[1810],{"type":37,"value":1811},"\u002F* Rendu du produit *\u002F",{"type":32,"tag":63,"props":1813,"children":1814},{"style":86},[1815],{"type":37,"value":551},{"type":32,"tag":63,"props":1817,"children":1818},{"class":65,"line":589},[1819],{"type":32,"tag":63,"props":1820,"children":1821},{"style":86},[1822],{"type":37,"value":1823},"    \u003C\u002F>\n",{"type":32,"tag":63,"props":1825,"children":1826},{"class":65,"line":613},[1827],{"type":32,"tag":63,"props":1828,"children":1829},{"style":86},[1830],{"type":37,"value":1831},"  )\n",{"type":32,"tag":63,"props":1833,"children":1834},{"class":65,"line":678},[1835],{"type":32,"tag":63,"props":1836,"children":1837},{"style":86},[1838],{"type":37,"value":551},{"type":32,"tag":33,"props":1840,"children":1841},{},[1842],{"type":37,"value":1843},"Utilisez l'outil « Inspection d'URL » dans Google Search Console pour surveiller l'indexation de vos nouvelles pages. Au cours des 30 premiers jours suivant la migration, consultez chaque semaine le rapport « Couverture » : si vous voyez plus de 50 erreurs « Indexée, non soumise dans le sitemap », votre génération de sitemap ne fonctionne pas correctement.",{"type":32,"tag":819,"props":1845,"children":1847},{"id":1846},"minimisation-des-chaînes-de-redirection",[1848],{"type":37,"value":1849},"Minimisation des Chaînes de Redirection",{"type":32,"tag":33,"props":1851,"children":1852},{},[1853,1855,1861,1863,1869,1871,1880],{"type":37,"value":1854},"Nettoyez les chaînes de redirection dans votre ancien système. Par exemple, si Shopify contient une redirection ",{"type":32,"tag":59,"props":1856,"children":1858},{"className":1857},[],[1859],{"type":37,"value":1860},"\u002Fproducts\u002Fold-name",{"type":37,"value":1862}," → ",{"type":32,"tag":59,"props":1864,"children":1866},{"className":1865},[],[1867],{"type":37,"value":1868},"\u002Fproducts\u002Fnew-name",{"type":37,"value":1870},", utilisez directement l'URL finale en nouveau système. Plus de deux niveaux de redirection (A → B → C) consomment le budget de crawl de Google et réduisent l'efficacité du transfert de PageRank. Lors des projets ",{"type":32,"tag":1872,"props":1873,"children":1877},"a",{"href":1874,"rel":1875},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Fheadless",[1876],"nofollow",[1878],{"type":37,"value":1879},"Headless Commerce",{"type":37,"value":1881}," de Roibase, le processus d'audit des redirections offre en moyenne une réduction de 40 % des chaînes.",{"type":32,"tag":40,"props":1883,"children":1885},{"id":1884},"analyse-des-abandons-de-panier-suivi-du-tunnel-de-conversion",[1886],{"type":37,"value":1887},"Analyse des Abandons de Panier : Suivi du Tunnel de Conversion",{"type":32,"tag":33,"props":1889,"children":1890},{},[1891],{"type":37,"value":1892},"La métrique la plus sensible lors d'une migration headless est le taux de succès de l'ajout au panier (ATC). Si votre ancien système atteint 99,5 % de taux de succès et que le nouveau tombe à 98 %, cela représente 1 500 paniers perdus par jour (100 000 visiteurs × 3 % d'intention ATC × 1,5 % de baisse).",{"type":32,"tag":33,"props":1894,"children":1895},{},[1896],{"type":37,"value":1897},"Vous devez enregistrer l'événement ATC côté client ET côté serveur. Les tags GTM côté client ne peuvent pas capturer les défaillances réseau ; les logs côté serveur sont l'enregistrement définitif :",{"type":32,"tag":52,"props":1899,"children":1901},{"className":54,"code":1900,"language":56,"meta":16,"style":16},"\u002F\u002F app\u002Fapi\u002Fcart\u002Fadd\u002Froute.ts (App Router Next.js)\nimport { NextResponse } from 'next\u002Fserver'\nimport { logEvent } from '@\u002Flib\u002Fanalytics'\n\nexport async function POST(request: Request) {\n  const { productId, quantity } = await request.json()\n  const startTime = Date.now()\n  \n  try {\n    const cart = await addToCart(productId, quantity)\n    const duration = Date.now() - startTime\n    \n    \u002F\u002F Enregistrement d'événement côté serveur\n    await logEvent({\n      event: 'add_to_cart_success',\n      productId,\n      quantity,\n      duration, \u002F\u002F ms\n      userId: request.headers.get('X-User-ID')\n    })\n    \n    return NextResponse.json({ cart }, { status: 200 })\n  } catch (error) {\n    const duration = Date.now() - startTime\n    \n    await logEvent({\n      event: 'add_to_cart_failure',\n      productId,\n      quantity,\n      duration,\n      error: error.message,\n      userId: request.headers.get('X-User-ID')\n    })\n    \n    return NextResponse.json({ error: 'Échec de l\\'ajout au panier' }, { status: 500 })\n  }\n}\n",[1902],{"type":32,"tag":59,"props":1903,"children":1904},{"__ignoreMap":16},[1905,1913,1936,1957,1964,2007,2061,2091,2098,2110,2141,2179,2187,2195,2213,2230,2238,2246,2259,2283,2291,2298,2329,2346,2381,2388,2403,2419,2426,2433,2442,2451,2475,2483,2491,2541,2549],{"type":32,"tag":63,"props":1906,"children":1907},{"class":65,"line":66},[1908],{"type":32,"tag":63,"props":1909,"children":1910},{"style":70},[1911],{"type":37,"value":1912},"\u002F\u002F app\u002Fapi\u002Fcart\u002Fadd\u002Froute.ts (App Router Next.js)\n",{"type":32,"tag":63,"props":1914,"children":1915},{"class":65,"line":76},[1916,1921,1926,1931],{"type":32,"tag":63,"props":1917,"children":1918},{"style":109},[1919],{"type":37,"value":1920},"import",{"type":32,"tag":63,"props":1922,"children":1923},{"style":86},[1924],{"type":37,"value":1925}," { NextResponse } ",{"type":32,"tag":63,"props":1927,"children":1928},{"style":109},[1929],{"type":37,"value":1930},"from",{"type":32,"tag":63,"props":1932,"children":1933},{"style":92},[1934],{"type":37,"value":1935}," 'next\u002Fserver'\n",{"type":32,"tag":63,"props":1937,"children":1938},{"class":65,"line":120},[1939,1943,1948,1952],{"type":32,"tag":63,"props":1940,"children":1941},{"style":109},[1942],{"type":37,"value":1920},{"type":32,"tag":63,"props":1944,"children":1945},{"style":86},[1946],{"type":37,"value":1947}," { logEvent } ",{"type":32,"tag":63,"props":1949,"children":1950},{"style":109},[1951],{"type":37,"value":1930},{"type":32,"tag":63,"props":1953,"children":1954},{"style":92},[1955],{"type":37,"value":1956}," '@\u002Flib\u002Fanalytics'\n",{"type":32,"tag":63,"props":1958,"children":1959},{"class":65,"line":148},[1960],{"type":32,"tag":63,"props":1961,"children":1962},{"emptyLinePlaceholder":161},[1963],{"type":37,"value":164},{"type":32,"tag":63,"props":1965,"children":1966},{"class":65,"line":157},[1967,1971,1976,1980,1985,1989,1993,1998,2003],{"type":32,"tag":63,"props":1968,"children":1969},{"style":109},[1970],{"type":37,"value":1454},{"type":32,"tag":63,"props":1972,"children":1973},{"style":109},[1974],{"type":37,"value":1975}," async",{"type":32,"tag":63,"props":1977,"children":1978},{"style":109},[1979],{"type":37,"value":178},{"type":32,"tag":63,"props":1981,"children":1982},{"style":80},[1983],{"type":37,"value":1984}," POST",{"type":32,"tag":63,"props":1986,"children":1987},{"style":86},[1988],{"type":37,"value":89},{"type":32,"tag":63,"props":1990,"children":1991},{"style":103},[1992],{"type":37,"value":192},{"type":32,"tag":63,"props":1994,"children":1995},{"style":109},[1996],{"type":37,"value":1997},":",{"type":32,"tag":63,"props":1999,"children":2000},{"style":80},[2001],{"type":37,"value":2002}," Request",{"type":32,"tag":63,"props":2004,"children":2005},{"style":86},[2006],{"type":37,"value":197},{"type":32,"tag":63,"props":2008,"children":2009},{"class":65,"line":167},[2010,2014,2019,2024,2028,2033,2038,2042,2047,2052,2057],{"type":32,"tag":63,"props":2011,"children":2012},{"style":109},[2013],{"type":37,"value":206},{"type":32,"tag":63,"props":2015,"children":2016},{"style":86},[2017],{"type":37,"value":2018}," { ",{"type":32,"tag":63,"props":2020,"children":2021},{"style":209},[2022],{"type":37,"value":2023},"productId",{"type":32,"tag":63,"props":2025,"children":2026},{"style":86},[2027],{"type":37,"value":100},{"type":32,"tag":63,"props":2029,"children":2030},{"style":209},[2031],{"type":37,"value":2032},"quantity",{"type":32,"tag":63,"props":2034,"children":2035},{"style":86},[2036],{"type":37,"value":2037}," } ",{"type":32,"tag":63,"props":2039,"children":2040},{"style":109},[2041],{"type":37,"value":605},{"type":32,"tag":63,"props":2043,"children":2044},{"style":109},[2045],{"type":37,"value":2046}," await",{"type":32,"tag":63,"props":2048,"children":2049},{"style":86},[2050],{"type":37,"value":2051}," request.",{"type":32,"tag":63,"props":2053,"children":2054},{"style":80},[2055],{"type":37,"value":2056},"json",{"type":32,"tag":63,"props":2058,"children":2059},{"style":86},[2060],{"type":37,"value":292},{"type":32,"tag":63,"props":2062,"children":2063},{"class":65,"line":200},[2064,2068,2073,2077,2082,2087],{"type":32,"tag":63,"props":2065,"children":2066},{"style":109},[2067],{"type":37,"value":206},{"type":32,"tag":63,"props":2069,"children":2070},{"style":209},[2071],{"type":37,"value":2072}," startTime",{"type":32,"tag":63,"props":2074,"children":2075},{"style":109},[2076],{"type":37,"value":217},{"type":32,"tag":63,"props":2078,"children":2079},{"style":86},[2080],{"type":37,"value":2081}," Date.",{"type":32,"tag":63,"props":2083,"children":2084},{"style":80},[2085],{"type":37,"value":2086},"now",{"type":32,"tag":63,"props":2088,"children":2089},{"style":86},[2090],{"type":37,"value":292},{"type":32,"tag":63,"props":2092,"children":2093},{"class":65,"line":26},[2094],{"type":32,"tag":63,"props":2095,"children":2096},{"style":86},[2097],{"type":37,"value":328},{"type":32,"tag":63,"props":2099,"children":2100},{"class":65,"line":295},[2101,2106],{"type":32,"tag":63,"props":2102,"children":2103},{"style":109},[2104],{"type":37,"value":2105},"  try",{"type":32,"tag":63,"props":2107,"children":2108},{"style":86},[2109],{"type":37,"value":117},{"type":32,"tag":63,"props":2111,"children":2112},{"class":65,"line":322},[2113,2118,2123,2127,2131,2136],{"type":32,"tag":63,"props":2114,"children":2115},{"style":109},[2116],{"type":37,"value":2117},"    const",{"type":32,"tag":63,"props":2119,"children":2120},{"style":209},[2121],{"type":37,"value":2122}," cart",{"type":32,"tag":63,"props":2124,"children":2125},{"style":109},[2126],{"type":37,"value":217},{"type":32,"tag":63,"props":2128,"children":2129},{"style":109},[2130],{"type":37,"value":2046},{"type":32,"tag":63,"props":2132,"children":2133},{"style":80},[2134],{"type":37,"value":2135}," addToCart",{"type":32,"tag":63,"props":2137,"children":2138},{"style":86},[2139],{"type":37,"value":2140},"(productId, quantity)\n",{"type":32,"tag":63,"props":2142,"children":2143},{"class":65,"line":331},[2144,2148,2153,2157,2161,2165,2170,2174],{"type":32,"tag":63,"props":2145,"children":2146},{"style":109},[2147],{"type":37,"value":2117},{"type":32,"tag":63,"props":2149,"children":2150},{"style":209},[2151],{"type":37,"value":2152}," duration",{"type":32,"tag":63,"props":2154,"children":2155},{"style":109},[2156],{"type":37,"value":217},{"type":32,"tag":63,"props":2158,"children":2159},{"style":86},[2160],{"type":37,"value":2081},{"type":32,"tag":63,"props":2162,"children":2163},{"style":80},[2164],{"type":37,"value":2086},{"type":32,"tag":63,"props":2166,"children":2167},{"style":86},[2168],{"type":37,"value":2169},"() ",{"type":32,"tag":63,"props":2171,"children":2172},{"style":109},[2173],{"type":37,"value":711},{"type":32,"tag":63,"props":2175,"children":2176},{"style":86},[2177],{"type":37,"value":2178}," startTime\n",{"type":32,"tag":63,"props":2180,"children":2181},{"class":65,"line":387},[2182],{"type":32,"tag":63,"props":2183,"children":2184},{"style":86},[2185],{"type":37,"value":2186},"    \n",{"type":32,"tag":63,"props":2188,"children":2189},{"class":65,"line":395},[2190],{"type":32,"tag":63,"props":2191,"children":2192},{"style":70},[2193],{"type":37,"value":2194},"    \u002F\u002F Enregistrement d'événement côté serveur\n",{"type":32,"tag":63,"props":2196,"children":2197},{"class":65,"line":438},[2198,2203,2208],{"type":32,"tag":63,"props":2199,"children":2200},{"style":109},[2201],{"type":37,"value":2202},"    await",{"type":32,"tag":63,"props":2204,"children":2205},{"style":80},[2206],{"type":37,"value":2207}," logEvent",{"type":32,"tag":63,"props":2209,"children":2210},{"style":86},[2211],{"type":37,"value":2212},"({\n",{"type":32,"tag":63,"props":2214,"children":2215},{"class":65,"line":447},[2216,2221,2226],{"type":32,"tag":63,"props":2217,"children":2218},{"style":86},[2219],{"type":37,"value":2220},"      event: ",{"type":32,"tag":63,"props":2222,"children":2223},{"style":92},[2224],{"type":37,"value":2225},"'add_to_cart_success'",{"type":32,"tag":63,"props":2227,"children":2228},{"style":86},[2229],{"type":37,"value":1188},{"type":32,"tag":63,"props":2231,"children":2232},{"class":65,"line":480},[2233],{"type":32,"tag":63,"props":2234,"children":2235},{"style":86},[2236],{"type":37,"value":2237},"      productId,\n",{"type":32,"tag":63,"props":2239,"children":2240},{"class":65,"line":498},[2241],{"type":32,"tag":63,"props":2242,"children":2243},{"style":86},[2244],{"type":37,"value":2245},"      quantity,\n",{"type":32,"tag":63,"props":2247,"children":2248},{"class":65,"line":507},[2249,2254],{"type":32,"tag":63,"props":2250,"children":2251},{"style":86},[2252],{"type":37,"value":2253},"      duration, ",{"type":32,"tag":63,"props":2255,"children":2256},{"style":70},[2257],{"type":37,"value":2258},"\u002F\u002F ms\n",{"type":32,"tag":63,"props":2260,"children":2261},{"class":65,"line":536},[2262,2267,2271,2275,2279],{"type":32,"tag":63,"props":2263,"children":2264},{"style":86},[2265],{"type":37,"value":2266},"      userId: request.headers.",{"type":32,"tag":63,"props":2268,"children":2269},{"style":80},[2270],{"type":37,"value":258},{"type":32,"tag":63,"props":2272,"children":2273},{"style":86},[2274],{"type":37,"value":89},{"type":32,"tag":63,"props":2276,"children":2277},{"style":92},[2278],{"type":37,"value":267},{"type":32,"tag":63,"props":2280,"children":2281},{"style":86},[2282],{"type":37,"value":1363},{"type":32,"tag":63,"props":2284,"children":2285},{"class":65,"line":545},[2286],{"type":32,"tag":63,"props":2287,"children":2288},{"style":86},[2289],{"type":37,"value":2290},"    })\n",{"type":32,"tag":63,"props":2292,"children":2293},{"class":65,"line":554},[2294],{"type":32,"tag":63,"props":2295,"children":2296},{"style":86},[2297],{"type":37,"value":2186},{"type":32,"tag":63,"props":2299,"children":2300},{"class":65,"line":562},[2301,2305,2310,2314,2319,2324],{"type":32,"tag":63,"props":2302,"children":2303},{"style":109},[2304],{"type":37,"value":453},{"type":32,"tag":63,"props":2306,"children":2307},{"style":86},[2308],{"type":37,"value":2309}," NextResponse.",{"type":32,"tag":63,"props":2311,"children":2312},{"style":80},[2313],{"type":37,"value":2056},{"type":32,"tag":63,"props":2315,"children":2316},{"style":86},[2317],{"type":37,"value":2318},"({ cart }, { status: ",{"type":32,"tag":63,"props":2320,"children":2321},{"style":209},[2322],{"type":37,"value":2323},"200",{"type":32,"tag":63,"props":2325,"children":2326},{"style":86},[2327],{"type":37,"value":2328}," })\n",{"type":32,"tag":63,"props":2330,"children":2331},{"class":65,"line":589},[2332,2336,2341],{"type":32,"tag":63,"props":2333,"children":2334},{"style":86},[2335],{"type":37,"value":486},{"type":32,"tag":63,"props":2337,"children":2338},{"style":109},[2339],{"type":37,"value":2340},"catch",{"type":32,"tag":63,"props":2342,"children":2343},{"style":86},[2344],{"type":37,"value":2345}," (error) {\n",{"type":32,"tag":63,"props":2347,"children":2348},{"class":65,"line":613},[2349,2353,2357,2361,2365,2369,2373,2377],{"type":32,"tag":63,"props":2350,"children":2351},{"style":109},[2352],{"type":37,"value":2117},{"type":32,"tag":63,"props":2354,"children":2355},{"style":209},[2356],{"type":37,"value":2152},{"type":32,"tag":63,"props":2358,"children":2359},{"style":109},[2360],{"type":37,"value":217},{"type":32,"tag":63,"props":2362,"children":2363},{"style":86},[2364],{"type":37,"value":2081},{"type":32,"tag":63,"props":2366,"children":2367},{"style":80},[2368],{"type":37,"value":2086},{"type":32,"tag":63,"props":2370,"children":2371},{"style":86},[2372],{"type":37,"value":2169},{"type":32,"tag":63,"props":2374,"children":2375},{"style":109},[2376],{"type":37,"value":711},{"type":32,"tag":63,"props":2378,"children":2379},{"style":86},[2380],{"type":37,"value":2178},{"type":32,"tag":63,"props":2382,"children":2383},{"class":65,"line":678},[2384],{"type":32,"tag":63,"props":2385,"children":2386},{"style":86},[2387],{"type":37,"value":2186},{"type":32,"tag":63,"props":2389,"children":2390},{"class":65,"line":738},[2391,2395,2399],{"type":32,"tag":63,"props":2392,"children":2393},{"style":109},[2394],{"type":37,"value":2202},{"type":32,"tag":63,"props":2396,"children":2397},{"style":80},[2398],{"type":37,"value":2207},{"type":32,"tag":63,"props":2400,"children":2401},{"style":86},[2402],{"type":37,"value":2212},{"type":32,"tag":63,"props":2404,"children":2405},{"class":65,"line":755},[2406,2410,2415],{"type":32,"tag":63,"props":2407,"children":2408},{"style":86},[2409],{"type":37,"value":2220},{"type":32,"tag":63,"props":2411,"children":2412},{"style":92},[2413],{"type":37,"value":2414},"'add_to_cart_failure'",{"type":32,"tag":63,"props":2416,"children":2417},{"style":86},[2418],{"type":37,"value":1188},{"type":32,"tag":63,"props":2420,"children":2421},{"class":65,"line":763},[2422],{"type":32,"tag":63,"props":2423,"children":2424},{"style":86},[2425],{"type":37,"value":2237},{"type":32,"tag":63,"props":2427,"children":2428},{"class":65,"line":786},[2429],{"type":32,"tag":63,"props":2430,"children":2431},{"style":86},[2432],{"type":37,"value":2245},{"type":32,"tag":63,"props":2434,"children":2436},{"class":65,"line":2435},30,[2437],{"type":32,"tag":63,"props":2438,"children":2439},{"style":86},[2440],{"type":37,"value":2441},"      duration,\n",{"type":32,"tag":63,"props":2443,"children":2445},{"class":65,"line":2444},31,[2446],{"type":32,"tag":63,"props":2447,"children":2448},{"style":86},[2449],{"type":37,"value":2450},"      error: error.message,\n",{"type":32,"tag":63,"props":2452,"children":2454},{"class":65,"line":2453},32,[2455,2459,2463,2467,2471],{"type":32,"tag":63,"props":2456,"children":2457},{"style":86},[2458],{"type":37,"value":2266},{"type":32,"tag":63,"props":2460,"children":2461},{"style":80},[2462],{"type":37,"value":258},{"type":32,"tag":63,"props":2464,"children":2465},{"style":86},[2466],{"type":37,"value":89},{"type":32,"tag":63,"props":2468,"children":2469},{"style":92},[2470],{"type":37,"value":267},{"type":32,"tag":63,"props":2472,"children":2473},{"style":86},[2474],{"type":37,"value":1363},{"type":32,"tag":63,"props":2476,"children":2478},{"class":65,"line":2477},33,[2479],{"type":32,"tag":63,"props":2480,"children":2481},{"style":86},[2482],{"type":37,"value":2290},{"type":32,"tag":63,"props":2484,"children":2486},{"class":65,"line":2485},34,[2487],{"type":32,"tag":63,"props":2488,"children":2489},{"style":86},[2490],{"type":37,"value":2186},{"type":32,"tag":63,"props":2492,"children":2494},{"class":65,"line":2493},35,[2495,2499,2503,2507,2512,2517,2522,2527,2532,2537],{"type":32,"tag":63,"props":2496,"children":2497},{"style":109},[2498],{"type":37,"value":453},{"type":32,"tag":63,"props":2500,"children":2501},{"style":86},[2502],{"type":37,"value":2309},{"type":32,"tag":63,"props":2504,"children":2505},{"style":80},[2506],{"type":37,"value":2056},{"type":32,"tag":63,"props":2508,"children":2509},{"style":86},[2510],{"type":37,"value":2511},"({ error: ",{"type":32,"tag":63,"props":2513,"children":2514},{"style":92},[2515],{"type":37,"value":2516},"'Échec de l",{"type":32,"tag":63,"props":2518,"children":2519},{"style":209},[2520],{"type":37,"value":2521},"\\'",{"type":32,"tag":63,"props":2523,"children":2524},{"style":92},[2525],{"type":37,"value":2526},"ajout au panier'",{"type":32,"tag":63,"props":2528,"children":2529},{"style":86},[2530],{"type":37,"value":2531}," }, { status: ",{"type":32,"tag":63,"props":2533,"children":2534},{"style":209},[2535],{"type":37,"value":2536},"500",{"type":32,"tag":63,"props":2538,"children":2539},{"style":86},[2540],{"type":37,"value":2328},{"type":32,"tag":63,"props":2542,"children":2544},{"class":65,"line":2543},36,[2545],{"type":32,"tag":63,"props":2546,"children":2547},{"style":86},[2548],{"type":37,"value":542},{"type":32,"tag":63,"props":2550,"children":2552},{"class":65,"line":2551},37,[2553],{"type":32,"tag":63,"props":2554,"children":2555},{"style":86},[2556],{"type":37,"value":551},{"type":32,"tag":33,"props":2558,"children":2559},{},[2560],{"type":37,"value":2561},"Agrégez ces logs dans BigQuery et effectuez une détection d'anomalies :",{"type":32,"tag":52,"props":2563,"children":2567},{"className":2564,"code":2565,"language":2566,"meta":16,"style":16},"language-sql shiki shiki-themes github-dark","-- Comparaison du taux de succès ATC quotidien\nSELECT\n  DATE(timestamp) AS date,\n  COUNTIF(event = 'add_to_cart_success') AS success_count,\n  COUNTIF(event = 'add_to_cart_failure') AS failure_count,\n  SAFE_DIVIDE(\n    COUNTIF(event = 'add_to_cart_success'),\n    COUNTIF(event IN ('add_to_cart_success', 'add_to_cart_failure'))\n  ) * 100 AS success_rate_percent\nFROM analytics.events\nWHERE DATE(timestamp) >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)\nGROUP BY date\nORDER BY date DESC\n","sql",[2568],{"type":32,"tag":59,"props":2569,"children":2570},{"__ignoreMap":16},[2571,2579,2587,2622,2656,2689,2697,2722,2759,2786,2808,2857,2870],{"type":32,"tag":63,"props":2572,"children":2573},{"class":65,"line":66},[2574],{"type":32,"tag":63,"props":2575,"children":2576},{"style":70},[2577],{"type":37,"value":2578},"-- Comparaison du taux de succès ATC quotidien\n",{"type":32,"tag":63,"props":2580,"children":2581},{"class":65,"line":76},[2582],{"type":32,"tag":63,"props":2583,"children":2584},{"style":109},[2585],{"type":37,"value":2586},"SELECT\n",{"type":32,"tag":63,"props":2588,"children":2589},{"class":65,"line":120},[2590,2595,2599,2604,2608,2613,2618],{"type":32,"tag":63,"props":2591,"children":2592},{"style":109},[2593],{"type":37,"value":2594},"  DATE",{"type":32,"tag":63,"props":2596,"children":2597},{"style":86},[2598],{"type":37,"value":89},{"type":32,"tag":63,"props":2600,"children":2601},{"style":109},[2602],{"type":37,"value":2603},"timestamp",{"type":32,"tag":63,"props":2605,"children":2606},{"style":86},[2607],{"type":37,"value":272},{"type":32,"tag":63,"props":2609,"children":2610},{"style":109},[2611],{"type":37,"value":2612},"AS",{"type":32,"tag":63,"props":2614,"children":2615},{"style":109},[2616],{"type":37,"value":2617}," date",{"type":32,"tag":63,"props":2619,"children":2620},{"style":86},[2621],{"type":37,"value":1188},{"type":32,"tag":63,"props":2623,"children":2624},{"class":65,"line":148},[2625,2630,2634,2638,2643,2647,2651],{"type":32,"tag":63,"props":2626,"children":2627},{"style":86},[2628],{"type":37,"value":2629},"  COUNTIF(",{"type":32,"tag":63,"props":2631,"children":2632},{"style":109},[2633],{"type":37,"value":106},{"type":32,"tag":63,"props":2635,"children":2636},{"style":109},[2637],{"type":37,"value":217},{"type":32,"tag":63,"props":2639,"children":2640},{"style":92},[2641],{"type":37,"value":2642}," 'add_to_cart_success'",{"type":32,"tag":63,"props":2644,"children":2645},{"style":86},[2646],{"type":37,"value":272},{"type":32,"tag":63,"props":2648,"children":2649},{"style":109},[2650],{"type":37,"value":2612},{"type":32,"tag":63,"props":2652,"children":2653},{"style":86},[2654],{"type":37,"value":2655}," success_count,\n",{"type":32,"tag":63,"props":2657,"children":2658},{"class":65,"line":157},[2659,2663,2667,2671,2676,2680,2684],{"type":32,"tag":63,"props":2660,"children":2661},{"style":86},[2662],{"type":37,"value":2629},{"type":32,"tag":63,"props":2664,"children":2665},{"style":109},[2666],{"type":37,"value":106},{"type":32,"tag":63,"props":2668,"children":2669},{"style":109},[2670],{"type":37,"value":217},{"type":32,"tag":63,"props":2672,"children":2673},{"style":92},[2674],{"type":37,"value":2675}," 'add_to_cart_failure'",{"type":32,"tag":63,"props":2677,"children":2678},{"style":86},[2679],{"type":37,"value":272},{"type":32,"tag":63,"props":2681,"children":2682},{"style":109},[2683],{"type":37,"value":2612},{"type":32,"tag":63,"props":2685,"children":2686},{"style":86},[2687],{"type":37,"value":2688}," failure_count,\n",{"type":32,"tag":63,"props":2690,"children":2691},{"class":65,"line":167},[2692],{"type":32,"tag":63,"props":2693,"children":2694},{"style":86},[2695],{"type":37,"value":2696},"  SAFE_DIVIDE(\n",{"type":32,"tag":63,"props":2698,"children":2699},{"class":65,"line":200},[2700,2705,2709,2713,2717],{"type":32,"tag":63,"props":2701,"children":2702},{"style":86},[2703],{"type":37,"value":2704},"    COUNTIF(",{"type":32,"tag":63,"props":2706,"children":2707},{"style":109},[2708],{"type":37,"value":106},{"type":32,"tag":63,"props":2710,"children":2711},{"style":109},[2712],{"type":37,"value":217},{"type":32,"tag":63,"props":2714,"children":2715},{"style":92},[2716],{"type":37,"value":2642},{"type":32,"tag":63,"props":2718,"children":2719},{"style":86},[2720],{"type":37,"value":2721},"),\n",{"type":32,"tag":63,"props":2723,"children":2724},{"class":65,"line":26},[2725,2729,2733,2738,2742,2746,2750,2754],{"type":32,"tag":63,"props":2726,"children":2727},{"style":86},[2728],{"type":37,"value":2704},{"type":32,"tag":63,"props":2730,"children":2731},{"style":109},[2732],{"type":37,"value":106},{"type":32,"tag":63,"props":2734,"children":2735},{"style":109},[2736],{"type":37,"value":2737}," IN",{"type":32,"tag":63,"props":2739,"children":2740},{"style":86},[2741],{"type":37,"value":350},{"type":32,"tag":63,"props":2743,"children":2744},{"style":92},[2745],{"type":37,"value":2225},{"type":32,"tag":63,"props":2747,"children":2748},{"style":86},[2749],{"type":37,"value":100},{"type":32,"tag":63,"props":2751,"children":2752},{"style":92},[2753],{"type":37,"value":2414},{"type":32,"tag":63,"props":2755,"children":2756},{"style":86},[2757],{"type":37,"value":2758},"))\n",{"type":32,"tag":63,"props":2760,"children":2761},{"class":65,"line":295},[2762,2767,2772,2776,2781],{"type":32,"tag":63,"props":2763,"children":2764},{"style":86},[2765],{"type":37,"value":2766},"  ) ",{"type":32,"tag":63,"props":2768,"children":2769},{"style":109},[2770],{"type":37,"value":2771},"*",{"type":32,"tag":63,"props":2773,"children":2774},{"style":209},[2775],{"type":37,"value":370},{"type":32,"tag":63,"props":2777,"children":2778},{"style":109},[2779],{"type":37,"value":2780}," AS",{"type":32,"tag":63,"props":2782,"children":2783},{"style":86},[2784],{"type":37,"value":2785}," success_rate_percent\n",{"type":32,"tag":63,"props":2787,"children":2788},{"class":65,"line":322},[2789,2794,2799,2803],{"type":32,"tag":63,"props":2790,"children":2791},{"style":109},[2792],{"type":37,"value":2793},"FROM",{"type":32,"tag":63,"props":2795,"children":2796},{"style":209},[2797],{"type":37,"value":2798}," analytics",{"type":32,"tag":63,"props":2800,"children":2801},{"style":86},[2802],{"type":37,"value":1780},{"type":32,"tag":63,"props":2804,"children":2805},{"style":209},[2806],{"type":37,"value":2807},"events\n",{"type":32,"tag":63,"props":2809,"children":2810},{"class":65,"line":331},[2811,2816,2821,2825,2829,2833,2838,2843,2848,2853],{"type":32,"tag":63,"props":2812,"children":2813},{"style":109},[2814],{"type":37,"value":2815},"WHERE",{"type":32,"tag":63,"props":2817,"children":2818},{"style":109},[2819],{"type":37,"value":2820}," DATE",{"type":32,"tag":63,"props":2822,"children":2823},{"style":86},[2824],{"type":37,"value":89},{"type":32,"tag":63,"props":2826,"children":2827},{"style":109},[2828],{"type":37,"value":2603},{"type":32,"tag":63,"props":2830,"children":2831},{"style":86},[2832],{"type":37,"value":272},{"type":32,"tag":63,"props":2834,"children":2835},{"style":109},[2836],{"type":37,"value":2837},">=",{"type":32,"tag":63,"props":2839,"children":2840},{"style":86},[2841],{"type":37,"value":2842}," DATE_SUB(CURRENT_DATE(), INTERVAL ",{"type":32,"tag":63,"props":2844,"children":2845},{"style":209},[2846],{"type":37,"value":2847},"7",{"type":32,"tag":63,"props":2849,"children":2850},{"style":109},[2851],{"type":37,"value":2852}," DAY",{"type":32,"tag":63,"props":2854,"children":2855},{"style":86},[2856],{"type":37,"value":1363},{"type":32,"tag":63,"props":2858,"children":2859},{"class":65,"line":387},[2860,2865],{"type":32,"tag":63,"props":2861,"children":2862},{"style":109},[2863],{"type":37,"value":2864},"GROUP BY",{"type":32,"tag":63,"props":2866,"children":2867},{"style":109},[2868],{"type":37,"value":2869}," date\n",{"type":32,"tag":63,"props":2871,"children":2872},{"class":65,"line":395},[2873,2878,2882],{"type":32,"tag":63,"props":2874,"children":2875},{"style":109},[2876],{"type":37,"value":2877},"ORDER BY",{"type":32,"tag":63,"props":2879,"children":2880},{"style":109},[2881],{"type":37,"value":2617},{"type":32,"tag":63,"props":2883,"children":2884},{"style":109},[2885],{"type":37,"value":2886}," DESC\n",{"type":32,"tag":33,"props":2888,"children":2889},{},[2890,2892,2898],{"type":37,"value":2891},"Mettez en place une alerte si le taux de succès tombe en dessous de 99 % (webhook Slack, PagerDuty). Examinez également la métrique ",{"type":32,"tag":59,"props":2893,"children":2895},{"className":2894},[],[2896],{"type":37,"value":2897},"duration",{"type":37,"value":2899}," : si le temps de réponse moyen était de 120 ms en ancien système, il doit être de 80 ms en headless — si cela atteint 200 ms, vous devez optimiser vos requêtes de base de données.",{"type":32,"tag":819,"props":2901,"children":2903},{"id":2902},"replay-de-session-et-suivi-derreurs",[2904],{"type":37,"value":2905},"Replay de Session et Suivi d'Erreurs",{"type":32,"tag":33,"props":2907,"children":2908},{},[2909],{"type":37,"value":2910},"Intégrez un outil de replay de session tel que Sentry ou LogRocket. Associez chaque événement d'échec ATC à un ID de session et visualisez le parcours complet de l'utilisateur : à quel moment le bouton est resté désactivé, quelle requête réseau a expiré. Lors des projets de migration headless chez Roibase, 60 % des bugs identifiés via session replay provenaient d'une race condition — par exemple, l'API de vérification de l'inventaire ne s'achevant pas avant la mutation du panier, causant une activation prématurée du bouton.",{"type":32,"tag":40,"props":2912,"children":2914},{"id":2913},"métriques-de-performance-core-web-vitals-et-coûts-dexécution",[2915],{"type":37,"value":2916},"Métriques de Performance : Core Web Vitals et Coûts d'Exécution",{"type":32,"tag":33,"props":2918,"children":2919},{},[2920],{"type":37,"value":2921},"L'objectif principal d'une migration headless est l'amélioration des performances. Cependant, une implémentation headless mal conçue peut être PLUS LENTE qu'une Shopify monolithique. Si vous faites du rendu côté client (CSR), le LCP atteint 4+ secondes ; la bonne approche est le rendu côté serveur (SSR) ou la génération statique (SSG) plus régénération statique incrémentale (ISR).",{"type":32,"tag":33,"props":2923,"children":2924},{},[2925],{"type":37,"value":2926},"Exemple d'ISR avec Next.js App Router pour une page de détail produit :",{"type":32,"tag":52,"props":2928,"children":2932},{"className":2929,"code":2930,"language":2931,"meta":16,"style":16},"language-tsx shiki shiki-themes github-dark","\u002F\u002F app\u002Fproducts\u002F[slug]\u002Fpage.tsx\nexport const revalidate = 3600 \u002F\u002F Régénérer une fois par heure\n\nexport async function generateStaticParams() {\n  const products = await getTopProducts(100) \u002F\u002F Pré-rendre les 100 premiers produits\n  return products.map(p => ({ slug: p.slug }))\n}\n\nexport default async function ProductPage({ params }) {\n  const product = await getProduct(params.slug)\n  \n  return (\n    \u003Cdiv>\n      \u003Ch1>{product.title}\u003C\u002Fh1>\n      \u003CImage src={product.image} alt={product.title} priority \u002F>\n      \u003CAddToCartButton productId={product.id} \u002F>\n    \u003C\u002Fdiv>\n  )\n}\n","tsx",[2933],{"type":32,"tag":59,"props":2934,"children":2935},{"__ignoreMap":16},[2936,2943,2974,2981,3006,3049,3083,3090,3097,3133,3163,3170,3181,3199,3224,3274,3300,3316,3323],{"type":32,"tag":63,"props":2937,"children":2938},{"class":65,"line":66},[2939],{"type":32,"tag":63,"props":2940,"children":2941},{"style":70},[2942],{"type":37,"value":1446},{"type":32,"tag":63,"props":2944,"children":2945},{"class":65,"line":76},[2946,2950,2955,2960,2964,2969],{"type":32,"tag":63,"props":2947,"children":2948},{"style":109},[2949],{"type":37,"value":1454},{"type":32,"tag":63,"props":2951,"children":2952},{"style":109},[2953],{"type":37,"value":2954}," const",{"type":32,"tag":63,"props":2956,"children":2957},{"style":209},[2958],{"type":37,"value":2959}," revalidate",{"type":32,"tag":63,"props":2961,"children":2962},{"style":109},[2963],{"type":37,"value":217},{"type":32,"tag":63,"props":2965,"children":2966},{"style":209},[2967],{"type":37,"value":2968}," 3600",{"type":32,"tag":63,"props":2970,"children":2971},{"style":70},[2972],{"type":37,"value":2973}," \u002F\u002F Régénérer une fois par heure\n",{"type":32,"tag":63,"props":2975,"children":2976},{"class":65,"line":120},[2977],{"type":32,"tag":63,"props":2978,"children":2979},{"emptyLinePlaceholder":161},[2980],{"type":37,"value":164},{"type":32,"tag":63,"props":2982,"children":2983},{"class":65,"line":148},[2984,2988,2992,2996,3001],{"type":32,"tag":63,"props":2985,"children":2986},{"style":109},[2987],{"type":37,"value":1454},{"type":32,"tag":63,"props":2989,"children":2990},{"style":109},[2991],{"type":37,"value":1975},{"type":32,"tag":63,"props":2993,"children":2994},{"style":109},[2995],{"type":37,"value":178},{"type":32,"tag":63,"props":2997,"children":2998},{"style":80},[2999],{"type":37,"value":3000}," generateStaticParams",{"type":32,"tag":63,"props":3002,"children":3003},{"style":86},[3004],{"type":37,"value":3005},"() {\n",{"type":32,"tag":63,"props":3007,"children":3008},{"class":65,"line":157},[3009,3013,3018,3022,3026,3031,3035,3040,3044],{"type":32,"tag":63,"props":3010,"children":3011},{"style":109},[3012],{"type":37,"value":206},{"type":32,"tag":63,"props":3014,"children":3015},{"style":209},[3016],{"type":37,"value":3017}," products",{"type":32,"tag":63,"props":3019,"children":3020},{"style":109},[3021],{"type":37,"value":217},{"type":32,"tag":63,"props":3023,"children":3024},{"style":109},[3025],{"type":37,"value":2046},{"type":32,"tag":63,"props":3027,"children":3028},{"style":80},[3029],{"type":37,"value":3030}," getTopProducts",{"type":32,"tag":63,"props":3032,"children":3033},{"style":86},[3034],{"type":37,"value":89},{"type":32,"tag":63,"props":3036,"children":3037},{"style":209},[3038],{"type":37,"value":3039},"100",{"type":32,"tag":63,"props":3041,"children":3042},{"style":86},[3043],{"type":37,"value":272},{"type":32,"tag":63,"props":3045,"children":3046},{"style":70},[3047],{"type":37,"value":3048},"\u002F\u002F Pré-rendre les 100 premiers produits\n",{"type":32,"tag":63,"props":3050,"children":3051},{"class":65,"line":167},[3052,3056,3061,3066,3070,3074,3078],{"type":32,"tag":63,"props":3053,"children":3054},{"style":109},[3055],{"type":37,"value":769},{"type":32,"tag":63,"props":3057,"children":3058},{"style":86},[3059],{"type":37,"value":3060}," products.",{"type":32,"tag":63,"props":3062,"children":3063},{"style":80},[3064],{"type":37,"value":3065},"map",{"type":32,"tag":63,"props":3067,"children":3068},{"style":86},[3069],{"type":37,"value":89},{"type":32,"tag":63,"props":3071,"children":3072},{"style":103},[3073],{"type":37,"value":33},{"type":32,"tag":63,"props":3075,"children":3076},{"style":109},[3077],{"type":37,"value":112},{"type":32,"tag":63,"props":3079,"children":3080},{"style":86},[3081],{"type":37,"value":3082}," ({ slug: p.slug }))\n",{"type":32,"tag":63,"props":3084,"children":3085},{"class":65,"line":200},[3086],{"type":32,"tag":63,"props":3087,"children":3088},{"style":86},[3089],{"type":37,"value":551},{"type":32,"tag":63,"props":3091,"children":3092},{"class":65,"line":26},[3093],{"type":32,"tag":63,"props":3094,"children":3095},{"emptyLinePlaceholder":161},[3096],{"type":37,"value":164},{"type":32,"tag":63,"props":3098,"children":3099},{"class":65,"line":295},[3100,3104,3108,3112,3116,3120,3124,3129],{"type":32,"tag":63,"props":3101,"children":3102},{"style":109},[3103],{"type":37,"value":1454},{"type":32,"tag":63,"props":3105,"children":3106},{"style":109},[3107],{"type":37,"value":1459},{"type":32,"tag":63,"props":3109,"children":3110},{"style":109},[3111],{"type":37,"value":1975},{"type":32,"tag":63,"props":3113,"children":3114},{"style":109},[3115],{"type":37,"value":178},{"type":32,"tag":63,"props":3117,"children":3118},{"style":80},[3119],{"type":37,"value":1468},{"type":32,"tag":63,"props":3121,"children":3122},{"style":86},[3123],{"type":37,"value":1473},{"type":32,"tag":63,"props":3125,"children":3126},{"style":103},[3127],{"type":37,"value":3128},"params",{"type":32,"tag":63,"props":3130,"children":3131},{"style":86},[3132],{"type":37,"value":1483},{"type":32,"tag":63,"props":3134,"children":3135},{"class":65,"line":322},[3136,3140,3145,3149,3153,3158],{"type":32,"tag":63,"props":3137,"children":3138},{"style":109},[3139],{"type":37,"value":206},{"type":32,"tag":63,"props":3141,"children":3142},{"style":209},[3143],{"type":37,"value":3144}," product",{"type":32,"tag":63,"props":3146,"children":3147},{"style":109},[3148],{"type":37,"value":217},{"type":32,"tag":63,"props":3150,"children":3151},{"style":109},[3152],{"type":37,"value":2046},{"type":32,"tag":63,"props":3154,"children":3155},{"style":80},[3156],{"type":37,"value":3157}," getProduct",{"type":32,"tag":63,"props":3159,"children":3160},{"style":86},[3161],{"type":37,"value":3162},"(params.slug)\n",{"type":32,"tag":63,"props":3164,"children":3165},{"class":65,"line":331},[3166],{"type":32,"tag":63,"props":3167,"children":3168},{"style":86},[3169],{"type":37,"value":328},{"type":32,"tag":63,"props":3171,"children":3172},{"class":65,"line":387},[3173,3177],{"type":32,"tag":63,"props":3174,"children":3175},{"style":109},[3176],{"type":37,"value":769},{"type":32,"tag":63,"props":3178,"children":3179},{"style":86},[3180],{"type":37,"value":1715},{"type":32,"tag":63,"props":3182,"children":3183},{"class":65,"line":395},[3184,3189,3194],{"type":32,"tag":63,"props":3185,"children":3186},{"style":86},[3187],{"type":37,"value":3188},"    \u003C",{"type":32,"tag":63,"props":3190,"children":3191},{"style":857},[3192],{"type":37,"value":3193},"div",{"type":32,"tag":63,"props":3195,"children":3196},{"style":86},[3197],{"type":37,"value":3198},">\n",{"type":32,"tag":63,"props":3200,"children":3201},{"class":65,"line":438},[3202,3206,3211,3216,3220],{"type":32,"tag":63,"props":3203,"children":3204},{"style":86},[3205],{"type":37,"value":1731},{"type":32,"tag":63,"props":3207,"children":3208},{"style":857},[3209],{"type":37,"value":3210},"h1",{"type":32,"tag":63,"props":3212,"children":3213},{"style":86},[3214],{"type":37,"value":3215},">{product.title}\u003C\u002F",{"type":32,"tag":63,"props":3217,"children":3218},{"style":857},[3219],{"type":37,"value":3210},{"type":32,"tag":63,"props":3221,"children":3222},{"style":86},[3223],{"type":37,"value":3198},{"type":32,"tag":63,"props":3225,"children":3226},{"class":65,"line":447},[3227,3231,3236,3241,3245,3250,3255,3259,3264,3269],{"type":32,"tag":63,"props":3228,"children":3229},{"style":86},[3230],{"type":37,"value":1731},{"type":32,"tag":63,"props":3232,"children":3233},{"style":209},[3234],{"type":37,"value":3235},"Image",{"type":32,"tag":63,"props":3237,"children":3238},{"style":80},[3239],{"type":37,"value":3240}," src",{"type":32,"tag":63,"props":3242,"children":3243},{"style":109},[3244],{"type":37,"value":605},{"type":32,"tag":63,"props":3246,"children":3247},{"style":86},[3248],{"type":37,"value":3249},"{product.image} ",{"type":32,"tag":63,"props":3251,"children":3252},{"style":80},[3253],{"type":37,"value":3254},"alt",{"type":32,"tag":63,"props":3256,"children":3257},{"style":109},[3258],{"type":37,"value":605},{"type":32,"tag":63,"props":3260,"children":3261},{"style":86},[3262],{"type":37,"value":3263},"{product.title} ",{"type":32,"tag":63,"props":3265,"children":3266},{"style":80},[3267],{"type":37,"value":3268},"priority",{"type":32,"tag":63,"props":3270,"children":3271},{"style":86},[3272],{"type":37,"value":3273}," \u002F>\n",{"type":32,"tag":63,"props":3275,"children":3276},{"class":65,"line":480},[3277,3281,3286,3291,3295],{"type":32,"tag":63,"props":3278,"children":3279},{"style":86},[3280],{"type":37,"value":1731},{"type":32,"tag":63,"props":3282,"children":3283},{"style":209},[3284],{"type":37,"value":3285},"AddToCartButton",{"type":32,"tag":63,"props":3287,"children":3288},{"style":80},[3289],{"type":37,"value":3290}," productId",{"type":32,"tag":63,"props":3292,"children":3293},{"style":109},[3294],{"type":37,"value":605},{"type":32,"tag":63,"props":3296,"children":3297},{"style":86},[3298],{"type":37,"value":3299},"{product.id} \u002F>\n",{"type":32,"tag":63,"props":3301,"children":3302},{"class":65,"line":498},[3303,3308,3312],{"type":32,"tag":63,"props":3304,"children":3305},{"style":86},[3306],{"type":37,"value":3307},"    \u003C\u002F",{"type":32,"tag":63,"props":3309,"children":3310},{"style":857},[3311],{"type":37,"value":3193},{"type":32,"tag":63,"props":3313,"children":3314},{"style":86},[3315],{"type":37,"value":3198},{"type":32,"tag":63,"props":3317,"children":3318},{"class":65,"line":507},[3319],{"type":32,"tag":63,"props":3320,"children":3321},{"style":86},[3322],{"type":37,"value":1831},{"type":32,"tag":63,"props":3324,"children":3325},{"class":65,"line":536},[3326],{"type":32,"tag":63,"props":3327,"children":3328},{"style":86},[3329],{"type":37,"value":551},{"type":32,"tag":33,"props":3331,"children":3332},{},[3333],{"type":37,"value":3334},"Avec cette structure, les 100 premiers produits sont générés à la compilation, les autres sont rendus à la demande au premier accès et mis en cache 1 heure. Le LCP tombe en dessous de 1,2 s puisque le HTML est prêt et seul le chargement de l'image intervient.",{"type":32,"tag":33,"props":3336,"children":3337},{},[3338],{"type":37,"value":3339},"Mesurez aussi les coûts d'exécution : nombre d'invocations de fonctions sans serveur × temps d'exécution × tarification. Sur Vercel, si une page SSR moyenne prend 50 ms et que vous avez 100 000 pages vues par jour : 100k × 50ms = 5 millions de Go-s, ce qui équivaut à environ 25 $\u002Fjour (plan Vercel Pro). Pour réduire :",{"type":32,"tag":3341,"props":3342,"children":3343},"ol",{},[3344,3358],{"type":32,"tag":3345,"props":3346,"children":3347},"li",{},[3348,3350,3356],{"type":37,"value":3349},"Cache au niveau Edge — activez ",{"type":32,"tag":59,"props":3351,"children":3353},{"className":3352},[],[3354],{"type":37,"value":3355},"Cache-Control: s-maxage=3600",{"type":37,"value":3357}," pour le cache CDN Cloudflare",{"type":32,"tag":3345,"props":3359,"children":3360},{},[3361],{"type":37,"value":3362},"Hydratation partielle — utilis",{"type":32,"tag":3364,"props":3365,"children":3366},"style",{},[3367],{"type":37,"value":3368},"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":120,"depth":120,"links":3370},[3371,3374,3377,3380],{"id":42,"depth":76,"text":45,"children":3372},[3373],{"id":821,"depth":120,"text":824},{"id":1010,"depth":76,"text":1013,"children":3375},[3376],{"id":1846,"depth":120,"text":1849},{"id":1884,"depth":76,"text":1887,"children":3378},[3379],{"id":2902,"depth":120,"text":2905},{"id":2913,"depth":76,"text":2916},"markdown","content:fr:tech:strategie-migration-headless-commerce.md","content","fr\u002Ftech\u002Fstrategie-migration-headless-commerce.md","fr\u002Ftech\u002Fstrategie-migration-headless-commerce","md",1783289083404]