[{"data":1,"prerenderedAt":1766},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fru\u002Ftech\u002Fmigracion-headless-roadmap-gestion-riesgos":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":11,"_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":1760,"_id":1761,"_source":1762,"_file":1763,"_stem":1764,"_extension":1765},"tech",false,"","E-Commerce Headless: Roadmap de Migración y Gestión de Riesgos","Estrategia de despliegue por fases, técnicas de preservación SEO y análisis de abandono de carrito para migración segura a headless.","2026-08-04",[21,22,23,24,25],"comercio-headless","estrategia-migracion","preservacion-seo","gestion-riesgos","arquitectura-componible",8,"Roibase",{"type":29,"children":30,"toc":1753},"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,1075,1080,1090,1096,1101,1111,1535,1540,1550,1715,1720,1726,1731,1747],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","La migración a e-commerce headless en 2026 ya no es \"¿deberíamos?\" sino \"¿cómo lo hacemos?\". Pero como en toda transformación arquitectónica mayor, un paso en falso puede reducir revenue entre 12-18% (dato Forrester 2025). Los comportamientos de adición al carrito pierden sus señales ocultas, la autoridad SEO se reinicia, las micro-optimizaciones del funnel de conversión se evaporan. En este artículo, abordaremos la migración headless como un proyecto de ingeniería por fases y te mostraremos cómo gestionar el riesgo.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"despliegue-gradual-contra-el-caos-monolítico",[44],{"type":37,"value":45},"Despliegue Gradual Contra el Caos Monolítico",{"type":32,"tag":33,"props":47,"children":48},{},[49],{"type":37,"value":50},"El error clásico en migraciones headless es el enfoque de \"big bang\". Trasladar todo el sitio a la nueva stack en una noche significa poner revenue en riesgo. El despliegue gradual permite redirigir segmentos controlados de tráfico a la nueva arquitectura, aprendiendo de comportamientos de usuarios reales.",{"type":32,"tag":33,"props":52,"children":53},{},[54,60],{"type":32,"tag":55,"props":56,"children":57},"strong",{},[58],{"type":37,"value":59},"Fases basadas en rutas:",{"type":37,"value":61}," La primera fase puede ser páginas de categoría o PDPs —homepage y checkout quedan para después. Ejemplo de plan de 6 semanas:",{"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},"Semana",{"type":32,"tag":75,"props":81,"children":82},{},[83],{"type":37,"value":84},"Alcance",{"type":32,"tag":75,"props":86,"children":87},{},[88],{"type":37,"value":89},"Tráfico",{"type":32,"tag":75,"props":91,"children":92},{},[93],{"type":37,"value":94},"Métrica de Riesgo",{"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},"Tasa ATC, tasa de salida",{"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},"Tasa de conversión, profundidad de 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},"Tasa de rebote, duración sesión",{"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},"Despliegue 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},"Impacto en revenue",{"type":32,"tag":33,"props":202,"children":203},{},[204],{"type":37,"value":205},"Con este enfoque, si surge un error crítico, el costo de rollback es mínimo —recuperas 95% del tráfico en lugar del 100%.",{"type":32,"tag":33,"props":207,"children":208},{},[209,214],{"type":32,"tag":55,"props":210,"children":211},{},[212],{"type":37,"value":213},"Arquitectura feature flag:",{"type":37,"value":215}," Ejecuta el nuevo frontend detrás de un feature flag con LaunchDarkly, Statsig o Unleash. Ejemplo de snippet en 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,396,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":391},{"class":229,"line":26},[392],{"type":32,"tag":227,"props":393,"children":394},{"emptyLinePlaceholder":278},[395],{"type":37,"value":281},{"type":32,"tag":227,"props":397,"children":399},{"class":229,"line":398},9,[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},"Este código te permite cambiar el frontend por usuario. Puedes A\u002FB testear experiencias antigua\u002Fnueva en la misma sesión y leer el delta de conversión en tiempo real.",{"type":32,"tag":40,"props":516,"children":518},{"id":517},"preservar-autoridad-seo-paridad-de-urls-y-disciplina-en-redirects",[519],{"type":37,"value":520},"Preservar Autoridad SEO: Paridad de URLs y Disciplina en Redirects",{"type":32,"tag":33,"props":522,"children":523},{},[524],{"type":37,"value":525},"El costo oculto más grande en migraciones headless es la erosión SEO. Si la nueva stack cambia la estructura de URLs, pierdes el poder de backlinks que Google acumuló para esa URL, presupuesto de crawl e históricos de tráfico.",{"type":32,"tag":33,"props":527,"children":528},{},[529,534],{"type":32,"tag":55,"props":530,"children":531},{},[532],{"type":37,"value":533},"Necesidad de paridad de URLs:",{"type":37,"value":535}," Ambos sistemas (viejo y nuevo) deben mantener la misma estructura de slug. Por ejemplo, al migrar de Shopify a Hydrogen:",{"type":32,"tag":217,"props":537,"children":539},{"code":538},"Antiguo: \u002Fproducts\u002Fsneaker-hombre-blanco\nNuevo: \u002Fproducts\u002Fsneaker-hombre-blanco\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},"Aunque la lógica de generación de slug cambie, el output debe ser idéntico. Para garantizar esto, antes de la migración:",{"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},"Extrae todas las URLs del sistema antiguo (CSV con datos de tráfico de 30 días)",{"type":32,"tag":554,"props":560,"children":561},{},[562],{"type":37,"value":563},"Prueba las mismas URLs en el nuevo sistema con rutas canary",{"type":32,"tag":554,"props":565,"children":566},{},[567],{"type":37,"value":568},"Anula cualquier diff —incluso una diferencia es pérdida SEO",{"type":32,"tag":33,"props":570,"children":571},{},[572,577],{"type":32,"tag":55,"props":573,"children":574},{},[575],{"type":37,"value":576},"Tradeoff 301 vs 302:",{"type":37,"value":578}," Los redirects temporales (302) señalan a Google \"esta URL está temporalmente en otro lugar\", mientras que los permanentes (301) dicen \"esta URL ahora está aquí\". Durante el despliegue gradual, 302 tiene sentido —en rollout completo, cambias a 301. Sin embargo, si mantienes 302 más de 4 semanas, Google puede igualmente considerarla 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 de etiqueta canónica:",{"type":37,"value":588}," Si tu nuevo frontend renderiza del lado del servidor, configura el tag ",{"type":32,"tag":112,"props":590,"children":592},{"className":591},[],[593],{"type":37,"value":594},"\u003Clink rel=\"canonical\">",{"type":37,"value":596}," para que apunte a la URL antigua. Esto señala a Google \"la autoridad real sigue siendo el dominio antiguo\". Ejemplo en 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":26},[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},"En rollout completo, quitas este tag y cambias al nuevo dominio.",{"type":32,"tag":40,"props":735,"children":737},{"id":736},"análisis-de-abandono-de-carrito-captura-puntos-de-fricción-ocultos",[738],{"type":37,"value":739},"Análisis de Abandono de Carrito: Captura Puntos de Fricción Ocultos",{"type":32,"tag":33,"props":741,"children":742},{},[743],{"type":37,"value":744},"En migraciones headless, las caídas en tasa de conversión no ocurren típicamente en checkout sino antes, en la adición al carrito. Si el usuario agrega a carrito en 3 clics en el sistema antiguo y en 4 clics en el nuevo, o si hay 1 segundo más de latencia, es suficiente para abandonar.",{"type":32,"tag":33,"props":746,"children":747},{},[748],{"type":32,"tag":55,"props":749,"children":750},{},[751],{"type":37,"value":752},"Métricas críticas:",{"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},"Tasa ATC:",{"type":37,"value":766}," Visitas a página de producto \u002F adiciones al carrito",{"type":32,"tag":554,"props":768,"children":769},{},[770,775],{"type":32,"tag":55,"props":771,"children":772},{},[773],{"type":37,"value":774},"Latencia Click-to-ATC:",{"type":37,"value":776}," Tiempo entre clic en botón y confirmación (objetivo \u003C600ms)",{"type":32,"tag":554,"props":778,"children":779},{},[780,785],{"type":32,"tag":55,"props":781,"children":782},{},[783],{"type":37,"value":784},"Tasa de salida en PDP:",{"type":37,"value":786}," Salidas antes de ATC (si supera 12% en nuevo frontend, alerta)",{"type":32,"tag":33,"props":788,"children":789},{},[790],{"type":37,"value":791},"Recolecta estas métricas en paralelo en ambos sistemas. 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 -- Crítico si cae bajo 8%\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,1052],{"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":26},[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":398},[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,1047],{"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",{"type":32,"tag":227,"props":1048,"children":1049},{"style":440},[1050],{"type":37,"value":1051}," -- Crítico si cae bajo 8%\n",{"type":32,"tag":227,"props":1053,"children":1054},{"class":229,"line":446},[1055,1060,1065,1070],{"type":32,"tag":227,"props":1056,"children":1057},{"style":234},[1058],{"type":37,"value":1059},"ORDER BY",{"type":32,"tag":227,"props":1061,"children":1062},{"style":257},[1063],{"type":37,"value":1064}," click_latency_ms ",{"type":32,"tag":227,"props":1066,"children":1067},{"style":234},[1068],{"type":37,"value":1069},"DESC",{"type":32,"tag":227,"props":1071,"children":1072},{"style":257},[1073],{"type":37,"value":1074},";\n",{"type":32,"tag":33,"props":1076,"children":1077},{},[1078],{"type":37,"value":1079},"Esta consulta muestra en qué categorías de productos cae la tasa ATC y dónde sube la latencia. Si en \"zapatos blancos\" la latencia en nuevo frontend es 1200ms, inspecciona el tamaño de bundle o overhead de llamadas API.",{"type":32,"tag":33,"props":1081,"children":1082},{},[1083,1088],{"type":32,"tag":55,"props":1084,"children":1085},{},[1086],{"type":37,"value":1087},"Tradeoff de session replay:",{"type":37,"value":1089}," Herramientas como Hotjar y LogRocket graban cada pixel pero presentan riesgo de privacidad. Alternativa: la API \"frustration signal\" de FullStory —captura solo anomalías como clics rápidos, mensajes de error, clics en áreas vacías, sin grabar toda la sesión.",{"type":32,"tag":40,"props":1091,"children":1093},{"id":1092},"rollback-en-arquitectura-componible",[1094],{"type":37,"value":1095},"Rollback en Arquitectura Componible",{"type":32,"tag":33,"props":1097,"children":1098},{},[1099],{"type":37,"value":1100},"La stack headless típicamente contiene múltiples componentes: frontend (Next.js, Nuxt), CMS (Contentful, Sanity), motor de comercio (Shopify, commercetools), búsqueda (Algolia, Typesense). Si uno falla, necesitas un plan de rollback claro.",{"type":32,"tag":33,"props":1102,"children":1103},{},[1104,1109],{"type":32,"tag":55,"props":1105,"children":1106},{},[1107],{"type":37,"value":1108},"Patrón circuit breaker:",{"type":37,"value":1110}," Configura timeout + límites de reintentos para cada servicio de terceros. Ejemplo para Shopify Storefront API:",{"type":32,"tag":217,"props":1112,"children":1114},{"code":1113,"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: fallback a datos en caché o API legacy\n      return fetchFromLegacySystem(handle);\n    }\n    throw err;\n  }\n};\n",[1115],{"type":32,"tag":112,"props":1116,"children":1117},{"__ignoreMap":16},[1118,1159,1190,1249,1256,1268,1308,1326,1344,1371,1379,1387,1400,1422,1439,1468,1477,1496,1504,1518,1526],{"type":32,"tag":227,"props":1119,"children":1120},{"class":229,"line":230},[1121,1125,1130,1134,1138,1142,1147,1151,1155],{"type":32,"tag":227,"props":1122,"children":1123},{"style":234},[1124],{"type":37,"value":237},{"type":32,"tag":227,"props":1126,"children":1127},{"style":251},[1128],{"type":37,"value":1129}," fetchProduct",{"type":32,"tag":227,"props":1131,"children":1132},{"style":234},[1133],{"type":37,"value":248},{"type":32,"tag":227,"props":1135,"children":1136},{"style":234},[1137],{"type":37,"value":626},{"type":32,"tag":227,"props":1139,"children":1140},{"style":257},[1141],{"type":37,"value":981},{"type":32,"tag":227,"props":1143,"children":1144},{"style":644},[1145],{"type":37,"value":1146},"handle",{"type":32,"tag":227,"props":1148,"children":1149},{"style":257},[1150],{"type":37,"value":847},{"type":32,"tag":227,"props":1152,"children":1153},{"style":234},[1154],{"type":37,"value":314},{"type":32,"tag":227,"props":1156,"children":1157},{"style":257},[1158],{"type":37,"value":319},{"type":32,"tag":227,"props":1160,"children":1161},{"class":229,"line":274},[1162,1166,1171,1175,1180,1185],{"type":32,"tag":227,"props":1163,"children":1164},{"style":234},[1165],{"type":37,"value":328},{"type":32,"tag":227,"props":1167,"children":1168},{"style":240},[1169],{"type":37,"value":1170}," controller",{"type":32,"tag":227,"props":1172,"children":1173},{"style":234},[1174],{"type":37,"value":248},{"type":32,"tag":227,"props":1176,"children":1177},{"style":234},[1178],{"type":37,"value":1179}," new",{"type":32,"tag":227,"props":1181,"children":1182},{"style":251},[1183],{"type":37,"value":1184}," AbortController",{"type":32,"tag":227,"props":1186,"children":1187},{"style":257},[1188],{"type":37,"value":1189},"();\n",{"type":32,"tag":227,"props":1191,"children":1192},{"class":229,"line":284},[1193,1197,1202,1206,1211,1216,1220,1225,1230,1235,1240,1244],{"type":32,"tag":227,"props":1194,"children":1195},{"style":234},[1196],{"type":37,"value":328},{"type":32,"tag":227,"props":1198,"children":1199},{"style":240},[1200],{"type":37,"value":1201}," timeout",{"type":32,"tag":227,"props":1203,"children":1204},{"style":234},[1205],{"type":37,"value":248},{"type":32,"tag":227,"props":1207,"children":1208},{"style":251},[1209],{"type":37,"value":1210}," setTimeout",{"type":32,"tag":227,"props":1212,"children":1213},{"style":257},[1214],{"type":37,"value":1215},"(() ",{"type":32,"tag":227,"props":1217,"children":1218},{"style":234},[1219],{"type":37,"value":314},{"type":32,"tag":227,"props":1221,"children":1222},{"style":257},[1223],{"type":37,"value":1224}," controller.",{"type":32,"tag":227,"props":1226,"children":1227},{"style":251},[1228],{"type":37,"value":1229},"abort",{"type":32,"tag":227,"props":1231,"children":1232},{"style":257},[1233],{"type":37,"value":1234},"(), ",{"type":32,"tag":227,"props":1236,"children":1237},{"style":240},[1238],{"type":37,"value":1239},"3000",{"type":32,"tag":227,"props":1241,"children":1242},{"style":257},[1243],{"type":37,"value":437},{"type":32,"tag":227,"props":1245,"children":1246},{"style":440},[1247],{"type":37,"value":1248},"\u002F\u002F 3s timeout\n",{"type":32,"tag":227,"props":1250,"children":1251},{"class":229,"line":322},[1252],{"type":32,"tag":227,"props":1253,"children":1254},{"emptyLinePlaceholder":278},[1255],{"type":37,"value":281},{"type":32,"tag":227,"props":1257,"children":1258},{"class":229,"line":364},[1259,1264],{"type":32,"tag":227,"props":1260,"children":1261},{"style":234},[1262],{"type":37,"value":1263},"  try",{"type":32,"tag":227,"props":1265,"children":1266},{"style":257},[1267],{"type":37,"value":319},{"type":32,"tag":227,"props":1269,"children":1270},{"class":229,"line":373},[1271,1276,1281,1285,1290,1295,1299,1304],{"type":32,"tag":227,"props":1272,"children":1273},{"style":234},[1274],{"type":37,"value":1275},"    const",{"type":32,"tag":227,"props":1277,"children":1278},{"style":240},[1279],{"type":37,"value":1280}," response",{"type":32,"tag":227,"props":1282,"children":1283},{"style":234},[1284],{"type":37,"value":248},{"type":32,"tag":227,"props":1286,"children":1287},{"style":234},[1288],{"type":37,"value":1289}," await",{"type":32,"tag":227,"props":1291,"children":1292},{"style":251},[1293],{"type":37,"value":1294}," fetch",{"type":32,"tag":227,"props":1296,"children":1297},{"style":257},[1298],{"type":37,"value":260},{"type":32,"tag":227,"props":1300,"children":1301},{"style":263},[1302],{"type":37,"value":1303},"`https:\u002F\u002Fshop.myshopify.com\u002Fapi\u002F2024-01\u002Fgraphql.json`",{"type":32,"tag":227,"props":1305,"children":1306},{"style":257},[1307],{"type":37,"value":361},{"type":32,"tag":227,"props":1309,"children":1310},{"class":229,"line":382},[1311,1316,1321],{"type":32,"tag":227,"props":1312,"children":1313},{"style":257},[1314],{"type":37,"value":1315},"      method: ",{"type":32,"tag":227,"props":1317,"children":1318},{"style":263},[1319],{"type":37,"value":1320},"'POST'",{"type":32,"tag":227,"props":1322,"children":1323},{"style":257},[1324],{"type":37,"value":1325},",\n",{"type":32,"tag":227,"props":1327,"children":1328},{"class":229,"line":26},[1329,1334,1339],{"type":32,"tag":227,"props":1330,"children":1331},{"style":257},[1332],{"type":37,"value":1333},"      headers: { ",{"type":32,"tag":227,"props":1335,"children":1336},{"style":263},[1337],{"type":37,"value":1338},"'X-Shopify-Storefront-Access-Token'",{"type":32,"tag":227,"props":1340,"children":1341},{"style":257},[1342],{"type":37,"value":1343},": token },\n",{"type":32,"tag":227,"props":1345,"children":1346},{"class":229,"line":398},[1347,1352,1357,1361,1366],{"type":32,"tag":227,"props":1348,"children":1349},{"style":257},[1350],{"type":37,"value":1351},"      body: ",{"type":32,"tag":227,"props":1353,"children":1354},{"style":240},[1355],{"type":37,"value":1356},"JSON",{"type":32,"tag":227,"props":1358,"children":1359},{"style":257},[1360],{"type":37,"value":694},{"type":32,"tag":227,"props":1362,"children":1363},{"style":251},[1364],{"type":37,"value":1365},"stringify",{"type":32,"tag":227,"props":1367,"children":1368},{"style":257},[1369],{"type":37,"value":1370},"({ query: productQuery, variables: { handle } }),\n",{"type":32,"tag":227,"props":1372,"children":1373},{"class":229,"line":412},[1374],{"type":32,"tag":227,"props":1375,"children":1376},{"style":257},[1377],{"type":37,"value":1378},"      signal: controller.signal\n",{"type":32,"tag":227,"props":1380,"children":1381},{"class":229,"line":446},[1382],{"type":32,"tag":227,"props":1383,"children":1384},{"style":257},[1385],{"type":37,"value":1386},"    });\n",{"type":32,"tag":227,"props":1388,"children":1389},{"class":229,"line":464},[1390,1395],{"type":32,"tag":227,"props":1391,"children":1392},{"style":251},[1393],{"type":37,"value":1394},"    clearTimeout",{"type":32,"tag":227,"props":1396,"children":1397},{"style":257},[1398],{"type":37,"value":1399},"(timeout);\n",{"type":32,"tag":227,"props":1401,"children":1402},{"class":229,"line":494},[1403,1408,1413,1418],{"type":32,"tag":227,"props":1404,"children":1405},{"style":234},[1406],{"type":37,"value":1407},"    return",{"type":32,"tag":227,"props":1409,"children":1410},{"style":257},[1411],{"type":37,"value":1412}," response.",{"type":32,"tag":227,"props":1414,"children":1415},{"style":251},[1416],{"type":37,"value":1417},"json",{"type":32,"tag":227,"props":1419,"children":1420},{"style":257},[1421],{"type":37,"value":1189},{"type":32,"tag":227,"props":1423,"children":1424},{"class":229,"line":503},[1425,1429,1434],{"type":32,"tag":227,"props":1426,"children":1427},{"style":257},[1428],{"type":37,"value":452},{"type":32,"tag":227,"props":1430,"children":1431},{"style":234},[1432],{"type":37,"value":1433},"catch",{"type":32,"tag":227,"props":1435,"children":1436},{"style":257},[1437],{"type":37,"value":1438}," (err) {\n",{"type":32,"tag":227,"props":1440,"children":1442},{"class":229,"line":1441},15,[1443,1448,1453,1458,1463],{"type":32,"tag":227,"props":1444,"children":1445},{"style":234},[1446],{"type":37,"value":1447},"    if",{"type":32,"tag":227,"props":1449,"children":1450},{"style":257},[1451],{"type":37,"value":1452}," (err.name ",{"type":32,"tag":227,"props":1454,"children":1455},{"style":234},[1456],{"type":37,"value":1457},"===",{"type":32,"tag":227,"props":1459,"children":1460},{"style":263},[1461],{"type":37,"value":1462}," 'AbortError'",{"type":32,"tag":227,"props":1464,"children":1465},{"style":257},[1466],{"type":37,"value":1467},") {\n",{"type":32,"tag":227,"props":1469,"children":1471},{"class":229,"line":1470},16,[1472],{"type":32,"tag":227,"props":1473,"children":1474},{"style":440},[1475],{"type":37,"value":1476},"      \u002F\u002F Timeout: fallback a datos en caché o API legacy\n",{"type":32,"tag":227,"props":1478,"children":1480},{"class":229,"line":1479},17,[1481,1486,1491],{"type":32,"tag":227,"props":1482,"children":1483},{"style":234},[1484],{"type":37,"value":1485},"      return",{"type":32,"tag":227,"props":1487,"children":1488},{"style":251},[1489],{"type":37,"value":1490}," fetchFromLegacySystem",{"type":32,"tag":227,"props":1492,"children":1493},{"style":257},[1494],{"type":37,"value":1495},"(handle);\n",{"type":32,"tag":227,"props":1497,"children":1499},{"class":229,"line":1498},18,[1500],{"type":32,"tag":227,"props":1501,"children":1502},{"style":257},[1503],{"type":37,"value":712},{"type":32,"tag":227,"props":1505,"children":1507},{"class":229,"line":1506},19,[1508,1513],{"type":32,"tag":227,"props":1509,"children":1510},{"style":234},[1511],{"type":37,"value":1512},"    throw",{"type":32,"tag":227,"props":1514,"children":1515},{"style":257},[1516],{"type":37,"value":1517}," err;\n",{"type":32,"tag":227,"props":1519,"children":1521},{"class":229,"line":1520},20,[1522],{"type":32,"tag":227,"props":1523,"children":1524},{"style":257},[1525],{"type":37,"value":500},{"type":32,"tag":227,"props":1527,"children":1529},{"class":229,"line":1528},21,[1530],{"type":32,"tag":227,"props":1531,"children":1532},{"style":257},[1533],{"type":37,"value":1534},"};\n",{"type":32,"tag":33,"props":1536,"children":1537},{},[1538],{"type":37,"value":1539},"Este código, si la API de Shopify no responde en 3 segundos, hace fallback al sistema antiguo. La experiencia del usuario permanece ininterrumpida.",{"type":32,"tag":33,"props":1541,"children":1542},{},[1543,1548],{"type":32,"tag":55,"props":1544,"children":1545},{},[1546],{"type":37,"value":1547},"Disparador de rollback automatizado:",{"type":37,"value":1549}," Con Prometheus + Alertmanager, activa rollback automático si error rate supera 2%:",{"type":32,"tag":217,"props":1551,"children":1555},{"code":1552,"language":1553,"meta":16,"className":1554,"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",[1556],{"type":32,"tag":112,"props":1557,"children":1558},{"__ignoreMap":16},[1559,1573,1596,1608,1630,1647,1664,1676,1698],{"type":32,"tag":227,"props":1560,"children":1561},{"class":229,"line":230},[1562,1568],{"type":32,"tag":227,"props":1563,"children":1565},{"style":1564},"--shiki-default:#85E89D",[1566],{"type":37,"value":1567},"groups",{"type":32,"tag":227,"props":1569,"children":1570},{"style":257},[1571],{"type":37,"value":1572},":\n",{"type":32,"tag":227,"props":1574,"children":1575},{"class":229,"line":274},[1576,1581,1586,1591],{"type":32,"tag":227,"props":1577,"children":1578},{"style":257},[1579],{"type":37,"value":1580},"  - ",{"type":32,"tag":227,"props":1582,"children":1583},{"style":1564},[1584],{"type":37,"value":1585},"name",{"type":32,"tag":227,"props":1587,"children":1588},{"style":257},[1589],{"type":37,"value":1590},": ",{"type":32,"tag":227,"props":1592,"children":1593},{"style":263},[1594],{"type":37,"value":1595},"headless_alerts\n",{"type":32,"tag":227,"props":1597,"children":1598},{"class":229,"line":284},[1599,1604],{"type":32,"tag":227,"props":1600,"children":1601},{"style":1564},[1602],{"type":37,"value":1603},"    rules",{"type":32,"tag":227,"props":1605,"children":1606},{"style":257},[1607],{"type":37,"value":1572},{"type":32,"tag":227,"props":1609,"children":1610},{"class":229,"line":322},[1611,1616,1621,1625],{"type":32,"tag":227,"props":1612,"children":1613},{"style":257},[1614],{"type":37,"value":1615},"      - ",{"type":32,"tag":227,"props":1617,"children":1618},{"style":1564},[1619],{"type":37,"value":1620},"alert",{"type":32,"tag":227,"props":1622,"children":1623},{"style":257},[1624],{"type":37,"value":1590},{"type":32,"tag":227,"props":1626,"children":1627},{"style":263},[1628],{"type":37,"value":1629},"HighErrorRate\n",{"type":32,"tag":227,"props":1631,"children":1632},{"class":229,"line":364},[1633,1638,1642],{"type":32,"tag":227,"props":1634,"children":1635},{"style":1564},[1636],{"type":37,"value":1637},"        expr",{"type":32,"tag":227,"props":1639,"children":1640},{"style":257},[1641],{"type":37,"value":1590},{"type":32,"tag":227,"props":1643,"children":1644},{"style":263},[1645],{"type":37,"value":1646},"rate(http_requests_total{job=\"headless-frontend\",status=~\"5..\"}[5m]) > 0.02\n",{"type":32,"tag":227,"props":1648,"children":1649},{"class":229,"line":373},[1650,1655,1659],{"type":32,"tag":227,"props":1651,"children":1652},{"style":1564},[1653],{"type":37,"value":1654},"        for",{"type":32,"tag":227,"props":1656,"children":1657},{"style":257},[1658],{"type":37,"value":1590},{"type":32,"tag":227,"props":1660,"children":1661},{"style":263},[1662],{"type":37,"value":1663},"2m\n",{"type":32,"tag":227,"props":1665,"children":1666},{"class":229,"line":382},[1667,1672],{"type":32,"tag":227,"props":1668,"children":1669},{"style":1564},[1670],{"type":37,"value":1671},"        actions",{"type":32,"tag":227,"props":1673,"children":1674},{"style":257},[1675],{"type":37,"value":1572},{"type":32,"tag":227,"props":1677,"children":1678},{"class":229,"line":26},[1679,1684,1689,1693],{"type":32,"tag":227,"props":1680,"children":1681},{"style":257},[1682],{"type":37,"value":1683},"          - ",{"type":32,"tag":227,"props":1685,"children":1686},{"style":1564},[1687],{"type":37,"value":1688},"trigger_rollback",{"type":32,"tag":227,"props":1690,"children":1691},{"style":257},[1692],{"type":37,"value":1590},{"type":32,"tag":227,"props":1694,"children":1695},{"style":240},[1696],{"type":37,"value":1697},"true\n",{"type":32,"tag":227,"props":1699,"children":1700},{"class":229,"line":398},[1701,1706,1710],{"type":32,"tag":227,"props":1702,"children":1703},{"style":1564},[1704],{"type":37,"value":1705},"            target_version",{"type":32,"tag":227,"props":1707,"children":1708},{"style":257},[1709],{"type":37,"value":1590},{"type":32,"tag":227,"props":1711,"children":1712},{"style":263},[1713],{"type":37,"value":1714},"\"legacy-stable\"\n",{"type":32,"tag":33,"props":1716,"children":1717},{},[1718],{"type":37,"value":1719},"Este YAML apaga el feature flag y redirige tráfico al sistema antiguo si error rate supera 2% durante 2 minutos.",{"type":32,"tag":40,"props":1721,"children":1723},{"id":1722},"cierre-gestión-de-riesgos-es-proceso-no-proyecto-único",[1724],{"type":37,"value":1725},"Cierre: Gestión de Riesgos es Proceso, no Proyecto Único",{"type":32,"tag":33,"props":1727,"children":1728},{},[1729],{"type":37,"value":1730},"La migración headless requiere monitoreo activo durante 90 días post-migración. Core Web Vitals (LCP, CLS, FID), métricas del funnel de conversión y error rate del lado del servidor deben rastrearse en dashboards semanales. Incluso si no hay problemas en los primeros 30 días, la estacionalidad de tráfico (ej. Black Friday) puede exponer nuevos patrones de carga.",{"type":32,"tag":33,"props":1732,"children":1733},{},[1734,1736,1745],{"type":37,"value":1735},"El enfoque ",{"type":32,"tag":1737,"props":1738,"children":1742},"a",{"href":1739,"rel":1740},"https:\u002F\u002Fwww.roibase.com.tr\u002Fru\u002Fheadless",[1741],"nofollow",[1743],{"type":37,"value":1744},"Headless Commerce",{"type":37,"value":1746}," con despliegue gradual correcto, disciplina de métricas y plan de rollback listo te permite transformar tu infraestructura de e-commerce de forma segura. Capturar puntos de fricción durante el proceso, proteger autoridad SEO y mantener rollback preparado convierte la velocidad y flexibilidad que promete headless en crecimiento real de revenue.",{"type":32,"tag":1748,"props":1749,"children":1750},"style",{},[1751],{"type":37,"value":1752},"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":1754},[1755,1756,1757,1758,1759],{"id":42,"depth":274,"text":45},{"id":517,"depth":274,"text":520},{"id":736,"depth":274,"text":739},{"id":1092,"depth":274,"text":1095},{"id":1722,"depth":274,"text":1725},"markdown","content:ru:tech:migracion-headless-roadmap-gestion-riesgos.md","content","ru\u002Ftech\u002Fmigracion-headless-roadmap-gestion-riesgos.md","ru\u002Ftech\u002Fmigracion-headless-roadmap-gestion-riesgos","md",1785967485546]