[{"data":1,"prerenderedAt":3529},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fes\u002Ftech\u002Fmigracion-headless-hoja-de-ruta-y-gestion-de-riesgos":12},{"i18nKey":4,"paths":5},"tech-006-2026-06",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11},"\u002Fde\u002Ftech\u002Fheadless-ecommerce-migration-roadmap","\u002Fen\u002Ftech\u002Fheadless-ecommerce-migration-roadmap","\u002Fes\u002Ftech\u002Fmigracion-headless-hoja-ruta-gestion-riesgos","\u002Ffr\u002Ftech\u002Fstrategie-migration-headless-commerce","\u002Fit\u002Ftech\u002Fmigrazione-headless-e-commerce-roadmap-e-gestione-rischi","\u002Fru\u002Ftech\u002Fmigracao-ecommerce-headless-roadmap-gestao-risco",{"_path":13,"_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":3523,"_id":3524,"_source":3525,"_file":3526,"_stem":3527,"_extension":3528},"\u002Fes\u002Ftech\u002Fmigracion-headless-hoja-de-ruta-y-gestion-de-riesgos","tech",false,"","Migración a E-Commerce Headless: Hoja de Ruta y Gestión de Riesgos","Estrategia de despliegue por fases, protección SEO y análisis de abandono de carrito para planificar la migración headless con métricas concretas.","2026-06-28",[21,22,23,24,25],"headless-commerce","migracion","preservacion-seo","optimizacion-rendimiento","gestion-de-riesgos",8,"Roibase",{"type":29,"children":30,"toc":3510},"root",[31,39,46,51,792,805,818,825,830,1003,1008,1014,1019,1024,1134,1139,1409,1422,1831,1836,1842,1863,1869,1874,1879,2528,2533,2858,2871,2877,2882,2888,2893,2898,3301,3306,3311,3347,3493,3499,3504],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Migrar de una plataforma e-commerce monolítica a arquitectura headless no es un rediseño de la noche a la mañana. En 2026, el sitio de e-commerce promedio recibe más de 50.000 solicitudes diarias, el 40% proviene de búsqueda orgánica, y cada segundo de tiempo de inactividad representa una pérdida de $5.000+. Con estas cifras en mente, la estrategia de migración requiere disciplina de ingeniería: despliegue por fases, protección de URL canónicas, medición microscópica del flujo agregar al carrito. En este artículo compartiremos una hoja de ruta probada para la migración headless, decisiones técnicas que previenen caídas de SEO y métricas para mantener la tasa de abandono del carrito bajo supervisión, con ejemplos de código concretos.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"despliegue-por-fases-segmentación-de-tráfico-y-canary-deployment",[44],{"type":37,"value":45},"Despliegue por Fases: Segmentación de Tráfico y Canary Deployment",{"type":32,"tag":33,"props":47,"children":48},{},[49],{"type":37,"value":50},"La decisión más crítica en una migración headless es: ¿qué segmento de usuario dirigirás primero al nuevo sistema? Un despliegue big-bang conlleva riesgo de 100% de tiempo de inactividad; el enfoque correcto es dividir el tráfico a nivel de Edge CDN. Con Cloudflare Workers puedes dirigir el 5% de nuevos usuarios al frontend headless mientras proxyas el resto al stack antiguo.",{"type":32,"tag":52,"props":53,"children":57},"pre",{"className":54,"code":55,"language":56,"meta":16,"style":16},"language-javascript shiki shiki-themes github-dark","\u002F\u002F Cloudflare Worker: Enrutamiento headless por fases\naddEventListener('fetch', event => {\n  event.respondWith(handleRequest(event.request))\n})\n\nasync function handleRequest(request) {\n  const url = new URL(request.url)\n  const userId = request.headers.get('X-User-ID') || Math.random()\n  const rolloutPercent = 5 \u002F\u002F Dirigir 5% a headless\n  \n  const isNewStack = (hashCode(userId) % 100) \u003C rolloutPercent\n  \n  if (isNewStack && url.pathname.startsWith('\u002Fproducts')) {\n    \u002F\u002F Enrutar a origen Nuxt\u002FNext headless\n    return fetch('https:\u002F\u002Fheadless-origin.example.com' + url.pathname, request)\n  } else {\n    \u002F\u002F Origen Shopify Liquid antiguo\n    return fetch('https:\u002F\u002Flegacy-origin.example.com' + url.pathname, request)\n  }\n}\n\nfunction hashCode(str) {\n  let hash = 0\n  for (let i = 0; i \u003C str.length; i++) {\n    hash = ((hash \u003C\u003C 5) - hash) + str.charCodeAt(i)\n    hash |= 0\n  }\n  return Math.abs(hash)\n}\n","javascript",[58],{"type":32,"tag":59,"props":60,"children":61},"code",{"__ignoreMap":16},[62,74,118,146,155,165,198,233,293,320,329,385,393,436,445,478,496,505,534,543,552,560,587,611,676,736,753,761,784],{"type":32,"tag":63,"props":64,"children":67},"span",{"class":65,"line":66},"line",1,[68],{"type":32,"tag":63,"props":69,"children":71},{"style":70},"--shiki-default:#6A737D",[72],{"type":37,"value":73},"\u002F\u002F Cloudflare Worker: Enrutamiento headless por fases\n",{"type":32,"tag":63,"props":75,"children":77},{"class":65,"line":76},2,[78,84,90,96,101,107,113],{"type":32,"tag":63,"props":79,"children":81},{"style":80},"--shiki-default:#B392F0",[82],{"type":37,"value":83},"addEventListener",{"type":32,"tag":63,"props":85,"children":87},{"style":86},"--shiki-default:#E1E4E8",[88],{"type":37,"value":89},"(",{"type":32,"tag":63,"props":91,"children":93},{"style":92},"--shiki-default:#9ECBFF",[94],{"type":37,"value":95},"'fetch'",{"type":32,"tag":63,"props":97,"children":98},{"style":86},[99],{"type":37,"value":100},", ",{"type":32,"tag":63,"props":102,"children":104},{"style":103},"--shiki-default:#FFAB70",[105],{"type":37,"value":106},"event",{"type":32,"tag":63,"props":108,"children":110},{"style":109},"--shiki-default:#F97583",[111],{"type":37,"value":112}," =>",{"type":32,"tag":63,"props":114,"children":115},{"style":86},[116],{"type":37,"value":117}," {\n",{"type":32,"tag":63,"props":119,"children":121},{"class":65,"line":120},3,[122,127,132,136,141],{"type":32,"tag":63,"props":123,"children":124},{"style":86},[125],{"type":37,"value":126},"  event.",{"type":32,"tag":63,"props":128,"children":129},{"style":80},[130],{"type":37,"value":131},"respondWith",{"type":32,"tag":63,"props":133,"children":134},{"style":86},[135],{"type":37,"value":89},{"type":32,"tag":63,"props":137,"children":138},{"style":80},[139],{"type":37,"value":140},"handleRequest",{"type":32,"tag":63,"props":142,"children":143},{"style":86},[144],{"type":37,"value":145},"(event.request))\n",{"type":32,"tag":63,"props":147,"children":149},{"class":65,"line":148},4,[150],{"type":32,"tag":63,"props":151,"children":152},{"style":86},[153],{"type":37,"value":154},"})\n",{"type":32,"tag":63,"props":156,"children":158},{"class":65,"line":157},5,[159],{"type":32,"tag":63,"props":160,"children":162},{"emptyLinePlaceholder":161},true,[163],{"type":37,"value":164},"\n",{"type":32,"tag":63,"props":166,"children":168},{"class":65,"line":167},6,[169,174,179,184,188,193],{"type":32,"tag":63,"props":170,"children":171},{"style":109},[172],{"type":37,"value":173},"async",{"type":32,"tag":63,"props":175,"children":176},{"style":109},[177],{"type":37,"value":178}," function",{"type":32,"tag":63,"props":180,"children":181},{"style":80},[182],{"type":37,"value":183}," handleRequest",{"type":32,"tag":63,"props":185,"children":186},{"style":86},[187],{"type":37,"value":89},{"type":32,"tag":63,"props":189,"children":190},{"style":103},[191],{"type":37,"value":192},"request",{"type":32,"tag":63,"props":194,"children":195},{"style":86},[196],{"type":37,"value":197},") {\n",{"type":32,"tag":63,"props":199,"children":201},{"class":65,"line":200},7,[202,207,213,218,223,228],{"type":32,"tag":63,"props":203,"children":204},{"style":109},[205],{"type":37,"value":206},"  const",{"type":32,"tag":63,"props":208,"children":210},{"style":209},"--shiki-default:#79B8FF",[211],{"type":37,"value":212}," url",{"type":32,"tag":63,"props":214,"children":215},{"style":109},[216],{"type":37,"value":217}," =",{"type":32,"tag":63,"props":219,"children":220},{"style":109},[221],{"type":37,"value":222}," new",{"type":32,"tag":63,"props":224,"children":225},{"style":80},[226],{"type":37,"value":227}," URL",{"type":32,"tag":63,"props":229,"children":230},{"style":86},[231],{"type":37,"value":232},"(request.url)\n",{"type":32,"tag":63,"props":234,"children":235},{"class":65,"line":26},[236,240,245,249,254,259,263,268,273,278,283,288],{"type":32,"tag":63,"props":237,"children":238},{"style":109},[239],{"type":37,"value":206},{"type":32,"tag":63,"props":241,"children":242},{"style":209},[243],{"type":37,"value":244}," userId",{"type":32,"tag":63,"props":246,"children":247},{"style":109},[248],{"type":37,"value":217},{"type":32,"tag":63,"props":250,"children":251},{"style":86},[252],{"type":37,"value":253}," request.headers.",{"type":32,"tag":63,"props":255,"children":256},{"style":80},[257],{"type":37,"value":258},"get",{"type":32,"tag":63,"props":260,"children":261},{"style":86},[262],{"type":37,"value":89},{"type":32,"tag":63,"props":264,"children":265},{"style":92},[266],{"type":37,"value":267},"'X-User-ID'",{"type":32,"tag":63,"props":269,"children":270},{"style":86},[271],{"type":37,"value":272},") ",{"type":32,"tag":63,"props":274,"children":275},{"style":109},[276],{"type":37,"value":277},"||",{"type":32,"tag":63,"props":279,"children":280},{"style":86},[281],{"type":37,"value":282}," Math.",{"type":32,"tag":63,"props":284,"children":285},{"style":80},[286],{"type":37,"value":287},"random",{"type":32,"tag":63,"props":289,"children":290},{"style":86},[291],{"type":37,"value":292},"()\n",{"type":32,"tag":63,"props":294,"children":296},{"class":65,"line":295},9,[297,301,306,310,315],{"type":32,"tag":63,"props":298,"children":299},{"style":109},[300],{"type":37,"value":206},{"type":32,"tag":63,"props":302,"children":303},{"style":209},[304],{"type":37,"value":305}," rolloutPercent",{"type":32,"tag":63,"props":307,"children":308},{"style":109},[309],{"type":37,"value":217},{"type":32,"tag":63,"props":311,"children":312},{"style":209},[313],{"type":37,"value":314}," 5",{"type":32,"tag":63,"props":316,"children":317},{"style":70},[318],{"type":37,"value":319}," \u002F\u002F Dirigir 5% a headless\n",{"type":32,"tag":63,"props":321,"children":323},{"class":65,"line":322},10,[324],{"type":32,"tag":63,"props":325,"children":326},{"style":86},[327],{"type":37,"value":328},"  \n",{"type":32,"tag":63,"props":330,"children":332},{"class":65,"line":331},11,[333,337,342,346,351,356,361,366,371,375,380],{"type":32,"tag":63,"props":334,"children":335},{"style":109},[336],{"type":37,"value":206},{"type":32,"tag":63,"props":338,"children":339},{"style":209},[340],{"type":37,"value":341}," isNewStack",{"type":32,"tag":63,"props":343,"children":344},{"style":109},[345],{"type":37,"value":217},{"type":32,"tag":63,"props":347,"children":348},{"style":86},[349],{"type":37,"value":350}," (",{"type":32,"tag":63,"props":352,"children":353},{"style":80},[354],{"type":37,"value":355},"hashCode",{"type":32,"tag":63,"props":357,"children":358},{"style":86},[359],{"type":37,"value":360},"(userId) ",{"type":32,"tag":63,"props":362,"children":363},{"style":109},[364],{"type":37,"value":365},"%",{"type":32,"tag":63,"props":367,"children":368},{"style":209},[369],{"type":37,"value":370}," 100",{"type":32,"tag":63,"props":372,"children":373},{"style":86},[374],{"type":37,"value":272},{"type":32,"tag":63,"props":376,"children":377},{"style":109},[378],{"type":37,"value":379},"\u003C",{"type":32,"tag":63,"props":381,"children":382},{"style":86},[383],{"type":37,"value":384}," rolloutPercent\n",{"type":32,"tag":63,"props":386,"children":388},{"class":65,"line":387},12,[389],{"type":32,"tag":63,"props":390,"children":391},{"style":86},[392],{"type":37,"value":328},{"type":32,"tag":63,"props":394,"children":396},{"class":65,"line":395},13,[397,402,407,412,417,422,426,431],{"type":32,"tag":63,"props":398,"children":399},{"style":109},[400],{"type":37,"value":401},"  if",{"type":32,"tag":63,"props":403,"children":404},{"style":86},[405],{"type":37,"value":406}," (isNewStack ",{"type":32,"tag":63,"props":408,"children":409},{"style":109},[410],{"type":37,"value":411},"&&",{"type":32,"tag":63,"props":413,"children":414},{"style":86},[415],{"type":37,"value":416}," url.pathname.",{"type":32,"tag":63,"props":418,"children":419},{"style":80},[420],{"type":37,"value":421},"startsWith",{"type":32,"tag":63,"props":423,"children":424},{"style":86},[425],{"type":37,"value":89},{"type":32,"tag":63,"props":427,"children":428},{"style":92},[429],{"type":37,"value":430},"'\u002Fproducts'",{"type":32,"tag":63,"props":432,"children":433},{"style":86},[434],{"type":37,"value":435},")) {\n",{"type":32,"tag":63,"props":437,"children":439},{"class":65,"line":438},14,[440],{"type":32,"tag":63,"props":441,"children":442},{"style":70},[443],{"type":37,"value":444},"    \u002F\u002F Enrutar a origen Nuxt\u002FNext headless\n",{"type":32,"tag":63,"props":446,"children":448},{"class":65,"line":447},15,[449,454,459,463,468,473],{"type":32,"tag":63,"props":450,"children":451},{"style":109},[452],{"type":37,"value":453},"    return",{"type":32,"tag":63,"props":455,"children":456},{"style":80},[457],{"type":37,"value":458}," fetch",{"type":32,"tag":63,"props":460,"children":461},{"style":86},[462],{"type":37,"value":89},{"type":32,"tag":63,"props":464,"children":465},{"style":92},[466],{"type":37,"value":467},"'https:\u002F\u002Fheadless-origin.example.com'",{"type":32,"tag":63,"props":469,"children":470},{"style":109},[471],{"type":37,"value":472}," +",{"type":32,"tag":63,"props":474,"children":475},{"style":86},[476],{"type":37,"value":477}," url.pathname, request)\n",{"type":32,"tag":63,"props":479,"children":481},{"class":65,"line":480},16,[482,487,492],{"type":32,"tag":63,"props":483,"children":484},{"style":86},[485],{"type":37,"value":486},"  } ",{"type":32,"tag":63,"props":488,"children":489},{"style":109},[490],{"type":37,"value":491},"else",{"type":32,"tag":63,"props":493,"children":494},{"style":86},[495],{"type":37,"value":117},{"type":32,"tag":63,"props":497,"children":499},{"class":65,"line":498},17,[500],{"type":32,"tag":63,"props":501,"children":502},{"style":70},[503],{"type":37,"value":504},"    \u002F\u002F Origen Shopify Liquid antiguo\n",{"type":32,"tag":63,"props":506,"children":508},{"class":65,"line":507},18,[509,513,517,521,526,530],{"type":32,"tag":63,"props":510,"children":511},{"style":109},[512],{"type":37,"value":453},{"type":32,"tag":63,"props":514,"children":515},{"style":80},[516],{"type":37,"value":458},{"type":32,"tag":63,"props":518,"children":519},{"style":86},[520],{"type":37,"value":89},{"type":32,"tag":63,"props":522,"children":523},{"style":92},[524],{"type":37,"value":525},"'https:\u002F\u002Flegacy-origin.example.com'",{"type":32,"tag":63,"props":527,"children":528},{"style":109},[529],{"type":37,"value":472},{"type":32,"tag":63,"props":531,"children":532},{"style":86},[533],{"type":37,"value":477},{"type":32,"tag":63,"props":535,"children":537},{"class":65,"line":536},19,[538],{"type":32,"tag":63,"props":539,"children":540},{"style":86},[541],{"type":37,"value":542},"  }\n",{"type":32,"tag":63,"props":544,"children":546},{"class":65,"line":545},20,[547],{"type":32,"tag":63,"props":548,"children":549},{"style":86},[550],{"type":37,"value":551},"}\n",{"type":32,"tag":63,"props":553,"children":555},{"class":65,"line":554},21,[556],{"type":32,"tag":63,"props":557,"children":558},{"emptyLinePlaceholder":161},[559],{"type":37,"value":164},{"type":32,"tag":63,"props":561,"children":563},{"class":65,"line":562},22,[564,569,574,578,583],{"type":32,"tag":63,"props":565,"children":566},{"style":109},[567],{"type":37,"value":568},"function",{"type":32,"tag":63,"props":570,"children":571},{"style":80},[572],{"type":37,"value":573}," hashCode",{"type":32,"tag":63,"props":575,"children":576},{"style":86},[577],{"type":37,"value":89},{"type":32,"tag":63,"props":579,"children":580},{"style":103},[581],{"type":37,"value":582},"str",{"type":32,"tag":63,"props":584,"children":585},{"style":86},[586],{"type":37,"value":197},{"type":32,"tag":63,"props":588,"children":590},{"class":65,"line":589},23,[591,596,601,606],{"type":32,"tag":63,"props":592,"children":593},{"style":109},[594],{"type":37,"value":595},"  let",{"type":32,"tag":63,"props":597,"children":598},{"style":86},[599],{"type":37,"value":600}," hash ",{"type":32,"tag":63,"props":602,"children":603},{"style":109},[604],{"type":37,"value":605},"=",{"type":32,"tag":63,"props":607,"children":608},{"style":209},[609],{"type":37,"value":610}," 0\n",{"type":32,"tag":63,"props":612,"children":614},{"class":65,"line":613},24,[615,620,624,629,634,638,643,648,652,657,662,667,672],{"type":32,"tag":63,"props":616,"children":617},{"style":109},[618],{"type":37,"value":619},"  for",{"type":32,"tag":63,"props":621,"children":622},{"style":86},[623],{"type":37,"value":350},{"type":32,"tag":63,"props":625,"children":626},{"style":109},[627],{"type":37,"value":628},"let",{"type":32,"tag":63,"props":630,"children":631},{"style":86},[632],{"type":37,"value":633}," i ",{"type":32,"tag":63,"props":635,"children":636},{"style":109},[637],{"type":37,"value":605},{"type":32,"tag":63,"props":639,"children":640},{"style":209},[641],{"type":37,"value":642}," 0",{"type":32,"tag":63,"props":644,"children":645},{"style":86},[646],{"type":37,"value":647},"; i ",{"type":32,"tag":63,"props":649,"children":650},{"style":109},[651],{"type":37,"value":379},{"type":32,"tag":63,"props":653,"children":654},{"style":86},[655],{"type":37,"value":656}," str.",{"type":32,"tag":63,"props":658,"children":659},{"style":209},[660],{"type":37,"value":661},"length",{"type":32,"tag":63,"props":663,"children":664},{"style":86},[665],{"type":37,"value":666},"; i",{"type":32,"tag":63,"props":668,"children":669},{"style":109},[670],{"type":37,"value":671},"++",{"type":32,"tag":63,"props":673,"children":674},{"style":86},[675],{"type":37,"value":197},{"type":32,"tag":63,"props":677,"children":679},{"class":65,"line":678},25,[680,685,689,694,699,703,707,712,717,722,726,731],{"type":32,"tag":63,"props":681,"children":682},{"style":86},[683],{"type":37,"value":684},"    hash ",{"type":32,"tag":63,"props":686,"children":687},{"style":109},[688],{"type":37,"value":605},{"type":32,"tag":63,"props":690,"children":691},{"style":86},[692],{"type":37,"value":693}," ((hash ",{"type":32,"tag":63,"props":695,"children":696},{"style":109},[697],{"type":37,"value":698},"\u003C\u003C",{"type":32,"tag":63,"props":700,"children":701},{"style":209},[702],{"type":37,"value":314},{"type":32,"tag":63,"props":704,"children":705},{"style":86},[706],{"type":37,"value":272},{"type":32,"tag":63,"props":708,"children":709},{"style":109},[710],{"type":37,"value":711},"-",{"type":32,"tag":63,"props":713,"children":714},{"style":86},[715],{"type":37,"value":716}," hash) ",{"type":32,"tag":63,"props":718,"children":719},{"style":109},[720],{"type":37,"value":721},"+",{"type":32,"tag":63,"props":723,"children":724},{"style":86},[725],{"type":37,"value":656},{"type":32,"tag":63,"props":727,"children":728},{"style":80},[729],{"type":37,"value":730},"charCodeAt",{"type":32,"tag":63,"props":732,"children":733},{"style":86},[734],{"type":37,"value":735},"(i)\n",{"type":32,"tag":63,"props":737,"children":739},{"class":65,"line":738},26,[740,744,749],{"type":32,"tag":63,"props":741,"children":742},{"style":86},[743],{"type":37,"value":684},{"type":32,"tag":63,"props":745,"children":746},{"style":109},[747],{"type":37,"value":748},"|=",{"type":32,"tag":63,"props":750,"children":751},{"style":209},[752],{"type":37,"value":610},{"type":32,"tag":63,"props":754,"children":756},{"class":65,"line":755},27,[757],{"type":32,"tag":63,"props":758,"children":759},{"style":86},[760],{"type":37,"value":542},{"type":32,"tag":63,"props":762,"children":764},{"class":65,"line":763},28,[765,770,774,779],{"type":32,"tag":63,"props":766,"children":767},{"style":109},[768],{"type":37,"value":769},"  return",{"type":32,"tag":63,"props":771,"children":772},{"style":86},[773],{"type":37,"value":282},{"type":32,"tag":63,"props":775,"children":776},{"style":80},[777],{"type":37,"value":778},"abs",{"type":32,"tag":63,"props":780,"children":781},{"style":86},[782],{"type":37,"value":783},"(hash)\n",{"type":32,"tag":63,"props":785,"children":787},{"class":65,"line":786},29,[788],{"type":32,"tag":63,"props":789,"children":790},{"style":86},[791],{"type":37,"value":551},{"type":32,"tag":33,"props":793,"children":794},{},[795,797,803],{"type":37,"value":796},"Aumentarás el valor de ",{"type":32,"tag":59,"props":798,"children":800},{"className":799},[],[801],{"type":37,"value":802},"rolloutPercent",{"type":37,"value":804}," de forma gradual: 5% → 25% → 50% → 100%. Antes de cada aumento, esperas 72 horas y verificas que no haya anomalías en las métricas. Observa métricas críticas: si Largest Contentful Paint (LCP) es 2.3s en el stack antiguo, debe ser 1.8s en headless; si la tasa de éxito de agregar al carrito cae por debajo del 99.2%, ejecutas un rollback inmediato.",{"type":32,"tag":33,"props":806,"children":807},{},[808,810,816],{"type":37,"value":809},"La segunda dimensión del despliegue por fases es la segmentación geográfica: comienza en una región de bajo tráfico (por ejemplo, Europa Central) y luego avanza hacia mercados principales como EE.UU. y Turquía. Usa el header ",{"type":32,"tag":59,"props":811,"children":813},{"className":812},[],[814],{"type":37,"value":815},"request.cf.country",{"type":37,"value":817}," de Cloudflare para enrutamiento basado en país.",{"type":32,"tag":819,"props":820,"children":822},"h3",{"id":821},"canary-deployment-y-rollback-automático",[823],{"type":37,"value":824},"Canary Deployment y Rollback Automático",{"type":32,"tag":33,"props":826,"children":827},{},[828],{"type":37,"value":829},"Añade a tu pipeline de despliegue un mecanismo de rollback automático. Si usas Vercel o Netlify, agrega health check personalizado al hook de despliegue:",{"type":32,"tag":52,"props":831,"children":835},{"className":832,"code":833,"language":834,"meta":16,"style":16},"language-yaml shiki shiki-themes github-dark","# .github\u002Fworkflows\u002Fdeploy-headless.yml\n- name: Deploy to production\n  run: vercel --prod\n  \n- name: Health check (30s probe)\n  run: |\n    for i in {1..6}; do\n      STATUS=$(curl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" https:\u002F\u002Fheadless-origin.example.com\u002Fapi\u002Fhealth)\n      if [ $STATUS -ne 200 ]; then\n        echo \"Health check failed, rolling back\"\n        vercel rollback\n        exit 1\n      fi\n      sleep 5\n    done\n","yaml",[836],{"type":32,"tag":59,"props":837,"children":838},{"__ignoreMap":16},[839,847,871,888,895,915,931,939,947,955,963,971,979,987,995],{"type":32,"tag":63,"props":840,"children":841},{"class":65,"line":66},[842],{"type":32,"tag":63,"props":843,"children":844},{"style":70},[845],{"type":37,"value":846},"# .github\u002Fworkflows\u002Fdeploy-headless.yml\n",{"type":32,"tag":63,"props":848,"children":849},{"class":65,"line":76},[850,855,861,866],{"type":32,"tag":63,"props":851,"children":852},{"style":86},[853],{"type":37,"value":854},"- ",{"type":32,"tag":63,"props":856,"children":858},{"style":857},"--shiki-default:#85E89D",[859],{"type":37,"value":860},"name",{"type":32,"tag":63,"props":862,"children":863},{"style":86},[864],{"type":37,"value":865},": ",{"type":32,"tag":63,"props":867,"children":868},{"style":92},[869],{"type":37,"value":870},"Deploy to production\n",{"type":32,"tag":63,"props":872,"children":873},{"class":65,"line":120},[874,879,883],{"type":32,"tag":63,"props":875,"children":876},{"style":857},[877],{"type":37,"value":878},"  run",{"type":32,"tag":63,"props":880,"children":881},{"style":86},[882],{"type":37,"value":865},{"type":32,"tag":63,"props":884,"children":885},{"style":92},[886],{"type":37,"value":887},"vercel --prod\n",{"type":32,"tag":63,"props":889,"children":890},{"class":65,"line":148},[891],{"type":32,"tag":63,"props":892,"children":893},{"style":86},[894],{"type":37,"value":328},{"type":32,"tag":63,"props":896,"children":897},{"class":65,"line":157},[898,902,906,910],{"type":32,"tag":63,"props":899,"children":900},{"style":86},[901],{"type":37,"value":854},{"type":32,"tag":63,"props":903,"children":904},{"style":857},[905],{"type":37,"value":860},{"type":32,"tag":63,"props":907,"children":908},{"style":86},[909],{"type":37,"value":865},{"type":32,"tag":63,"props":911,"children":912},{"style":92},[913],{"type":37,"value":914},"Health check (30s probe)\n",{"type":32,"tag":63,"props":916,"children":917},{"class":65,"line":167},[918,922,926],{"type":32,"tag":63,"props":919,"children":920},{"style":857},[921],{"type":37,"value":878},{"type":32,"tag":63,"props":923,"children":924},{"style":86},[925],{"type":37,"value":865},{"type":32,"tag":63,"props":927,"children":928},{"style":109},[929],{"type":37,"value":930},"|\n",{"type":32,"tag":63,"props":932,"children":933},{"class":65,"line":200},[934],{"type":32,"tag":63,"props":935,"children":936},{"style":92},[937],{"type":37,"value":938},"    for i in {1..6}; do\n",{"type":32,"tag":63,"props":940,"children":941},{"class":65,"line":26},[942],{"type":32,"tag":63,"props":943,"children":944},{"style":92},[945],{"type":37,"value":946},"      STATUS=$(curl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" https:\u002F\u002Fheadless-origin.example.com\u002Fapi\u002Fhealth)\n",{"type":32,"tag":63,"props":948,"children":949},{"class":65,"line":295},[950],{"type":32,"tag":63,"props":951,"children":952},{"style":92},[953],{"type":37,"value":954},"      if [ $STATUS -ne 200 ]; then\n",{"type":32,"tag":63,"props":956,"children":957},{"class":65,"line":322},[958],{"type":32,"tag":63,"props":959,"children":960},{"style":92},[961],{"type":37,"value":962},"        echo \"Health check failed, rolling back\"\n",{"type":32,"tag":63,"props":964,"children":965},{"class":65,"line":331},[966],{"type":32,"tag":63,"props":967,"children":968},{"style":92},[969],{"type":37,"value":970},"        vercel rollback\n",{"type":32,"tag":63,"props":972,"children":973},{"class":65,"line":387},[974],{"type":32,"tag":63,"props":975,"children":976},{"style":92},[977],{"type":37,"value":978},"        exit 1\n",{"type":32,"tag":63,"props":980,"children":981},{"class":65,"line":395},[982],{"type":32,"tag":63,"props":983,"children":984},{"style":92},[985],{"type":37,"value":986},"      fi\n",{"type":32,"tag":63,"props":988,"children":989},{"class":65,"line":438},[990],{"type":32,"tag":63,"props":991,"children":992},{"style":92},[993],{"type":37,"value":994},"      sleep 5\n",{"type":32,"tag":63,"props":996,"children":997},{"class":65,"line":447},[998],{"type":32,"tag":63,"props":999,"children":1000},{"style":92},[1001],{"type":37,"value":1002},"    done\n",{"type":32,"tag":33,"props":1004,"children":1005},{},[1006],{"type":37,"value":1007},"Tu endpoint de health check debe verificar sistemas críticos: pool de conexiones a base de datos, tasa de acierto de caché, ping a la puerta de enlace de pago. Si no hay 100% de tasa de éxito dentro de 30 segundos, el despliegue se revierte automáticamente.",{"type":32,"tag":40,"props":1009,"children":1011},{"id":1010},"preservación-seo-protección-de-url-canónicas-y-datos-estructurados",[1012],{"type":37,"value":1013},"Preservación SEO: Protección de URL Canónicas y Datos Estructurados",{"type":32,"tag":33,"props":1015,"children":1016},{},[1017],{"type":37,"value":1018},"El mayor miedo en migración headless es la caída del tráfico orgánico. Según datos de Google Merchant Center 2025, el 68% de los sitios de e-commerce experimentan caída de tráfico orgánico >15% en los primeros 90 días posteriores a la replatformización. Las causas son cambios en URL canónicas, pérdida de datos estructurados y cadenas de redirecciones mal configuradas.",{"type":32,"tag":33,"props":1020,"children":1021},{},[1022],{"type":37,"value":1023},"Primero, mapea la estructura de URL 1:1 entre sistemas antiguos y nuevos. Si migras de Shopify a Next.js:",{"type":32,"tag":1025,"props":1026,"children":1027},"table",{},[1028,1052],{"type":32,"tag":1029,"props":1030,"children":1031},"thead",{},[1032],{"type":32,"tag":1033,"props":1034,"children":1035},"tr",{},[1036,1042,1047],{"type":32,"tag":1037,"props":1038,"children":1039},"th",{},[1040],{"type":37,"value":1041},"Antiguo (Shopify Liquid)",{"type":32,"tag":1037,"props":1043,"children":1044},{},[1045],{"type":37,"value":1046},"Nuevo (Next.js)",{"type":32,"tag":1037,"props":1048,"children":1049},{},[1050],{"type":37,"value":1051},"Estado",{"type":32,"tag":1053,"props":1054,"children":1055},"tbody",{},[1056,1082,1108],{"type":32,"tag":1033,"props":1057,"children":1058},{},[1059,1069,1077],{"type":32,"tag":1060,"props":1061,"children":1062},"td",{},[1063],{"type":32,"tag":59,"props":1064,"children":1066},{"className":1065},[],[1067],{"type":37,"value":1068},"\u002Fproducts\u002Fwireless-headphones",{"type":32,"tag":1060,"props":1070,"children":1071},{},[1072],{"type":32,"tag":59,"props":1073,"children":1075},{"className":1074},[],[1076],{"type":37,"value":1068},{"type":32,"tag":1060,"props":1078,"children":1079},{},[1080],{"type":37,"value":1081},"✅ Mismo slug",{"type":32,"tag":1033,"props":1083,"children":1084},{},[1085,1094,1103],{"type":32,"tag":1060,"props":1086,"children":1087},{},[1088],{"type":32,"tag":59,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":37,"value":1093},"\u002Fcollections\u002Felectronics",{"type":32,"tag":1060,"props":1095,"children":1096},{},[1097],{"type":32,"tag":59,"props":1098,"children":1100},{"className":1099},[],[1101],{"type":37,"value":1102},"\u002Fcategories\u002Felectronics",{"type":32,"tag":1060,"props":1104,"children":1105},{},[1106],{"type":37,"value":1107},"❌ Ruta cambió — requiere 301 redirect",{"type":32,"tag":1033,"props":1109,"children":1110},{},[1111,1120,1129],{"type":32,"tag":1060,"props":1112,"children":1113},{},[1114],{"type":32,"tag":59,"props":1115,"children":1117},{"className":1116},[],[1118],{"type":37,"value":1119},"\u002Fpages\u002Fabout",{"type":32,"tag":1060,"props":1121,"children":1122},{},[1123],{"type":32,"tag":59,"props":1124,"children":1126},{"className":1125},[],[1127],{"type":37,"value":1128},"\u002Fabout",{"type":32,"tag":1060,"props":1130,"children":1131},{},[1132],{"type":37,"value":1133},"⚠️ Ruta acortada — agregar canonical tag",{"type":32,"tag":33,"props":1135,"children":1136},{},[1137],{"type":37,"value":1138},"Cuando hay cambios de ruta, configura 301 redirects a nivel Edge. Ejemplo con Cloudflare Workers:",{"type":32,"tag":52,"props":1140,"children":1142},{"className":54,"code":1141,"language":56,"meta":16,"style":16},"const REDIRECT_MAP = {\n  '\u002Fcollections\u002Felectronics': '\u002Fcategories\u002Felectronics',\n  '\u002Fpages\u002Fabout': '\u002Fabout'\n}\n\naddEventListener('fetch', event => {\n  const url = new URL(event.request.url)\n  const newPath = REDIRECT_MAP[url.pathname]\n  \n  if (newPath) {\n    return Response.redirect(url.origin + newPath, 301)\n  }\n  \n  event.respondWith(fetch(event.request))\n})\n",[1143],{"type":32,"tag":59,"props":1144,"children":1145},{"__ignoreMap":16},[1146,1167,1189,1206,1213,1220,1251,1279,1304,1311,1323,1364,1371,1378,1402],{"type":32,"tag":63,"props":1147,"children":1148},{"class":65,"line":66},[1149,1154,1159,1163],{"type":32,"tag":63,"props":1150,"children":1151},{"style":109},[1152],{"type":37,"value":1153},"const",{"type":32,"tag":63,"props":1155,"children":1156},{"style":209},[1157],{"type":37,"value":1158}," REDIRECT_MAP",{"type":32,"tag":63,"props":1160,"children":1161},{"style":109},[1162],{"type":37,"value":217},{"type":32,"tag":63,"props":1164,"children":1165},{"style":86},[1166],{"type":37,"value":117},{"type":32,"tag":63,"props":1168,"children":1169},{"class":65,"line":76},[1170,1175,1179,1184],{"type":32,"tag":63,"props":1171,"children":1172},{"style":92},[1173],{"type":37,"value":1174},"  '\u002Fcollections\u002Felectronics'",{"type":32,"tag":63,"props":1176,"children":1177},{"style":86},[1178],{"type":37,"value":865},{"type":32,"tag":63,"props":1180,"children":1181},{"style":92},[1182],{"type":37,"value":1183},"'\u002Fcategories\u002Felectronics'",{"type":32,"tag":63,"props":1185,"children":1186},{"style":86},[1187],{"type":37,"value":1188},",\n",{"type":32,"tag":63,"props":1190,"children":1191},{"class":65,"line":120},[1192,1197,1201],{"type":32,"tag":63,"props":1193,"children":1194},{"style":92},[1195],{"type":37,"value":1196},"  '\u002Fpages\u002Fabout'",{"type":32,"tag":63,"props":1198,"children":1199},{"style":86},[1200],{"type":37,"value":865},{"type":32,"tag":63,"props":1202,"children":1203},{"style":92},[1204],{"type":37,"value":1205},"'\u002Fabout'\n",{"type":32,"tag":63,"props":1207,"children":1208},{"class":65,"line":148},[1209],{"type":32,"tag":63,"props":1210,"children":1211},{"style":86},[1212],{"type":37,"value":551},{"type":32,"tag":63,"props":1214,"children":1215},{"class":65,"line":157},[1216],{"type":32,"tag":63,"props":1217,"children":1218},{"emptyLinePlaceholder":161},[1219],{"type":37,"value":164},{"type":32,"tag":63,"props":1221,"children":1222},{"class":65,"line":167},[1223,1227,1231,1235,1239,1243,1247],{"type":32,"tag":63,"props":1224,"children":1225},{"style":80},[1226],{"type":37,"value":83},{"type":32,"tag":63,"props":1228,"children":1229},{"style":86},[1230],{"type":37,"value":89},{"type":32,"tag":63,"props":1232,"children":1233},{"style":92},[1234],{"type":37,"value":95},{"type":32,"tag":63,"props":1236,"children":1237},{"style":86},[1238],{"type":37,"value":100},{"type":32,"tag":63,"props":1240,"children":1241},{"style":103},[1242],{"type":37,"value":106},{"type":32,"tag":63,"props":1244,"children":1245},{"style":109},[1246],{"type":37,"value":112},{"type":32,"tag":63,"props":1248,"children":1249},{"style":86},[1250],{"type":37,"value":117},{"type":32,"tag":63,"props":1252,"children":1253},{"class":65,"line":200},[1254,1258,1262,1266,1270,1274],{"type":32,"tag":63,"props":1255,"children":1256},{"style":109},[1257],{"type":37,"value":206},{"type":32,"tag":63,"props":1259,"children":1260},{"style":209},[1261],{"type":37,"value":212},{"type":32,"tag":63,"props":1263,"children":1264},{"style":109},[1265],{"type":37,"value":217},{"type":32,"tag":63,"props":1267,"children":1268},{"style":109},[1269],{"type":37,"value":222},{"type":32,"tag":63,"props":1271,"children":1272},{"style":80},[1273],{"type":37,"value":227},{"type":32,"tag":63,"props":1275,"children":1276},{"style":86},[1277],{"type":37,"value":1278},"(event.request.url)\n",{"type":32,"tag":63,"props":1280,"children":1281},{"class":65,"line":26},[1282,1286,1291,1295,1299],{"type":32,"tag":63,"props":1283,"children":1284},{"style":109},[1285],{"type":37,"value":206},{"type":32,"tag":63,"props":1287,"children":1288},{"style":209},[1289],{"type":37,"value":1290}," newPath",{"type":32,"tag":63,"props":1292,"children":1293},{"style":109},[1294],{"type":37,"value":217},{"type":32,"tag":63,"props":1296,"children":1297},{"style":209},[1298],{"type":37,"value":1158},{"type":32,"tag":63,"props":1300,"children":1301},{"style":86},[1302],{"type":37,"value":1303},"[url.pathname]\n",{"type":32,"tag":63,"props":1305,"children":1306},{"class":65,"line":295},[1307],{"type":32,"tag":63,"props":1308,"children":1309},{"style":86},[1310],{"type":37,"value":328},{"type":32,"tag":63,"props":1312,"children":1313},{"class":65,"line":322},[1314,1318],{"type":32,"tag":63,"props":1315,"children":1316},{"style":109},[1317],{"type":37,"value":401},{"type":32,"tag":63,"props":1319,"children":1320},{"style":86},[1321],{"type":37,"value":1322}," (newPath) {\n",{"type":32,"tag":63,"props":1324,"children":1325},{"class":65,"line":331},[1326,1330,1335,1340,1345,1349,1354,1359],{"type":32,"tag":63,"props":1327,"children":1328},{"style":109},[1329],{"type":37,"value":453},{"type":32,"tag":63,"props":1331,"children":1332},{"style":86},[1333],{"type":37,"value":1334}," Response.",{"type":32,"tag":63,"props":1336,"children":1337},{"style":80},[1338],{"type":37,"value":1339},"redirect",{"type":32,"tag":63,"props":1341,"children":1342},{"style":86},[1343],{"type":37,"value":1344},"(url.origin ",{"type":32,"tag":63,"props":1346,"children":1347},{"style":109},[1348],{"type":37,"value":721},{"type":32,"tag":63,"props":1350,"children":1351},{"style":86},[1352],{"type":37,"value":1353}," newPath, ",{"type":32,"tag":63,"props":1355,"children":1356},{"style":209},[1357],{"type":37,"value":1358},"301",{"type":32,"tag":63,"props":1360,"children":1361},{"style":86},[1362],{"type":37,"value":1363},")\n",{"type":32,"tag":63,"props":1365,"children":1366},{"class":65,"line":387},[1367],{"type":32,"tag":63,"props":1368,"children":1369},{"style":86},[1370],{"type":37,"value":542},{"type":32,"tag":63,"props":1372,"children":1373},{"class":65,"line":395},[1374],{"type":32,"tag":63,"props":1375,"children":1376},{"style":86},[1377],{"type":37,"value":328},{"type":32,"tag":63,"props":1379,"children":1380},{"class":65,"line":438},[1381,1385,1389,1393,1398],{"type":32,"tag":63,"props":1382,"children":1383},{"style":86},[1384],{"type":37,"value":126},{"type":32,"tag":63,"props":1386,"children":1387},{"style":80},[1388],{"type":37,"value":131},{"type":32,"tag":63,"props":1390,"children":1391},{"style":86},[1392],{"type":37,"value":89},{"type":32,"tag":63,"props":1394,"children":1395},{"style":80},[1396],{"type":37,"value":1397},"fetch",{"type":32,"tag":63,"props":1399,"children":1400},{"style":86},[1401],{"type":37,"value":145},{"type":32,"tag":63,"props":1403,"children":1404},{"class":65,"line":447},[1405],{"type":32,"tag":63,"props":1406,"children":1407},{"style":86},[1408],{"type":37,"value":154},{"type":32,"tag":33,"props":1410,"children":1411},{},[1412,1414,1420],{"type":37,"value":1413},"Audita datos estructurados: si el sistema antiguo tiene schema de Product, BreadcrumbList u Organization, el nuevo debe tener el mismo formato. En Next.js, usa tags ",{"type":32,"tag":59,"props":1415,"children":1417},{"className":1416},[],[1418],{"type":37,"value":1419},"\u003Cscript type=\"application\u002Fld+json\">",{"type":37,"value":1421}," manuales en lugar de librerías — la garantía de renderizado es más alta:",{"type":32,"tag":52,"props":1423,"children":1427},{"className":1424,"code":1425,"language":1426,"meta":16,"style":16},"language-jsx shiki shiki-themes github-dark","\u002F\u002F app\u002Fproducts\u002F[slug]\u002Fpage.tsx\nexport default function ProductPage({ product }) {\n  const structuredData = {\n    \"@context\": \"https:\u002F\u002Fschema.org\",\n    \"@type\": \"Product\",\n    \"name\": product.title,\n    \"sku\": product.sku,\n    \"offers\": {\n      \"@type\": \"Offer\",\n      \"price\": product.price,\n      \"priceCurrency\": \"USD\",\n      \"availability\": product.stock > 0 ? \"InStock\" : \"OutOfStock\"\n    }\n  }\n  \n  return (\n    \u003C>\n      \u003Cscript\n        type=\"application\u002Fld+json\"\n        dangerouslySetInnerHTML={{ __html: JSON.stringify(structuredData) }}\n      \u002F>\n      {\u002F* Renderizado del producto *\u002F}\n    \u003C\u002F>\n  )\n}\n","jsx",[1428],{"type":32,"tag":59,"props":1429,"children":1430},{"__ignoreMap":16},[1431,1439,1476,1496,1517,1538,1551,1564,1577,1598,1611,1632,1674,1682,1689,1696,1708,1716,1729,1746,1783,1791,1808,1816,1824],{"type":32,"tag":63,"props":1432,"children":1433},{"class":65,"line":66},[1434],{"type":32,"tag":63,"props":1435,"children":1436},{"style":70},[1437],{"type":37,"value":1438},"\u002F\u002F app\u002Fproducts\u002F[slug]\u002Fpage.tsx\n",{"type":32,"tag":63,"props":1440,"children":1441},{"class":65,"line":76},[1442,1447,1452,1456,1461,1466,1471],{"type":32,"tag":63,"props":1443,"children":1444},{"style":109},[1445],{"type":37,"value":1446},"export",{"type":32,"tag":63,"props":1448,"children":1449},{"style":109},[1450],{"type":37,"value":1451}," default",{"type":32,"tag":63,"props":1453,"children":1454},{"style":109},[1455],{"type":37,"value":178},{"type":32,"tag":63,"props":1457,"children":1458},{"style":80},[1459],{"type":37,"value":1460}," ProductPage",{"type":32,"tag":63,"props":1462,"children":1463},{"style":86},[1464],{"type":37,"value":1465},"({ ",{"type":32,"tag":63,"props":1467,"children":1468},{"style":103},[1469],{"type":37,"value":1470},"product",{"type":32,"tag":63,"props":1472,"children":1473},{"style":86},[1474],{"type":37,"value":1475}," }) {\n",{"type":32,"tag":63,"props":1477,"children":1478},{"class":65,"line":120},[1479,1483,1488,1492],{"type":32,"tag":63,"props":1480,"children":1481},{"style":109},[1482],{"type":37,"value":206},{"type":32,"tag":63,"props":1484,"children":1485},{"style":209},[1486],{"type":37,"value":1487}," structuredData",{"type":32,"tag":63,"props":1489,"children":1490},{"style":109},[1491],{"type":37,"value":217},{"type":32,"tag":63,"props":1493,"children":1494},{"style":86},[1495],{"type":37,"value":117},{"type":32,"tag":63,"props":1497,"children":1498},{"class":65,"line":148},[1499,1504,1508,1513],{"type":32,"tag":63,"props":1500,"children":1501},{"style":92},[1502],{"type":37,"value":1503},"    \"@context\"",{"type":32,"tag":63,"props":1505,"children":1506},{"style":86},[1507],{"type":37,"value":865},{"type":32,"tag":63,"props":1509,"children":1510},{"style":92},[1511],{"type":37,"value":1512},"\"https:\u002F\u002Fschema.org\"",{"type":32,"tag":63,"props":1514,"children":1515},{"style":86},[1516],{"type":37,"value":1188},{"type":32,"tag":63,"props":1518,"children":1519},{"class":65,"line":157},[1520,1525,1529,1534],{"type":32,"tag":63,"props":1521,"children":1522},{"style":92},[1523],{"type":37,"value":1524},"    \"@type\"",{"type":32,"tag":63,"props":1526,"children":1527},{"style":86},[1528],{"type":37,"value":865},{"type":32,"tag":63,"props":1530,"children":1531},{"style":92},[1532],{"type":37,"value":1533},"\"Product\"",{"type":32,"tag":63,"props":1535,"children":1536},{"style":86},[1537],{"type":37,"value":1188},{"type":32,"tag":63,"props":1539,"children":1540},{"class":65,"line":167},[1541,1546],{"type":32,"tag":63,"props":1542,"children":1543},{"style":92},[1544],{"type":37,"value":1545},"    \"name\"",{"type":32,"tag":63,"props":1547,"children":1548},{"style":86},[1549],{"type":37,"value":1550},": product.title,\n",{"type":32,"tag":63,"props":1552,"children":1553},{"class":65,"line":200},[1554,1559],{"type":32,"tag":63,"props":1555,"children":1556},{"style":92},[1557],{"type":37,"value":1558},"    \"sku\"",{"type":32,"tag":63,"props":1560,"children":1561},{"style":86},[1562],{"type":37,"value":1563},": product.sku,\n",{"type":32,"tag":63,"props":1565,"children":1566},{"class":65,"line":26},[1567,1572],{"type":32,"tag":63,"props":1568,"children":1569},{"style":92},[1570],{"type":37,"value":1571},"    \"offers\"",{"type":32,"tag":63,"props":1573,"children":1574},{"style":86},[1575],{"type":37,"value":1576},": {\n",{"type":32,"tag":63,"props":1578,"children":1579},{"class":65,"line":295},[1580,1585,1589,1594],{"type":32,"tag":63,"props":1581,"children":1582},{"style":92},[1583],{"type":37,"value":1584},"      \"@type\"",{"type":32,"tag":63,"props":1586,"children":1587},{"style":86},[1588],{"type":37,"value":865},{"type":32,"tag":63,"props":1590,"children":1591},{"style":92},[1592],{"type":37,"value":1593},"\"Offer\"",{"type":32,"tag":63,"props":1595,"children":1596},{"style":86},[1597],{"type":37,"value":1188},{"type":32,"tag":63,"props":1599,"children":1600},{"class":65,"line":322},[1601,1606],{"type":32,"tag":63,"props":1602,"children":1603},{"style":92},[1604],{"type":37,"value":1605},"      \"price\"",{"type":32,"tag":63,"props":1607,"children":1608},{"style":86},[1609],{"type":37,"value":1610},": product.price,\n",{"type":32,"tag":63,"props":1612,"children":1613},{"class":65,"line":331},[1614,1619,1623,1628],{"type":32,"tag":63,"props":1615,"children":1616},{"style":92},[1617],{"type":37,"value":1618},"      \"priceCurrency\"",{"type":32,"tag":63,"props":1620,"children":1621},{"style":86},[1622],{"type":37,"value":865},{"type":32,"tag":63,"props":1624,"children":1625},{"style":92},[1626],{"type":37,"value":1627},"\"USD\"",{"type":32,"tag":63,"props":1629,"children":1630},{"style":86},[1631],{"type":37,"value":1188},{"type":32,"tag":63,"props":1633,"children":1634},{"class":65,"line":387},[1635,1640,1645,1650,1654,1659,1664,1669],{"type":32,"tag":63,"props":1636,"children":1637},{"style":92},[1638],{"type":37,"value":1639},"      \"availability\"",{"type":32,"tag":63,"props":1641,"children":1642},{"style":86},[1643],{"type":37,"value":1644},": product.stock ",{"type":32,"tag":63,"props":1646,"children":1647},{"style":109},[1648],{"type":37,"value":1649},">",{"type":32,"tag":63,"props":1651,"children":1652},{"style":209},[1653],{"type":37,"value":642},{"type":32,"tag":63,"props":1655,"children":1656},{"style":109},[1657],{"type":37,"value":1658}," ?",{"type":32,"tag":63,"props":1660,"children":1661},{"style":92},[1662],{"type":37,"value":1663}," \"InStock\"",{"type":32,"tag":63,"props":1665,"children":1666},{"style":109},[1667],{"type":37,"value":1668}," :",{"type":32,"tag":63,"props":1670,"children":1671},{"style":92},[1672],{"type":37,"value":1673}," \"OutOfStock\"\n",{"type":32,"tag":63,"props":1675,"children":1676},{"class":65,"line":395},[1677],{"type":32,"tag":63,"props":1678,"children":1679},{"style":86},[1680],{"type":37,"value":1681},"    }\n",{"type":32,"tag":63,"props":1683,"children":1684},{"class":65,"line":438},[1685],{"type":32,"tag":63,"props":1686,"children":1687},{"style":86},[1688],{"type":37,"value":542},{"type":32,"tag":63,"props":1690,"children":1691},{"class":65,"line":447},[1692],{"type":32,"tag":63,"props":1693,"children":1694},{"style":86},[1695],{"type":37,"value":328},{"type":32,"tag":63,"props":1697,"children":1698},{"class":65,"line":480},[1699,1703],{"type":32,"tag":63,"props":1700,"children":1701},{"style":109},[1702],{"type":37,"value":769},{"type":32,"tag":63,"props":1704,"children":1705},{"style":86},[1706],{"type":37,"value":1707}," (\n",{"type":32,"tag":63,"props":1709,"children":1710},{"class":65,"line":498},[1711],{"type":32,"tag":63,"props":1712,"children":1713},{"style":86},[1714],{"type":37,"value":1715},"    \u003C>\n",{"type":32,"tag":63,"props":1717,"children":1718},{"class":65,"line":507},[1719,1724],{"type":32,"tag":63,"props":1720,"children":1721},{"style":86},[1722],{"type":37,"value":1723},"      \u003C",{"type":32,"tag":63,"props":1725,"children":1726},{"style":857},[1727],{"type":37,"value":1728},"script\n",{"type":32,"tag":63,"props":1730,"children":1731},{"class":65,"line":536},[1732,1737,1741],{"type":32,"tag":63,"props":1733,"children":1734},{"style":80},[1735],{"type":37,"value":1736},"        type",{"type":32,"tag":63,"props":1738,"children":1739},{"style":109},[1740],{"type":37,"value":605},{"type":32,"tag":63,"props":1742,"children":1743},{"style":92},[1744],{"type":37,"value":1745},"\"application\u002Fld+json\"\n",{"type":32,"tag":63,"props":1747,"children":1748},{"class":65,"line":545},[1749,1754,1758,1763,1768,1773,1778],{"type":32,"tag":63,"props":1750,"children":1751},{"style":80},[1752],{"type":37,"value":1753},"        dangerouslySetInnerHTML",{"type":32,"tag":63,"props":1755,"children":1756},{"style":109},[1757],{"type":37,"value":605},{"type":32,"tag":63,"props":1759,"children":1760},{"style":86},[1761],{"type":37,"value":1762},"{{ __html: ",{"type":32,"tag":63,"props":1764,"children":1765},{"style":209},[1766],{"type":37,"value":1767},"JSON",{"type":32,"tag":63,"props":1769,"children":1770},{"style":86},[1771],{"type":37,"value":1772},".",{"type":32,"tag":63,"props":1774,"children":1775},{"style":80},[1776],{"type":37,"value":1777},"stringify",{"type":32,"tag":63,"props":1779,"children":1780},{"style":86},[1781],{"type":37,"value":1782},"(structuredData) }}\n",{"type":32,"tag":63,"props":1784,"children":1785},{"class":65,"line":554},[1786],{"type":32,"tag":63,"props":1787,"children":1788},{"style":86},[1789],{"type":37,"value":1790},"      \u002F>\n",{"type":32,"tag":63,"props":1792,"children":1793},{"class":65,"line":562},[1794,1799,1804],{"type":32,"tag":63,"props":1795,"children":1796},{"style":86},[1797],{"type":37,"value":1798},"      {",{"type":32,"tag":63,"props":1800,"children":1801},{"style":70},[1802],{"type":37,"value":1803},"\u002F* Renderizado del producto *\u002F",{"type":32,"tag":63,"props":1805,"children":1806},{"style":86},[1807],{"type":37,"value":551},{"type":32,"tag":63,"props":1809,"children":1810},{"class":65,"line":589},[1811],{"type":32,"tag":63,"props":1812,"children":1813},{"style":86},[1814],{"type":37,"value":1815},"    \u003C\u002F>\n",{"type":32,"tag":63,"props":1817,"children":1818},{"class":65,"line":613},[1819],{"type":32,"tag":63,"props":1820,"children":1821},{"style":86},[1822],{"type":37,"value":1823},"  )\n",{"type":32,"tag":63,"props":1825,"children":1826},{"class":65,"line":678},[1827],{"type":32,"tag":63,"props":1828,"children":1829},{"style":86},[1830],{"type":37,"value":551},{"type":32,"tag":33,"props":1832,"children":1833},{},[1834],{"type":37,"value":1835},"En Google Search Console, usa la herramienta \"URL Inspection\" para monitorear el estado de indexación de páginas nuevas. En los primeros 30 días posteriores a la migración, revisa semanalmente el reporte \"Coverage\": si ves \"Indexed, not submitted in sitemap\" >50 errores, tu generación de sitemap no está funcionando.",{"type":32,"tag":819,"props":1837,"children":1839},{"id":1838},"minimización-de-cadenas-de-redirección",[1840],{"type":37,"value":1841},"Minimización de Cadenas de Redirección",{"type":32,"tag":33,"props":1843,"children":1844},{},[1845,1847,1853,1855,1861],{"type":37,"value":1846},"Limpia las cadenas de redirección del sistema antiguo. Por ejemplo, si en Shopify hay ",{"type":32,"tag":59,"props":1848,"children":1850},{"className":1849},[],[1851],{"type":37,"value":1852},"\u002Fproducts\u002Fold-name",{"type":37,"value":1854}," → ",{"type":32,"tag":59,"props":1856,"children":1858},{"className":1857},[],[1859],{"type":37,"value":1860},"\u002Fproducts\u002Fnew-name",{"type":37,"value":1862},", en el sistema headless usa directamente la URL final. Más de dos niveles de redirecciones (A → B → C) agota el presupuesto de rastreo de Google y reduce la eficiencia de transferencia de PageRank. En proyectos de comercio headless de Roibase, el proceso de auditoría de redirecciones típicamente logra una reducción de cadenas del 40%.",{"type":32,"tag":40,"props":1864,"children":1866},{"id":1865},"análisis-de-abandono-del-carrito-monitoreo-del-embudo-de-conversión",[1867],{"type":37,"value":1868},"Análisis de Abandono del Carrito: Monitoreo del Embudo de Conversión",{"type":32,"tag":33,"props":1870,"children":1871},{},[1872],{"type":37,"value":1873},"Durante la migración headless, la métrica más sensible es la tasa de éxito de agregar al carrito. Si el sistema antiguo tiene tasa de éxito del 99.5% y la nueva cae al 98%, eso significa 1.500 carritos perdidos por día (100.000 visitantes × 3% intención ATC × 1.5% caída).",{"type":32,"tag":33,"props":1875,"children":1876},{},[1877],{"type":37,"value":1878},"Registra eventos de agregar al carrito tanto en cliente como en servidor. El tag GTM del lado del cliente no puede capturar fallos de red; el registro del servidor es el registro definitivo:",{"type":32,"tag":52,"props":1880,"children":1882},{"className":54,"code":1881,"language":56,"meta":16,"style":16},"\u002F\u002F app\u002Fapi\u002Fcart\u002Fadd\u002Froute.ts (Next.js App Router)\nimport { NextResponse } from 'next\u002Fserver'\nimport { logEvent } from '@\u002Flib\u002Fanalytics'\n\nexport async function POST(request: Request) {\n  const { productId, quantity } = await request.json()\n  const startTime = Date.now()\n  \n  try {\n    const cart = await addToCart(productId, quantity)\n    const duration = Date.now() - startTime\n    \n    \u002F\u002F Registro de evento del lado del servidor\n    await logEvent({\n      event: 'add_to_cart_success',\n      productId,\n      quantity,\n      duration, \u002F\u002F ms\n      userId: request.headers.get('X-User-ID')\n    })\n    \n    return NextResponse.json({ cart }, { status: 200 })\n  } catch (error) {\n    const duration = Date.now() - startTime\n    \n    await logEvent({\n      event: 'add_to_cart_failure',\n      productId,\n      quantity,\n      duration,\n      error: error.message,\n      userId: request.headers.get('X-User-ID')\n    })\n    \n    return NextResponse.json({ error: 'Failed to add to cart' }, { status: 500 })\n  }\n}\n",[1883],{"type":32,"tag":59,"props":1884,"children":1885},{"__ignoreMap":16},[1886,1894,1917,1938,1945,1988,2042,2072,2079,2091,2122,2160,2168,2176,2194,2211,2219,2227,2240,2264,2272,2279,2310,2327,2362,2369,2384,2400,2407,2414,2423,2432,2456,2464,2472,2512,2520],{"type":32,"tag":63,"props":1887,"children":1888},{"class":65,"line":66},[1889],{"type":32,"tag":63,"props":1890,"children":1891},{"style":70},[1892],{"type":37,"value":1893},"\u002F\u002F app\u002Fapi\u002Fcart\u002Fadd\u002Froute.ts (Next.js App Router)\n",{"type":32,"tag":63,"props":1895,"children":1896},{"class":65,"line":76},[1897,1902,1907,1912],{"type":32,"tag":63,"props":1898,"children":1899},{"style":109},[1900],{"type":37,"value":1901},"import",{"type":32,"tag":63,"props":1903,"children":1904},{"style":86},[1905],{"type":37,"value":1906}," { NextResponse } ",{"type":32,"tag":63,"props":1908,"children":1909},{"style":109},[1910],{"type":37,"value":1911},"from",{"type":32,"tag":63,"props":1913,"children":1914},{"style":92},[1915],{"type":37,"value":1916}," 'next\u002Fserver'\n",{"type":32,"tag":63,"props":1918,"children":1919},{"class":65,"line":120},[1920,1924,1929,1933],{"type":32,"tag":63,"props":1921,"children":1922},{"style":109},[1923],{"type":37,"value":1901},{"type":32,"tag":63,"props":1925,"children":1926},{"style":86},[1927],{"type":37,"value":1928}," { logEvent } ",{"type":32,"tag":63,"props":1930,"children":1931},{"style":109},[1932],{"type":37,"value":1911},{"type":32,"tag":63,"props":1934,"children":1935},{"style":92},[1936],{"type":37,"value":1937}," '@\u002Flib\u002Fanalytics'\n",{"type":32,"tag":63,"props":1939,"children":1940},{"class":65,"line":148},[1941],{"type":32,"tag":63,"props":1942,"children":1943},{"emptyLinePlaceholder":161},[1944],{"type":37,"value":164},{"type":32,"tag":63,"props":1946,"children":1947},{"class":65,"line":157},[1948,1952,1957,1961,1966,1970,1974,1979,1984],{"type":32,"tag":63,"props":1949,"children":1950},{"style":109},[1951],{"type":37,"value":1446},{"type":32,"tag":63,"props":1953,"children":1954},{"style":109},[1955],{"type":37,"value":1956}," async",{"type":32,"tag":63,"props":1958,"children":1959},{"style":109},[1960],{"type":37,"value":178},{"type":32,"tag":63,"props":1962,"children":1963},{"style":80},[1964],{"type":37,"value":1965}," POST",{"type":32,"tag":63,"props":1967,"children":1968},{"style":86},[1969],{"type":37,"value":89},{"type":32,"tag":63,"props":1971,"children":1972},{"style":103},[1973],{"type":37,"value":192},{"type":32,"tag":63,"props":1975,"children":1976},{"style":109},[1977],{"type":37,"value":1978},":",{"type":32,"tag":63,"props":1980,"children":1981},{"style":80},[1982],{"type":37,"value":1983}," Request",{"type":32,"tag":63,"props":1985,"children":1986},{"style":86},[1987],{"type":37,"value":197},{"type":32,"tag":63,"props":1989,"children":1990},{"class":65,"line":167},[1991,1995,2000,2005,2009,2014,2019,2023,2028,2033,2038],{"type":32,"tag":63,"props":1992,"children":1993},{"style":109},[1994],{"type":37,"value":206},{"type":32,"tag":63,"props":1996,"children":1997},{"style":86},[1998],{"type":37,"value":1999}," { ",{"type":32,"tag":63,"props":2001,"children":2002},{"style":209},[2003],{"type":37,"value":2004},"productId",{"type":32,"tag":63,"props":2006,"children":2007},{"style":86},[2008],{"type":37,"value":100},{"type":32,"tag":63,"props":2010,"children":2011},{"style":209},[2012],{"type":37,"value":2013},"quantity",{"type":32,"tag":63,"props":2015,"children":2016},{"style":86},[2017],{"type":37,"value":2018}," } ",{"type":32,"tag":63,"props":2020,"children":2021},{"style":109},[2022],{"type":37,"value":605},{"type":32,"tag":63,"props":2024,"children":2025},{"style":109},[2026],{"type":37,"value":2027}," await",{"type":32,"tag":63,"props":2029,"children":2030},{"style":86},[2031],{"type":37,"value":2032}," request.",{"type":32,"tag":63,"props":2034,"children":2035},{"style":80},[2036],{"type":37,"value":2037},"json",{"type":32,"tag":63,"props":2039,"children":2040},{"style":86},[2041],{"type":37,"value":292},{"type":32,"tag":63,"props":2043,"children":2044},{"class":65,"line":200},[2045,2049,2054,2058,2063,2068],{"type":32,"tag":63,"props":2046,"children":2047},{"style":109},[2048],{"type":37,"value":206},{"type":32,"tag":63,"props":2050,"children":2051},{"style":209},[2052],{"type":37,"value":2053}," startTime",{"type":32,"tag":63,"props":2055,"children":2056},{"style":109},[2057],{"type":37,"value":217},{"type":32,"tag":63,"props":2059,"children":2060},{"style":86},[2061],{"type":37,"value":2062}," Date.",{"type":32,"tag":63,"props":2064,"children":2065},{"style":80},[2066],{"type":37,"value":2067},"now",{"type":32,"tag":63,"props":2069,"children":2070},{"style":86},[2071],{"type":37,"value":292},{"type":32,"tag":63,"props":2073,"children":2074},{"class":65,"line":26},[2075],{"type":32,"tag":63,"props":2076,"children":2077},{"style":86},[2078],{"type":37,"value":328},{"type":32,"tag":63,"props":2080,"children":2081},{"class":65,"line":295},[2082,2087],{"type":32,"tag":63,"props":2083,"children":2084},{"style":109},[2085],{"type":37,"value":2086},"  try",{"type":32,"tag":63,"props":2088,"children":2089},{"style":86},[2090],{"type":37,"value":117},{"type":32,"tag":63,"props":2092,"children":2093},{"class":65,"line":322},[2094,2099,2104,2108,2112,2117],{"type":32,"tag":63,"props":2095,"children":2096},{"style":109},[2097],{"type":37,"value":2098},"    const",{"type":32,"tag":63,"props":2100,"children":2101},{"style":209},[2102],{"type":37,"value":2103}," cart",{"type":32,"tag":63,"props":2105,"children":2106},{"style":109},[2107],{"type":37,"value":217},{"type":32,"tag":63,"props":2109,"children":2110},{"style":109},[2111],{"type":37,"value":2027},{"type":32,"tag":63,"props":2113,"children":2114},{"style":80},[2115],{"type":37,"value":2116}," addToCart",{"type":32,"tag":63,"props":2118,"children":2119},{"style":86},[2120],{"type":37,"value":2121},"(productId, quantity)\n",{"type":32,"tag":63,"props":2123,"children":2124},{"class":65,"line":331},[2125,2129,2134,2138,2142,2146,2151,2155],{"type":32,"tag":63,"props":2126,"children":2127},{"style":109},[2128],{"type":37,"value":2098},{"type":32,"tag":63,"props":2130,"children":2131},{"style":209},[2132],{"type":37,"value":2133}," duration",{"type":32,"tag":63,"props":2135,"children":2136},{"style":109},[2137],{"type":37,"value":217},{"type":32,"tag":63,"props":2139,"children":2140},{"style":86},[2141],{"type":37,"value":2062},{"type":32,"tag":63,"props":2143,"children":2144},{"style":80},[2145],{"type":37,"value":2067},{"type":32,"tag":63,"props":2147,"children":2148},{"style":86},[2149],{"type":37,"value":2150},"() ",{"type":32,"tag":63,"props":2152,"children":2153},{"style":109},[2154],{"type":37,"value":711},{"type":32,"tag":63,"props":2156,"children":2157},{"style":86},[2158],{"type":37,"value":2159}," startTime\n",{"type":32,"tag":63,"props":2161,"children":2162},{"class":65,"line":387},[2163],{"type":32,"tag":63,"props":2164,"children":2165},{"style":86},[2166],{"type":37,"value":2167},"    \n",{"type":32,"tag":63,"props":2169,"children":2170},{"class":65,"line":395},[2171],{"type":32,"tag":63,"props":2172,"children":2173},{"style":70},[2174],{"type":37,"value":2175},"    \u002F\u002F Registro de evento del lado del servidor\n",{"type":32,"tag":63,"props":2177,"children":2178},{"class":65,"line":438},[2179,2184,2189],{"type":32,"tag":63,"props":2180,"children":2181},{"style":109},[2182],{"type":37,"value":2183},"    await",{"type":32,"tag":63,"props":2185,"children":2186},{"style":80},[2187],{"type":37,"value":2188}," logEvent",{"type":32,"tag":63,"props":2190,"children":2191},{"style":86},[2192],{"type":37,"value":2193},"({\n",{"type":32,"tag":63,"props":2195,"children":2196},{"class":65,"line":447},[2197,2202,2207],{"type":32,"tag":63,"props":2198,"children":2199},{"style":86},[2200],{"type":37,"value":2201},"      event: ",{"type":32,"tag":63,"props":2203,"children":2204},{"style":92},[2205],{"type":37,"value":2206},"'add_to_cart_success'",{"type":32,"tag":63,"props":2208,"children":2209},{"style":86},[2210],{"type":37,"value":1188},{"type":32,"tag":63,"props":2212,"children":2213},{"class":65,"line":480},[2214],{"type":32,"tag":63,"props":2215,"children":2216},{"style":86},[2217],{"type":37,"value":2218},"      productId,\n",{"type":32,"tag":63,"props":2220,"children":2221},{"class":65,"line":498},[2222],{"type":32,"tag":63,"props":2223,"children":2224},{"style":86},[2225],{"type":37,"value":2226},"      quantity,\n",{"type":32,"tag":63,"props":2228,"children":2229},{"class":65,"line":507},[2230,2235],{"type":32,"tag":63,"props":2231,"children":2232},{"style":86},[2233],{"type":37,"value":2234},"      duration, ",{"type":32,"tag":63,"props":2236,"children":2237},{"style":70},[2238],{"type":37,"value":2239},"\u002F\u002F ms\n",{"type":32,"tag":63,"props":2241,"children":2242},{"class":65,"line":536},[2243,2248,2252,2256,2260],{"type":32,"tag":63,"props":2244,"children":2245},{"style":86},[2246],{"type":37,"value":2247},"      userId: request.headers.",{"type":32,"tag":63,"props":2249,"children":2250},{"style":80},[2251],{"type":37,"value":258},{"type":32,"tag":63,"props":2253,"children":2254},{"style":86},[2255],{"type":37,"value":89},{"type":32,"tag":63,"props":2257,"children":2258},{"style":92},[2259],{"type":37,"value":267},{"type":32,"tag":63,"props":2261,"children":2262},{"style":86},[2263],{"type":37,"value":1363},{"type":32,"tag":63,"props":2265,"children":2266},{"class":65,"line":545},[2267],{"type":32,"tag":63,"props":2268,"children":2269},{"style":86},[2270],{"type":37,"value":2271},"    })\n",{"type":32,"tag":63,"props":2273,"children":2274},{"class":65,"line":554},[2275],{"type":32,"tag":63,"props":2276,"children":2277},{"style":86},[2278],{"type":37,"value":2167},{"type":32,"tag":63,"props":2280,"children":2281},{"class":65,"line":562},[2282,2286,2291,2295,2300,2305],{"type":32,"tag":63,"props":2283,"children":2284},{"style":109},[2285],{"type":37,"value":453},{"type":32,"tag":63,"props":2287,"children":2288},{"style":86},[2289],{"type":37,"value":2290}," NextResponse.",{"type":32,"tag":63,"props":2292,"children":2293},{"style":80},[2294],{"type":37,"value":2037},{"type":32,"tag":63,"props":2296,"children":2297},{"style":86},[2298],{"type":37,"value":2299},"({ cart }, { status: ",{"type":32,"tag":63,"props":2301,"children":2302},{"style":209},[2303],{"type":37,"value":2304},"200",{"type":32,"tag":63,"props":2306,"children":2307},{"style":86},[2308],{"type":37,"value":2309}," })\n",{"type":32,"tag":63,"props":2311,"children":2312},{"class":65,"line":589},[2313,2317,2322],{"type":32,"tag":63,"props":2314,"children":2315},{"style":86},[2316],{"type":37,"value":486},{"type":32,"tag":63,"props":2318,"children":2319},{"style":109},[2320],{"type":37,"value":2321},"catch",{"type":32,"tag":63,"props":2323,"children":2324},{"style":86},[2325],{"type":37,"value":2326}," (error) {\n",{"type":32,"tag":63,"props":2328,"children":2329},{"class":65,"line":613},[2330,2334,2338,2342,2346,2350,2354,2358],{"type":32,"tag":63,"props":2331,"children":2332},{"style":109},[2333],{"type":37,"value":2098},{"type":32,"tag":63,"props":2335,"children":2336},{"style":209},[2337],{"type":37,"value":2133},{"type":32,"tag":63,"props":2339,"children":2340},{"style":109},[2341],{"type":37,"value":217},{"type":32,"tag":63,"props":2343,"children":2344},{"style":86},[2345],{"type":37,"value":2062},{"type":32,"tag":63,"props":2347,"children":2348},{"style":80},[2349],{"type":37,"value":2067},{"type":32,"tag":63,"props":2351,"children":2352},{"style":86},[2353],{"type":37,"value":2150},{"type":32,"tag":63,"props":2355,"children":2356},{"style":109},[2357],{"type":37,"value":711},{"type":32,"tag":63,"props":2359,"children":2360},{"style":86},[2361],{"type":37,"value":2159},{"type":32,"tag":63,"props":2363,"children":2364},{"class":65,"line":678},[2365],{"type":32,"tag":63,"props":2366,"children":2367},{"style":86},[2368],{"type":37,"value":2167},{"type":32,"tag":63,"props":2370,"children":2371},{"class":65,"line":738},[2372,2376,2380],{"type":32,"tag":63,"props":2373,"children":2374},{"style":109},[2375],{"type":37,"value":2183},{"type":32,"tag":63,"props":2377,"children":2378},{"style":80},[2379],{"type":37,"value":2188},{"type":32,"tag":63,"props":2381,"children":2382},{"style":86},[2383],{"type":37,"value":2193},{"type":32,"tag":63,"props":2385,"children":2386},{"class":65,"line":755},[2387,2391,2396],{"type":32,"tag":63,"props":2388,"children":2389},{"style":86},[2390],{"type":37,"value":2201},{"type":32,"tag":63,"props":2392,"children":2393},{"style":92},[2394],{"type":37,"value":2395},"'add_to_cart_failure'",{"type":32,"tag":63,"props":2397,"children":2398},{"style":86},[2399],{"type":37,"value":1188},{"type":32,"tag":63,"props":2401,"children":2402},{"class":65,"line":763},[2403],{"type":32,"tag":63,"props":2404,"children":2405},{"style":86},[2406],{"type":37,"value":2218},{"type":32,"tag":63,"props":2408,"children":2409},{"class":65,"line":786},[2410],{"type":32,"tag":63,"props":2411,"children":2412},{"style":86},[2413],{"type":37,"value":2226},{"type":32,"tag":63,"props":2415,"children":2417},{"class":65,"line":2416},30,[2418],{"type":32,"tag":63,"props":2419,"children":2420},{"style":86},[2421],{"type":37,"value":2422},"      duration,\n",{"type":32,"tag":63,"props":2424,"children":2426},{"class":65,"line":2425},31,[2427],{"type":32,"tag":63,"props":2428,"children":2429},{"style":86},[2430],{"type":37,"value":2431},"      error: error.message,\n",{"type":32,"tag":63,"props":2433,"children":2435},{"class":65,"line":2434},32,[2436,2440,2444,2448,2452],{"type":32,"tag":63,"props":2437,"children":2438},{"style":86},[2439],{"type":37,"value":2247},{"type":32,"tag":63,"props":2441,"children":2442},{"style":80},[2443],{"type":37,"value":258},{"type":32,"tag":63,"props":2445,"children":2446},{"style":86},[2447],{"type":37,"value":89},{"type":32,"tag":63,"props":2449,"children":2450},{"style":92},[2451],{"type":37,"value":267},{"type":32,"tag":63,"props":2453,"children":2454},{"style":86},[2455],{"type":37,"value":1363},{"type":32,"tag":63,"props":2457,"children":2459},{"class":65,"line":2458},33,[2460],{"type":32,"tag":63,"props":2461,"children":2462},{"style":86},[2463],{"type":37,"value":2271},{"type":32,"tag":63,"props":2465,"children":2467},{"class":65,"line":2466},34,[2468],{"type":32,"tag":63,"props":2469,"children":2470},{"style":86},[2471],{"type":37,"value":2167},{"type":32,"tag":63,"props":2473,"children":2475},{"class":65,"line":2474},35,[2476,2480,2484,2488,2493,2498,2503,2508],{"type":32,"tag":63,"props":2477,"children":2478},{"style":109},[2479],{"type":37,"value":453},{"type":32,"tag":63,"props":2481,"children":2482},{"style":86},[2483],{"type":37,"value":2290},{"type":32,"tag":63,"props":2485,"children":2486},{"style":80},[2487],{"type":37,"value":2037},{"type":32,"tag":63,"props":2489,"children":2490},{"style":86},[2491],{"type":37,"value":2492},"({ error: ",{"type":32,"tag":63,"props":2494,"children":2495},{"style":92},[2496],{"type":37,"value":2497},"'Failed to add to cart'",{"type":32,"tag":63,"props":2499,"children":2500},{"style":86},[2501],{"type":37,"value":2502}," }, { status: ",{"type":32,"tag":63,"props":2504,"children":2505},{"style":209},[2506],{"type":37,"value":2507},"500",{"type":32,"tag":63,"props":2509,"children":2510},{"style":86},[2511],{"type":37,"value":2309},{"type":32,"tag":63,"props":2513,"children":2515},{"class":65,"line":2514},36,[2516],{"type":32,"tag":63,"props":2517,"children":2518},{"style":86},[2519],{"type":37,"value":542},{"type":32,"tag":63,"props":2521,"children":2523},{"class":65,"line":2522},37,[2524],{"type":32,"tag":63,"props":2525,"children":2526},{"style":86},[2527],{"type":37,"value":551},{"type":32,"tag":33,"props":2529,"children":2530},{},[2531],{"type":37,"value":2532},"Agrega estos registros a BigQuery y realiza detección de anomalías:",{"type":32,"tag":52,"props":2534,"children":2538},{"className":2535,"code":2536,"language":2537,"meta":16,"style":16},"language-sql shiki shiki-themes github-dark","-- Comparación de tasa de éxito ATC diaria\nSELECT\n  DATE(timestamp) AS date,\n  COUNTIF(event = 'add_to_cart_success') AS success_count,\n  COUNTIF(event = 'add_to_cart_failure') AS failure_count,\n  SAFE_DIVIDE(\n    COUNTIF(event = 'add_to_cart_success'),\n    COUNTIF(event IN ('add_to_cart_success', 'add_to_cart_failure'))\n  ) * 100 AS success_rate_percent\nFROM analytics.events\nWHERE DATE(timestamp) >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)\nGROUP BY date\nORDER BY date DESC\n","sql",[2539],{"type":32,"tag":59,"props":2540,"children":2541},{"__ignoreMap":16},[2542,2550,2558,2593,2627,2660,2668,2693,2730,2757,2779,2828,2841],{"type":32,"tag":63,"props":2543,"children":2544},{"class":65,"line":66},[2545],{"type":32,"tag":63,"props":2546,"children":2547},{"style":70},[2548],{"type":37,"value":2549},"-- Comparación de tasa de éxito ATC diaria\n",{"type":32,"tag":63,"props":2551,"children":2552},{"class":65,"line":76},[2553],{"type":32,"tag":63,"props":2554,"children":2555},{"style":109},[2556],{"type":37,"value":2557},"SELECT\n",{"type":32,"tag":63,"props":2559,"children":2560},{"class":65,"line":120},[2561,2566,2570,2575,2579,2584,2589],{"type":32,"tag":63,"props":2562,"children":2563},{"style":109},[2564],{"type":37,"value":2565},"  DATE",{"type":32,"tag":63,"props":2567,"children":2568},{"style":86},[2569],{"type":37,"value":89},{"type":32,"tag":63,"props":2571,"children":2572},{"style":109},[2573],{"type":37,"value":2574},"timestamp",{"type":32,"tag":63,"props":2576,"children":2577},{"style":86},[2578],{"type":37,"value":272},{"type":32,"tag":63,"props":2580,"children":2581},{"style":109},[2582],{"type":37,"value":2583},"AS",{"type":32,"tag":63,"props":2585,"children":2586},{"style":109},[2587],{"type":37,"value":2588}," date",{"type":32,"tag":63,"props":2590,"children":2591},{"style":86},[2592],{"type":37,"value":1188},{"type":32,"tag":63,"props":2594,"children":2595},{"class":65,"line":148},[2596,2601,2605,2609,2614,2618,2622],{"type":32,"tag":63,"props":2597,"children":2598},{"style":86},[2599],{"type":37,"value":2600},"  COUNTIF(",{"type":32,"tag":63,"props":2602,"children":2603},{"style":109},[2604],{"type":37,"value":106},{"type":32,"tag":63,"props":2606,"children":2607},{"style":109},[2608],{"type":37,"value":217},{"type":32,"tag":63,"props":2610,"children":2611},{"style":92},[2612],{"type":37,"value":2613}," 'add_to_cart_success'",{"type":32,"tag":63,"props":2615,"children":2616},{"style":86},[2617],{"type":37,"value":272},{"type":32,"tag":63,"props":2619,"children":2620},{"style":109},[2621],{"type":37,"value":2583},{"type":32,"tag":63,"props":2623,"children":2624},{"style":86},[2625],{"type":37,"value":2626}," success_count,\n",{"type":32,"tag":63,"props":2628,"children":2629},{"class":65,"line":157},[2630,2634,2638,2642,2647,2651,2655],{"type":32,"tag":63,"props":2631,"children":2632},{"style":86},[2633],{"type":37,"value":2600},{"type":32,"tag":63,"props":2635,"children":2636},{"style":109},[2637],{"type":37,"value":106},{"type":32,"tag":63,"props":2639,"children":2640},{"style":109},[2641],{"type":37,"value":217},{"type":32,"tag":63,"props":2643,"children":2644},{"style":92},[2645],{"type":37,"value":2646}," 'add_to_cart_failure'",{"type":32,"tag":63,"props":2648,"children":2649},{"style":86},[2650],{"type":37,"value":272},{"type":32,"tag":63,"props":2652,"children":2653},{"style":109},[2654],{"type":37,"value":2583},{"type":32,"tag":63,"props":2656,"children":2657},{"style":86},[2658],{"type":37,"value":2659}," failure_count,\n",{"type":32,"tag":63,"props":2661,"children":2662},{"class":65,"line":167},[2663],{"type":32,"tag":63,"props":2664,"children":2665},{"style":86},[2666],{"type":37,"value":2667},"  SAFE_DIVIDE(\n",{"type":32,"tag":63,"props":2669,"children":2670},{"class":65,"line":200},[2671,2676,2680,2684,2688],{"type":32,"tag":63,"props":2672,"children":2673},{"style":86},[2674],{"type":37,"value":2675},"    COUNTIF(",{"type":32,"tag":63,"props":2677,"children":2678},{"style":109},[2679],{"type":37,"value":106},{"type":32,"tag":63,"props":2681,"children":2682},{"style":109},[2683],{"type":37,"value":217},{"type":32,"tag":63,"props":2685,"children":2686},{"style":92},[2687],{"type":37,"value":2613},{"type":32,"tag":63,"props":2689,"children":2690},{"style":86},[2691],{"type":37,"value":2692},"),\n",{"type":32,"tag":63,"props":2694,"children":2695},{"class":65,"line":26},[2696,2700,2704,2709,2713,2717,2721,2725],{"type":32,"tag":63,"props":2697,"children":2698},{"style":86},[2699],{"type":37,"value":2675},{"type":32,"tag":63,"props":2701,"children":2702},{"style":109},[2703],{"type":37,"value":106},{"type":32,"tag":63,"props":2705,"children":2706},{"style":109},[2707],{"type":37,"value":2708}," IN",{"type":32,"tag":63,"props":2710,"children":2711},{"style":86},[2712],{"type":37,"value":350},{"type":32,"tag":63,"props":2714,"children":2715},{"style":92},[2716],{"type":37,"value":2206},{"type":32,"tag":63,"props":2718,"children":2719},{"style":86},[2720],{"type":37,"value":100},{"type":32,"tag":63,"props":2722,"children":2723},{"style":92},[2724],{"type":37,"value":2395},{"type":32,"tag":63,"props":2726,"children":2727},{"style":86},[2728],{"type":37,"value":2729},"))\n",{"type":32,"tag":63,"props":2731,"children":2732},{"class":65,"line":295},[2733,2738,2743,2747,2752],{"type":32,"tag":63,"props":2734,"children":2735},{"style":86},[2736],{"type":37,"value":2737},"  ) ",{"type":32,"tag":63,"props":2739,"children":2740},{"style":109},[2741],{"type":37,"value":2742},"*",{"type":32,"tag":63,"props":2744,"children":2745},{"style":209},[2746],{"type":37,"value":370},{"type":32,"tag":63,"props":2748,"children":2749},{"style":109},[2750],{"type":37,"value":2751}," AS",{"type":32,"tag":63,"props":2753,"children":2754},{"style":86},[2755],{"type":37,"value":2756}," success_rate_percent\n",{"type":32,"tag":63,"props":2758,"children":2759},{"class":65,"line":322},[2760,2765,2770,2774],{"type":32,"tag":63,"props":2761,"children":2762},{"style":109},[2763],{"type":37,"value":2764},"FROM",{"type":32,"tag":63,"props":2766,"children":2767},{"style":209},[2768],{"type":37,"value":2769}," analytics",{"type":32,"tag":63,"props":2771,"children":2772},{"style":86},[2773],{"type":37,"value":1772},{"type":32,"tag":63,"props":2775,"children":2776},{"style":209},[2777],{"type":37,"value":2778},"events\n",{"type":32,"tag":63,"props":2780,"children":2781},{"class":65,"line":331},[2782,2787,2792,2796,2800,2804,2809,2814,2819,2824],{"type":32,"tag":63,"props":2783,"children":2784},{"style":109},[2785],{"type":37,"value":2786},"WHERE",{"type":32,"tag":63,"props":2788,"children":2789},{"style":109},[2790],{"type":37,"value":2791}," DATE",{"type":32,"tag":63,"props":2793,"children":2794},{"style":86},[2795],{"type":37,"value":89},{"type":32,"tag":63,"props":2797,"children":2798},{"style":109},[2799],{"type":37,"value":2574},{"type":32,"tag":63,"props":2801,"children":2802},{"style":86},[2803],{"type":37,"value":272},{"type":32,"tag":63,"props":2805,"children":2806},{"style":109},[2807],{"type":37,"value":2808},">=",{"type":32,"tag":63,"props":2810,"children":2811},{"style":86},[2812],{"type":37,"value":2813}," DATE_SUB(CURRENT_DATE(), INTERVAL ",{"type":32,"tag":63,"props":2815,"children":2816},{"style":209},[2817],{"type":37,"value":2818},"7",{"type":32,"tag":63,"props":2820,"children":2821},{"style":109},[2822],{"type":37,"value":2823}," DAY",{"type":32,"tag":63,"props":2825,"children":2826},{"style":86},[2827],{"type":37,"value":1363},{"type":32,"tag":63,"props":2829,"children":2830},{"class":65,"line":387},[2831,2836],{"type":32,"tag":63,"props":2832,"children":2833},{"style":109},[2834],{"type":37,"value":2835},"GROUP BY",{"type":32,"tag":63,"props":2837,"children":2838},{"style":109},[2839],{"type":37,"value":2840}," date\n",{"type":32,"tag":63,"props":2842,"children":2843},{"class":65,"line":395},[2844,2849,2853],{"type":32,"tag":63,"props":2845,"children":2846},{"style":109},[2847],{"type":37,"value":2848},"ORDER BY",{"type":32,"tag":63,"props":2850,"children":2851},{"style":109},[2852],{"type":37,"value":2588},{"type":32,"tag":63,"props":2854,"children":2855},{"style":109},[2856],{"type":37,"value":2857}," DESC\n",{"type":32,"tag":33,"props":2859,"children":2860},{},[2861,2863,2869],{"type":37,"value":2862},"Configura alertas si la tasa de éxito cae por debajo del 99% (webhook a Slack, PagerDuty). También observa la métrica de ",{"type":32,"tag":59,"props":2864,"children":2866},{"className":2865},[],[2867],{"type":37,"value":2868},"duration",{"type":37,"value":2870},": si el tiempo promedio de respuesta ATC era 120ms en el sistema antiguo, debería ser 80ms en headless — si sube a 200ms, necesitas optimización de queries a base de datos.",{"type":32,"tag":819,"props":2872,"children":2874},{"id":2873},"session-replay-y-error-tracking",[2875],{"type":37,"value":2876},"Session Replay y Error Tracking",{"type":32,"tag":33,"props":2878,"children":2879},{},[2880],{"type":37,"value":2881},"Implementa herramientas de session replay como Sentry o LogRocket. Correlaciona eventos de fallo de ATC con session ID para ver el viaje completo del usuario: en qué paso quedó deshabilitado el botón, qué solicitud de red causó timeout. En proyectos de migración headless de Roibase, el 60% de bugs detectados mediante session replay provienen de race conditions — por ejemplo, la API de verificación de inventario no se completa antes de la mutación del carrito, por lo que el botón se habilita prematuramente.",{"type":32,"tag":40,"props":2883,"children":2885},{"id":2884},"métricas-de-rendimiento-core-web-vitals-y-costo-de-ejecución",[2886],{"type":37,"value":2887},"Métricas de Rendimiento: Core Web Vitals y Costo de Ejecución",{"type":32,"tag":33,"props":2889,"children":2890},{},[2891],{"type":37,"value":2892},"El verdadero objetivo de la migración headless es mejorar el rendimiento. Sin embargo, un sistema headless implementado incorrectamente puede ser MÁS LENTO que Shopify monolítico. Si haces renderizado del lado del cliente (CSR), LCP puede llegar a 4+ segundos; el enfoque correcto es renderizado del lado del servidor (SSR) o generación de sitios estáticos (SSG) + regeneración estática incremental (ISR).",{"type":32,"tag":33,"props":2894,"children":2895},{},[2896],{"type":37,"value":2897},"Ejemplo de ISR en Next.js App Router para página de detalle de producto:",{"type":32,"tag":52,"props":2899,"children":2903},{"className":2900,"code":2901,"language":2902,"meta":16,"style":16},"language-tsx shiki shiki-themes github-dark","\u002F\u002F app\u002Fproducts\u002F[slug]\u002Fpage.tsx\nexport const revalidate = 3600 \u002F\u002F Regenerar cada 1 hora\n\nexport async function generateStaticParams() {\n  const products = await getTopProducts(100) \u002F\u002F Pre-renderizar primeros 100 productos\n  return products.map(p => ({ slug: p.slug }))\n}\n\nexport default async function ProductPage({ params }) {\n  const product = await getProduct(params.slug)\n  \n  return (\n    \u003Cdiv>\n      \u003Ch1>{product.title}\u003C\u002Fh1>\n      \u003CImage src={product.image} alt={product.title} priority \u002F>\n      \u003CAddToCartButton productId={product.id} \u002F>\n    \u003C\u002Fdiv>\n  )\n}\n","tsx",[2904],{"type":32,"tag":59,"props":2905,"children":2906},{"__ignoreMap":16},[2907,2914,2945,2952,2977,3020,3054,3061,3068,3104,3134,3141,3152,3170,3195,3245,3271,3287,3294],{"type":32,"tag":63,"props":2908,"children":2909},{"class":65,"line":66},[2910],{"type":32,"tag":63,"props":2911,"children":2912},{"style":70},[2913],{"type":37,"value":1438},{"type":32,"tag":63,"props":2915,"children":2916},{"class":65,"line":76},[2917,2921,2926,2931,2935,2940],{"type":32,"tag":63,"props":2918,"children":2919},{"style":109},[2920],{"type":37,"value":1446},{"type":32,"tag":63,"props":2922,"children":2923},{"style":109},[2924],{"type":37,"value":2925}," const",{"type":32,"tag":63,"props":2927,"children":2928},{"style":209},[2929],{"type":37,"value":2930}," revalidate",{"type":32,"tag":63,"props":2932,"children":2933},{"style":109},[2934],{"type":37,"value":217},{"type":32,"tag":63,"props":2936,"children":2937},{"style":209},[2938],{"type":37,"value":2939}," 3600",{"type":32,"tag":63,"props":2941,"children":2942},{"style":70},[2943],{"type":37,"value":2944}," \u002F\u002F Regenerar cada 1 hora\n",{"type":32,"tag":63,"props":2946,"children":2947},{"class":65,"line":120},[2948],{"type":32,"tag":63,"props":2949,"children":2950},{"emptyLinePlaceholder":161},[2951],{"type":37,"value":164},{"type":32,"tag":63,"props":2953,"children":2954},{"class":65,"line":148},[2955,2959,2963,2967,2972],{"type":32,"tag":63,"props":2956,"children":2957},{"style":109},[2958],{"type":37,"value":1446},{"type":32,"tag":63,"props":2960,"children":2961},{"style":109},[2962],{"type":37,"value":1956},{"type":32,"tag":63,"props":2964,"children":2965},{"style":109},[2966],{"type":37,"value":178},{"type":32,"tag":63,"props":2968,"children":2969},{"style":80},[2970],{"type":37,"value":2971}," generateStaticParams",{"type":32,"tag":63,"props":2973,"children":2974},{"style":86},[2975],{"type":37,"value":2976},"() {\n",{"type":32,"tag":63,"props":2978,"children":2979},{"class":65,"line":157},[2980,2984,2989,2993,2997,3002,3006,3011,3015],{"type":32,"tag":63,"props":2981,"children":2982},{"style":109},[2983],{"type":37,"value":206},{"type":32,"tag":63,"props":2985,"children":2986},{"style":209},[2987],{"type":37,"value":2988}," products",{"type":32,"tag":63,"props":2990,"children":2991},{"style":109},[2992],{"type":37,"value":217},{"type":32,"tag":63,"props":2994,"children":2995},{"style":109},[2996],{"type":37,"value":2027},{"type":32,"tag":63,"props":2998,"children":2999},{"style":80},[3000],{"type":37,"value":3001}," getTopProducts",{"type":32,"tag":63,"props":3003,"children":3004},{"style":86},[3005],{"type":37,"value":89},{"type":32,"tag":63,"props":3007,"children":3008},{"style":209},[3009],{"type":37,"value":3010},"100",{"type":32,"tag":63,"props":3012,"children":3013},{"style":86},[3014],{"type":37,"value":272},{"type":32,"tag":63,"props":3016,"children":3017},{"style":70},[3018],{"type":37,"value":3019},"\u002F\u002F Pre-renderizar primeros 100 productos\n",{"type":32,"tag":63,"props":3021,"children":3022},{"class":65,"line":167},[3023,3027,3032,3037,3041,3045,3049],{"type":32,"tag":63,"props":3024,"children":3025},{"style":109},[3026],{"type":37,"value":769},{"type":32,"tag":63,"props":3028,"children":3029},{"style":86},[3030],{"type":37,"value":3031}," products.",{"type":32,"tag":63,"props":3033,"children":3034},{"style":80},[3035],{"type":37,"value":3036},"map",{"type":32,"tag":63,"props":3038,"children":3039},{"style":86},[3040],{"type":37,"value":89},{"type":32,"tag":63,"props":3042,"children":3043},{"style":103},[3044],{"type":37,"value":33},{"type":32,"tag":63,"props":3046,"children":3047},{"style":109},[3048],{"type":37,"value":112},{"type":32,"tag":63,"props":3050,"children":3051},{"style":86},[3052],{"type":37,"value":3053}," ({ slug: p.slug }))\n",{"type":32,"tag":63,"props":3055,"children":3056},{"class":65,"line":200},[3057],{"type":32,"tag":63,"props":3058,"children":3059},{"style":86},[3060],{"type":37,"value":551},{"type":32,"tag":63,"props":3062,"children":3063},{"class":65,"line":26},[3064],{"type":32,"tag":63,"props":3065,"children":3066},{"emptyLinePlaceholder":161},[3067],{"type":37,"value":164},{"type":32,"tag":63,"props":3069,"children":3070},{"class":65,"line":295},[3071,3075,3079,3083,3087,3091,3095,3100],{"type":32,"tag":63,"props":3072,"children":3073},{"style":109},[3074],{"type":37,"value":1446},{"type":32,"tag":63,"props":3076,"children":3077},{"style":109},[3078],{"type":37,"value":1451},{"type":32,"tag":63,"props":3080,"children":3081},{"style":109},[3082],{"type":37,"value":1956},{"type":32,"tag":63,"props":3084,"children":3085},{"style":109},[3086],{"type":37,"value":178},{"type":32,"tag":63,"props":3088,"children":3089},{"style":80},[3090],{"type":37,"value":1460},{"type":32,"tag":63,"props":3092,"children":3093},{"style":86},[3094],{"type":37,"value":1465},{"type":32,"tag":63,"props":3096,"children":3097},{"style":103},[3098],{"type":37,"value":3099},"params",{"type":32,"tag":63,"props":3101,"children":3102},{"style":86},[3103],{"type":37,"value":1475},{"type":32,"tag":63,"props":3105,"children":3106},{"class":65,"line":322},[3107,3111,3116,3120,3124,3129],{"type":32,"tag":63,"props":3108,"children":3109},{"style":109},[3110],{"type":37,"value":206},{"type":32,"tag":63,"props":3112,"children":3113},{"style":209},[3114],{"type":37,"value":3115}," product",{"type":32,"tag":63,"props":3117,"children":3118},{"style":109},[3119],{"type":37,"value":217},{"type":32,"tag":63,"props":3121,"children":3122},{"style":109},[3123],{"type":37,"value":2027},{"type":32,"tag":63,"props":3125,"children":3126},{"style":80},[3127],{"type":37,"value":3128}," getProduct",{"type":32,"tag":63,"props":3130,"children":3131},{"style":86},[3132],{"type":37,"value":3133},"(params.slug)\n",{"type":32,"tag":63,"props":3135,"children":3136},{"class":65,"line":331},[3137],{"type":32,"tag":63,"props":3138,"children":3139},{"style":86},[3140],{"type":37,"value":328},{"type":32,"tag":63,"props":3142,"children":3143},{"class":65,"line":387},[3144,3148],{"type":32,"tag":63,"props":3145,"children":3146},{"style":109},[3147],{"type":37,"value":769},{"type":32,"tag":63,"props":3149,"children":3150},{"style":86},[3151],{"type":37,"value":1707},{"type":32,"tag":63,"props":3153,"children":3154},{"class":65,"line":395},[3155,3160,3165],{"type":32,"tag":63,"props":3156,"children":3157},{"style":86},[3158],{"type":37,"value":3159},"    \u003C",{"type":32,"tag":63,"props":3161,"children":3162},{"style":857},[3163],{"type":37,"value":3164},"div",{"type":32,"tag":63,"props":3166,"children":3167},{"style":86},[3168],{"type":37,"value":3169},">\n",{"type":32,"tag":63,"props":3171,"children":3172},{"class":65,"line":438},[3173,3177,3182,3187,3191],{"type":32,"tag":63,"props":3174,"children":3175},{"style":86},[3176],{"type":37,"value":1723},{"type":32,"tag":63,"props":3178,"children":3179},{"style":857},[3180],{"type":37,"value":3181},"h1",{"type":32,"tag":63,"props":3183,"children":3184},{"style":86},[3185],{"type":37,"value":3186},">{product.title}\u003C\u002F",{"type":32,"tag":63,"props":3188,"children":3189},{"style":857},[3190],{"type":37,"value":3181},{"type":32,"tag":63,"props":3192,"children":3193},{"style":86},[3194],{"type":37,"value":3169},{"type":32,"tag":63,"props":3196,"children":3197},{"class":65,"line":447},[3198,3202,3207,3212,3216,3221,3226,3230,3235,3240],{"type":32,"tag":63,"props":3199,"children":3200},{"style":86},[3201],{"type":37,"value":1723},{"type":32,"tag":63,"props":3203,"children":3204},{"style":209},[3205],{"type":37,"value":3206},"Image",{"type":32,"tag":63,"props":3208,"children":3209},{"style":80},[3210],{"type":37,"value":3211}," src",{"type":32,"tag":63,"props":3213,"children":3214},{"style":109},[3215],{"type":37,"value":605},{"type":32,"tag":63,"props":3217,"children":3218},{"style":86},[3219],{"type":37,"value":3220},"{product.image} ",{"type":32,"tag":63,"props":3222,"children":3223},{"style":80},[3224],{"type":37,"value":3225},"alt",{"type":32,"tag":63,"props":3227,"children":3228},{"style":109},[3229],{"type":37,"value":605},{"type":32,"tag":63,"props":3231,"children":3232},{"style":86},[3233],{"type":37,"value":3234},"{product.title} ",{"type":32,"tag":63,"props":3236,"children":3237},{"style":80},[3238],{"type":37,"value":3239},"priority",{"type":32,"tag":63,"props":3241,"children":3242},{"style":86},[3243],{"type":37,"value":3244}," \u002F>\n",{"type":32,"tag":63,"props":3246,"children":3247},{"class":65,"line":480},[3248,3252,3257,3262,3266],{"type":32,"tag":63,"props":3249,"children":3250},{"style":86},[3251],{"type":37,"value":1723},{"type":32,"tag":63,"props":3253,"children":3254},{"style":209},[3255],{"type":37,"value":3256},"AddToCartButton",{"type":32,"tag":63,"props":3258,"children":3259},{"style":80},[3260],{"type":37,"value":3261}," productId",{"type":32,"tag":63,"props":3263,"children":3264},{"style":109},[3265],{"type":37,"value":605},{"type":32,"tag":63,"props":3267,"children":3268},{"style":86},[3269],{"type":37,"value":3270},"{product.id} \u002F>\n",{"type":32,"tag":63,"props":3272,"children":3273},{"class":65,"line":498},[3274,3279,3283],{"type":32,"tag":63,"props":3275,"children":3276},{"style":86},[3277],{"type":37,"value":3278},"    \u003C\u002F",{"type":32,"tag":63,"props":3280,"children":3281},{"style":857},[3282],{"type":37,"value":3164},{"type":32,"tag":63,"props":3284,"children":3285},{"style":86},[3286],{"type":37,"value":3169},{"type":32,"tag":63,"props":3288,"children":3289},{"class":65,"line":507},[3290],{"type":32,"tag":63,"props":3291,"children":3292},{"style":86},[3293],{"type":37,"value":1823},{"type":32,"tag":63,"props":3295,"children":3296},{"class":65,"line":536},[3297],{"type":32,"tag":63,"props":3298,"children":3299},{"style":86},[3300],{"type":37,"value":551},{"type":32,"tag":33,"props":3302,"children":3303},{},[3304],{"type":37,"value":3305},"Con esta estructura, los primeros 100 productos se generan en tiempo de construcción, el resto se renderizan on-demand en la primera solicitud y se cachean por 1 hora. LCP baja a 1.2s porque el HTML está listo, solo falta cargar imágenes.",{"type":32,"tag":33,"props":3307,"children":3308},{},[3309],{"type":37,"value":3310},"Mide también el costo de ejecución: número de invocaciones de función serverless × tiempo de ejecución × precios. En Vercel, si cada página SSR toma 50ms de ejecución y tienes 100.000 vistas de página diarias: 100k × 50ms = 5 millones de GB-s, que son $25\u002Fdía (precios Vercel Pro). Para reducir esto:",{"type":32,"tag":3312,"props":3313,"children":3314},"ol",{},[3315,3329,3334],{"type":32,"tag":3316,"props":3317,"children":3318},"li",{},[3319,3321,3327],{"type":37,"value":3320},"Caché de Edge — activa caché de CDN con ",{"type":32,"tag":59,"props":3322,"children":3324},{"className":3323},[],[3325],{"type":37,"value":3326},"Cache-Control: s-maxage=3600",{"type":37,"value":3328}," en Cloudflare",{"type":32,"tag":3316,"props":3330,"children":3331},{},[3332],{"type":37,"value":3333},"Hidratación parcial — usa Astro o Qwik, hidrata solo componentes interactivos",{"type":32,"tag":3316,"props":3335,"children":3336},{},[3337,3339,3345],{"type":37,"value":3338},"Optimización de queries a BD — si hay problema N+1, usa ",{"type":32,"tag":59,"props":3340,"children":3342},{"className":3341},[],[3343],{"type":37,"value":3344},"include",{"type":37,"value":3346}," en Prisma, reduce 10 queries a 1",{"type":32,"tag":1025,"props":3348,"children":3349},{},[3350,3375],{"type":32,"tag":1029,"props":3351,"children":3352},{},[3353],{"type":32,"tag":1033,"props":3354,"children":3355},{},[3356,3361,3365,3370],{"type":32,"tag":1037,"props":3357,"children":3358},{},[3359],{"type":37,"value":3360},"Métrica",{"type":32,"tag":1037,"props":3362,"children":3363},{},[3364],{"type":37,"value":1041},{"type":32,"tag":1037,"props":3366,"children":3367},{},[3368],{"type":37,"value":3369},"Nuevo (Next.js SSR)",{"type":32,"tag":1037,"props":3371,"children":3372},{},[3373],{"type":37,"value":3374},"Objetivo",{"type":32,"tag":1053,"props":3376,"children":3377},{},[3378,3401,3424,3447,3470],{"type":32,"tag":1033,"props":3379,"children":3380},{},[3381,3386,3391,3396],{"type":32,"tag":1060,"props":3382,"children":3383},{},[3384],{"type":37,"value":3385},"LCP",{"type":32,"tag":1060,"props":3387,"children":3388},{},[3389],{"type":37,"value":3390},"2.3s",{"type":32,"tag":1060,"props":3392,"children":3393},{},[3394],{"type":37,"value":3395},"1.8s",{"type":32,"tag":1060,"props":3397,"children":3398},{},[3399],{"type":37,"value":3400},"\u003C2.5s",{"type":32,"tag":1033,"props":3402,"children":3403},{},[3404,3409,3414,3419],{"type":32,"tag":1060,"props":3405,"children":3406},{},[3407],{"type":37,"value":3408},"TBT",{"type":32,"tag":1060,"props":3410,"children":3411},{},[3412],{"type":37,"value":3413},"190ms",{"type":32,"tag":1060,"props":3415,"children":3416},{},[3417],{"type":37,"value":3418},"120ms",{"type":32,"tag":1060,"props":3420,"children":3421},{},[3422],{"type":37,"value":3423},"\u003C200ms",{"type":32,"tag":1033,"props":3425,"children":3426},{},[3427,3432,3437,3442],{"type":32,"tag":1060,"props":3428,"children":3429},{},[3430],{"type":37,"value":3431},"CLS",{"type":32,"tag":1060,"props":3433,"children":3434},{},[3435],{"type":37,"value":3436},"0.08",{"type":32,"tag":1060,"props":3438,"children":3439},{},[3440],{"type":37,"value":3441},"0.02",{"type":32,"tag":1060,"props":3443,"children":3444},{},[3445],{"type":37,"value":3446},"\u003C0.1",{"type":32,"tag":1033,"props":3448,"children":3449},{},[3450,3455,3460,3465],{"type":32,"tag":1060,"props":3451,"children":3452},{},[3453],{"type":37,"value":3454},"Tiempo de respuesta del servidor",{"type":32,"tag":1060,"props":3456,"children":3457},{},[3458],{"type":37,"value":3459},"420ms",{"type":32,"tag":1060,"props":3461,"children":3462},{},[3463],{"type":37,"value":3464},"180ms",{"type":32,"tag":1060,"props":3466,"children":3467},{},[3468],{"type":37,"value":3469},"\u003C300ms",{"type":32,"tag":1033,"props":3471,"children":3472},{},[3473,3478,3483,3488],{"type":32,"tag":1060,"props":3474,"children":3475},{},[3476],{"type":37,"value":3477},"Costo de ejecución mensual",{"type":32,"tag":1060,"props":3479,"children":3480},{},[3481],{"type":37,"value":3482},"$0 (incluido)",{"type":32,"tag":1060,"props":3484,"children":3485},{},[3486],{"type":37,"value":3487},"$750 (Vercel Pro)",{"type":32,"tag":1060,"props":3489,"children":3490},{},[3491],{"type":37,"value":3492},"\u003C$1000",{"type":32,"tag":40,"props":3494,"children":3496},{"id":3495},"estrategia-de-rollback-y-período-de-dual-run",[3497],{"type":37,"value":3498},"Estrategia de Rollback y Período de Dual-Run",{"type":32,"tag":33,"props":3500,"children":3501},{},[3502],{"type":37,"value":3503},"La fase final de la migración es el período de dual-run: ambos sistemas se ejecutan en paralelo durante",{"type":32,"tag":3505,"props":3506,"children":3507},"style",{},[3508],{"type":37,"value":3509},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":16,"searchDepth":120,"depth":120,"links":3511},[3512,3515,3518,3521,3522],{"id":42,"depth":76,"text":45,"children":3513},[3514],{"id":821,"depth":120,"text":824},{"id":1010,"depth":76,"text":1013,"children":3516},[3517],{"id":1838,"depth":120,"text":1841},{"id":1865,"depth":76,"text":1868,"children":3519},[3520],{"id":2873,"depth":120,"text":2876},{"id":2884,"depth":76,"text":2887},{"id":3495,"depth":76,"text":3498},"markdown","content:es:tech:migracion-headless-hoja-de-ruta-y-gestion-de-riesgos.md","content","es\u002Ftech\u002Fmigracion-headless-hoja-de-ruta-y-gestion-de-riesgos.md","es\u002Ftech\u002Fmigracion-headless-hoja-de-ruta-y-gestion-de-riesgos","md",1785247482027]