[{"data":1,"prerenderedAt":1761},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fit\u002Ftech\u002Froadmap-migrazione-commerce-headless":13},{"i18nKey":4,"paths":5},"tech-006-2026-08",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Ftech\u002Fheadless-e-commerce-migration-roadmap-risikomaessiges-rollout","\u002Fen\u002Ftech\u002Fheadless-ecommerce-migration-roadmap-risk-management","\u002Fes\u002Ftech\u002Fhoja-de-ruta-migracion-comercio-sin-cabecera","\u002Ffr\u002Ftech\u002Fcommerce-headless-migration-roadmap","\u002Fit\u002Ftech\u002Froadmap-migrazione-commerce-headless","\u002Fru\u002Ftech\u002Fmigracion-headless-roadmap-gestion-riesgos","\u002Ftr\u002Ftech\u002Fheadless-e-ticaret-migration-roadmap-ve-risk-yonetimi",{"_path":10,"_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":1755,"_id":1756,"_source":1757,"_file":1758,"_stem":1759,"_extension":1760},"tech",false,"","E-commerce Headless: Roadmap di Migrazione e Gestione dei Rischi","Strategie di rollout graduale, tecniche di protezione SEO e analisi dell'abbandono del carrello per rendere sicura la transizione al commerce headless.","2026-08-04",[21,22,23,24,25],"headless-commerce","migration-strategy","seo-preservation","risk-management","composable-architecture",9,"Roibase",{"type":29,"children":30,"toc":1748},"root",[31,39,46,51,62,201,206,216,510,515,521,526,536,544,549,569,579,597,729,734,740,745,753,787,792,1070,1075,1085,1091,1096,1106,1530,1535,1545,1710,1715,1721,1726,1742],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","La migrazione al commerce headless nel 2026 non è più una domanda \"se\", ma \"come\". Tuttavia, come in ogni grande trasformazione architettonica, un singolo passo sbagliato può ridurre i ricavi del 12-18% (dato Forrester 2025). I segnali nascosti nel comportamento di aggiunta al carrello scompaiono, l'autorità SEO viene azzerata, le micro-ottimizzazioni nel funnel di conversione si volatilizzano. In questo articolo, affronteremo la migrazione headless come un progetto di ingegneria strutturata e vi mostreremo come gestire i rischi in modo disciplinato.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"rollout-graduale-contro-il-caos-monolitico",[44],{"type":37,"value":45},"Rollout Graduale Contro il Caos Monolitico",{"type":32,"tag":33,"props":47,"children":48},{},[49],{"type":37,"value":50},"L'errore classico nelle migrazioni headless: l'approccio del \"big bang\". Spostare l'intero sito su un nuovo stack in una sola notte significa mettere i ricavi a rischio. Un rollout graduale indirizza fette di traffico controllate verso la nuova architettura, offrendo l'opportunità di imparare dal comportamento reale degli utenti.",{"type":32,"tag":33,"props":52,"children":53},{},[54,60],{"type":32,"tag":55,"props":56,"children":57},"strong",{},[58],{"type":37,"value":59},"Phasing basato su route:",{"type":37,"value":61}," La prima fase può essere costituita da pagine di categoria o pagine di dettaglio prodotto — la homepage e il checkout rimangono per dopo. Ecco un piano esemplificativo di 6 settimane:",{"type":32,"tag":63,"props":64,"children":65},"table",{},[66,95],{"type":32,"tag":67,"props":68,"children":69},"thead",{},[70],{"type":32,"tag":71,"props":72,"children":73},"tr",{},[74,80,85,90],{"type":32,"tag":75,"props":76,"children":77},"th",{},[78],{"type":37,"value":79},"Settimana",{"type":32,"tag":75,"props":81,"children":82},{},[83],{"type":37,"value":84},"Ambito",{"type":32,"tag":75,"props":86,"children":87},{},[88],{"type":37,"value":89},"Traffico",{"type":32,"tag":75,"props":91,"children":92},{},[93],{"type":37,"value":94},"Metrica di Rischio",{"type":32,"tag":96,"props":97,"children":98},"tbody",{},[99,128,155,178],{"type":32,"tag":71,"props":100,"children":101},{},[102,108,118,123],{"type":32,"tag":103,"props":104,"children":105},"td",{},[106],{"type":37,"value":107},"1-2",{"type":32,"tag":103,"props":109,"children":110},{},[111],{"type":32,"tag":112,"props":113,"children":115},"code",{"className":114},[],[116],{"type":37,"value":117},"\u002Fcollections\u002F{slug}",{"type":32,"tag":103,"props":119,"children":120},{},[121],{"type":37,"value":122},"%5",{"type":32,"tag":103,"props":124,"children":125},{},[126],{"type":37,"value":127},"Tasso ATC, tasso di uscita",{"type":32,"tag":71,"props":129,"children":130},{},[131,136,145,150],{"type":32,"tag":103,"props":132,"children":133},{},[134],{"type":37,"value":135},"3-4",{"type":32,"tag":103,"props":137,"children":138},{},[139],{"type":32,"tag":112,"props":140,"children":142},{"className":141},[],[143],{"type":37,"value":144},"\u002Fproducts\u002F{slug}",{"type":32,"tag":103,"props":146,"children":147},{},[148],{"type":37,"value":149},"%10",{"type":32,"tag":103,"props":151,"children":152},{},[153],{"type":37,"value":154},"Tasso di conversione, profondità scroll",{"type":32,"tag":71,"props":156,"children":157},{},[158,163,168,173],{"type":32,"tag":103,"props":159,"children":160},{},[161],{"type":37,"value":162},"5",{"type":32,"tag":103,"props":164,"children":165},{},[166],{"type":37,"value":167},"Homepage",{"type":32,"tag":103,"props":169,"children":170},{},[171],{"type":37,"value":172},"%25",{"type":32,"tag":103,"props":174,"children":175},{},[176],{"type":37,"value":177},"Tasso di rimbalzo, durata sessione",{"type":32,"tag":71,"props":179,"children":180},{},[181,186,191,196],{"type":32,"tag":103,"props":182,"children":183},{},[184],{"type":37,"value":185},"6",{"type":32,"tag":103,"props":187,"children":188},{},[189],{"type":37,"value":190},"Rollout completo",{"type":32,"tag":103,"props":192,"children":193},{},[194],{"type":37,"value":195},"%100",{"type":32,"tag":103,"props":197,"children":198},{},[199],{"type":37,"value":200},"Impatto sui ricavi",{"type":32,"tag":33,"props":202,"children":203},{},[204],{"type":37,"value":205},"Con questo approccio, se emerge un errore critico, il costo del rollback rimane minimo — salvate il %95 del traffico invece dell'intero sito.",{"type":32,"tag":33,"props":207,"children":208},{},[209,214],{"type":32,"tag":55,"props":210,"children":211},{},[212],{"type":37,"value":213},"Architettura con feature flag:",{"type":37,"value":215}," Eseguite il nuovo frontend dietro a un feature flag utilizzando LaunchDarkly, Statsig o Unleash. Snippet di esempio in Node.js (Unleash):",{"type":32,"tag":217,"props":218,"children":222},"pre",{"code":219,"language":220,"meta":16,"className":221,"style":16},"const unleash = require('unleash-client');\n\nunleash.on('ready', () => {\n  const isHeadlessEnabled = unleash.isEnabled('headless-pdp', {\n    userId: user.id,\n    sessionId: req.sessionID\n  });\n\n  if (isHeadlessEnabled) {\n    res.render('pdp-headless'); \u002F\u002F Next.js, Nuxt o Remix\n  } else {\n    res.render('pdp-legacy'); \u002F\u002F Liquid, Blade, etc.\n  }\n});\n","javascript","language-javascript shiki shiki-themes github-dark",[223],{"type":32,"tag":112,"props":224,"children":225},{"__ignoreMap":16},[226,272,282,320,362,371,380,389,397,410,444,462,492,501],{"type":32,"tag":227,"props":228,"children":231},"span",{"class":229,"line":230},"line",1,[232,238,244,249,255,261,267],{"type":32,"tag":227,"props":233,"children":235},{"style":234},"--shiki-default:#F97583",[236],{"type":37,"value":237},"const",{"type":32,"tag":227,"props":239,"children":241},{"style":240},"--shiki-default:#79B8FF",[242],{"type":37,"value":243}," unleash",{"type":32,"tag":227,"props":245,"children":246},{"style":234},[247],{"type":37,"value":248}," =",{"type":32,"tag":227,"props":250,"children":252},{"style":251},"--shiki-default:#B392F0",[253],{"type":37,"value":254}," require",{"type":32,"tag":227,"props":256,"children":258},{"style":257},"--shiki-default:#E1E4E8",[259],{"type":37,"value":260},"(",{"type":32,"tag":227,"props":262,"children":264},{"style":263},"--shiki-default:#9ECBFF",[265],{"type":37,"value":266},"'unleash-client'",{"type":32,"tag":227,"props":268,"children":269},{"style":257},[270],{"type":37,"value":271},");\n",{"type":32,"tag":227,"props":273,"children":275},{"class":229,"line":274},2,[276],{"type":32,"tag":227,"props":277,"children":279},{"emptyLinePlaceholder":278},true,[280],{"type":37,"value":281},"\n",{"type":32,"tag":227,"props":283,"children":285},{"class":229,"line":284},3,[286,291,296,300,305,310,315],{"type":32,"tag":227,"props":287,"children":288},{"style":257},[289],{"type":37,"value":290},"unleash.",{"type":32,"tag":227,"props":292,"children":293},{"style":251},[294],{"type":37,"value":295},"on",{"type":32,"tag":227,"props":297,"children":298},{"style":257},[299],{"type":37,"value":260},{"type":32,"tag":227,"props":301,"children":302},{"style":263},[303],{"type":37,"value":304},"'ready'",{"type":32,"tag":227,"props":306,"children":307},{"style":257},[308],{"type":37,"value":309},", () ",{"type":32,"tag":227,"props":311,"children":312},{"style":234},[313],{"type":37,"value":314},"=>",{"type":32,"tag":227,"props":316,"children":317},{"style":257},[318],{"type":37,"value":319}," {\n",{"type":32,"tag":227,"props":321,"children":323},{"class":229,"line":322},4,[324,329,334,338,343,348,352,357],{"type":32,"tag":227,"props":325,"children":326},{"style":234},[327],{"type":37,"value":328},"  const",{"type":32,"tag":227,"props":330,"children":331},{"style":240},[332],{"type":37,"value":333}," isHeadlessEnabled",{"type":32,"tag":227,"props":335,"children":336},{"style":234},[337],{"type":37,"value":248},{"type":32,"tag":227,"props":339,"children":340},{"style":257},[341],{"type":37,"value":342}," unleash.",{"type":32,"tag":227,"props":344,"children":345},{"style":251},[346],{"type":37,"value":347},"isEnabled",{"type":32,"tag":227,"props":349,"children":350},{"style":257},[351],{"type":37,"value":260},{"type":32,"tag":227,"props":353,"children":354},{"style":263},[355],{"type":37,"value":356},"'headless-pdp'",{"type":32,"tag":227,"props":358,"children":359},{"style":257},[360],{"type":37,"value":361},", {\n",{"type":32,"tag":227,"props":363,"children":365},{"class":229,"line":364},5,[366],{"type":32,"tag":227,"props":367,"children":368},{"style":257},[369],{"type":37,"value":370},"    userId: user.id,\n",{"type":32,"tag":227,"props":372,"children":374},{"class":229,"line":373},6,[375],{"type":32,"tag":227,"props":376,"children":377},{"style":257},[378],{"type":37,"value":379},"    sessionId: req.sessionID\n",{"type":32,"tag":227,"props":381,"children":383},{"class":229,"line":382},7,[384],{"type":32,"tag":227,"props":385,"children":386},{"style":257},[387],{"type":37,"value":388},"  });\n",{"type":32,"tag":227,"props":390,"children":392},{"class":229,"line":391},8,[393],{"type":32,"tag":227,"props":394,"children":395},{"emptyLinePlaceholder":278},[396],{"type":37,"value":281},{"type":32,"tag":227,"props":398,"children":399},{"class":229,"line":26},[400,405],{"type":32,"tag":227,"props":401,"children":402},{"style":234},[403],{"type":37,"value":404},"  if",{"type":32,"tag":227,"props":406,"children":407},{"style":257},[408],{"type":37,"value":409}," (isHeadlessEnabled) {\n",{"type":32,"tag":227,"props":411,"children":413},{"class":229,"line":412},10,[414,419,424,428,433,438],{"type":32,"tag":227,"props":415,"children":416},{"style":257},[417],{"type":37,"value":418},"    res.",{"type":32,"tag":227,"props":420,"children":421},{"style":251},[422],{"type":37,"value":423},"render",{"type":32,"tag":227,"props":425,"children":426},{"style":257},[427],{"type":37,"value":260},{"type":32,"tag":227,"props":429,"children":430},{"style":263},[431],{"type":37,"value":432},"'pdp-headless'",{"type":32,"tag":227,"props":434,"children":435},{"style":257},[436],{"type":37,"value":437},"); ",{"type":32,"tag":227,"props":439,"children":441},{"style":440},"--shiki-default:#6A737D",[442],{"type":37,"value":443},"\u002F\u002F Next.js, Nuxt o Remix\n",{"type":32,"tag":227,"props":445,"children":447},{"class":229,"line":446},11,[448,453,458],{"type":32,"tag":227,"props":449,"children":450},{"style":257},[451],{"type":37,"value":452},"  } ",{"type":32,"tag":227,"props":454,"children":455},{"style":234},[456],{"type":37,"value":457},"else",{"type":32,"tag":227,"props":459,"children":460},{"style":257},[461],{"type":37,"value":319},{"type":32,"tag":227,"props":463,"children":465},{"class":229,"line":464},12,[466,470,474,478,483,487],{"type":32,"tag":227,"props":467,"children":468},{"style":257},[469],{"type":37,"value":418},{"type":32,"tag":227,"props":471,"children":472},{"style":251},[473],{"type":37,"value":423},{"type":32,"tag":227,"props":475,"children":476},{"style":257},[477],{"type":37,"value":260},{"type":32,"tag":227,"props":479,"children":480},{"style":263},[481],{"type":37,"value":482},"'pdp-legacy'",{"type":32,"tag":227,"props":484,"children":485},{"style":257},[486],{"type":37,"value":437},{"type":32,"tag":227,"props":488,"children":489},{"style":440},[490],{"type":37,"value":491},"\u002F\u002F Liquid, Blade, etc.\n",{"type":32,"tag":227,"props":493,"children":495},{"class":229,"line":494},13,[496],{"type":32,"tag":227,"props":497,"children":498},{"style":257},[499],{"type":37,"value":500},"  }\n",{"type":32,"tag":227,"props":502,"children":504},{"class":229,"line":503},14,[505],{"type":32,"tag":227,"props":506,"children":507},{"style":257},[508],{"type":37,"value":509},"});\n",{"type":32,"tag":33,"props":511,"children":512},{},[513],{"type":37,"value":514},"Questo codice vi permette di alternare il frontend per utente. Potete A\u002FB testare la vecchia e la nuova esperienza nella stessa sessione, leggendo in tempo reale il delta di conversione.",{"type":32,"tag":40,"props":516,"children":518},{"id":517},"proteggere-lautorità-seo-parità-di-url-e-disciplina-dei-redirect",[519],{"type":37,"value":520},"Proteggere l'Autorità SEO: Parità di URL e Disciplina dei Redirect",{"type":32,"tag":33,"props":522,"children":523},{},[524],{"type":37,"value":525},"Il costo nascosto maggiore nelle migrazioni headless è l'erosione SEO. Se la nuova stack modifica la struttura degli URL, perdete la potenza dei backlink accumulata da Google, il budget di crawl e i dati storici di traffico per quell'URL.",{"type":32,"tag":33,"props":527,"children":528},{},[529,534],{"type":32,"tag":55,"props":530,"children":531},{},[532],{"type":37,"value":533},"Obbligo di parità URL:",{"type":37,"value":535}," Il vecchio e il nuovo sistema devono conservare la medesima struttura di slug. Ad esempio, migrando da Shopify a Hydrogen:",{"type":32,"tag":217,"props":537,"children":539},{"code":538},"Vecchio: \u002Fproducts\u002Fsneaker-uomo-bianco\nNuovo: \u002Fproducts\u002Fsneaker-uomo-bianco\n",[540],{"type":32,"tag":112,"props":541,"children":542},{"__ignoreMap":16},[543],{"type":37,"value":538},{"type":32,"tag":33,"props":545,"children":546},{},[547],{"type":37,"value":548},"Anche se la logica di generazione dello slug cambia, l'output deve essere identico. Per garantirlo:",{"type":32,"tag":550,"props":551,"children":552},"ol",{},[553,559,564],{"type":32,"tag":554,"props":555,"children":556},"li",{},[557],{"type":37,"value":558},"Esportate tutti gli URL dal sistema vecchio (CSV, combinato con dati di traffico di 30 giorni)",{"type":32,"tag":554,"props":560,"children":561},{},[562],{"type":37,"value":563},"Testate gli stessi URL nel nuovo sistema tramite una canary route",{"type":32,"tag":554,"props":565,"children":566},{},[567],{"type":37,"value":568},"Portate il diff a zero — anche una singola differenza significa perdita SEO",{"type":32,"tag":33,"props":570,"children":571},{},[572,577],{"type":32,"tag":55,"props":573,"children":574},{},[575],{"type":37,"value":576},"Trade-off tra 301 e 302:",{"type":37,"value":578}," I redirect temporanei (302) dicono a Google \"questo URL è temporaneamente da un'altra parte\", mentre i redirect permanenti (301) dicono \"questo URL è ora qui\". Durante il rollout graduale, usare 302 è sensato — passerete a 301 al rollout completo. Tuttavia, se mantenete un 302 per più di 4 settimane, Google potrebbe comunque considerarlo permanente (John Mueller, 2024).",{"type":32,"tag":33,"props":580,"children":581},{},[582,587,589,595],{"type":32,"tag":55,"props":583,"children":584},{},[585],{"type":37,"value":586},"Disciplina dei tag canonical:",{"type":37,"value":588}," Se il nuovo frontend fa server-side rendering, configurate il tag ",{"type":32,"tag":112,"props":590,"children":592},{"className":591},[],[593],{"type":37,"value":594},"\u003Clink rel=\"canonical\">",{"type":37,"value":596}," in modo che punti al vecchio URL. Questo invia a Google il messaggio \"l'autorità rimane nel vecchio dominio\". Esempio con Next.js:",{"type":32,"tag":217,"props":598,"children":602},{"code":599,"language":600,"meta":16,"className":601,"style":16},"\u002F\u002F pages\u002Fproducts\u002F[slug].jsx\nexport async function generateMetadata({ params }) {\n  return {\n    alternates: {\n      canonical: `https:\u002F\u002Flegacy.site.com\u002Fproducts\u002F${params.slug}`\n    }\n  };\n}\n","jsx","language-jsx shiki shiki-themes github-dark",[603],{"type":32,"tag":112,"props":604,"children":605},{"__ignoreMap":16},[606,614,653,665,673,705,713,721],{"type":32,"tag":227,"props":607,"children":608},{"class":229,"line":230},[609],{"type":32,"tag":227,"props":610,"children":611},{"style":440},[612],{"type":37,"value":613},"\u002F\u002F pages\u002Fproducts\u002F[slug].jsx\n",{"type":32,"tag":227,"props":615,"children":616},{"class":229,"line":274},[617,622,627,632,637,642,648],{"type":32,"tag":227,"props":618,"children":619},{"style":234},[620],{"type":37,"value":621},"export",{"type":32,"tag":227,"props":623,"children":624},{"style":234},[625],{"type":37,"value":626}," async",{"type":32,"tag":227,"props":628,"children":629},{"style":234},[630],{"type":37,"value":631}," function",{"type":32,"tag":227,"props":633,"children":634},{"style":251},[635],{"type":37,"value":636}," generateMetadata",{"type":32,"tag":227,"props":638,"children":639},{"style":257},[640],{"type":37,"value":641},"({ ",{"type":32,"tag":227,"props":643,"children":645},{"style":644},"--shiki-default:#FFAB70",[646],{"type":37,"value":647},"params",{"type":32,"tag":227,"props":649,"children":650},{"style":257},[651],{"type":37,"value":652}," }) {\n",{"type":32,"tag":227,"props":654,"children":655},{"class":229,"line":284},[656,661],{"type":32,"tag":227,"props":657,"children":658},{"style":234},[659],{"type":37,"value":660},"  return",{"type":32,"tag":227,"props":662,"children":663},{"style":257},[664],{"type":37,"value":319},{"type":32,"tag":227,"props":666,"children":667},{"class":229,"line":322},[668],{"type":32,"tag":227,"props":669,"children":670},{"style":257},[671],{"type":37,"value":672},"    alternates: {\n",{"type":32,"tag":227,"props":674,"children":675},{"class":229,"line":364},[676,681,686,690,695,700],{"type":32,"tag":227,"props":677,"children":678},{"style":257},[679],{"type":37,"value":680},"      canonical: ",{"type":32,"tag":227,"props":682,"children":683},{"style":263},[684],{"type":37,"value":685},"`https:\u002F\u002Flegacy.site.com\u002Fproducts\u002F${",{"type":32,"tag":227,"props":687,"children":688},{"style":257},[689],{"type":37,"value":647},{"type":32,"tag":227,"props":691,"children":692},{"style":263},[693],{"type":37,"value":694},".",{"type":32,"tag":227,"props":696,"children":697},{"style":257},[698],{"type":37,"value":699},"slug",{"type":32,"tag":227,"props":701,"children":702},{"style":263},[703],{"type":37,"value":704},"}`\n",{"type":32,"tag":227,"props":706,"children":707},{"class":229,"line":373},[708],{"type":32,"tag":227,"props":709,"children":710},{"style":257},[711],{"type":37,"value":712},"    }\n",{"type":32,"tag":227,"props":714,"children":715},{"class":229,"line":382},[716],{"type":32,"tag":227,"props":717,"children":718},{"style":257},[719],{"type":37,"value":720},"  };\n",{"type":32,"tag":227,"props":722,"children":723},{"class":229,"line":391},[724],{"type":32,"tag":227,"props":725,"children":726},{"style":257},[727],{"type":37,"value":728},"}\n",{"type":32,"tag":33,"props":730,"children":731},{},[732],{"type":37,"value":733},"Al rollout completo, rimuoverete questo tag e lo farete puntare al nuovo dominio.",{"type":32,"tag":40,"props":735,"children":737},{"id":736},"analisi-dellabbandono-del-carrello-catturare-i-punti-di-attrito-nascosti",[738],{"type":37,"value":739},"Analisi dell'Abbandono del Carrello: Catturare i Punti di Attrito Nascosti",{"type":32,"tag":33,"props":741,"children":742},{},[743],{"type":37,"value":744},"Nelle migrazioni headless, il calo del tasso di conversione non avviene solitamente al checkout, ma prima dell'aggiunta al carrello. Se un utente nel vecchio sistema aggiunge al carrello in 3 clic, nel nuovo potrebbe impiegarne 4 o anche solo 1 secondo in più — è sufficiente.",{"type":32,"tag":33,"props":746,"children":747},{},[748],{"type":32,"tag":55,"props":749,"children":750},{},[751],{"type":37,"value":752},"Metriche critiche:",{"type":32,"tag":754,"props":755,"children":756},"ul",{},[757,767,777],{"type":32,"tag":554,"props":758,"children":759},{},[760,765],{"type":32,"tag":55,"props":761,"children":762},{},[763],{"type":37,"value":764},"Tasso ATC:",{"type":37,"value":766}," Visite della pagina prodotto \u002F aggiunte al carrello",{"type":32,"tag":554,"props":768,"children":769},{},[770,775],{"type":32,"tag":55,"props":771,"children":772},{},[773],{"type":37,"value":774},"Latenza click-to-ATC:",{"type":37,"value":776}," Tempo tra il clic sul pulsante e la conferma (\u003C600ms idealmente)",{"type":32,"tag":554,"props":778,"children":779},{},[780,785],{"type":32,"tag":55,"props":781,"children":782},{},[783],{"type":37,"value":784},"Tasso di uscita su PDP:",{"type":37,"value":786}," Uscite prima di ATC (se >12% nel nuovo frontend, è un allarme)",{"type":32,"tag":33,"props":788,"children":789},{},[790],{"type":37,"value":791},"Raccogliete queste metriche in parallelo su entrambi i sistemi. Con BigQuery + GA4:",{"type":32,"tag":217,"props":793,"children":797},{"code":794,"language":795,"meta":16,"className":796,"style":16},"SELECT\n  page_location,\n  event_name,\n  COUNTIF(event_name = 'add_to_cart') \u002F COUNT(*) AS atc_rate,\n  AVG(TIMESTAMP_DIFF(atc_timestamp, page_view_timestamp, MILLISECOND)) AS click_latency_ms\nFROM `project.dataset.events_*`\nWHERE _TABLE_SUFFIX BETWEEN '20260701' AND '20260731'\n  AND event_name IN ('page_view', 'add_to_cart')\nGROUP BY page_location\nHAVING atc_rate \u003C 0.08\nORDER BY click_latency_ms DESC;\n","sql","language-sql shiki shiki-themes github-dark",[798],{"type":32,"tag":112,"props":799,"children":800},{"__ignoreMap":16},[801,809,817,825,881,913,926,959,1002,1015,1047],{"type":32,"tag":227,"props":802,"children":803},{"class":229,"line":230},[804],{"type":32,"tag":227,"props":805,"children":806},{"style":234},[807],{"type":37,"value":808},"SELECT\n",{"type":32,"tag":227,"props":810,"children":811},{"class":229,"line":274},[812],{"type":32,"tag":227,"props":813,"children":814},{"style":257},[815],{"type":37,"value":816},"  page_location,\n",{"type":32,"tag":227,"props":818,"children":819},{"class":229,"line":284},[820],{"type":32,"tag":227,"props":821,"children":822},{"style":257},[823],{"type":37,"value":824},"  event_name,\n",{"type":32,"tag":227,"props":826,"children":827},{"class":229,"line":322},[828,833,838,843,848,853,858,862,867,871,876],{"type":32,"tag":227,"props":829,"children":830},{"style":257},[831],{"type":37,"value":832},"  COUNTIF(event_name ",{"type":32,"tag":227,"props":834,"children":835},{"style":234},[836],{"type":37,"value":837},"=",{"type":32,"tag":227,"props":839,"children":840},{"style":263},[841],{"type":37,"value":842}," 'add_to_cart'",{"type":32,"tag":227,"props":844,"children":845},{"style":257},[846],{"type":37,"value":847},") ",{"type":32,"tag":227,"props":849,"children":850},{"style":234},[851],{"type":37,"value":852},"\u002F",{"type":32,"tag":227,"props":854,"children":855},{"style":240},[856],{"type":37,"value":857}," COUNT",{"type":32,"tag":227,"props":859,"children":860},{"style":257},[861],{"type":37,"value":260},{"type":32,"tag":227,"props":863,"children":864},{"style":234},[865],{"type":37,"value":866},"*",{"type":32,"tag":227,"props":868,"children":869},{"style":257},[870],{"type":37,"value":847},{"type":32,"tag":227,"props":872,"children":873},{"style":234},[874],{"type":37,"value":875},"AS",{"type":32,"tag":227,"props":877,"children":878},{"style":257},[879],{"type":37,"value":880}," atc_rate,\n",{"type":32,"tag":227,"props":882,"children":883},{"class":229,"line":364},[884,889,894,899,904,908],{"type":32,"tag":227,"props":885,"children":886},{"style":240},[887],{"type":37,"value":888},"  AVG",{"type":32,"tag":227,"props":890,"children":891},{"style":257},[892],{"type":37,"value":893},"(TIMESTAMP_DIFF(atc_timestamp, page_view_timestamp, ",{"type":32,"tag":227,"props":895,"children":896},{"style":234},[897],{"type":37,"value":898},"MILLISECOND",{"type":32,"tag":227,"props":900,"children":901},{"style":257},[902],{"type":37,"value":903},")) ",{"type":32,"tag":227,"props":905,"children":906},{"style":234},[907],{"type":37,"value":875},{"type":32,"tag":227,"props":909,"children":910},{"style":257},[911],{"type":37,"value":912}," click_latency_ms\n",{"type":32,"tag":227,"props":914,"children":915},{"class":229,"line":373},[916,921],{"type":32,"tag":227,"props":917,"children":918},{"style":234},[919],{"type":37,"value":920},"FROM",{"type":32,"tag":227,"props":922,"children":923},{"style":263},[924],{"type":37,"value":925}," `project.dataset.events_*`\n",{"type":32,"tag":227,"props":927,"children":928},{"class":229,"line":382},[929,934,939,944,949,954],{"type":32,"tag":227,"props":930,"children":931},{"style":234},[932],{"type":37,"value":933},"WHERE",{"type":32,"tag":227,"props":935,"children":936},{"style":257},[937],{"type":37,"value":938}," _TABLE_SUFFIX ",{"type":32,"tag":227,"props":940,"children":941},{"style":234},[942],{"type":37,"value":943},"BETWEEN",{"type":32,"tag":227,"props":945,"children":946},{"style":263},[947],{"type":37,"value":948}," '20260701'",{"type":32,"tag":227,"props":950,"children":951},{"style":234},[952],{"type":37,"value":953}," AND",{"type":32,"tag":227,"props":955,"children":956},{"style":263},[957],{"type":37,"value":958}," '20260731'\n",{"type":32,"tag":227,"props":960,"children":961},{"class":229,"line":391},[962,967,972,977,982,987,992,997],{"type":32,"tag":227,"props":963,"children":964},{"style":234},[965],{"type":37,"value":966},"  AND",{"type":32,"tag":227,"props":968,"children":969},{"style":257},[970],{"type":37,"value":971}," event_name ",{"type":32,"tag":227,"props":973,"children":974},{"style":234},[975],{"type":37,"value":976},"IN",{"type":32,"tag":227,"props":978,"children":979},{"style":257},[980],{"type":37,"value":981}," (",{"type":32,"tag":227,"props":983,"children":984},{"style":263},[985],{"type":37,"value":986},"'page_view'",{"type":32,"tag":227,"props":988,"children":989},{"style":257},[990],{"type":37,"value":991},", ",{"type":32,"tag":227,"props":993,"children":994},{"style":263},[995],{"type":37,"value":996},"'add_to_cart'",{"type":32,"tag":227,"props":998,"children":999},{"style":257},[1000],{"type":37,"value":1001},")\n",{"type":32,"tag":227,"props":1003,"children":1004},{"class":229,"line":26},[1005,1010],{"type":32,"tag":227,"props":1006,"children":1007},{"style":234},[1008],{"type":37,"value":1009},"GROUP BY",{"type":32,"tag":227,"props":1011,"children":1012},{"style":257},[1013],{"type":37,"value":1014}," page_location\n",{"type":32,"tag":227,"props":1016,"children":1017},{"class":229,"line":412},[1018,1023,1028,1033,1038,1042],{"type":32,"tag":227,"props":1019,"children":1020},{"style":234},[1021],{"type":37,"value":1022},"HAVING",{"type":32,"tag":227,"props":1024,"children":1025},{"style":257},[1026],{"type":37,"value":1027}," atc_rate ",{"type":32,"tag":227,"props":1029,"children":1030},{"style":234},[1031],{"type":37,"value":1032},"\u003C",{"type":32,"tag":227,"props":1034,"children":1035},{"style":240},[1036],{"type":37,"value":1037}," 0",{"type":32,"tag":227,"props":1039,"children":1040},{"style":257},[1041],{"type":37,"value":694},{"type":32,"tag":227,"props":1043,"children":1044},{"style":240},[1045],{"type":37,"value":1046},"08\n",{"type":32,"tag":227,"props":1048,"children":1049},{"class":229,"line":446},[1050,1055,1060,1065],{"type":32,"tag":227,"props":1051,"children":1052},{"style":234},[1053],{"type":37,"value":1054},"ORDER BY",{"type":32,"tag":227,"props":1056,"children":1057},{"style":257},[1058],{"type":37,"value":1059}," click_latency_ms ",{"type":32,"tag":227,"props":1061,"children":1062},{"style":234},[1063],{"type":37,"value":1064},"DESC",{"type":32,"tag":227,"props":1066,"children":1067},{"style":257},[1068],{"type":37,"value":1069},";\n",{"type":32,"tag":33,"props":1071,"children":1072},{},[1073],{"type":37,"value":1074},"Questa query rivela quali categorie di prodotto hanno subìto un calo nel tasso ATC e un aumento della latenza nel nuovo frontend. Se la categoria \"scarpe bianche\" mostra una latenza di 1200ms nel nuovo sistema, investigate l'overhead della dimensione del bundle o delle chiamate API.",{"type":32,"tag":33,"props":1076,"children":1077},{},[1078,1083],{"type":32,"tag":55,"props":1079,"children":1080},{},[1081],{"type":37,"value":1082},"Trade-off della session replay:",{"type":37,"value":1084}," Strumenti come Hotjar e LogRocket registrano ogni pixel, ma comportano rischi per la privacy degli utenti. Un'alternativa: l'API \"frustration signal\" di FullStory — cattura solo anomalie come clic veloci, messaggi di errore e clic su aree vuote, senza registrare l'intera sessione.",{"type":32,"tag":40,"props":1086,"children":1088},{"id":1087},"rollback-nella-architettura-composable",[1089],{"type":37,"value":1090},"Rollback nella Architettura Composable",{"type":32,"tag":33,"props":1092,"children":1093},{},[1094],{"type":37,"value":1095},"Lo stack headless generalmente consiste di più componenti: frontend (Next.js, Nuxt), CMS (Contentful, Sanity), motore commerce (Shopify, commercetools), ricerca (Algolia, Typesense). Se uno di questi cade, il piano di rollback deve essere cristallino.",{"type":32,"tag":33,"props":1097,"children":1098},{},[1099,1104],{"type":32,"tag":55,"props":1100,"children":1101},{},[1102],{"type":37,"value":1103},"Pattern circuit breaker:",{"type":37,"value":1105}," Applicate timeout e limiti di retry a ogni servizio di terze parti. Esempio per l'API Shopify Storefront:",{"type":32,"tag":217,"props":1107,"children":1109},{"code":1108,"language":220,"meta":16,"className":221,"style":16},"const fetchProduct = async (handle) => {\n  const controller = new AbortController();\n  const timeout = setTimeout(() => controller.abort(), 3000); \u002F\u002F 3s timeout\n\n  try {\n    const response = await fetch(`https:\u002F\u002Fshop.myshopify.com\u002Fapi\u002F2024-01\u002Fgraphql.json`, {\n      method: 'POST',\n      headers: { 'X-Shopify-Storefront-Access-Token': token },\n      body: JSON.stringify({ query: productQuery, variables: { handle } }),\n      signal: controller.signal\n    });\n    clearTimeout(timeout);\n    return response.json();\n  } catch (err) {\n    if (err.name === 'AbortError') {\n      \u002F\u002F Timeout: ricadere su dati in cache o su API legacy\n      return fetchFromLegacySystem(handle);\n    }\n    throw err;\n  }\n};\n",[1110],{"type":32,"tag":112,"props":1111,"children":1112},{"__ignoreMap":16},[1113,1154,1185,1244,1251,1263,1303,1321,1339,1366,1374,1382,1395,1417,1434,1463,1472,1491,1499,1513,1521],{"type":32,"tag":227,"props":1114,"children":1115},{"class":229,"line":230},[1116,1120,1125,1129,1133,1137,1142,1146,1150],{"type":32,"tag":227,"props":1117,"children":1118},{"style":234},[1119],{"type":37,"value":237},{"type":32,"tag":227,"props":1121,"children":1122},{"style":251},[1123],{"type":37,"value":1124}," fetchProduct",{"type":32,"tag":227,"props":1126,"children":1127},{"style":234},[1128],{"type":37,"value":248},{"type":32,"tag":227,"props":1130,"children":1131},{"style":234},[1132],{"type":37,"value":626},{"type":32,"tag":227,"props":1134,"children":1135},{"style":257},[1136],{"type":37,"value":981},{"type":32,"tag":227,"props":1138,"children":1139},{"style":644},[1140],{"type":37,"value":1141},"handle",{"type":32,"tag":227,"props":1143,"children":1144},{"style":257},[1145],{"type":37,"value":847},{"type":32,"tag":227,"props":1147,"children":1148},{"style":234},[1149],{"type":37,"value":314},{"type":32,"tag":227,"props":1151,"children":1152},{"style":257},[1153],{"type":37,"value":319},{"type":32,"tag":227,"props":1155,"children":1156},{"class":229,"line":274},[1157,1161,1166,1170,1175,1180],{"type":32,"tag":227,"props":1158,"children":1159},{"style":234},[1160],{"type":37,"value":328},{"type":32,"tag":227,"props":1162,"children":1163},{"style":240},[1164],{"type":37,"value":1165}," controller",{"type":32,"tag":227,"props":1167,"children":1168},{"style":234},[1169],{"type":37,"value":248},{"type":32,"tag":227,"props":1171,"children":1172},{"style":234},[1173],{"type":37,"value":1174}," new",{"type":32,"tag":227,"props":1176,"children":1177},{"style":251},[1178],{"type":37,"value":1179}," AbortController",{"type":32,"tag":227,"props":1181,"children":1182},{"style":257},[1183],{"type":37,"value":1184},"();\n",{"type":32,"tag":227,"props":1186,"children":1187},{"class":229,"line":284},[1188,1192,1197,1201,1206,1211,1215,1220,1225,1230,1235,1239],{"type":32,"tag":227,"props":1189,"children":1190},{"style":234},[1191],{"type":37,"value":328},{"type":32,"tag":227,"props":1193,"children":1194},{"style":240},[1195],{"type":37,"value":1196}," timeout",{"type":32,"tag":227,"props":1198,"children":1199},{"style":234},[1200],{"type":37,"value":248},{"type":32,"tag":227,"props":1202,"children":1203},{"style":251},[1204],{"type":37,"value":1205}," setTimeout",{"type":32,"tag":227,"props":1207,"children":1208},{"style":257},[1209],{"type":37,"value":1210},"(() ",{"type":32,"tag":227,"props":1212,"children":1213},{"style":234},[1214],{"type":37,"value":314},{"type":32,"tag":227,"props":1216,"children":1217},{"style":257},[1218],{"type":37,"value":1219}," controller.",{"type":32,"tag":227,"props":1221,"children":1222},{"style":251},[1223],{"type":37,"value":1224},"abort",{"type":32,"tag":227,"props":1226,"children":1227},{"style":257},[1228],{"type":37,"value":1229},"(), ",{"type":32,"tag":227,"props":1231,"children":1232},{"style":240},[1233],{"type":37,"value":1234},"3000",{"type":32,"tag":227,"props":1236,"children":1237},{"style":257},[1238],{"type":37,"value":437},{"type":32,"tag":227,"props":1240,"children":1241},{"style":440},[1242],{"type":37,"value":1243},"\u002F\u002F 3s timeout\n",{"type":32,"tag":227,"props":1245,"children":1246},{"class":229,"line":322},[1247],{"type":32,"tag":227,"props":1248,"children":1249},{"emptyLinePlaceholder":278},[1250],{"type":37,"value":281},{"type":32,"tag":227,"props":1252,"children":1253},{"class":229,"line":364},[1254,1259],{"type":32,"tag":227,"props":1255,"children":1256},{"style":234},[1257],{"type":37,"value":1258},"  try",{"type":32,"tag":227,"props":1260,"children":1261},{"style":257},[1262],{"type":37,"value":319},{"type":32,"tag":227,"props":1264,"children":1265},{"class":229,"line":373},[1266,1271,1276,1280,1285,1290,1294,1299],{"type":32,"tag":227,"props":1267,"children":1268},{"style":234},[1269],{"type":37,"value":1270},"    const",{"type":32,"tag":227,"props":1272,"children":1273},{"style":240},[1274],{"type":37,"value":1275}," response",{"type":32,"tag":227,"props":1277,"children":1278},{"style":234},[1279],{"type":37,"value":248},{"type":32,"tag":227,"props":1281,"children":1282},{"style":234},[1283],{"type":37,"value":1284}," await",{"type":32,"tag":227,"props":1286,"children":1287},{"style":251},[1288],{"type":37,"value":1289}," fetch",{"type":32,"tag":227,"props":1291,"children":1292},{"style":257},[1293],{"type":37,"value":260},{"type":32,"tag":227,"props":1295,"children":1296},{"style":263},[1297],{"type":37,"value":1298},"`https:\u002F\u002Fshop.myshopify.com\u002Fapi\u002F2024-01\u002Fgraphql.json`",{"type":32,"tag":227,"props":1300,"children":1301},{"style":257},[1302],{"type":37,"value":361},{"type":32,"tag":227,"props":1304,"children":1305},{"class":229,"line":382},[1306,1311,1316],{"type":32,"tag":227,"props":1307,"children":1308},{"style":257},[1309],{"type":37,"value":1310},"      method: ",{"type":32,"tag":227,"props":1312,"children":1313},{"style":263},[1314],{"type":37,"value":1315},"'POST'",{"type":32,"tag":227,"props":1317,"children":1318},{"style":257},[1319],{"type":37,"value":1320},",\n",{"type":32,"tag":227,"props":1322,"children":1323},{"class":229,"line":391},[1324,1329,1334],{"type":32,"tag":227,"props":1325,"children":1326},{"style":257},[1327],{"type":37,"value":1328},"      headers: { ",{"type":32,"tag":227,"props":1330,"children":1331},{"style":263},[1332],{"type":37,"value":1333},"'X-Shopify-Storefront-Access-Token'",{"type":32,"tag":227,"props":1335,"children":1336},{"style":257},[1337],{"type":37,"value":1338},": token },\n",{"type":32,"tag":227,"props":1340,"children":1341},{"class":229,"line":26},[1342,1347,1352,1356,1361],{"type":32,"tag":227,"props":1343,"children":1344},{"style":257},[1345],{"type":37,"value":1346},"      body: ",{"type":32,"tag":227,"props":1348,"children":1349},{"style":240},[1350],{"type":37,"value":1351},"JSON",{"type":32,"tag":227,"props":1353,"children":1354},{"style":257},[1355],{"type":37,"value":694},{"type":32,"tag":227,"props":1357,"children":1358},{"style":251},[1359],{"type":37,"value":1360},"stringify",{"type":32,"tag":227,"props":1362,"children":1363},{"style":257},[1364],{"type":37,"value":1365},"({ query: productQuery, variables: { handle } }),\n",{"type":32,"tag":227,"props":1367,"children":1368},{"class":229,"line":412},[1369],{"type":32,"tag":227,"props":1370,"children":1371},{"style":257},[1372],{"type":37,"value":1373},"      signal: controller.signal\n",{"type":32,"tag":227,"props":1375,"children":1376},{"class":229,"line":446},[1377],{"type":32,"tag":227,"props":1378,"children":1379},{"style":257},[1380],{"type":37,"value":1381},"    });\n",{"type":32,"tag":227,"props":1383,"children":1384},{"class":229,"line":464},[1385,1390],{"type":32,"tag":227,"props":1386,"children":1387},{"style":251},[1388],{"type":37,"value":1389},"    clearTimeout",{"type":32,"tag":227,"props":1391,"children":1392},{"style":257},[1393],{"type":37,"value":1394},"(timeout);\n",{"type":32,"tag":227,"props":1396,"children":1397},{"class":229,"line":494},[1398,1403,1408,1413],{"type":32,"tag":227,"props":1399,"children":1400},{"style":234},[1401],{"type":37,"value":1402},"    return",{"type":32,"tag":227,"props":1404,"children":1405},{"style":257},[1406],{"type":37,"value":1407}," response.",{"type":32,"tag":227,"props":1409,"children":1410},{"style":251},[1411],{"type":37,"value":1412},"json",{"type":32,"tag":227,"props":1414,"children":1415},{"style":257},[1416],{"type":37,"value":1184},{"type":32,"tag":227,"props":1418,"children":1419},{"class":229,"line":503},[1420,1424,1429],{"type":32,"tag":227,"props":1421,"children":1422},{"style":257},[1423],{"type":37,"value":452},{"type":32,"tag":227,"props":1425,"children":1426},{"style":234},[1427],{"type":37,"value":1428},"catch",{"type":32,"tag":227,"props":1430,"children":1431},{"style":257},[1432],{"type":37,"value":1433}," (err) {\n",{"type":32,"tag":227,"props":1435,"children":1437},{"class":229,"line":1436},15,[1438,1443,1448,1453,1458],{"type":32,"tag":227,"props":1439,"children":1440},{"style":234},[1441],{"type":37,"value":1442},"    if",{"type":32,"tag":227,"props":1444,"children":1445},{"style":257},[1446],{"type":37,"value":1447}," (err.name ",{"type":32,"tag":227,"props":1449,"children":1450},{"style":234},[1451],{"type":37,"value":1452},"===",{"type":32,"tag":227,"props":1454,"children":1455},{"style":263},[1456],{"type":37,"value":1457}," 'AbortError'",{"type":32,"tag":227,"props":1459,"children":1460},{"style":257},[1461],{"type":37,"value":1462},") {\n",{"type":32,"tag":227,"props":1464,"children":1466},{"class":229,"line":1465},16,[1467],{"type":32,"tag":227,"props":1468,"children":1469},{"style":440},[1470],{"type":37,"value":1471},"      \u002F\u002F Timeout: ricadere su dati in cache o su API legacy\n",{"type":32,"tag":227,"props":1473,"children":1475},{"class":229,"line":1474},17,[1476,1481,1486],{"type":32,"tag":227,"props":1477,"children":1478},{"style":234},[1479],{"type":37,"value":1480},"      return",{"type":32,"tag":227,"props":1482,"children":1483},{"style":251},[1484],{"type":37,"value":1485}," fetchFromLegacySystem",{"type":32,"tag":227,"props":1487,"children":1488},{"style":257},[1489],{"type":37,"value":1490},"(handle);\n",{"type":32,"tag":227,"props":1492,"children":1494},{"class":229,"line":1493},18,[1495],{"type":32,"tag":227,"props":1496,"children":1497},{"style":257},[1498],{"type":37,"value":712},{"type":32,"tag":227,"props":1500,"children":1502},{"class":229,"line":1501},19,[1503,1508],{"type":32,"tag":227,"props":1504,"children":1505},{"style":234},[1506],{"type":37,"value":1507},"    throw",{"type":32,"tag":227,"props":1509,"children":1510},{"style":257},[1511],{"type":37,"value":1512}," err;\n",{"type":32,"tag":227,"props":1514,"children":1516},{"class":229,"line":1515},20,[1517],{"type":32,"tag":227,"props":1518,"children":1519},{"style":257},[1520],{"type":37,"value":500},{"type":32,"tag":227,"props":1522,"children":1524},{"class":229,"line":1523},21,[1525],{"type":32,"tag":227,"props":1526,"children":1527},{"style":257},[1528],{"type":37,"value":1529},"};\n",{"type":32,"tag":33,"props":1531,"children":1532},{},[1533],{"type":37,"value":1534},"Questo codice, se l'API Shopify non risponde entro 3 secondi, torna al sistema legacy. L'esperienza dell'utente rimane ininterrotta.",{"type":32,"tag":33,"props":1536,"children":1537},{},[1538,1543],{"type":32,"tag":55,"props":1539,"children":1540},{},[1541],{"type":37,"value":1542},"Trigger di rollback automatico:",{"type":37,"value":1544}," Con Prometheus + Alertmanager, attivate il rollback automatico se il tasso di errore supera il 2%:",{"type":32,"tag":217,"props":1546,"children":1550},{"code":1547,"language":1548,"meta":16,"className":1549,"style":16},"groups:\n  - name: headless_alerts\n    rules:\n      - alert: HighErrorRate\n        expr: rate(http_requests_total{job=\"headless-frontend\",status=~\"5..\"}[5m]) > 0.02\n        for: 2m\n        actions:\n          - trigger_rollback: true\n            target_version: \"legacy-stable\"\n","yaml","language-yaml shiki shiki-themes github-dark",[1551],{"type":32,"tag":112,"props":1552,"children":1553},{"__ignoreMap":16},[1554,1568,1591,1603,1625,1642,1659,1671,1693],{"type":32,"tag":227,"props":1555,"children":1556},{"class":229,"line":230},[1557,1563],{"type":32,"tag":227,"props":1558,"children":1560},{"style":1559},"--shiki-default:#85E89D",[1561],{"type":37,"value":1562},"groups",{"type":32,"tag":227,"props":1564,"children":1565},{"style":257},[1566],{"type":37,"value":1567},":\n",{"type":32,"tag":227,"props":1569,"children":1570},{"class":229,"line":274},[1571,1576,1581,1586],{"type":32,"tag":227,"props":1572,"children":1573},{"style":257},[1574],{"type":37,"value":1575},"  - ",{"type":32,"tag":227,"props":1577,"children":1578},{"style":1559},[1579],{"type":37,"value":1580},"name",{"type":32,"tag":227,"props":1582,"children":1583},{"style":257},[1584],{"type":37,"value":1585},": ",{"type":32,"tag":227,"props":1587,"children":1588},{"style":263},[1589],{"type":37,"value":1590},"headless_alerts\n",{"type":32,"tag":227,"props":1592,"children":1593},{"class":229,"line":284},[1594,1599],{"type":32,"tag":227,"props":1595,"children":1596},{"style":1559},[1597],{"type":37,"value":1598},"    rules",{"type":32,"tag":227,"props":1600,"children":1601},{"style":257},[1602],{"type":37,"value":1567},{"type":32,"tag":227,"props":1604,"children":1605},{"class":229,"line":322},[1606,1611,1616,1620],{"type":32,"tag":227,"props":1607,"children":1608},{"style":257},[1609],{"type":37,"value":1610},"      - ",{"type":32,"tag":227,"props":1612,"children":1613},{"style":1559},[1614],{"type":37,"value":1615},"alert",{"type":32,"tag":227,"props":1617,"children":1618},{"style":257},[1619],{"type":37,"value":1585},{"type":32,"tag":227,"props":1621,"children":1622},{"style":263},[1623],{"type":37,"value":1624},"HighErrorRate\n",{"type":32,"tag":227,"props":1626,"children":1627},{"class":229,"line":364},[1628,1633,1637],{"type":32,"tag":227,"props":1629,"children":1630},{"style":1559},[1631],{"type":37,"value":1632},"        expr",{"type":32,"tag":227,"props":1634,"children":1635},{"style":257},[1636],{"type":37,"value":1585},{"type":32,"tag":227,"props":1638,"children":1639},{"style":263},[1640],{"type":37,"value":1641},"rate(http_requests_total{job=\"headless-frontend\",status=~\"5..\"}[5m]) > 0.02\n",{"type":32,"tag":227,"props":1643,"children":1644},{"class":229,"line":373},[1645,1650,1654],{"type":32,"tag":227,"props":1646,"children":1647},{"style":1559},[1648],{"type":37,"value":1649},"        for",{"type":32,"tag":227,"props":1651,"children":1652},{"style":257},[1653],{"type":37,"value":1585},{"type":32,"tag":227,"props":1655,"children":1656},{"style":263},[1657],{"type":37,"value":1658},"2m\n",{"type":32,"tag":227,"props":1660,"children":1661},{"class":229,"line":382},[1662,1667],{"type":32,"tag":227,"props":1663,"children":1664},{"style":1559},[1665],{"type":37,"value":1666},"        actions",{"type":32,"tag":227,"props":1668,"children":1669},{"style":257},[1670],{"type":37,"value":1567},{"type":32,"tag":227,"props":1672,"children":1673},{"class":229,"line":391},[1674,1679,1684,1688],{"type":32,"tag":227,"props":1675,"children":1676},{"style":257},[1677],{"type":37,"value":1678},"          - ",{"type":32,"tag":227,"props":1680,"children":1681},{"style":1559},[1682],{"type":37,"value":1683},"trigger_rollback",{"type":32,"tag":227,"props":1685,"children":1686},{"style":257},[1687],{"type":37,"value":1585},{"type":32,"tag":227,"props":1689,"children":1690},{"style":240},[1691],{"type":37,"value":1692},"true\n",{"type":32,"tag":227,"props":1694,"children":1695},{"class":229,"line":26},[1696,1701,1705],{"type":32,"tag":227,"props":1697,"children":1698},{"style":1559},[1699],{"type":37,"value":1700},"            target_version",{"type":32,"tag":227,"props":1702,"children":1703},{"style":257},[1704],{"type":37,"value":1585},{"type":32,"tag":227,"props":1706,"children":1707},{"style":263},[1708],{"type":37,"value":1709},"\"legacy-stable\"\n",{"type":32,"tag":33,"props":1711,"children":1712},{},[1713],{"type":37,"value":1714},"Questo YAML, se il tasso di errore rimane sopra il 2% per 2 minuti, disattiva il feature flag e reindirizza il traffico al sistema legacy.",{"type":32,"tag":40,"props":1716,"children":1718},{"id":1717},"conclusione-la-gestione-dei-rischi-è-un-processo-non-un-progetto-una-tantum",[1719],{"type":37,"value":1720},"Conclusione: La Gestione dei Rischi è un Processo, non un Progetto Una Tantum",{"type":32,"tag":33,"props":1722,"children":1723},{},[1724],{"type":37,"value":1725},"La migrazione headless richiede un monitoraggio attivo per 90 giorni dopo il lancio. Le Core Web Vitals (LCP, CLS, FID), le metriche del funnel di conversione e il tasso di errore lato server devono essere tracciati in dashboard settimanali. Anche se i primi 30 giorni procedono senza intoppi, la stagionalità del traffico (ad esempio, il Black Friday) può rivelare nuovi pattern di carico.",{"type":32,"tag":33,"props":1727,"children":1728},{},[1729,1731,1740],{"type":37,"value":1730},"L'approccio ",{"type":32,"tag":1732,"props":1733,"children":1737},"a",{"href":1734,"rel":1735},"https:\u002F\u002Fwww.roibase.com.tr\u002Fit\u002Fheadless",[1736],"nofollow",[1738],{"type":37,"value":1739},"Headless Commerce",{"type":37,"value":1741}," con il corretto rollout graduale e la disciplina metrica vi permette di trasformare l'infrastruttura di e-commerce in modo sicuro. Durante il processo, catturare i punti di attrito, proteggere l'autorità SEO e mantenere un piano di rollback pronto trasforma la velocità e la flessibilità promesse da headless in un vero aumento dei ricavi.",{"type":32,"tag":1743,"props":1744,"children":1745},"style",{},[1746],{"type":37,"value":1747},"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":284,"depth":284,"links":1749},[1750,1751,1752,1753,1754],{"id":42,"depth":274,"text":45},{"id":517,"depth":274,"text":520},{"id":736,"depth":274,"text":739},{"id":1087,"depth":274,"text":1090},{"id":1717,"depth":274,"text":1720},"markdown","content:it:tech:roadmap-migrazione-commerce-headless.md","content","it\u002Ftech\u002Froadmap-migrazione-commerce-headless.md","it\u002Ftech\u002Froadmap-migrazione-commerce-headless","md",1785967479031]