[{"data":1,"prerenderedAt":2701},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fru\u002Ftech\u002Fheadless-migracion-hoja-ruta-y-gestion-riesgos":11},{"i18nKey":4,"paths":5},"tech-006-2026-07",{"de":6,"es":7,"fr":8,"it":9,"ru":10},"\u002Fde\u002Ftech\u002Fheadless-e-commerce-migration-roadmap-risk-management","\u002Fes\u002Ftech\u002Fmigracion-a-comercio-headless-hoja-de-ruta-gestion-riesgos","\u002Ffr\u002Ftech\u002Froadmap-migration-headless-gestion-risques","\u002Fit\u002Ftech\u002Fheadless-e-commerce-migration-roadmap-e-risk-management","\u002Fru\u002Ftech\u002Fheadless-migracion-hoja-ruta-y-gestion-riesgos",{"_path":10,"_dir":12,"_draft":13,"_partial":13,"_locale":14,"title":15,"description":16,"publishedAt":17,"modifiedAt":17,"category":18,"i18nKey":4,"tags":19,"readingTime":25,"author":26,"body":27,"_type":2695,"_id":2696,"_source":2697,"_file":2698,"_stem":2699,"_extension":2700},"tech",false,"","E-Commerce Headless: Hoja de Ruta de Migración y Gestión de Riesgos","Estrategia de implementación gradual preservando SEO. Análisis de abandono en carrito, testing de rendimiento post-migración y métodos de mitigación de riesgos.","2026-07-16","headless",[20,21,22,23,24],"headless-commerce","estrategia-migracion","preservacion-seo","testing-rendimiento","gestion-riesgos",9,"Roibase",{"type":28,"children":29,"toc":2688},"root",[30,38,45,58,80,361,374,399,409,419,425,438,446,482,1432,1437,1486,1492,1497,1505,1981,1999,2040,2045,2051,2056,2351,2361,2588,2593,2599,2604,2612,2625,2633,2654,2670,2682],{"type":31,"tag":32,"props":33,"children":34},"element","p",{},[35],{"type":36,"value":37},"text","La migración a e-commerce headless en 2026 no es ya \"¿se hace o no?\". La pregunta es \"¿cómo se hace sin que el sitio colapse, sin perder un 40% de SEO, sin que el abandono en checkout suba de 18% a 32%?\". La madurez de frameworks como Shopify Hydrogen, Remix y Next.js Commerce ha reducido el riesgo técnico, pero el riesgo operacional sigue siendo alto. Migrar un sitio de e-commerce de arquitectura monolítica a headless no es una migración de base de datos: es una cirugía a corazón abierto con el sitio en vivo. Este artículo aborda la estrategia de rollout gradual, testing de preservación de SEO y métodos para evitar picos de abandono en carrito.",{"type":31,"tag":39,"props":40,"children":42},"h2",{"id":41},"estrategia-de-rollout-gradual-canary-deployment-entre-dominios",[43],{"type":36,"value":44},"Estrategia de Rollout Gradual: Canary Deployment Entre Dominios",{"type":31,"tag":32,"props":46,"children":47},{},[48,50,56],{"type":36,"value":49},"Nada de migraciones big-bang. El sitio completo no pasa al frontend headless simultáneamente porque si una métrica falla, el costo de rollback es prohibitivo. Nuestra arquitectura preferida: ",{"type":31,"tag":51,"props":52,"children":53},"strong",{},[54],{"type":36,"value":55},"routing basado en path de URL",{"type":36,"value":57}," con implementación progresiva.",{"type":31,"tag":32,"props":59,"children":60},{},[61,63,70,72,78],{"type":36,"value":62},"La primera fase selecciona un path con bajo volumen de tráfico y SKU limitados (50-100 productos), como ",{"type":31,"tag":64,"props":65,"children":67},"code",{"className":66},[],[68],{"type":36,"value":69},"\u002Fcategoria\u002Fnuevas-llegadas",{"type":36,"value":71},". En el CDN (Cloudflare, Fastly) se configura una regla de routing por path: el tráfico a ",{"type":31,"tag":64,"props":73,"children":75},{"className":74},[],[76],{"type":36,"value":77},"\u002Fcategoria\u002Fnuevas-llegadas\u002F*",{"type":36,"value":79}," va al origen headless, el resto a Shopify Liquid heredado.",{"type":31,"tag":81,"props":82,"children":86},"pre",{"className":83,"code":84,"language":85,"meta":14,"style":14},"language-javascript shiki shiki-themes github-dark","\u002F\u002F Cloudflare Workers — routing por path\naddEventListener('fetch', event => {\n  const url = new URL(event.request.url);\n  \n  if (url.pathname.startsWith('\u002Fcategoria\u002Fnuevas-llegadas')) {\n    return event.respondWith(fetch(event.request, {\n      backend: 'headless-origin' \u002F\u002F Hydrogen app en Cloudflare Pages\n    }));\n  }\n  \n  return event.respondWith(fetch(event.request, {\n    backend: 'legacy-shopify'\n  }));\n});\n","javascript",[87],{"type":31,"tag":64,"props":88,"children":89},{"__ignoreMap":14},[90,102,146,181,190,223,256,275,284,292,300,329,343,352],{"type":31,"tag":91,"props":92,"children":95},"span",{"class":93,"line":94},"line",1,[96],{"type":31,"tag":91,"props":97,"children":99},{"style":98},"--shiki-default:#6A737D",[100],{"type":36,"value":101},"\u002F\u002F Cloudflare Workers — routing por path\n",{"type":31,"tag":91,"props":103,"children":105},{"class":93,"line":104},2,[106,112,118,124,129,135,141],{"type":31,"tag":91,"props":107,"children":109},{"style":108},"--shiki-default:#B392F0",[110],{"type":36,"value":111},"addEventListener",{"type":31,"tag":91,"props":113,"children":115},{"style":114},"--shiki-default:#E1E4E8",[116],{"type":36,"value":117},"(",{"type":31,"tag":91,"props":119,"children":121},{"style":120},"--shiki-default:#9ECBFF",[122],{"type":36,"value":123},"'fetch'",{"type":31,"tag":91,"props":125,"children":126},{"style":114},[127],{"type":36,"value":128},", ",{"type":31,"tag":91,"props":130,"children":132},{"style":131},"--shiki-default:#FFAB70",[133],{"type":36,"value":134},"event",{"type":31,"tag":91,"props":136,"children":138},{"style":137},"--shiki-default:#F97583",[139],{"type":36,"value":140}," =>",{"type":31,"tag":91,"props":142,"children":143},{"style":114},[144],{"type":36,"value":145}," {\n",{"type":31,"tag":91,"props":147,"children":149},{"class":93,"line":148},3,[150,155,161,166,171,176],{"type":31,"tag":91,"props":151,"children":152},{"style":137},[153],{"type":36,"value":154},"  const",{"type":31,"tag":91,"props":156,"children":158},{"style":157},"--shiki-default:#79B8FF",[159],{"type":36,"value":160}," url",{"type":31,"tag":91,"props":162,"children":163},{"style":137},[164],{"type":36,"value":165}," =",{"type":31,"tag":91,"props":167,"children":168},{"style":137},[169],{"type":36,"value":170}," new",{"type":31,"tag":91,"props":172,"children":173},{"style":108},[174],{"type":36,"value":175}," URL",{"type":31,"tag":91,"props":177,"children":178},{"style":114},[179],{"type":36,"value":180},"(event.request.url);\n",{"type":31,"tag":91,"props":182,"children":184},{"class":93,"line":183},4,[185],{"type":31,"tag":91,"props":186,"children":187},{"style":114},[188],{"type":36,"value":189},"  \n",{"type":31,"tag":91,"props":191,"children":193},{"class":93,"line":192},5,[194,199,204,209,213,218],{"type":31,"tag":91,"props":195,"children":196},{"style":137},[197],{"type":36,"value":198},"  if",{"type":31,"tag":91,"props":200,"children":201},{"style":114},[202],{"type":36,"value":203}," (url.pathname.",{"type":31,"tag":91,"props":205,"children":206},{"style":108},[207],{"type":36,"value":208},"startsWith",{"type":31,"tag":91,"props":210,"children":211},{"style":114},[212],{"type":36,"value":117},{"type":31,"tag":91,"props":214,"children":215},{"style":120},[216],{"type":36,"value":217},"'\u002Fcategoria\u002Fnuevas-llegadas'",{"type":31,"tag":91,"props":219,"children":220},{"style":114},[221],{"type":36,"value":222},")) {\n",{"type":31,"tag":91,"props":224,"children":226},{"class":93,"line":225},6,[227,232,237,242,246,251],{"type":31,"tag":91,"props":228,"children":229},{"style":137},[230],{"type":36,"value":231},"    return",{"type":31,"tag":91,"props":233,"children":234},{"style":114},[235],{"type":36,"value":236}," event.",{"type":31,"tag":91,"props":238,"children":239},{"style":108},[240],{"type":36,"value":241},"respondWith",{"type":31,"tag":91,"props":243,"children":244},{"style":114},[245],{"type":36,"value":117},{"type":31,"tag":91,"props":247,"children":248},{"style":108},[249],{"type":36,"value":250},"fetch",{"type":31,"tag":91,"props":252,"children":253},{"style":114},[254],{"type":36,"value":255},"(event.request, {\n",{"type":31,"tag":91,"props":257,"children":259},{"class":93,"line":258},7,[260,265,270],{"type":31,"tag":91,"props":261,"children":262},{"style":114},[263],{"type":36,"value":264},"      backend: ",{"type":31,"tag":91,"props":266,"children":267},{"style":120},[268],{"type":36,"value":269},"'headless-origin'",{"type":31,"tag":91,"props":271,"children":272},{"style":98},[273],{"type":36,"value":274}," \u002F\u002F Hydrogen app en Cloudflare Pages\n",{"type":31,"tag":91,"props":276,"children":278},{"class":93,"line":277},8,[279],{"type":31,"tag":91,"props":280,"children":281},{"style":114},[282],{"type":36,"value":283},"    }));\n",{"type":31,"tag":91,"props":285,"children":286},{"class":93,"line":25},[287],{"type":31,"tag":91,"props":288,"children":289},{"style":114},[290],{"type":36,"value":291},"  }\n",{"type":31,"tag":91,"props":293,"children":295},{"class":93,"line":294},10,[296],{"type":31,"tag":91,"props":297,"children":298},{"style":114},[299],{"type":36,"value":189},{"type":31,"tag":91,"props":301,"children":303},{"class":93,"line":302},11,[304,309,313,317,321,325],{"type":31,"tag":91,"props":305,"children":306},{"style":137},[307],{"type":36,"value":308},"  return",{"type":31,"tag":91,"props":310,"children":311},{"style":114},[312],{"type":36,"value":236},{"type":31,"tag":91,"props":314,"children":315},{"style":108},[316],{"type":36,"value":241},{"type":31,"tag":91,"props":318,"children":319},{"style":114},[320],{"type":36,"value":117},{"type":31,"tag":91,"props":322,"children":323},{"style":108},[324],{"type":36,"value":250},{"type":31,"tag":91,"props":326,"children":327},{"style":114},[328],{"type":36,"value":255},{"type":31,"tag":91,"props":330,"children":332},{"class":93,"line":331},12,[333,338],{"type":31,"tag":91,"props":334,"children":335},{"style":114},[336],{"type":36,"value":337},"    backend: ",{"type":31,"tag":91,"props":339,"children":340},{"style":120},[341],{"type":36,"value":342},"'legacy-shopify'\n",{"type":31,"tag":91,"props":344,"children":346},{"class":93,"line":345},13,[347],{"type":31,"tag":91,"props":348,"children":349},{"style":114},[350],{"type":36,"value":351},"  }));\n",{"type":31,"tag":91,"props":353,"children":355},{"class":93,"line":354},14,[356],{"type":31,"tag":91,"props":357,"children":358},{"style":114},[359],{"type":36,"value":360},"});\n",{"type":31,"tag":32,"props":362,"children":363},{},[364,366,372],{"type":36,"value":365},"Durante 2-3 semanas se monitorizan Core Web Vitals, tasa de conversión y métricas del funnel de ATC (agregar al carrito). LCP objetivo \u003C2.5s, CLS \u003C0.1, la transición ATC→checkout debe mantenerse dentro de ±2% del sitio heredado. Si en la categoría ",{"type":31,"tag":64,"props":367,"children":369},{"className":368},[],[370],{"type":36,"value":371},"nuevas-llegadas",{"type":36,"value":373}," el abandono en carrito sube de 18% a 24%, hay un problema de rendimiento en la lógica de render headless — probablemente el TBT (Total Blocking Time) de hidratación supera 800ms.",{"type":31,"tag":32,"props":375,"children":376},{},[377,382,384,390,391,397],{"type":31,"tag":51,"props":378,"children":379},{},[380],{"type":36,"value":381},"Segunda fase:",{"type":36,"value":383}," páginas de categoría principal (",{"type":31,"tag":64,"props":385,"children":387},{"className":386},[],[388],{"type":36,"value":389},"\u002Fcategoria\u002Fhombres",{"type":36,"value":128},{"type":31,"tag":64,"props":392,"children":394},{"className":393},[],[395],{"type":36,"value":396},"\u002Fcategoria\u002Fmujeres",{"type":36,"value":398},"). El tráfico es 10 veces mayor, con 2000+ SKU. La estrategia de hidratación cambia: hidratación parcial (similar a Astro Islands) o mejora progresiva (renderizado primero HTML, interactividad lazy).",{"type":31,"tag":32,"props":400,"children":401},{},[402,407],{"type":31,"tag":51,"props":403,"children":404},{},[405],{"type":36,"value":406},"Tercera fase:",{"type":36,"value":408}," páginas de detalle de producto (PDP). Si el 60% del tráfico orgánico viene de PDP, esta fase incluye testing riguroso de paridad en title\u002Fmeta\u002Fstructured data (detalle en la siguiente sección).",{"type":31,"tag":32,"props":410,"children":411},{},[412,417],{"type":31,"tag":51,"props":413,"children":414},{},[415],{"type":36,"value":416},"Fase final:",{"type":36,"value":418}," homepage y checkout. El checkout es el último en migrar porque las integraciones de pago (iyzico, PayTR) y flujos 3D Secure están battle-tested en Shopify nativo; en headless son nuevos. Aunque se use Shopify Checkout API, cualquier error en el renderizado frontend significa pérdida de órdenes.",{"type":31,"tag":39,"props":420,"children":422},{"id":421},"preservación-seo-testing-de-paridad-en-titlemetastructured-data",[423],{"type":36,"value":424},"Preservación SEO: Testing de Paridad en Title\u002FMeta\u002FStructured Data",{"type":31,"tag":32,"props":426,"children":427},{},[428,430,436],{"type":36,"value":429},"La mayor pérdida de tráfico en migración headless viene de SEO porque Google necesita 4-6 semanas para re-crawlear el nuevo renderizado y actualizar rankings. Si los title\u002Fmeta\u002Fstructured data divergen durante este período (por ejemplo, si ",{"type":31,"tag":64,"props":431,"children":433},{"className":432},[],[434],{"type":36,"value":435},"og:price",{"type":36,"value":437}," en el tag no se actualiza dinámicamente), el CTR cae.",{"type":31,"tag":32,"props":439,"children":440},{},[441],{"type":31,"tag":51,"props":442,"children":443},{},[444],{"type":36,"value":445},"Proceso de testing de paridad:",{"type":31,"tag":447,"props":448,"children":449},"ol",{},[450,456,461],{"type":31,"tag":451,"props":452,"children":453},"li",{},[454],{"type":36,"value":455},"Extraer lista de URLs de muestra desde Google Search Console (top 500 landing pages orgánicas)",{"type":31,"tag":451,"props":457,"children":458},{},[459],{"type":36,"value":460},"Renderizar las mismas URLs en el frontend headless",{"type":31,"tag":451,"props":462,"children":463},{},[464,466,472,474,480],{"type":36,"value":465},"Comparar con herramientas diff (",{"type":31,"tag":64,"props":467,"children":469},{"className":468},[],[470],{"type":36,"value":471},"htmldiff",{"type":36,"value":473},", script personalizado con ",{"type":31,"tag":64,"props":475,"children":477},{"className":476},[],[478],{"type":36,"value":479},"cheerio",{"type":36,"value":481},")",{"type":31,"tag":81,"props":483,"children":485},{"className":83,"code":484,"language":85,"meta":14,"style":14},"\u002F\u002F headless-seo-parity.js\nimport fetch from 'node-fetch';\nimport * as cheerio from 'cheerio';\n\nasync function compareSEO(url) {\n  const [legacyHTML, headlessHTML] = await Promise.all([\n    fetch(`https:\u002F\u002Flegacy.example.com${url}`).then(r => r.text()),\n    fetch(`https:\u002F\u002Fheadless.example.com${url}`).then(r => r.text())\n  ]);\n  \n  const legacy$ = cheerio.load(legacyHTML);\n  const headless$ = cheerio.load(headlessHTML);\n  \n  const diffs = {\n    title: legacy$('title').text() !== headless$('title').text(),\n    metaDesc: legacy$('meta[name=\"description\"]').attr('content') !== \n              headless$('meta[name=\"description\"]').attr('content'),\n    canonical: legacy$('link[rel=\"canonical\"]').attr('href') !== \n               headless$('link[rel=\"canonical\"]').attr('href'),\n    jsonLD: legacy$('script[type=\"application\u002Fld+json\"]').html() !== \n            headless$('script[type=\"application\u002Fld+json\"]').html()\n  };\n  \n  return { url, diffs };\n}\n\n\u002F\u002F Ejecutar para top 500 URLs\nconst results = await Promise.all(topUrls.map(compareSEO));\nconst failures = results.filter(r => Object.values(r.diffs).some(d => d));\nconsole.log(`${failures.length} URLs con inconsistencias SEO`);\n",[486],{"type":31,"tag":64,"props":487,"children":488},{"__ignoreMap":14},[489,497,525,560,569,601,662,725,782,790,797,828,857,864,884,950,1004,1042,1093,1130,1173,1203,1212,1220,1233,1242,1250,1259,1308,1385],{"type":31,"tag":91,"props":490,"children":491},{"class":93,"line":94},[492],{"type":31,"tag":91,"props":493,"children":494},{"style":98},[495],{"type":36,"value":496},"\u002F\u002F headless-seo-parity.js\n",{"type":31,"tag":91,"props":498,"children":499},{"class":93,"line":104},[500,505,510,515,520],{"type":31,"tag":91,"props":501,"children":502},{"style":137},[503],{"type":36,"value":504},"import",{"type":31,"tag":91,"props":506,"children":507},{"style":114},[508],{"type":36,"value":509}," fetch ",{"type":31,"tag":91,"props":511,"children":512},{"style":137},[513],{"type":36,"value":514},"from",{"type":31,"tag":91,"props":516,"children":517},{"style":120},[518],{"type":36,"value":519}," 'node-fetch'",{"type":31,"tag":91,"props":521,"children":522},{"style":114},[523],{"type":36,"value":524},";\n",{"type":31,"tag":91,"props":526,"children":527},{"class":93,"line":148},[528,532,537,542,547,551,556],{"type":31,"tag":91,"props":529,"children":530},{"style":137},[531],{"type":36,"value":504},{"type":31,"tag":91,"props":533,"children":534},{"style":157},[535],{"type":36,"value":536}," *",{"type":31,"tag":91,"props":538,"children":539},{"style":137},[540],{"type":36,"value":541}," as",{"type":31,"tag":91,"props":543,"children":544},{"style":114},[545],{"type":36,"value":546}," cheerio ",{"type":31,"tag":91,"props":548,"children":549},{"style":137},[550],{"type":36,"value":514},{"type":31,"tag":91,"props":552,"children":553},{"style":120},[554],{"type":36,"value":555}," 'cheerio'",{"type":31,"tag":91,"props":557,"children":558},{"style":114},[559],{"type":36,"value":524},{"type":31,"tag":91,"props":561,"children":562},{"class":93,"line":183},[563],{"type":31,"tag":91,"props":564,"children":566},{"emptyLinePlaceholder":565},true,[567],{"type":36,"value":568},"\n",{"type":31,"tag":91,"props":570,"children":571},{"class":93,"line":192},[572,577,582,587,591,596],{"type":31,"tag":91,"props":573,"children":574},{"style":137},[575],{"type":36,"value":576},"async",{"type":31,"tag":91,"props":578,"children":579},{"style":137},[580],{"type":36,"value":581}," function",{"type":31,"tag":91,"props":583,"children":584},{"style":108},[585],{"type":36,"value":586}," compareSEO",{"type":31,"tag":91,"props":588,"children":589},{"style":114},[590],{"type":36,"value":117},{"type":31,"tag":91,"props":592,"children":593},{"style":131},[594],{"type":36,"value":595},"url",{"type":31,"tag":91,"props":597,"children":598},{"style":114},[599],{"type":36,"value":600},") {\n",{"type":31,"tag":91,"props":602,"children":603},{"class":93,"line":225},[604,608,613,618,622,627,632,637,642,647,652,657],{"type":31,"tag":91,"props":605,"children":606},{"style":137},[607],{"type":36,"value":154},{"type":31,"tag":91,"props":609,"children":610},{"style":114},[611],{"type":36,"value":612}," [",{"type":31,"tag":91,"props":614,"children":615},{"style":157},[616],{"type":36,"value":617},"legacyHTML",{"type":31,"tag":91,"props":619,"children":620},{"style":114},[621],{"type":36,"value":128},{"type":31,"tag":91,"props":623,"children":624},{"style":157},[625],{"type":36,"value":626},"headlessHTML",{"type":31,"tag":91,"props":628,"children":629},{"style":114},[630],{"type":36,"value":631},"] ",{"type":31,"tag":91,"props":633,"children":634},{"style":137},[635],{"type":36,"value":636},"=",{"type":31,"tag":91,"props":638,"children":639},{"style":137},[640],{"type":36,"value":641}," await",{"type":31,"tag":91,"props":643,"children":644},{"style":157},[645],{"type":36,"value":646}," Promise",{"type":31,"tag":91,"props":648,"children":649},{"style":114},[650],{"type":36,"value":651},".",{"type":31,"tag":91,"props":653,"children":654},{"style":108},[655],{"type":36,"value":656},"all",{"type":31,"tag":91,"props":658,"children":659},{"style":114},[660],{"type":36,"value":661},"([\n",{"type":31,"tag":91,"props":663,"children":664},{"class":93,"line":258},[665,670,674,679,683,688,693,698,702,707,711,716,720],{"type":31,"tag":91,"props":666,"children":667},{"style":108},[668],{"type":36,"value":669},"    fetch",{"type":31,"tag":91,"props":671,"children":672},{"style":114},[673],{"type":36,"value":117},{"type":31,"tag":91,"props":675,"children":676},{"style":120},[677],{"type":36,"value":678},"`https:\u002F\u002Flegacy.example.com${",{"type":31,"tag":91,"props":680,"children":681},{"style":114},[682],{"type":36,"value":595},{"type":31,"tag":91,"props":684,"children":685},{"style":120},[686],{"type":36,"value":687},"}`",{"type":31,"tag":91,"props":689,"children":690},{"style":114},[691],{"type":36,"value":692},").",{"type":31,"tag":91,"props":694,"children":695},{"style":108},[696],{"type":36,"value":697},"then",{"type":31,"tag":91,"props":699,"children":700},{"style":114},[701],{"type":36,"value":117},{"type":31,"tag":91,"props":703,"children":704},{"style":131},[705],{"type":36,"value":706},"r",{"type":31,"tag":91,"props":708,"children":709},{"style":137},[710],{"type":36,"value":140},{"type":31,"tag":91,"props":712,"children":713},{"style":114},[714],{"type":36,"value":715}," r.",{"type":31,"tag":91,"props":717,"children":718},{"style":108},[719],{"type":36,"value":36},{"type":31,"tag":91,"props":721,"children":722},{"style":114},[723],{"type":36,"value":724},"()),\n",{"type":31,"tag":91,"props":726,"children":727},{"class":93,"line":277},[728,732,736,741,745,749,753,757,761,765,769,773,777],{"type":31,"tag":91,"props":729,"children":730},{"style":108},[731],{"type":36,"value":669},{"type":31,"tag":91,"props":733,"children":734},{"style":114},[735],{"type":36,"value":117},{"type":31,"tag":91,"props":737,"children":738},{"style":120},[739],{"type":36,"value":740},"`https:\u002F\u002Fheadless.example.com${",{"type":31,"tag":91,"props":742,"children":743},{"style":114},[744],{"type":36,"value":595},{"type":31,"tag":91,"props":746,"children":747},{"style":120},[748],{"type":36,"value":687},{"type":31,"tag":91,"props":750,"children":751},{"style":114},[752],{"type":36,"value":692},{"type":31,"tag":91,"props":754,"children":755},{"style":108},[756],{"type":36,"value":697},{"type":31,"tag":91,"props":758,"children":759},{"style":114},[760],{"type":36,"value":117},{"type":31,"tag":91,"props":762,"children":763},{"style":131},[764],{"type":36,"value":706},{"type":31,"tag":91,"props":766,"children":767},{"style":137},[768],{"type":36,"value":140},{"type":31,"tag":91,"props":770,"children":771},{"style":114},[772],{"type":36,"value":715},{"type":31,"tag":91,"props":774,"children":775},{"style":108},[776],{"type":36,"value":36},{"type":31,"tag":91,"props":778,"children":779},{"style":114},[780],{"type":36,"value":781},"())\n",{"type":31,"tag":91,"props":783,"children":784},{"class":93,"line":25},[785],{"type":31,"tag":91,"props":786,"children":787},{"style":114},[788],{"type":36,"value":789},"  ]);\n",{"type":31,"tag":91,"props":791,"children":792},{"class":93,"line":294},[793],{"type":31,"tag":91,"props":794,"children":795},{"style":114},[796],{"type":36,"value":189},{"type":31,"tag":91,"props":798,"children":799},{"class":93,"line":302},[800,804,809,813,818,823],{"type":31,"tag":91,"props":801,"children":802},{"style":137},[803],{"type":36,"value":154},{"type":31,"tag":91,"props":805,"children":806},{"style":157},[807],{"type":36,"value":808}," legacy$",{"type":31,"tag":91,"props":810,"children":811},{"style":137},[812],{"type":36,"value":165},{"type":31,"tag":91,"props":814,"children":815},{"style":114},[816],{"type":36,"value":817}," cheerio.",{"type":31,"tag":91,"props":819,"children":820},{"style":108},[821],{"type":36,"value":822},"load",{"type":31,"tag":91,"props":824,"children":825},{"style":114},[826],{"type":36,"value":827},"(legacyHTML);\n",{"type":31,"tag":91,"props":829,"children":830},{"class":93,"line":331},[831,835,840,844,848,852],{"type":31,"tag":91,"props":832,"children":833},{"style":137},[834],{"type":36,"value":154},{"type":31,"tag":91,"props":836,"children":837},{"style":157},[838],{"type":36,"value":839}," headless$",{"type":31,"tag":91,"props":841,"children":842},{"style":137},[843],{"type":36,"value":165},{"type":31,"tag":91,"props":845,"children":846},{"style":114},[847],{"type":36,"value":817},{"type":31,"tag":91,"props":849,"children":850},{"style":108},[851],{"type":36,"value":822},{"type":31,"tag":91,"props":853,"children":854},{"style":114},[855],{"type":36,"value":856},"(headlessHTML);\n",{"type":31,"tag":91,"props":858,"children":859},{"class":93,"line":345},[860],{"type":31,"tag":91,"props":861,"children":862},{"style":114},[863],{"type":36,"value":189},{"type":31,"tag":91,"props":865,"children":866},{"class":93,"line":354},[867,871,876,880],{"type":31,"tag":91,"props":868,"children":869},{"style":137},[870],{"type":36,"value":154},{"type":31,"tag":91,"props":872,"children":873},{"style":157},[874],{"type":36,"value":875}," diffs",{"type":31,"tag":91,"props":877,"children":878},{"style":137},[879],{"type":36,"value":165},{"type":31,"tag":91,"props":881,"children":882},{"style":114},[883],{"type":36,"value":145},{"type":31,"tag":91,"props":885,"children":887},{"class":93,"line":886},15,[888,893,898,902,907,911,915,920,925,929,933,937,941,945],{"type":31,"tag":91,"props":889,"children":890},{"style":114},[891],{"type":36,"value":892},"    title: ",{"type":31,"tag":91,"props":894,"children":895},{"style":108},[896],{"type":36,"value":897},"legacy$",{"type":31,"tag":91,"props":899,"children":900},{"style":114},[901],{"type":36,"value":117},{"type":31,"tag":91,"props":903,"children":904},{"style":120},[905],{"type":36,"value":906},"'title'",{"type":31,"tag":91,"props":908,"children":909},{"style":114},[910],{"type":36,"value":692},{"type":31,"tag":91,"props":912,"children":913},{"style":108},[914],{"type":36,"value":36},{"type":31,"tag":91,"props":916,"children":917},{"style":114},[918],{"type":36,"value":919},"() ",{"type":31,"tag":91,"props":921,"children":922},{"style":137},[923],{"type":36,"value":924},"!==",{"type":31,"tag":91,"props":926,"children":927},{"style":108},[928],{"type":36,"value":839},{"type":31,"tag":91,"props":930,"children":931},{"style":114},[932],{"type":36,"value":117},{"type":31,"tag":91,"props":934,"children":935},{"style":120},[936],{"type":36,"value":906},{"type":31,"tag":91,"props":938,"children":939},{"style":114},[940],{"type":36,"value":692},{"type":31,"tag":91,"props":942,"children":943},{"style":108},[944],{"type":36,"value":36},{"type":31,"tag":91,"props":946,"children":947},{"style":114},[948],{"type":36,"value":949},"(),\n",{"type":31,"tag":91,"props":951,"children":953},{"class":93,"line":952},16,[954,959,963,967,972,976,981,985,990,995,999],{"type":31,"tag":91,"props":955,"children":956},{"style":114},[957],{"type":36,"value":958},"    metaDesc: ",{"type":31,"tag":91,"props":960,"children":961},{"style":108},[962],{"type":36,"value":897},{"type":31,"tag":91,"props":964,"children":965},{"style":114},[966],{"type":36,"value":117},{"type":31,"tag":91,"props":968,"children":969},{"style":120},[970],{"type":36,"value":971},"'meta[name=\"description\"]'",{"type":31,"tag":91,"props":973,"children":974},{"style":114},[975],{"type":36,"value":692},{"type":31,"tag":91,"props":977,"children":978},{"style":108},[979],{"type":36,"value":980},"attr",{"type":31,"tag":91,"props":982,"children":983},{"style":114},[984],{"type":36,"value":117},{"type":31,"tag":91,"props":986,"children":987},{"style":120},[988],{"type":36,"value":989},"'content'",{"type":31,"tag":91,"props":991,"children":992},{"style":114},[993],{"type":36,"value":994},") ",{"type":31,"tag":91,"props":996,"children":997},{"style":137},[998],{"type":36,"value":924},{"type":31,"tag":91,"props":1000,"children":1001},{"style":114},[1002],{"type":36,"value":1003}," \n",{"type":31,"tag":91,"props":1005,"children":1007},{"class":93,"line":1006},17,[1008,1013,1017,1021,1025,1029,1033,1037],{"type":31,"tag":91,"props":1009,"children":1010},{"style":108},[1011],{"type":36,"value":1012},"              headless$",{"type":31,"tag":91,"props":1014,"children":1015},{"style":114},[1016],{"type":36,"value":117},{"type":31,"tag":91,"props":1018,"children":1019},{"style":120},[1020],{"type":36,"value":971},{"type":31,"tag":91,"props":1022,"children":1023},{"style":114},[1024],{"type":36,"value":692},{"type":31,"tag":91,"props":1026,"children":1027},{"style":108},[1028],{"type":36,"value":980},{"type":31,"tag":91,"props":1030,"children":1031},{"style":114},[1032],{"type":36,"value":117},{"type":31,"tag":91,"props":1034,"children":1035},{"style":120},[1036],{"type":36,"value":989},{"type":31,"tag":91,"props":1038,"children":1039},{"style":114},[1040],{"type":36,"value":1041},"),\n",{"type":31,"tag":91,"props":1043,"children":1045},{"class":93,"line":1044},18,[1046,1051,1055,1059,1064,1068,1072,1076,1081,1085,1089],{"type":31,"tag":91,"props":1047,"children":1048},{"style":114},[1049],{"type":36,"value":1050},"    canonical: ",{"type":31,"tag":91,"props":1052,"children":1053},{"style":108},[1054],{"type":36,"value":897},{"type":31,"tag":91,"props":1056,"children":1057},{"style":114},[1058],{"type":36,"value":117},{"type":31,"tag":91,"props":1060,"children":1061},{"style":120},[1062],{"type":36,"value":1063},"'link[rel=\"canonical\"]'",{"type":31,"tag":91,"props":1065,"children":1066},{"style":114},[1067],{"type":36,"value":692},{"type":31,"tag":91,"props":1069,"children":1070},{"style":108},[1071],{"type":36,"value":980},{"type":31,"tag":91,"props":1073,"children":1074},{"style":114},[1075],{"type":36,"value":117},{"type":31,"tag":91,"props":1077,"children":1078},{"style":120},[1079],{"type":36,"value":1080},"'href'",{"type":31,"tag":91,"props":1082,"children":1083},{"style":114},[1084],{"type":36,"value":994},{"type":31,"tag":91,"props":1086,"children":1087},{"style":137},[1088],{"type":36,"value":924},{"type":31,"tag":91,"props":1090,"children":1091},{"style":114},[1092],{"type":36,"value":1003},{"type":31,"tag":91,"props":1094,"children":1096},{"class":93,"line":1095},19,[1097,1102,1106,1110,1114,1118,1122,1126],{"type":31,"tag":91,"props":1098,"children":1099},{"style":108},[1100],{"type":36,"value":1101},"               headless$",{"type":31,"tag":91,"props":1103,"children":1104},{"style":114},[1105],{"type":36,"value":117},{"type":31,"tag":91,"props":1107,"children":1108},{"style":120},[1109],{"type":36,"value":1063},{"type":31,"tag":91,"props":1111,"children":1112},{"style":114},[1113],{"type":36,"value":692},{"type":31,"tag":91,"props":1115,"children":1116},{"style":108},[1117],{"type":36,"value":980},{"type":31,"tag":91,"props":1119,"children":1120},{"style":114},[1121],{"type":36,"value":117},{"type":31,"tag":91,"props":1123,"children":1124},{"style":120},[1125],{"type":36,"value":1080},{"type":31,"tag":91,"props":1127,"children":1128},{"style":114},[1129],{"type":36,"value":1041},{"type":31,"tag":91,"props":1131,"children":1133},{"class":93,"line":1132},20,[1134,1139,1143,1147,1152,1156,1161,1165,1169],{"type":31,"tag":91,"props":1135,"children":1136},{"style":114},[1137],{"type":36,"value":1138},"    jsonLD: ",{"type":31,"tag":91,"props":1140,"children":1141},{"style":108},[1142],{"type":36,"value":897},{"type":31,"tag":91,"props":1144,"children":1145},{"style":114},[1146],{"type":36,"value":117},{"type":31,"tag":91,"props":1148,"children":1149},{"style":120},[1150],{"type":36,"value":1151},"'script[type=\"application\u002Fld+json\"]'",{"type":31,"tag":91,"props":1153,"children":1154},{"style":114},[1155],{"type":36,"value":692},{"type":31,"tag":91,"props":1157,"children":1158},{"style":108},[1159],{"type":36,"value":1160},"html",{"type":31,"tag":91,"props":1162,"children":1163},{"style":114},[1164],{"type":36,"value":919},{"type":31,"tag":91,"props":1166,"children":1167},{"style":137},[1168],{"type":36,"value":924},{"type":31,"tag":91,"props":1170,"children":1171},{"style":114},[1172],{"type":36,"value":1003},{"type":31,"tag":91,"props":1174,"children":1176},{"class":93,"line":1175},21,[1177,1182,1186,1190,1194,1198],{"type":31,"tag":91,"props":1178,"children":1179},{"style":108},[1180],{"type":36,"value":1181},"            headless$",{"type":31,"tag":91,"props":1183,"children":1184},{"style":114},[1185],{"type":36,"value":117},{"type":31,"tag":91,"props":1187,"children":1188},{"style":120},[1189],{"type":36,"value":1151},{"type":31,"tag":91,"props":1191,"children":1192},{"style":114},[1193],{"type":36,"value":692},{"type":31,"tag":91,"props":1195,"children":1196},{"style":108},[1197],{"type":36,"value":1160},{"type":31,"tag":91,"props":1199,"children":1200},{"style":114},[1201],{"type":36,"value":1202},"()\n",{"type":31,"tag":91,"props":1204,"children":1206},{"class":93,"line":1205},22,[1207],{"type":31,"tag":91,"props":1208,"children":1209},{"style":114},[1210],{"type":36,"value":1211},"  };\n",{"type":31,"tag":91,"props":1213,"children":1215},{"class":93,"line":1214},23,[1216],{"type":31,"tag":91,"props":1217,"children":1218},{"style":114},[1219],{"type":36,"value":189},{"type":31,"tag":91,"props":1221,"children":1223},{"class":93,"line":1222},24,[1224,1228],{"type":31,"tag":91,"props":1225,"children":1226},{"style":137},[1227],{"type":36,"value":308},{"type":31,"tag":91,"props":1229,"children":1230},{"style":114},[1231],{"type":36,"value":1232}," { url, diffs };\n",{"type":31,"tag":91,"props":1234,"children":1236},{"class":93,"line":1235},25,[1237],{"type":31,"tag":91,"props":1238,"children":1239},{"style":114},[1240],{"type":36,"value":1241},"}\n",{"type":31,"tag":91,"props":1243,"children":1245},{"class":93,"line":1244},26,[1246],{"type":31,"tag":91,"props":1247,"children":1248},{"emptyLinePlaceholder":565},[1249],{"type":36,"value":568},{"type":31,"tag":91,"props":1251,"children":1253},{"class":93,"line":1252},27,[1254],{"type":31,"tag":91,"props":1255,"children":1256},{"style":98},[1257],{"type":36,"value":1258},"\u002F\u002F Ejecutar para top 500 URLs\n",{"type":31,"tag":91,"props":1260,"children":1262},{"class":93,"line":1261},28,[1263,1268,1273,1277,1281,1285,1289,1293,1298,1303],{"type":31,"tag":91,"props":1264,"children":1265},{"style":137},[1266],{"type":36,"value":1267},"const",{"type":31,"tag":91,"props":1269,"children":1270},{"style":157},[1271],{"type":36,"value":1272}," results",{"type":31,"tag":91,"props":1274,"children":1275},{"style":137},[1276],{"type":36,"value":165},{"type":31,"tag":91,"props":1278,"children":1279},{"style":137},[1280],{"type":36,"value":641},{"type":31,"tag":91,"props":1282,"children":1283},{"style":157},[1284],{"type":36,"value":646},{"type":31,"tag":91,"props":1286,"children":1287},{"style":114},[1288],{"type":36,"value":651},{"type":31,"tag":91,"props":1290,"children":1291},{"style":108},[1292],{"type":36,"value":656},{"type":31,"tag":91,"props":1294,"children":1295},{"style":114},[1296],{"type":36,"value":1297},"(topUrls.",{"type":31,"tag":91,"props":1299,"children":1300},{"style":108},[1301],{"type":36,"value":1302},"map",{"type":31,"tag":91,"props":1304,"children":1305},{"style":114},[1306],{"type":36,"value":1307},"(compareSEO));\n",{"type":31,"tag":91,"props":1309,"children":1311},{"class":93,"line":1310},29,[1312,1316,1321,1325,1330,1335,1339,1343,1347,1352,1357,1362,1367,1371,1376,1380],{"type":31,"tag":91,"props":1313,"children":1314},{"style":137},[1315],{"type":36,"value":1267},{"type":31,"tag":91,"props":1317,"children":1318},{"style":157},[1319],{"type":36,"value":1320}," failures",{"type":31,"tag":91,"props":1322,"children":1323},{"style":137},[1324],{"type":36,"value":165},{"type":31,"tag":91,"props":1326,"children":1327},{"style":114},[1328],{"type":36,"value":1329}," results.",{"type":31,"tag":91,"props":1331,"children":1332},{"style":108},[1333],{"type":36,"value":1334},"filter",{"type":31,"tag":91,"props":1336,"children":1337},{"style":114},[1338],{"type":36,"value":117},{"type":31,"tag":91,"props":1340,"children":1341},{"style":131},[1342],{"type":36,"value":706},{"type":31,"tag":91,"props":1344,"children":1345},{"style":137},[1346],{"type":36,"value":140},{"type":31,"tag":91,"props":1348,"children":1349},{"style":114},[1350],{"type":36,"value":1351}," Object.",{"type":31,"tag":91,"props":1353,"children":1354},{"style":108},[1355],{"type":36,"value":1356},"values",{"type":31,"tag":91,"props":1358,"children":1359},{"style":114},[1360],{"type":36,"value":1361},"(r.diffs).",{"type":31,"tag":91,"props":1363,"children":1364},{"style":108},[1365],{"type":36,"value":1366},"some",{"type":31,"tag":91,"props":1368,"children":1369},{"style":114},[1370],{"type":36,"value":117},{"type":31,"tag":91,"props":1372,"children":1373},{"style":131},[1374],{"type":36,"value":1375},"d",{"type":31,"tag":91,"props":1377,"children":1378},{"style":137},[1379],{"type":36,"value":140},{"type":31,"tag":91,"props":1381,"children":1382},{"style":114},[1383],{"type":36,"value":1384}," d));\n",{"type":31,"tag":91,"props":1386,"children":1388},{"class":93,"line":1387},30,[1389,1394,1399,1403,1408,1413,1417,1422,1427],{"type":31,"tag":91,"props":1390,"children":1391},{"style":114},[1392],{"type":36,"value":1393},"console.",{"type":31,"tag":91,"props":1395,"children":1396},{"style":108},[1397],{"type":36,"value":1398},"log",{"type":31,"tag":91,"props":1400,"children":1401},{"style":114},[1402],{"type":36,"value":117},{"type":31,"tag":91,"props":1404,"children":1405},{"style":120},[1406],{"type":36,"value":1407},"`${",{"type":31,"tag":91,"props":1409,"children":1410},{"style":114},[1411],{"type":36,"value":1412},"failures",{"type":31,"tag":91,"props":1414,"children":1415},{"style":120},[1416],{"type":36,"value":651},{"type":31,"tag":91,"props":1418,"children":1419},{"style":157},[1420],{"type":36,"value":1421},"length",{"type":31,"tag":91,"props":1423,"children":1424},{"style":120},[1425],{"type":36,"value":1426},"} URLs con inconsistencias SEO`",{"type":31,"tag":91,"props":1428,"children":1429},{"style":114},[1430],{"type":36,"value":1431},");\n",{"type":31,"tag":32,"props":1433,"children":1434},{},[1435],{"type":36,"value":1436},"Si más del 5% de URLs tiene divergencias, detener la migración. Por ejemplo, si las meta descriptions dinámicas extraídas de metafields de Shopify faltan en la query GraphQL headless, esas 500 páginas pueden perder 12-18% del tráfico orgánico (datos de Search Console 2025).",{"type":31,"tag":32,"props":1438,"children":1439},{},[1440,1445,1447,1453,1455,1461,1463,1469,1471,1477,1479,1485],{"type":31,"tag":51,"props":1441,"children":1442},{},[1443],{"type":36,"value":1444},"Testing de URL canónica:",{"type":36,"value":1446}," En headless frecuentemente la estructura de path cambia de ",{"type":31,"tag":64,"props":1448,"children":1450},{"className":1449},[],[1451],{"type":36,"value":1452},"\u002Fproducts\u002F{handle}",{"type":36,"value":1454}," a ",{"type":31,"tag":64,"props":1456,"children":1458},{"className":1457},[],[1459],{"type":36,"value":1460},"\u002Fp\u002F{id}",{"type":36,"value":1462}," por optimización de routing. En este caso son obligatorios 301 redirects + canonical tags. Test: ",{"type":31,"tag":64,"props":1464,"children":1466},{"className":1465},[],[1467],{"type":36,"value":1468},"curl -I https:\u002F\u002Fheadless.example.com\u002Fold-path",{"type":36,"value":1470}," → debe redirigir con 301 a ",{"type":31,"tag":64,"props":1472,"children":1474},{"className":1473},[],[1475],{"type":36,"value":1476},"\u002Fnew-path",{"type":36,"value":1478}," y contener ",{"type":31,"tag":64,"props":1480,"children":1482},{"className":1481},[],[1483],{"type":36,"value":1484},"\u003Clink rel=\"canonical\" href=\"\u002Fnew-path\">",{"type":36,"value":651},{"type":31,"tag":39,"props":1487,"children":1489},{"id":1488},"análisis-de-pico-de-abandono-en-carrito",[1490],{"type":36,"value":1491},"Análisis de Pico de Abandono en Carrito",{"type":31,"tag":32,"props":1493,"children":1494},{},[1495],{"type":36,"value":1496},"El problema más común post-migración headless: el usuario hace clic en \"Agregar al carrito\", no ocurre nada o el spinner carga durante 3 segundos y falla. Usualmente causado por límites de rate-limit en Shopify Storefront API (50 requests\u002Fsegundo por defecto, 100 en burst).",{"type":31,"tag":32,"props":1498,"children":1499},{},[1500],{"type":31,"tag":51,"props":1501,"children":1502},{},[1503],{"type":36,"value":1504},"Setup de monitoreo:",{"type":31,"tag":81,"props":1506,"children":1508},{"className":83,"code":1507,"language":85,"meta":14,"style":14},"\u002F\u002F Tracking de eventos ATC — aplicación headless\nasync function addToCart(variantId, quantity) {\n  const startTime = performance.now();\n  \n  try {\n    const response = await fetch('\u002Fapi\u002Fcart\u002Fadd', {\n      method: 'POST',\n      body: JSON.stringify({ variantId, quantity })\n    });\n    \n    const duration = performance.now() - startTime;\n    \n    \u002F\u002F RUM beacon\n    navigator.sendBeacon('\u002Fanalytics\u002Fatc', JSON.stringify({\n      success: response.ok,\n      duration,\n      variantId,\n      timestamp: Date.now()\n    }));\n    \n    if (!response.ok) {\n      \u002F\u002F En caso de error, mostrar UI alternativa\n      showErrorToast('Error al actualizar carrito, intenta nuevamente');\n    }\n  } catch (err) {\n    \u002F\u002F Network timeout — crítico\n    reportError('ATC_TIMEOUT', { variantId, error: err.message });\n  }\n}\n",[1509],{"type":31,"tag":64,"props":1510,"children":1511},{"__ignoreMap":14},[1512,1520,1558,1589,1596,1608,1648,1666,1693,1701,1709,1747,1754,1762,1805,1813,1821,1829,1845,1852,1859,1882,1890,1911,1919,1937,1945,1967,1974],{"type":31,"tag":91,"props":1513,"children":1514},{"class":93,"line":94},[1515],{"type":31,"tag":91,"props":1516,"children":1517},{"style":98},[1518],{"type":36,"value":1519},"\u002F\u002F Tracking de eventos ATC — aplicación headless\n",{"type":31,"tag":91,"props":1521,"children":1522},{"class":93,"line":104},[1523,1527,1531,1536,1540,1545,1549,1554],{"type":31,"tag":91,"props":1524,"children":1525},{"style":137},[1526],{"type":36,"value":576},{"type":31,"tag":91,"props":1528,"children":1529},{"style":137},[1530],{"type":36,"value":581},{"type":31,"tag":91,"props":1532,"children":1533},{"style":108},[1534],{"type":36,"value":1535}," addToCart",{"type":31,"tag":91,"props":1537,"children":1538},{"style":114},[1539],{"type":36,"value":117},{"type":31,"tag":91,"props":1541,"children":1542},{"style":131},[1543],{"type":36,"value":1544},"variantId",{"type":31,"tag":91,"props":1546,"children":1547},{"style":114},[1548],{"type":36,"value":128},{"type":31,"tag":91,"props":1550,"children":1551},{"style":131},[1552],{"type":36,"value":1553},"quantity",{"type":31,"tag":91,"props":1555,"children":1556},{"style":114},[1557],{"type":36,"value":600},{"type":31,"tag":91,"props":1559,"children":1560},{"class":93,"line":148},[1561,1565,1570,1574,1579,1584],{"type":31,"tag":91,"props":1562,"children":1563},{"style":137},[1564],{"type":36,"value":154},{"type":31,"tag":91,"props":1566,"children":1567},{"style":157},[1568],{"type":36,"value":1569}," startTime",{"type":31,"tag":91,"props":1571,"children":1572},{"style":137},[1573],{"type":36,"value":165},{"type":31,"tag":91,"props":1575,"children":1576},{"style":114},[1577],{"type":36,"value":1578}," performance.",{"type":31,"tag":91,"props":1580,"children":1581},{"style":108},[1582],{"type":36,"value":1583},"now",{"type":31,"tag":91,"props":1585,"children":1586},{"style":114},[1587],{"type":36,"value":1588},"();\n",{"type":31,"tag":91,"props":1590,"children":1591},{"class":93,"line":183},[1592],{"type":31,"tag":91,"props":1593,"children":1594},{"style":114},[1595],{"type":36,"value":189},{"type":31,"tag":91,"props":1597,"children":1598},{"class":93,"line":192},[1599,1604],{"type":31,"tag":91,"props":1600,"children":1601},{"style":137},[1602],{"type":36,"value":1603},"  try",{"type":31,"tag":91,"props":1605,"children":1606},{"style":114},[1607],{"type":36,"value":145},{"type":31,"tag":91,"props":1609,"children":1610},{"class":93,"line":225},[1611,1616,1621,1625,1629,1634,1638,1643],{"type":31,"tag":91,"props":1612,"children":1613},{"style":137},[1614],{"type":36,"value":1615},"    const",{"type":31,"tag":91,"props":1617,"children":1618},{"style":157},[1619],{"type":36,"value":1620}," response",{"type":31,"tag":91,"props":1622,"children":1623},{"style":137},[1624],{"type":36,"value":165},{"type":31,"tag":91,"props":1626,"children":1627},{"style":137},[1628],{"type":36,"value":641},{"type":31,"tag":91,"props":1630,"children":1631},{"style":108},[1632],{"type":36,"value":1633}," fetch",{"type":31,"tag":91,"props":1635,"children":1636},{"style":114},[1637],{"type":36,"value":117},{"type":31,"tag":91,"props":1639,"children":1640},{"style":120},[1641],{"type":36,"value":1642},"'\u002Fapi\u002Fcart\u002Fadd'",{"type":31,"tag":91,"props":1644,"children":1645},{"style":114},[1646],{"type":36,"value":1647},", {\n",{"type":31,"tag":91,"props":1649,"children":1650},{"class":93,"line":258},[1651,1656,1661],{"type":31,"tag":91,"props":1652,"children":1653},{"style":114},[1654],{"type":36,"value":1655},"      method: ",{"type":31,"tag":91,"props":1657,"children":1658},{"style":120},[1659],{"type":36,"value":1660},"'POST'",{"type":31,"tag":91,"props":1662,"children":1663},{"style":114},[1664],{"type":36,"value":1665},",\n",{"type":31,"tag":91,"props":1667,"children":1668},{"class":93,"line":277},[1669,1674,1679,1683,1688],{"type":31,"tag":91,"props":1670,"children":1671},{"style":114},[1672],{"type":36,"value":1673},"      body: ",{"type":31,"tag":91,"props":1675,"children":1676},{"style":157},[1677],{"type":36,"value":1678},"JSON",{"type":31,"tag":91,"props":1680,"children":1681},{"style":114},[1682],{"type":36,"value":651},{"type":31,"tag":91,"props":1684,"children":1685},{"style":108},[1686],{"type":36,"value":1687},"stringify",{"type":31,"tag":91,"props":1689,"children":1690},{"style":114},[1691],{"type":36,"value":1692},"({ variantId, quantity })\n",{"type":31,"tag":91,"props":1694,"children":1695},{"class":93,"line":25},[1696],{"type":31,"tag":91,"props":1697,"children":1698},{"style":114},[1699],{"type":36,"value":1700},"    });\n",{"type":31,"tag":91,"props":1702,"children":1703},{"class":93,"line":294},[1704],{"type":31,"tag":91,"props":1705,"children":1706},{"style":114},[1707],{"type":36,"value":1708},"    \n",{"type":31,"tag":91,"props":1710,"children":1711},{"class":93,"line":302},[1712,1716,1721,1725,1729,1733,1737,1742],{"type":31,"tag":91,"props":1713,"children":1714},{"style":137},[1715],{"type":36,"value":1615},{"type":31,"tag":91,"props":1717,"children":1718},{"style":157},[1719],{"type":36,"value":1720}," duration",{"type":31,"tag":91,"props":1722,"children":1723},{"style":137},[1724],{"type":36,"value":165},{"type":31,"tag":91,"props":1726,"children":1727},{"style":114},[1728],{"type":36,"value":1578},{"type":31,"tag":91,"props":1730,"children":1731},{"style":108},[1732],{"type":36,"value":1583},{"type":31,"tag":91,"props":1734,"children":1735},{"style":114},[1736],{"type":36,"value":919},{"type":31,"tag":91,"props":1738,"children":1739},{"style":137},[1740],{"type":36,"value":1741},"-",{"type":31,"tag":91,"props":1743,"children":1744},{"style":114},[1745],{"type":36,"value":1746}," startTime;\n",{"type":31,"tag":91,"props":1748,"children":1749},{"class":93,"line":331},[1750],{"type":31,"tag":91,"props":1751,"children":1752},{"style":114},[1753],{"type":36,"value":1708},{"type":31,"tag":91,"props":1755,"children":1756},{"class":93,"line":345},[1757],{"type":31,"tag":91,"props":1758,"children":1759},{"style":98},[1760],{"type":36,"value":1761},"    \u002F\u002F RUM beacon\n",{"type":31,"tag":91,"props":1763,"children":1764},{"class":93,"line":354},[1765,1770,1775,1779,1784,1788,1792,1796,1800],{"type":31,"tag":91,"props":1766,"children":1767},{"style":114},[1768],{"type":36,"value":1769},"    navigator.",{"type":31,"tag":91,"props":1771,"children":1772},{"style":108},[1773],{"type":36,"value":1774},"sendBeacon",{"type":31,"tag":91,"props":1776,"children":1777},{"style":114},[1778],{"type":36,"value":117},{"type":31,"tag":91,"props":1780,"children":1781},{"style":120},[1782],{"type":36,"value":1783},"'\u002Fanalytics\u002Fatc'",{"type":31,"tag":91,"props":1785,"children":1786},{"style":114},[1787],{"type":36,"value":128},{"type":31,"tag":91,"props":1789,"children":1790},{"style":157},[1791],{"type":36,"value":1678},{"type":31,"tag":91,"props":1793,"children":1794},{"style":114},[1795],{"type":36,"value":651},{"type":31,"tag":91,"props":1797,"children":1798},{"style":108},[1799],{"type":36,"value":1687},{"type":31,"tag":91,"props":1801,"children":1802},{"style":114},[1803],{"type":36,"value":1804},"({\n",{"type":31,"tag":91,"props":1806,"children":1807},{"class":93,"line":886},[1808],{"type":31,"tag":91,"props":1809,"children":1810},{"style":114},[1811],{"type":36,"value":1812},"      success: response.ok,\n",{"type":31,"tag":91,"props":1814,"children":1815},{"class":93,"line":952},[1816],{"type":31,"tag":91,"props":1817,"children":1818},{"style":114},[1819],{"type":36,"value":1820},"      duration,\n",{"type":31,"tag":91,"props":1822,"children":1823},{"class":93,"line":1006},[1824],{"type":31,"tag":91,"props":1825,"children":1826},{"style":114},[1827],{"type":36,"value":1828},"      variantId,\n",{"type":31,"tag":91,"props":1830,"children":1831},{"class":93,"line":1044},[1832,1837,1841],{"type":31,"tag":91,"props":1833,"children":1834},{"style":114},[1835],{"type":36,"value":1836},"      timestamp: Date.",{"type":31,"tag":91,"props":1838,"children":1839},{"style":108},[1840],{"type":36,"value":1583},{"type":31,"tag":91,"props":1842,"children":1843},{"style":114},[1844],{"type":36,"value":1202},{"type":31,"tag":91,"props":1846,"children":1847},{"class":93,"line":1095},[1848],{"type":31,"tag":91,"props":1849,"children":1850},{"style":114},[1851],{"type":36,"value":283},{"type":31,"tag":91,"props":1853,"children":1854},{"class":93,"line":1132},[1855],{"type":31,"tag":91,"props":1856,"children":1857},{"style":114},[1858],{"type":36,"value":1708},{"type":31,"tag":91,"props":1860,"children":1861},{"class":93,"line":1175},[1862,1867,1872,1877],{"type":31,"tag":91,"props":1863,"children":1864},{"style":137},[1865],{"type":36,"value":1866},"    if",{"type":31,"tag":91,"props":1868,"children":1869},{"style":114},[1870],{"type":36,"value":1871}," (",{"type":31,"tag":91,"props":1873,"children":1874},{"style":137},[1875],{"type":36,"value":1876},"!",{"type":31,"tag":91,"props":1878,"children":1879},{"style":114},[1880],{"type":36,"value":1881},"response.ok) {\n",{"type":31,"tag":91,"props":1883,"children":1884},{"class":93,"line":1205},[1885],{"type":31,"tag":91,"props":1886,"children":1887},{"style":98},[1888],{"type":36,"value":1889},"      \u002F\u002F En caso de error, mostrar UI alternativa\n",{"type":31,"tag":91,"props":1891,"children":1892},{"class":93,"line":1214},[1893,1898,1902,1907],{"type":31,"tag":91,"props":1894,"children":1895},{"style":108},[1896],{"type":36,"value":1897},"      showErrorToast",{"type":31,"tag":91,"props":1899,"children":1900},{"style":114},[1901],{"type":36,"value":117},{"type":31,"tag":91,"props":1903,"children":1904},{"style":120},[1905],{"type":36,"value":1906},"'Error al actualizar carrito, intenta nuevamente'",{"type":31,"tag":91,"props":1908,"children":1909},{"style":114},[1910],{"type":36,"value":1431},{"type":31,"tag":91,"props":1912,"children":1913},{"class":93,"line":1222},[1914],{"type":31,"tag":91,"props":1915,"children":1916},{"style":114},[1917],{"type":36,"value":1918},"    }\n",{"type":31,"tag":91,"props":1920,"children":1921},{"class":93,"line":1235},[1922,1927,1932],{"type":31,"tag":91,"props":1923,"children":1924},{"style":114},[1925],{"type":36,"value":1926},"  } ",{"type":31,"tag":91,"props":1928,"children":1929},{"style":137},[1930],{"type":36,"value":1931},"catch",{"type":31,"tag":91,"props":1933,"children":1934},{"style":114},[1935],{"type":36,"value":1936}," (err) {\n",{"type":31,"tag":91,"props":1938,"children":1939},{"class":93,"line":1244},[1940],{"type":31,"tag":91,"props":1941,"children":1942},{"style":98},[1943],{"type":36,"value":1944},"    \u002F\u002F Network timeout — crítico\n",{"type":31,"tag":91,"props":1946,"children":1947},{"class":93,"line":1252},[1948,1953,1957,1962],{"type":31,"tag":91,"props":1949,"children":1950},{"style":108},[1951],{"type":36,"value":1952},"    reportError",{"type":31,"tag":91,"props":1954,"children":1955},{"style":114},[1956],{"type":36,"value":117},{"type":31,"tag":91,"props":1958,"children":1959},{"style":120},[1960],{"type":36,"value":1961},"'ATC_TIMEOUT'",{"type":31,"tag":91,"props":1963,"children":1964},{"style":114},[1965],{"type":36,"value":1966},", { variantId, error: err.message });\n",{"type":31,"tag":91,"props":1968,"children":1969},{"class":93,"line":1261},[1970],{"type":31,"tag":91,"props":1971,"children":1972},{"style":114},[1973],{"type":36,"value":291},{"type":31,"tag":91,"props":1975,"children":1976},{"class":93,"line":1310},[1977],{"type":31,"tag":91,"props":1978,"children":1979},{"style":114},[1980],{"type":36,"value":1241},{"type":31,"tag":32,"props":1982,"children":1983},{},[1984,1989,1991,1997],{"type":31,"tag":51,"props":1985,"children":1986},{},[1987],{"type":36,"value":1988},"Análisis:",{"type":36,"value":1990}," En dashboard de Grafana\u002FDatadog, si ",{"type":31,"tag":64,"props":1992,"children":1994},{"className":1993},[],[1995],{"type":36,"value":1996},"atc_duration_p95",{"type":36,"value":1998}," supera 2000ms hay problema. Posibles causas:",{"type":31,"tag":2000,"props":2001,"children":2002},"ul",{},[2003,2013,2030],{"type":31,"tag":451,"props":2004,"children":2005},{},[2006,2011],{"type":31,"tag":51,"props":2007,"children":2008},{},[2009],{"type":36,"value":2010},"Latencia API:",{"type":36,"value":2012}," Shopify Storefront API responde en >800ms. Solución: cachear estado del carrito en cliente (actualización optimista, sincronización en background).",{"type":31,"tag":451,"props":2014,"children":2015},{},[2016,2021,2023,2029],{"type":31,"tag":51,"props":2017,"children":2018},{},[2019],{"type":36,"value":2020},"Retraso en hidratación:",{"type":36,"value":2022}," Si el usuario hace clic antes de que React termine la hidratación, los event handlers no están adjuntos. Solución: SSR + mejora progresiva, dar interactividad inmediata al botón con ",{"type":31,"tag":64,"props":2024,"children":2026},{"className":2025},[],[2027],{"type":36,"value":2028},"onLoad",{"type":36,"value":651},{"type":31,"tag":451,"props":2031,"children":2032},{},[2033,2038],{"type":31,"tag":51,"props":2034,"children":2035},{},[2036],{"type":36,"value":2037},"Cola de red:",{"type":36,"value":2039}," Usuarios en 3G cargan bundle muy grande (>500kb), el parse de JS bloquea. Solución: code splitting, CSS crítico inline.",{"type":31,"tag":32,"props":2041,"children":2042},{},[2043],{"type":36,"value":2044},"En una migración tuvimos tasa de éxito en ATC caer de 96% a 89%. El análisis RUM mostró que en móvil la hidratación demoraba 4.2 segundos porque la app Hydrogen cargaba 780kb de JS. Con lazy load + splitting por ruta, redujimos a 210kb y el éxito volvió a 95%.",{"type":31,"tag":39,"props":2046,"children":2048},{"id":2047},"mitigación-de-riesgos-feature-flags-y-rollback-instantáneo",[2049],{"type":36,"value":2050},"Mitigación de Riesgos: Feature Flags y Rollback Instantáneo",{"type":31,"tag":32,"props":2052,"children":2053},{},[2054],{"type":36,"value":2055},"Sin sistema de feature flags, la migración headless es imposible. Con LaunchDarkly, Statsig o servicio personalizado basado en Redis, cada grupo de usuarios puede tener headless activado\u002Fdesactivado.",{"type":31,"tag":81,"props":2057,"children":2059},{"className":83,"code":2058,"language":85,"meta":14,"style":14},"\u002F\u002F Feature flag check — middleware de borde\nexport async function middleware(request) {\n  const userId = request.cookies.get('user_id');\n  const country = request.geo.country;\n  \n  const headlessEnabled = await checkFlag('headless-rollout', {\n    userId,\n    country,\n    trafficPercentage: 10 \u002F\u002F Primeros 10% de tráfico\n  });\n  \n  if (headlessEnabled) {\n    return NextResponse.rewrite('\u002Fheadless-app');\n  }\n  \n  return NextResponse.rewrite('\u002Flegacy-shopify');\n}\n",[2060],{"type":31,"tag":64,"props":2061,"children":2062},{"__ignoreMap":14},[2063,2071,2106,2145,2166,2173,2211,2219,2227,2245,2253,2260,2272,2302,2309,2316,2344],{"type":31,"tag":91,"props":2064,"children":2065},{"class":93,"line":94},[2066],{"type":31,"tag":91,"props":2067,"children":2068},{"style":98},[2069],{"type":36,"value":2070},"\u002F\u002F Feature flag check — middleware de borde\n",{"type":31,"tag":91,"props":2072,"children":2073},{"class":93,"line":104},[2074,2079,2084,2088,2093,2097,2102],{"type":31,"tag":91,"props":2075,"children":2076},{"style":137},[2077],{"type":36,"value":2078},"export",{"type":31,"tag":91,"props":2080,"children":2081},{"style":137},[2082],{"type":36,"value":2083}," async",{"type":31,"tag":91,"props":2085,"children":2086},{"style":137},[2087],{"type":36,"value":581},{"type":31,"tag":91,"props":2089,"children":2090},{"style":108},[2091],{"type":36,"value":2092}," middleware",{"type":31,"tag":91,"props":2094,"children":2095},{"style":114},[2096],{"type":36,"value":117},{"type":31,"tag":91,"props":2098,"children":2099},{"style":131},[2100],{"type":36,"value":2101},"request",{"type":31,"tag":91,"props":2103,"children":2104},{"style":114},[2105],{"type":36,"value":600},{"type":31,"tag":91,"props":2107,"children":2108},{"class":93,"line":148},[2109,2113,2118,2122,2127,2132,2136,2141],{"type":31,"tag":91,"props":2110,"children":2111},{"style":137},[2112],{"type":36,"value":154},{"type":31,"tag":91,"props":2114,"children":2115},{"style":157},[2116],{"type":36,"value":2117}," userId",{"type":31,"tag":91,"props":2119,"children":2120},{"style":137},[2121],{"type":36,"value":165},{"type":31,"tag":91,"props":2123,"children":2124},{"style":114},[2125],{"type":36,"value":2126}," request.cookies.",{"type":31,"tag":91,"props":2128,"children":2129},{"style":108},[2130],{"type":36,"value":2131},"get",{"type":31,"tag":91,"props":2133,"children":2134},{"style":114},[2135],{"type":36,"value":117},{"type":31,"tag":91,"props":2137,"children":2138},{"style":120},[2139],{"type":36,"value":2140},"'user_id'",{"type":31,"tag":91,"props":2142,"children":2143},{"style":114},[2144],{"type":36,"value":1431},{"type":31,"tag":91,"props":2146,"children":2147},{"class":93,"line":183},[2148,2152,2157,2161],{"type":31,"tag":91,"props":2149,"children":2150},{"style":137},[2151],{"type":36,"value":154},{"type":31,"tag":91,"props":2153,"children":2154},{"style":157},[2155],{"type":36,"value":2156}," country",{"type":31,"tag":91,"props":2158,"children":2159},{"style":137},[2160],{"type":36,"value":165},{"type":31,"tag":91,"props":2162,"children":2163},{"style":114},[2164],{"type":36,"value":2165}," request.geo.country;\n",{"type":31,"tag":91,"props":2167,"children":2168},{"class":93,"line":192},[2169],{"type":31,"tag":91,"props":2170,"children":2171},{"style":114},[2172],{"type":36,"value":189},{"type":31,"tag":91,"props":2174,"children":2175},{"class":93,"line":225},[2176,2180,2185,2189,2193,2198,2202,2207],{"type":31,"tag":91,"props":2177,"children":2178},{"style":137},[2179],{"type":36,"value":154},{"type":31,"tag":91,"props":2181,"children":2182},{"style":157},[2183],{"type":36,"value":2184}," headlessEnabled",{"type":31,"tag":91,"props":2186,"children":2187},{"style":137},[2188],{"type":36,"value":165},{"type":31,"tag":91,"props":2190,"children":2191},{"style":137},[2192],{"type":36,"value":641},{"type":31,"tag":91,"props":2194,"children":2195},{"style":108},[2196],{"type":36,"value":2197}," checkFlag",{"type":31,"tag":91,"props":2199,"children":2200},{"style":114},[2201],{"type":36,"value":117},{"type":31,"tag":91,"props":2203,"children":2204},{"style":120},[2205],{"type":36,"value":2206},"'headless-rollout'",{"type":31,"tag":91,"props":2208,"children":2209},{"style":114},[2210],{"type":36,"value":1647},{"type":31,"tag":91,"props":2212,"children":2213},{"class":93,"line":258},[2214],{"type":31,"tag":91,"props":2215,"children":2216},{"style":114},[2217],{"type":36,"value":2218},"    userId,\n",{"type":31,"tag":91,"props":2220,"children":2221},{"class":93,"line":277},[2222],{"type":31,"tag":91,"props":2223,"children":2224},{"style":114},[2225],{"type":36,"value":2226},"    country,\n",{"type":31,"tag":91,"props":2228,"children":2229},{"class":93,"line":25},[2230,2235,2240],{"type":31,"tag":91,"props":2231,"children":2232},{"style":114},[2233],{"type":36,"value":2234},"    trafficPercentage: ",{"type":31,"tag":91,"props":2236,"children":2237},{"style":157},[2238],{"type":36,"value":2239},"10",{"type":31,"tag":91,"props":2241,"children":2242},{"style":98},[2243],{"type":36,"value":2244}," \u002F\u002F Primeros 10% de tráfico\n",{"type":31,"tag":91,"props":2246,"children":2247},{"class":93,"line":294},[2248],{"type":31,"tag":91,"props":2249,"children":2250},{"style":114},[2251],{"type":36,"value":2252},"  });\n",{"type":31,"tag":91,"props":2254,"children":2255},{"class":93,"line":302},[2256],{"type":31,"tag":91,"props":2257,"children":2258},{"style":114},[2259],{"type":36,"value":189},{"type":31,"tag":91,"props":2261,"children":2262},{"class":93,"line":331},[2263,2267],{"type":31,"tag":91,"props":2264,"children":2265},{"style":137},[2266],{"type":36,"value":198},{"type":31,"tag":91,"props":2268,"children":2269},{"style":114},[2270],{"type":36,"value":2271}," (headlessEnabled) {\n",{"type":31,"tag":91,"props":2273,"children":2274},{"class":93,"line":345},[2275,2279,2284,2289,2293,2298],{"type":31,"tag":91,"props":2276,"children":2277},{"style":137},[2278],{"type":36,"value":231},{"type":31,"tag":91,"props":2280,"children":2281},{"style":114},[2282],{"type":36,"value":2283}," NextResponse.",{"type":31,"tag":91,"props":2285,"children":2286},{"style":108},[2287],{"type":36,"value":2288},"rewrite",{"type":31,"tag":91,"props":2290,"children":2291},{"style":114},[2292],{"type":36,"value":117},{"type":31,"tag":91,"props":2294,"children":2295},{"style":120},[2296],{"type":36,"value":2297},"'\u002Fheadless-app'",{"type":31,"tag":91,"props":2299,"children":2300},{"style":114},[2301],{"type":36,"value":1431},{"type":31,"tag":91,"props":2303,"children":2304},{"class":93,"line":354},[2305],{"type":31,"tag":91,"props":2306,"children":2307},{"style":114},[2308],{"type":36,"value":291},{"type":31,"tag":91,"props":2310,"children":2311},{"class":93,"line":886},[2312],{"type":31,"tag":91,"props":2313,"children":2314},{"style":114},[2315],{"type":36,"value":189},{"type":31,"tag":91,"props":2317,"children":2318},{"class":93,"line":952},[2319,2323,2327,2331,2335,2340],{"type":31,"tag":91,"props":2320,"children":2321},{"style":137},[2322],{"type":36,"value":308},{"type":31,"tag":91,"props":2324,"children":2325},{"style":114},[2326],{"type":36,"value":2283},{"type":31,"tag":91,"props":2328,"children":2329},{"style":108},[2330],{"type":36,"value":2288},{"type":31,"tag":91,"props":2332,"children":2333},{"style":114},[2334],{"type":36,"value":117},{"type":31,"tag":91,"props":2336,"children":2337},{"style":120},[2338],{"type":36,"value":2339},"'\u002Flegacy-shopify'",{"type":31,"tag":91,"props":2341,"children":2342},{"style":114},[2343],{"type":36,"value":1431},{"type":31,"tag":91,"props":2345,"children":2346},{"class":93,"line":1006},[2347],{"type":31,"tag":91,"props":2348,"children":2349},{"style":114},[2350],{"type":36,"value":1241},{"type":31,"tag":32,"props":2352,"children":2353},{},[2354,2359],{"type":31,"tag":51,"props":2355,"children":2356},{},[2357],{"type":36,"value":2358},"Estrategia de rollback instantáneo:",{"type":36,"value":2360}," Si en una ventana de 5 minutos la tasa de error en ATC supera 3%, se activa rollback automático (alerta PagerDuty + toggle de flag).",{"type":31,"tag":81,"props":2362,"children":2366},{"className":2363,"code":2364,"language":2365,"meta":14,"style":14},"language-yaml shiki shiki-themes github-dark","# rollback-policy.yaml\nthresholds:\n  atc_error_rate: 3.0  # percent\n  lcp_p75: 3500        # milliseconds\n  revenue_drop: 5.0    # percent vs last week same hour\n\nactions:\n  - type: flag_override\n    target: headless-rollout\n    value: false\n  - type: alert\n    channel: slack-ops\n    message: \"Rollback headless activado: pico de error en ATC\"\n","yaml",[2367],{"type":31,"tag":64,"props":2368,"children":2369},{"__ignoreMap":14},[2370,2378,2392,2415,2437,2459,2466,2478,2500,2517,2534,2554,2571],{"type":31,"tag":91,"props":2371,"children":2372},{"class":93,"line":94},[2373],{"type":31,"tag":91,"props":2374,"children":2375},{"style":98},[2376],{"type":36,"value":2377},"# rollback-policy.yaml\n",{"type":31,"tag":91,"props":2379,"children":2380},{"class":93,"line":104},[2381,2387],{"type":31,"tag":91,"props":2382,"children":2384},{"style":2383},"--shiki-default:#85E89D",[2385],{"type":36,"value":2386},"thresholds",{"type":31,"tag":91,"props":2388,"children":2389},{"style":114},[2390],{"type":36,"value":2391},":\n",{"type":31,"tag":91,"props":2393,"children":2394},{"class":93,"line":148},[2395,2400,2405,2410],{"type":31,"tag":91,"props":2396,"children":2397},{"style":2383},[2398],{"type":36,"value":2399},"  atc_error_rate",{"type":31,"tag":91,"props":2401,"children":2402},{"style":114},[2403],{"type":36,"value":2404},": ",{"type":31,"tag":91,"props":2406,"children":2407},{"style":157},[2408],{"type":36,"value":2409},"3.0",{"type":31,"tag":91,"props":2411,"children":2412},{"style":98},[2413],{"type":36,"value":2414},"  # percent\n",{"type":31,"tag":91,"props":2416,"children":2417},{"class":93,"line":183},[2418,2423,2427,2432],{"type":31,"tag":91,"props":2419,"children":2420},{"style":2383},[2421],{"type":36,"value":2422},"  lcp_p75",{"type":31,"tag":91,"props":2424,"children":2425},{"style":114},[2426],{"type":36,"value":2404},{"type":31,"tag":91,"props":2428,"children":2429},{"style":157},[2430],{"type":36,"value":2431},"3500",{"type":31,"tag":91,"props":2433,"children":2434},{"style":98},[2435],{"type":36,"value":2436},"        # milliseconds\n",{"type":31,"tag":91,"props":2438,"children":2439},{"class":93,"line":192},[2440,2445,2449,2454],{"type":31,"tag":91,"props":2441,"children":2442},{"style":2383},[2443],{"type":36,"value":2444},"  revenue_drop",{"type":31,"tag":91,"props":2446,"children":2447},{"style":114},[2448],{"type":36,"value":2404},{"type":31,"tag":91,"props":2450,"children":2451},{"style":157},[2452],{"type":36,"value":2453},"5.0",{"type":31,"tag":91,"props":2455,"children":2456},{"style":98},[2457],{"type":36,"value":2458},"    # percent vs last week same hour\n",{"type":31,"tag":91,"props":2460,"children":2461},{"class":93,"line":225},[2462],{"type":31,"tag":91,"props":2463,"children":2464},{"emptyLinePlaceholder":565},[2465],{"type":36,"value":568},{"type":31,"tag":91,"props":2467,"children":2468},{"class":93,"line":258},[2469,2474],{"type":31,"tag":91,"props":2470,"children":2471},{"style":2383},[2472],{"type":36,"value":2473},"actions",{"type":31,"tag":91,"props":2475,"children":2476},{"style":114},[2477],{"type":36,"value":2391},{"type":31,"tag":91,"props":2479,"children":2480},{"class":93,"line":277},[2481,2486,2491,2495],{"type":31,"tag":91,"props":2482,"children":2483},{"style":114},[2484],{"type":36,"value":2485},"  - ",{"type":31,"tag":91,"props":2487,"children":2488},{"style":2383},[2489],{"type":36,"value":2490},"type",{"type":31,"tag":91,"props":2492,"children":2493},{"style":114},[2494],{"type":36,"value":2404},{"type":31,"tag":91,"props":2496,"children":2497},{"style":120},[2498],{"type":36,"value":2499},"flag_override\n",{"type":31,"tag":91,"props":2501,"children":2502},{"class":93,"line":25},[2503,2508,2512],{"type":31,"tag":91,"props":2504,"children":2505},{"style":2383},[2506],{"type":36,"value":2507},"    target",{"type":31,"tag":91,"props":2509,"children":2510},{"style":114},[2511],{"type":36,"value":2404},{"type":31,"tag":91,"props":2513,"children":2514},{"style":120},[2515],{"type":36,"value":2516},"headless-rollout\n",{"type":31,"tag":91,"props":2518,"children":2519},{"class":93,"line":294},[2520,2525,2529],{"type":31,"tag":91,"props":2521,"children":2522},{"style":2383},[2523],{"type":36,"value":2524},"    value",{"type":31,"tag":91,"props":2526,"children":2527},{"style":114},[2528],{"type":36,"value":2404},{"type":31,"tag":91,"props":2530,"children":2531},{"style":157},[2532],{"type":36,"value":2533},"false\n",{"type":31,"tag":91,"props":2535,"children":2536},{"class":93,"line":302},[2537,2541,2545,2549],{"type":31,"tag":91,"props":2538,"children":2539},{"style":114},[2540],{"type":36,"value":2485},{"type":31,"tag":91,"props":2542,"children":2543},{"style":2383},[2544],{"type":36,"value":2490},{"type":31,"tag":91,"props":2546,"children":2547},{"style":114},[2548],{"type":36,"value":2404},{"type":31,"tag":91,"props":2550,"children":2551},{"style":120},[2552],{"type":36,"value":2553},"alert\n",{"type":31,"tag":91,"props":2555,"children":2556},{"class":93,"line":331},[2557,2562,2566],{"type":31,"tag":91,"props":2558,"children":2559},{"style":2383},[2560],{"type":36,"value":2561},"    channel",{"type":31,"tag":91,"props":2563,"children":2564},{"style":114},[2565],{"type":36,"value":2404},{"type":31,"tag":91,"props":2567,"children":2568},{"style":120},[2569],{"type":36,"value":2570},"slack-ops\n",{"type":31,"tag":91,"props":2572,"children":2573},{"class":93,"line":345},[2574,2579,2583],{"type":31,"tag":91,"props":2575,"children":2576},{"style":2383},[2577],{"type":36,"value":2578},"    message",{"type":31,"tag":91,"props":2580,"children":2581},{"style":114},[2582],{"type":36,"value":2404},{"type":31,"tag":91,"props":2584,"children":2585},{"style":120},[2586],{"type":36,"value":2587},"\"Rollback headless activado: pico de error en ATC\"\n",{"type":31,"tag":32,"props":2589,"children":2590},{},[2591],{"type":36,"value":2592},"Con esta estructura la migración toma 8 semanas pero con pérdida de revenue \u003C2%. Las verdaderas ganancias de headless (LCP 4.8s → 1.9s, tasa de conversión +12%) se realizan solo cuando todo el sitio migra, pero ningún punto del proceso se convierte en \"crisis\".",{"type":31,"tag":39,"props":2594,"children":2596},{"id":2595},"escenarios-de-testing-post-migración-de-rendimiento",[2597],{"type":36,"value":2598},"Escenarios de Testing Post-Migración de Rendimiento",{"type":31,"tag":32,"props":2600,"children":2601},{},[2602],{"type":36,"value":2603},"No es solo \"¿el nuevo sitio es rápido?\", sino \"¿los comportamientos heredados de usuarios se rompen post-migración?\". Combinación de testing sintético + monitoreo de usuarios reales:",{"type":31,"tag":32,"props":2605,"children":2606},{},[2607],{"type":31,"tag":51,"props":2608,"children":2609},{},[2610],{"type":36,"value":2611},"Sintético:",{"type":31,"tag":2000,"props":2613,"children":2614},{},[2615,2620],{"type":31,"tag":451,"props":2616,"children":2617},{},[2618],{"type":36,"value":2619},"Pipeline Lighthouse CI — LCP\u002FTBT\u002FCLS para PDP, PLP, homepage en cada deploy",{"type":31,"tag":451,"props":2621,"children":2622},{},[2623],{"type":36,"value":2624},"WebPageTest scripted: \"clic en categoría, clic en 3er producto, agregar carrito, ir a checkout\" desde 10 geografías (Estambul, Berlín, Nueva York)",{"type":31,"tag":32,"props":2626,"children":2627},{},[2628],{"type":31,"tag":51,"props":2629,"children":2630},{},[2631],{"type":36,"value":2632},"RUM:",{"type":31,"tag":2000,"props":2634,"children":2635},{},[2636,2649],{"type":31,"tag":451,"props":2637,"children":2638},{},[2639,2641,2647],{"type":36,"value":2640},"Cada page view recopila ",{"type":31,"tag":64,"props":2642,"children":2644},{"className":2643},[],[2645],{"type":36,"value":2646},"performance.getEntriesByType('navigation')",{"type":36,"value":2648},", streaming a BigQuery",{"type":31,"tag":451,"props":2650,"children":2651},{},[2652],{"type":36,"value":2653},"Comparación de cohortes: últimos 10K usuarios en frontend heredado vs primeros 10K en frontend nuevo → sesiones medianas, páginas por sesión, bounce rate",{"type":31,"tag":32,"props":2655,"children":2656},{},[2657,2659,2668],{"type":36,"value":2658},"La infraestructura ",{"type":31,"tag":2660,"props":2661,"children":2665},"a",{"href":2662,"rel":2663},"https:\u002F\u002Fwww.roibase.com.tr\u002Fru\u002Fheadless",[2664],"nofollow",[2666],{"type":36,"value":2667},"Headless Commerce",{"type":36,"value":2669}," que preferimos es Nuxt 3 + Cloudflare Pages porque la latencia SSR en edge se mantiene \u003C50ms y el routing de Workers está nativamente soportado para rollout gradual.",{"type":31,"tag":32,"props":2671,"children":2672},{},[2673,2675,2680],{"type":36,"value":2674},"La pieza más crítica de la hoja de ruta de migración headless es la ",{"type":31,"tag":51,"props":2676,"children":2677},{},[2678],{"type":36,"value":2679},"capacidad de retroceder",{"type":36,"value":2681},". Cada fase deployable independientemente, controlada por flag, impulsada por métricas. Sin testing de preservación SEO automatizado no hay forma de que QA manual valide 500 URLs y cuando se descubre pérdida de ranking de Google 6 semanas después, es demasiado tarde para rollback. El análisis de abandono en carrito debe ser real-time, no dashboards con retrasos de 24 horas. Con esta disciplina, la migración headless deja de ser riesgo y se convierte en un proceso de optimización medible.",{"type":31,"tag":2683,"props":2684,"children":2685},"style",{},[2686],{"type":36,"value":2687},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":14,"searchDepth":148,"depth":148,"links":2689},[2690,2691,2692,2693,2694],{"id":41,"depth":104,"text":44},{"id":421,"depth":104,"text":424},{"id":1488,"depth":104,"text":1491},{"id":2047,"depth":104,"text":2050},{"id":2595,"depth":104,"text":2598},"markdown","content:ru:tech:headless-migracion-hoja-ruta-y-gestion-riesgos.md","content","ru\u002Ftech\u002Fheadless-migracion-hoja-ruta-y-gestion-riesgos.md","ru\u002Ftech\u002Fheadless-migracion-hoja-ruta-y-gestion-riesgos","md",1785967505622]