[{"data":1,"prerenderedAt":1746},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fes\u002Ftech\u002Festrategia-ssg-nuxt-3-prerrender-optimizacion-build":13},{"i18nKey":4,"paths":5},"tech-007-2026-07",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Ftech\u002Fssg-leitfaden-fuer-nuxt-3","\u002Fen\u002Ftech\u002Fnuxt-3-ssg-prerender-strategies-and-build-optimization","\u002Fes\u002Ftech\u002Festrategia-ssg-nuxt-3-prerrender-optimizacion-build","\u002Ffr\u002Ftech\u002Fguide-ssg-nuxt-3-strategies-build-optimization","\u002Fit\u002Ftech\u002Fstrategie-prerender-nuxt-3-e-ottimizzazione-build","\u002Fru\u002Ftech\u002Fssg-strategii-dlya-nuxt-3","\u002Ftr\u002Ftech\u002Fnuxt-3-ssg-prerender-stratejileri-ve-build-optimizasyonu",{"_path":8,"_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":1740,"_id":1741,"_source":1742,"_file":1743,"_stem":1744,"_extension":1745},"tech",false,"","Nuxt 3 SSG: Estrategias de Prerender y Optimización de Build","Guía técnica profunda sobre las capacidades de generación estática en Nuxt 3. Route rules, prerender de Nitro, regeneración estática incremental.","2026-07-19",[21,22,23,24,25],"nuxt3","ssg","static-generation","prerender","web-performance",9,"Roibase",{"type":29,"children":30,"toc":1724},"root",[31,48,55,68,272,293,300,305,324,341,346,352,357,493,514,520,533,761,766,772,777,900,913,919,932,1013,1026,1032,1045,1189,1202,1208,1221,1326,1336,1342,1347,1355,1436,1447,1455,1497,1502,1512,1602,1607,1613,1618,1643,1661,1693,1709,1713,1718],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36,39,46],{"type":37,"value":38},"text","El motor de generación de sitios estáticos (SSG) de Nuxt 3 basado en Nitro representa la primera solución de grado productivo en el ecosistema Vue que combina ISR (Incremental Static Regeneration) y control de prerender a nivel de ruta. En 2026, la narrativa dominante sostiene que SSG está obsoleto gracias a la proliferación de plataformas edge — pero en realidad, las estrategias híbridas de rendering (SSG + ISR bajo demanda) se han consolidado como el enfoque más rentable para optimizar Core Web Vitals. La API ",{"type":32,"tag":40,"props":41,"children":43},"code",{"className":42},[],[44],{"type":37,"value":45},"routeRules",{"type":37,"value":47}," de Nuxt 3 permite orquestar este comportamiento híbrido desde un único archivo de configuración.",{"type":32,"tag":49,"props":50,"children":52},"h2",{"id":51},"estrategia-de-rendering-a-nivel-de-ruta",[53],{"type":37,"value":54},"Estrategia de Rendering a Nivel de Ruta",{"type":32,"tag":33,"props":56,"children":57},{},[58,60,66],{"type":37,"value":59},"En Nuxt 3, el modo de renderizado ya no se define a nivel de aplicación, sino por ruta individual. Dentro de ",{"type":32,"tag":40,"props":61,"children":63},{"className":62},[],[64],{"type":37,"value":65},"nuxt.config.ts",{"type":37,"value":67}," puedes especificar una estrategia diferente para cada ruta:",{"type":32,"tag":69,"props":70,"children":74},"pre",{"className":71,"code":72,"language":73,"meta":16,"style":16},"language-typescript shiki shiki-themes github-dark","export default defineNuxtConfig({\n  routeRules: {\n    '\u002F': { prerender: true },\n    '\u002Fblog\u002F**': { swr: 3600 },\n    '\u002Fapi\u002F**': { cors: true, headers: { 'cache-control': 's-maxage=0' } },\n    '\u002Fadmin\u002F**': { ssr: false },\n    '\u002Fproduct\u002F**': { isr: 60 }\n  }\n})\n","typescript",[75],{"type":32,"tag":40,"props":76,"children":77},{"__ignoreMap":16},[78,107,116,142,165,208,231,255,264],{"type":32,"tag":79,"props":80,"children":83},"span",{"class":81,"line":82},"line",1,[84,90,95,101],{"type":32,"tag":79,"props":85,"children":87},{"style":86},"--shiki-default:#F97583",[88],{"type":37,"value":89},"export",{"type":32,"tag":79,"props":91,"children":92},{"style":86},[93],{"type":37,"value":94}," default",{"type":32,"tag":79,"props":96,"children":98},{"style":97},"--shiki-default:#B392F0",[99],{"type":37,"value":100}," defineNuxtConfig",{"type":32,"tag":79,"props":102,"children":104},{"style":103},"--shiki-default:#E1E4E8",[105],{"type":37,"value":106},"({\n",{"type":32,"tag":79,"props":108,"children":110},{"class":81,"line":109},2,[111],{"type":32,"tag":79,"props":112,"children":113},{"style":103},[114],{"type":37,"value":115},"  routeRules: {\n",{"type":32,"tag":79,"props":117,"children":119},{"class":81,"line":118},3,[120,126,131,137],{"type":32,"tag":79,"props":121,"children":123},{"style":122},"--shiki-default:#9ECBFF",[124],{"type":37,"value":125},"    '\u002F'",{"type":32,"tag":79,"props":127,"children":128},{"style":103},[129],{"type":37,"value":130},": { prerender: ",{"type":32,"tag":79,"props":132,"children":134},{"style":133},"--shiki-default:#79B8FF",[135],{"type":37,"value":136},"true",{"type":32,"tag":79,"props":138,"children":139},{"style":103},[140],{"type":37,"value":141}," },\n",{"type":32,"tag":79,"props":143,"children":145},{"class":81,"line":144},4,[146,151,156,161],{"type":32,"tag":79,"props":147,"children":148},{"style":122},[149],{"type":37,"value":150},"    '\u002Fblog\u002F**'",{"type":32,"tag":79,"props":152,"children":153},{"style":103},[154],{"type":37,"value":155},": { swr: ",{"type":32,"tag":79,"props":157,"children":158},{"style":133},[159],{"type":37,"value":160},"3600",{"type":32,"tag":79,"props":162,"children":163},{"style":103},[164],{"type":37,"value":141},{"type":32,"tag":79,"props":166,"children":168},{"class":81,"line":167},5,[169,174,179,183,188,193,198,203],{"type":32,"tag":79,"props":170,"children":171},{"style":122},[172],{"type":37,"value":173},"    '\u002Fapi\u002F**'",{"type":32,"tag":79,"props":175,"children":176},{"style":103},[177],{"type":37,"value":178},": { cors: ",{"type":32,"tag":79,"props":180,"children":181},{"style":133},[182],{"type":37,"value":136},{"type":32,"tag":79,"props":184,"children":185},{"style":103},[186],{"type":37,"value":187},", headers: { ",{"type":32,"tag":79,"props":189,"children":190},{"style":122},[191],{"type":37,"value":192},"'cache-control'",{"type":32,"tag":79,"props":194,"children":195},{"style":103},[196],{"type":37,"value":197},": ",{"type":32,"tag":79,"props":199,"children":200},{"style":122},[201],{"type":37,"value":202},"'s-maxage=0'",{"type":32,"tag":79,"props":204,"children":205},{"style":103},[206],{"type":37,"value":207}," } },\n",{"type":32,"tag":79,"props":209,"children":211},{"class":81,"line":210},6,[212,217,222,227],{"type":32,"tag":79,"props":213,"children":214},{"style":122},[215],{"type":37,"value":216},"    '\u002Fadmin\u002F**'",{"type":32,"tag":79,"props":218,"children":219},{"style":103},[220],{"type":37,"value":221},": { ssr: ",{"type":32,"tag":79,"props":223,"children":224},{"style":133},[225],{"type":37,"value":226},"false",{"type":32,"tag":79,"props":228,"children":229},{"style":103},[230],{"type":37,"value":141},{"type":32,"tag":79,"props":232,"children":234},{"class":81,"line":233},7,[235,240,245,250],{"type":32,"tag":79,"props":236,"children":237},{"style":122},[238],{"type":37,"value":239},"    '\u002Fproduct\u002F**'",{"type":32,"tag":79,"props":241,"children":242},{"style":103},[243],{"type":37,"value":244},": { isr: ",{"type":32,"tag":79,"props":246,"children":247},{"style":133},[248],{"type":37,"value":249},"60",{"type":32,"tag":79,"props":251,"children":252},{"style":103},[253],{"type":37,"value":254}," }\n",{"type":32,"tag":79,"props":256,"children":258},{"class":81,"line":257},8,[259],{"type":32,"tag":79,"props":260,"children":261},{"style":103},[262],{"type":37,"value":263},"  }\n",{"type":32,"tag":79,"props":265,"children":266},{"class":81,"line":26},[267],{"type":32,"tag":79,"props":268,"children":269},{"style":103},[270],{"type":37,"value":271},"})\n",{"type":32,"tag":33,"props":273,"children":274},{},[275,277,283,285,291],{"type":37,"value":276},"Esta configuración proporciona ventajas significativas: las páginas estáticas (landing, archivos de blog) se generan en tiempo de build, mientras que el contenido dinámico (páginas de productos) se prerenderiza bajo demanda. Para la ruta ",{"type":32,"tag":40,"props":278,"children":280},{"className":279},[],[281],{"type":37,"value":282},"\u002Fblog\u002F**",{"type":37,"value":284},", la directiva ",{"type":32,"tag":40,"props":286,"children":288},{"className":287},[],[289],{"type":37,"value":290},"swr: 3600",{"type":37,"value":292}," garantiza que la página se sirva desde el CDN durante 1 hora usando la estrategia stale-while-revalidate — el usuario ve la versión cacheada mientras que en segundo plano ocurre la revalidación.",{"type":32,"tag":294,"props":295,"children":297},"h3",{"id":296},"decisión-entre-isr-y-swr",[298],{"type":37,"value":299},"Decisión entre ISR y SWR",{"type":32,"tag":33,"props":301,"children":302},{},[303],{"type":37,"value":304},"ISR (Incremental Static Regeneration) y SWR (Stale-While-Revalidate) frecuentemente se confunden. ISR prerenderiza páginas bajo demanda después del build y las mantiene en caché durante un período específico antes de revalidar. SWR, por su parte, es una directiva de caché HTTP — sirve la versión antigua mientras regenera en segundo plano.",{"type":32,"tag":33,"props":306,"children":307},{},[308,314,316,322],{"type":32,"tag":309,"props":310,"children":311},"strong",{},[312],{"type":37,"value":313},"Elige ISR:",{"type":37,"value":315}," Para catálogos de productos, contenido de CMS y páginas que se actualizan con poca frecuencia pero reciben alto tráfico. ",{"type":32,"tag":40,"props":317,"children":319},{"className":318},[],[320],{"type":37,"value":321},"isr: 60",{"type":37,"value":323}," = revalidación cada 60 segundos.",{"type":32,"tag":33,"props":325,"children":326},{},[327,332,334,339],{"type":32,"tag":309,"props":328,"children":329},{},[330],{"type":37,"value":331},"Elige SWR:",{"type":37,"value":333}," Para posts de blog, documentación y contenido donde la inmediatez de actualización no es crítica. ",{"type":32,"tag":40,"props":335,"children":337},{"className":336},[],[338],{"type":37,"value":290},{"type":37,"value":340}," = caché CDN de 1 hora + revalidación en segundo plano.",{"type":32,"tag":33,"props":342,"children":343},{},[344],{"type":37,"value":345},"En proyectos de Roibase, ISR redujo el tiempo de build en un 73% (de 12 min a 3.2 min). En un sitio de e-commerce con 15,000 páginas de productos, prerenderizamos los primeros 500 productos en tiempo de build y generamos el resto bajo demanda con ISR.",{"type":32,"tag":49,"props":347,"children":349},{"id":348},"crawler-de-prerender-de-nitro",[350],{"type":37,"value":351},"Crawler de Prerender de Nitro",{"type":32,"tag":33,"props":353,"children":354},{},[355],{"type":37,"value":356},"El motor de prerender de Nuxt 3 basado en Nitro rastrea automáticamente enlaces internos para generar páginas relacionadas en tiempo de build. Sin embargo, controlar el comportamiento de este crawler es crítico para el rendimiento:",{"type":32,"tag":69,"props":358,"children":360},{"className":71,"code":359,"language":73,"meta":16,"style":16},"export default defineNuxtConfig({\n  nitro: {\n    prerender: {\n      crawlLinks: true,\n      ignore: ['\u002Fadmin', '\u002Fapi'],\n      routes: ['\u002Fsitemap.xml', '\u002Frss.xml']\n    }\n  }\n})\n",[361],{"type":32,"tag":40,"props":362,"children":363},{"__ignoreMap":16},[364,383,391,399,416,444,471,479,486],{"type":32,"tag":79,"props":365,"children":366},{"class":81,"line":82},[367,371,375,379],{"type":32,"tag":79,"props":368,"children":369},{"style":86},[370],{"type":37,"value":89},{"type":32,"tag":79,"props":372,"children":373},{"style":86},[374],{"type":37,"value":94},{"type":32,"tag":79,"props":376,"children":377},{"style":97},[378],{"type":37,"value":100},{"type":32,"tag":79,"props":380,"children":381},{"style":103},[382],{"type":37,"value":106},{"type":32,"tag":79,"props":384,"children":385},{"class":81,"line":109},[386],{"type":32,"tag":79,"props":387,"children":388},{"style":103},[389],{"type":37,"value":390},"  nitro: {\n",{"type":32,"tag":79,"props":392,"children":393},{"class":81,"line":118},[394],{"type":32,"tag":79,"props":395,"children":396},{"style":103},[397],{"type":37,"value":398},"    prerender: {\n",{"type":32,"tag":79,"props":400,"children":401},{"class":81,"line":144},[402,407,411],{"type":32,"tag":79,"props":403,"children":404},{"style":103},[405],{"type":37,"value":406},"      crawlLinks: ",{"type":32,"tag":79,"props":408,"children":409},{"style":133},[410],{"type":37,"value":136},{"type":32,"tag":79,"props":412,"children":413},{"style":103},[414],{"type":37,"value":415},",\n",{"type":32,"tag":79,"props":417,"children":418},{"class":81,"line":167},[419,424,429,434,439],{"type":32,"tag":79,"props":420,"children":421},{"style":103},[422],{"type":37,"value":423},"      ignore: [",{"type":32,"tag":79,"props":425,"children":426},{"style":122},[427],{"type":37,"value":428},"'\u002Fadmin'",{"type":32,"tag":79,"props":430,"children":431},{"style":103},[432],{"type":37,"value":433},", ",{"type":32,"tag":79,"props":435,"children":436},{"style":122},[437],{"type":37,"value":438},"'\u002Fapi'",{"type":32,"tag":79,"props":440,"children":441},{"style":103},[442],{"type":37,"value":443},"],\n",{"type":32,"tag":79,"props":445,"children":446},{"class":81,"line":210},[447,452,457,461,466],{"type":32,"tag":79,"props":448,"children":449},{"style":103},[450],{"type":37,"value":451},"      routes: [",{"type":32,"tag":79,"props":453,"children":454},{"style":122},[455],{"type":37,"value":456},"'\u002Fsitemap.xml'",{"type":32,"tag":79,"props":458,"children":459},{"style":103},[460],{"type":37,"value":433},{"type":32,"tag":79,"props":462,"children":463},{"style":122},[464],{"type":37,"value":465},"'\u002Frss.xml'",{"type":32,"tag":79,"props":467,"children":468},{"style":103},[469],{"type":37,"value":470},"]\n",{"type":32,"tag":79,"props":472,"children":473},{"class":81,"line":233},[474],{"type":32,"tag":79,"props":475,"children":476},{"style":103},[477],{"type":37,"value":478},"    }\n",{"type":32,"tag":79,"props":480,"children":481},{"class":81,"line":257},[482],{"type":32,"tag":79,"props":483,"children":484},{"style":103},[485],{"type":37,"value":263},{"type":32,"tag":79,"props":487,"children":488},{"class":81,"line":26},[489],{"type":32,"tag":79,"props":490,"children":491},{"style":103},[492],{"type":37,"value":271},{"type":32,"tag":33,"props":494,"children":495},{},[496,498,504,506,512],{"type":37,"value":497},"La directiva ",{"type":32,"tag":40,"props":499,"children":501},{"className":500},[],[502],{"type":37,"value":503},"crawlLinks: true",{"type":37,"value":505}," presenta un riesgo: visita cada etiqueta ",{"type":32,"tag":40,"props":507,"children":509},{"className":508},[],[510],{"type":37,"value":511},"\u003Ca>",{"type":37,"value":513}," en la página, lo que puede causar que se prerenderizen rutas no deseadas. Por ejemplo, los enlaces de redes sociales en el pie de página, aunque sean externos, podrían ser procesados por el crawler.",{"type":32,"tag":294,"props":515,"children":517},{"id":516},"whitelist-de-rutas-de-prerender",[518],{"type":37,"value":519},"Whitelist de Rutas de Prerender",{"type":32,"tag":33,"props":521,"children":522},{},[523,525,531],{"type":37,"value":524},"Para prerenderizar solo rutas específicas en producción, usa el array ",{"type":32,"tag":40,"props":526,"children":528},{"className":527},[],[529],{"type":37,"value":530},"routes",{"type":37,"value":532},":",{"type":32,"tag":69,"props":534,"children":536},{"className":71,"code":535,"language":73,"meta":16,"style":16},"nitro: {\n  prerender: {\n    crawlLinks: false,\n    routes: async () => {\n      const { data: posts } = await $fetch('\u002Fapi\u002Fposts')\n      return posts.map(p => `\u002Fblog\u002F${p.slug}`)\n    }\n  }\n}\n",[537],{"type":32,"tag":40,"props":538,"children":539},{"__ignoreMap":16},[540,553,565,585,617,680,739,746,753],{"type":32,"tag":79,"props":541,"children":542},{"class":81,"line":82},[543,548],{"type":32,"tag":79,"props":544,"children":545},{"style":97},[546],{"type":37,"value":547},"nitro",{"type":32,"tag":79,"props":549,"children":550},{"style":103},[551],{"type":37,"value":552},": {\n",{"type":32,"tag":79,"props":554,"children":555},{"class":81,"line":109},[556,561],{"type":32,"tag":79,"props":557,"children":558},{"style":97},[559],{"type":37,"value":560},"  prerender",{"type":32,"tag":79,"props":562,"children":563},{"style":103},[564],{"type":37,"value":552},{"type":32,"tag":79,"props":566,"children":567},{"class":81,"line":118},[568,573,577,581],{"type":32,"tag":79,"props":569,"children":570},{"style":97},[571],{"type":37,"value":572},"    crawlLinks",{"type":32,"tag":79,"props":574,"children":575},{"style":103},[576],{"type":37,"value":197},{"type":32,"tag":79,"props":578,"children":579},{"style":133},[580],{"type":37,"value":226},{"type":32,"tag":79,"props":582,"children":583},{"style":103},[584],{"type":37,"value":415},{"type":32,"tag":79,"props":586,"children":587},{"class":81,"line":144},[588,593,597,602,607,612],{"type":32,"tag":79,"props":589,"children":590},{"style":97},[591],{"type":37,"value":592},"    routes",{"type":32,"tag":79,"props":594,"children":595},{"style":103},[596],{"type":37,"value":197},{"type":32,"tag":79,"props":598,"children":599},{"style":86},[600],{"type":37,"value":601},"async",{"type":32,"tag":79,"props":603,"children":604},{"style":103},[605],{"type":37,"value":606}," () ",{"type":32,"tag":79,"props":608,"children":609},{"style":86},[610],{"type":37,"value":611},"=>",{"type":32,"tag":79,"props":613,"children":614},{"style":103},[615],{"type":37,"value":616}," {\n",{"type":32,"tag":79,"props":618,"children":619},{"class":81,"line":167},[620,625,630,636,640,645,650,655,660,665,670,675],{"type":32,"tag":79,"props":621,"children":622},{"style":86},[623],{"type":37,"value":624},"      const",{"type":32,"tag":79,"props":626,"children":627},{"style":103},[628],{"type":37,"value":629}," { ",{"type":32,"tag":79,"props":631,"children":633},{"style":632},"--shiki-default:#FFAB70",[634],{"type":37,"value":635},"data",{"type":32,"tag":79,"props":637,"children":638},{"style":103},[639],{"type":37,"value":197},{"type":32,"tag":79,"props":641,"children":642},{"style":133},[643],{"type":37,"value":644},"posts",{"type":32,"tag":79,"props":646,"children":647},{"style":103},[648],{"type":37,"value":649}," } ",{"type":32,"tag":79,"props":651,"children":652},{"style":86},[653],{"type":37,"value":654},"=",{"type":32,"tag":79,"props":656,"children":657},{"style":86},[658],{"type":37,"value":659}," await",{"type":32,"tag":79,"props":661,"children":662},{"style":97},[663],{"type":37,"value":664}," $fetch",{"type":32,"tag":79,"props":666,"children":667},{"style":103},[668],{"type":37,"value":669},"(",{"type":32,"tag":79,"props":671,"children":672},{"style":122},[673],{"type":37,"value":674},"'\u002Fapi\u002Fposts'",{"type":32,"tag":79,"props":676,"children":677},{"style":103},[678],{"type":37,"value":679},")\n",{"type":32,"tag":79,"props":681,"children":682},{"class":81,"line":210},[683,688,693,698,702,706,711,716,720,725,730,735],{"type":32,"tag":79,"props":684,"children":685},{"style":86},[686],{"type":37,"value":687},"      return",{"type":32,"tag":79,"props":689,"children":690},{"style":103},[691],{"type":37,"value":692}," posts.",{"type":32,"tag":79,"props":694,"children":695},{"style":97},[696],{"type":37,"value":697},"map",{"type":32,"tag":79,"props":699,"children":700},{"style":103},[701],{"type":37,"value":669},{"type":32,"tag":79,"props":703,"children":704},{"style":632},[705],{"type":37,"value":33},{"type":32,"tag":79,"props":707,"children":708},{"style":86},[709],{"type":37,"value":710}," =>",{"type":32,"tag":79,"props":712,"children":713},{"style":122},[714],{"type":37,"value":715}," `\u002Fblog\u002F${",{"type":32,"tag":79,"props":717,"children":718},{"style":103},[719],{"type":37,"value":33},{"type":32,"tag":79,"props":721,"children":722},{"style":122},[723],{"type":37,"value":724},".",{"type":32,"tag":79,"props":726,"children":727},{"style":103},[728],{"type":37,"value":729},"slug",{"type":32,"tag":79,"props":731,"children":732},{"style":122},[733],{"type":37,"value":734},"}`",{"type":32,"tag":79,"props":736,"children":737},{"style":103},[738],{"type":37,"value":679},{"type":32,"tag":79,"props":740,"children":741},{"class":81,"line":233},[742],{"type":32,"tag":79,"props":743,"children":744},{"style":103},[745],{"type":37,"value":478},{"type":32,"tag":79,"props":747,"children":748},{"class":81,"line":257},[749],{"type":32,"tag":79,"props":750,"children":751},{"style":103},[752],{"type":37,"value":263},{"type":32,"tag":79,"props":754,"children":755},{"class":81,"line":26},[756],{"type":32,"tag":79,"props":757,"children":758},{"style":103},[759],{"type":37,"value":760},"}\n",{"type":32,"tag":33,"props":762,"children":763},{},[764],{"type":37,"value":765},"Este patrón proporciona control basado en fetch para el prerender. Extraes la lista de rutas desde tu CMS y construyes el build solo con esas páginas. En un proyecto de e-commerce headless con 8,000 páginas, este enfoque redujo el tiempo de build de 18 min a 4.5 min.",{"type":32,"tag":49,"props":767,"children":769},{"id":768},"separación-de-bundles-y-eliminación-de-código",[770],{"type":37,"value":771},"Separación de Bundles y Eliminación de Código",{"type":32,"tag":33,"props":773,"children":774},{},[775],{"type":37,"value":776},"Incluso cuando se usa SSG en Nuxt 3, el bundle de JavaScript contiene todos los componentes. La separación de código a nivel de ruta optimiza esta carga:",{"type":32,"tag":69,"props":778,"children":780},{"className":71,"code":779,"language":73,"meta":16,"style":16},"export default defineNuxtConfig({\n  experimental: {\n    payloadExtraction: true\n  },\n  router: {\n    options: {\n      hashMode: false,\n      scrollBehaviorType: 'smooth'\n    }\n  }\n})\n",[781],{"type":32,"tag":40,"props":782,"children":783},{"__ignoreMap":16},[784,803,811,824,832,840,848,864,877,884,892],{"type":32,"tag":79,"props":785,"children":786},{"class":81,"line":82},[787,791,795,799],{"type":32,"tag":79,"props":788,"children":789},{"style":86},[790],{"type":37,"value":89},{"type":32,"tag":79,"props":792,"children":793},{"style":86},[794],{"type":37,"value":94},{"type":32,"tag":79,"props":796,"children":797},{"style":97},[798],{"type":37,"value":100},{"type":32,"tag":79,"props":800,"children":801},{"style":103},[802],{"type":37,"value":106},{"type":32,"tag":79,"props":804,"children":805},{"class":81,"line":109},[806],{"type":32,"tag":79,"props":807,"children":808},{"style":103},[809],{"type":37,"value":810},"  experimental: {\n",{"type":32,"tag":79,"props":812,"children":813},{"class":81,"line":118},[814,819],{"type":32,"tag":79,"props":815,"children":816},{"style":103},[817],{"type":37,"value":818},"    payloadExtraction: ",{"type":32,"tag":79,"props":820,"children":821},{"style":133},[822],{"type":37,"value":823},"true\n",{"type":32,"tag":79,"props":825,"children":826},{"class":81,"line":144},[827],{"type":32,"tag":79,"props":828,"children":829},{"style":103},[830],{"type":37,"value":831},"  },\n",{"type":32,"tag":79,"props":833,"children":834},{"class":81,"line":167},[835],{"type":32,"tag":79,"props":836,"children":837},{"style":103},[838],{"type":37,"value":839},"  router: {\n",{"type":32,"tag":79,"props":841,"children":842},{"class":81,"line":210},[843],{"type":32,"tag":79,"props":844,"children":845},{"style":103},[846],{"type":37,"value":847},"    options: {\n",{"type":32,"tag":79,"props":849,"children":850},{"class":81,"line":233},[851,856,860],{"type":32,"tag":79,"props":852,"children":853},{"style":103},[854],{"type":37,"value":855},"      hashMode: ",{"type":32,"tag":79,"props":857,"children":858},{"style":133},[859],{"type":37,"value":226},{"type":32,"tag":79,"props":861,"children":862},{"style":103},[863],{"type":37,"value":415},{"type":32,"tag":79,"props":865,"children":866},{"class":81,"line":257},[867,872],{"type":32,"tag":79,"props":868,"children":869},{"style":103},[870],{"type":37,"value":871},"      scrollBehaviorType: ",{"type":32,"tag":79,"props":873,"children":874},{"style":122},[875],{"type":37,"value":876},"'smooth'\n",{"type":32,"tag":79,"props":878,"children":879},{"class":81,"line":26},[880],{"type":32,"tag":79,"props":881,"children":882},{"style":103},[883],{"type":37,"value":478},{"type":32,"tag":79,"props":885,"children":887},{"class":81,"line":886},10,[888],{"type":32,"tag":79,"props":889,"children":890},{"style":103},[891],{"type":37,"value":263},{"type":32,"tag":79,"props":893,"children":895},{"class":81,"line":894},11,[896],{"type":32,"tag":79,"props":897,"children":898},{"style":103},[899],{"type":37,"value":271},{"type":32,"tag":33,"props":901,"children":902},{},[903,905,911],{"type":37,"value":904},"La opción ",{"type":32,"tag":40,"props":906,"children":908},{"className":907},[],[909],{"type":37,"value":910},"payloadExtraction: true",{"type":37,"value":912}," extrae el payload de datos de las páginas prerenderizadas en archivos JSON separados. Esto significa que en transiciones de página, solo se carga el diff, reduciendo el bundle inicial en aproximadamente un 40%.",{"type":32,"tag":294,"props":914,"children":916},{"id":915},"tree-shaking-y-limpieza-de-código-no-utilizado",[917],{"type":37,"value":918},"Tree Shaking y Limpieza de Código No Utilizado",{"type":32,"tag":33,"props":920,"children":921},{},[922,924,930],{"type":37,"value":923},"Nuxt 3 usa importación automática, pero esto puede resultar en componentes no utilizados incluidos en el bundle. Desactiva el escaneo automático con ",{"type":32,"tag":40,"props":925,"children":927},{"className":926},[],[928],{"type":37,"value":929},"components: { dirs: [] }",{"type":37,"value":931}," e importa manualmente solo los componentes que necesitas:",{"type":32,"tag":69,"props":933,"children":935},{"className":71,"code":934,"language":73,"meta":16,"style":16},"export default defineNuxtConfig({\n  components: false,\n  imports: {\n    dirs: ['composables']\n  }\n})\n",[936],{"type":32,"tag":40,"props":937,"children":938},{"__ignoreMap":16},[939,958,974,982,999,1006],{"type":32,"tag":79,"props":940,"children":941},{"class":81,"line":82},[942,946,950,954],{"type":32,"tag":79,"props":943,"children":944},{"style":86},[945],{"type":37,"value":89},{"type":32,"tag":79,"props":947,"children":948},{"style":86},[949],{"type":37,"value":94},{"type":32,"tag":79,"props":951,"children":952},{"style":97},[953],{"type":37,"value":100},{"type":32,"tag":79,"props":955,"children":956},{"style":103},[957],{"type":37,"value":106},{"type":32,"tag":79,"props":959,"children":960},{"class":81,"line":109},[961,966,970],{"type":32,"tag":79,"props":962,"children":963},{"style":103},[964],{"type":37,"value":965},"  components: ",{"type":32,"tag":79,"props":967,"children":968},{"style":133},[969],{"type":37,"value":226},{"type":32,"tag":79,"props":971,"children":972},{"style":103},[973],{"type":37,"value":415},{"type":32,"tag":79,"props":975,"children":976},{"class":81,"line":118},[977],{"type":32,"tag":79,"props":978,"children":979},{"style":103},[980],{"type":37,"value":981},"  imports: {\n",{"type":32,"tag":79,"props":983,"children":984},{"class":81,"line":144},[985,990,995],{"type":32,"tag":79,"props":986,"children":987},{"style":103},[988],{"type":37,"value":989},"    dirs: [",{"type":32,"tag":79,"props":991,"children":992},{"style":122},[993],{"type":37,"value":994},"'composables'",{"type":32,"tag":79,"props":996,"children":997},{"style":103},[998],{"type":37,"value":470},{"type":32,"tag":79,"props":1000,"children":1001},{"class":81,"line":167},[1002],{"type":32,"tag":79,"props":1003,"children":1004},{"style":103},[1005],{"type":37,"value":263},{"type":32,"tag":79,"props":1007,"children":1008},{"class":81,"line":210},[1009],{"type":32,"tag":79,"props":1010,"children":1011},{"style":103},[1012],{"type":37,"value":271},{"type":32,"tag":33,"props":1014,"children":1015},{},[1016,1018,1024],{"type":37,"value":1017},"Este enfoque radical redujo el tamaño del bundle en un 28% (de 340KB a 245KB comprimido). El tradeoff: la experiencia del desarrollador disminuye, ya que cada componente requiere importación manual. Alternativa híbrida: importa automáticamente componentes en ",{"type":32,"tag":40,"props":1019,"children":1021},{"className":1020},[],[1022],{"type":37,"value":1023},"\u002Fcomponents\u002Fglobal",{"type":37,"value":1025},", pero maneja manualmente los demás.",{"type":32,"tag":49,"props":1027,"children":1029},{"id":1028},"estrategias-de-hidratación",[1030],{"type":37,"value":1031},"Estrategias de Hidratación",{"type":32,"tag":33,"props":1033,"children":1034},{},[1035,1037,1043],{"type":37,"value":1036},"El mayor costo de SSG es la hidratación — crear la instancia de Vue en el lado del cliente añade entre 200 y 400ms de TBT (Total Blocking Time). La directiva ",{"type":32,"tag":40,"props":1038,"children":1040},{"className":1039},[],[1041],{"type":37,"value":1042},"ssr: false",{"type":37,"value":1044}," de Nuxt 3 la desactiva completamente, pero a costa de perder SEO.",{"type":32,"tag":69,"props":1046,"children":1050},{"className":1047,"code":1048,"language":1049,"meta":16,"style":16},"language-vue shiki shiki-themes github-dark","\u003Ctemplate>\n  \u003Cdiv>\n    \u003CClientOnly>\n      \u003CHeavyInteractiveWidget \u002F>\n    \u003C\u002FClientOnly>\n    \u003CStaticContent \u002F>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n","vue",[1051],{"type":32,"tag":40,"props":1052,"children":1053},{"__ignoreMap":16},[1054,1073,1090,1107,1125,1141,1157,1173],{"type":32,"tag":79,"props":1055,"children":1056},{"class":81,"line":82},[1057,1062,1068],{"type":32,"tag":79,"props":1058,"children":1059},{"style":103},[1060],{"type":37,"value":1061},"\u003C",{"type":32,"tag":79,"props":1063,"children":1065},{"style":1064},"--shiki-default:#85E89D",[1066],{"type":37,"value":1067},"template",{"type":32,"tag":79,"props":1069,"children":1070},{"style":103},[1071],{"type":37,"value":1072},">\n",{"type":32,"tag":79,"props":1074,"children":1075},{"class":81,"line":109},[1076,1081,1086],{"type":32,"tag":79,"props":1077,"children":1078},{"style":103},[1079],{"type":37,"value":1080},"  \u003C",{"type":32,"tag":79,"props":1082,"children":1083},{"style":1064},[1084],{"type":37,"value":1085},"div",{"type":32,"tag":79,"props":1087,"children":1088},{"style":103},[1089],{"type":37,"value":1072},{"type":32,"tag":79,"props":1091,"children":1092},{"class":81,"line":118},[1093,1098,1103],{"type":32,"tag":79,"props":1094,"children":1095},{"style":103},[1096],{"type":37,"value":1097},"    \u003C",{"type":32,"tag":79,"props":1099,"children":1100},{"style":1064},[1101],{"type":37,"value":1102},"ClientOnly",{"type":32,"tag":79,"props":1104,"children":1105},{"style":103},[1106],{"type":37,"value":1072},{"type":32,"tag":79,"props":1108,"children":1109},{"class":81,"line":144},[1110,1115,1120],{"type":32,"tag":79,"props":1111,"children":1112},{"style":103},[1113],{"type":37,"value":1114},"      \u003C",{"type":32,"tag":79,"props":1116,"children":1117},{"style":1064},[1118],{"type":37,"value":1119},"HeavyInteractiveWidget",{"type":32,"tag":79,"props":1121,"children":1122},{"style":103},[1123],{"type":37,"value":1124}," \u002F>\n",{"type":32,"tag":79,"props":1126,"children":1127},{"class":81,"line":167},[1128,1133,1137],{"type":32,"tag":79,"props":1129,"children":1130},{"style":103},[1131],{"type":37,"value":1132},"    \u003C\u002F",{"type":32,"tag":79,"props":1134,"children":1135},{"style":1064},[1136],{"type":37,"value":1102},{"type":32,"tag":79,"props":1138,"children":1139},{"style":103},[1140],{"type":37,"value":1072},{"type":32,"tag":79,"props":1142,"children":1143},{"class":81,"line":210},[1144,1148,1153],{"type":32,"tag":79,"props":1145,"children":1146},{"style":103},[1147],{"type":37,"value":1097},{"type":32,"tag":79,"props":1149,"children":1150},{"style":1064},[1151],{"type":37,"value":1152},"StaticContent",{"type":32,"tag":79,"props":1154,"children":1155},{"style":103},[1156],{"type":37,"value":1124},{"type":32,"tag":79,"props":1158,"children":1159},{"class":81,"line":233},[1160,1165,1169],{"type":32,"tag":79,"props":1161,"children":1162},{"style":103},[1163],{"type":37,"value":1164},"  \u003C\u002F",{"type":32,"tag":79,"props":1166,"children":1167},{"style":1064},[1168],{"type":37,"value":1085},{"type":32,"tag":79,"props":1170,"children":1171},{"style":103},[1172],{"type":37,"value":1072},{"type":32,"tag":79,"props":1174,"children":1175},{"class":81,"line":257},[1176,1181,1185],{"type":32,"tag":79,"props":1177,"children":1178},{"style":103},[1179],{"type":37,"value":1180},"\u003C\u002F",{"type":32,"tag":79,"props":1182,"children":1183},{"style":1064},[1184],{"type":37,"value":1067},{"type":32,"tag":79,"props":1186,"children":1187},{"style":103},[1188],{"type":37,"value":1072},{"type":32,"tag":33,"props":1190,"children":1191},{},[1192,1194,1200],{"type":37,"value":1193},"El componente ",{"type":32,"tag":40,"props":1195,"children":1197},{"className":1196},[],[1198],{"type":37,"value":1199},"\u003CClientOnly>",{"type":37,"value":1201}," renderiza solo el contenido envuelto en el lado del cliente. En el HTML generado por SSG, esta sección permanece como placeholder, y Vue la salta durante la hidratación. Con este patrón, en una landing page que incluía un dashboard de analytics, redujimos TBT de 420ms a 180ms.",{"type":32,"tag":294,"props":1203,"children":1205},{"id":1204},"hidratación-selectiva",[1206],{"type":37,"value":1207},"Hidratación Selectiva",{"type":32,"tag":33,"props":1209,"children":1210},{},[1211,1213,1219],{"type":37,"value":1212},"Con ",{"type":32,"tag":40,"props":1214,"children":1216},{"className":1215},[],[1217],{"type":37,"value":1218},"nuxt-island",{"type":37,"value":1220}," en Nuxt 3.8+, obtienes hidratación parcial:",{"type":32,"tag":69,"props":1222,"children":1224},{"className":1047,"code":1223,"language":1049,"meta":16,"style":16},"\u003Ctemplate>\n  \u003CNuxtIsland name=\"ProductCard\" :props=\"{ id: 123 }\" \u002F>\n\u003C\u002Ftemplate>\n",[1225],{"type":32,"tag":40,"props":1226,"children":1227},{"__ignoreMap":16},[1228,1243,1311],{"type":32,"tag":79,"props":1229,"children":1230},{"class":81,"line":82},[1231,1235,1239],{"type":32,"tag":79,"props":1232,"children":1233},{"style":103},[1234],{"type":37,"value":1061},{"type":32,"tag":79,"props":1236,"children":1237},{"style":1064},[1238],{"type":37,"value":1067},{"type":32,"tag":79,"props":1240,"children":1241},{"style":103},[1242],{"type":37,"value":1072},{"type":32,"tag":79,"props":1244,"children":1245},{"class":81,"line":109},[1246,1250,1255,1260,1264,1269,1274,1279,1283,1288,1293,1298,1303,1307],{"type":32,"tag":79,"props":1247,"children":1248},{"style":103},[1249],{"type":37,"value":1080},{"type":32,"tag":79,"props":1251,"children":1252},{"style":1064},[1253],{"type":37,"value":1254},"NuxtIsland",{"type":32,"tag":79,"props":1256,"children":1257},{"style":97},[1258],{"type":37,"value":1259}," name",{"type":32,"tag":79,"props":1261,"children":1262},{"style":103},[1263],{"type":37,"value":654},{"type":32,"tag":79,"props":1265,"children":1266},{"style":122},[1267],{"type":37,"value":1268},"\"ProductCard\"",{"type":32,"tag":79,"props":1270,"children":1271},{"style":103},[1272],{"type":37,"value":1273}," :",{"type":32,"tag":79,"props":1275,"children":1276},{"style":97},[1277],{"type":37,"value":1278},"props",{"type":32,"tag":79,"props":1280,"children":1281},{"style":103},[1282],{"type":37,"value":654},{"type":32,"tag":79,"props":1284,"children":1285},{"style":122},[1286],{"type":37,"value":1287},"\"",{"type":32,"tag":79,"props":1289,"children":1290},{"style":103},[1291],{"type":37,"value":1292},"{ id: ",{"type":32,"tag":79,"props":1294,"children":1295},{"style":133},[1296],{"type":37,"value":1297},"123",{"type":32,"tag":79,"props":1299,"children":1300},{"style":103},[1301],{"type":37,"value":1302}," }",{"type":32,"tag":79,"props":1304,"children":1305},{"style":122},[1306],{"type":37,"value":1287},{"type":32,"tag":79,"props":1308,"children":1309},{"style":103},[1310],{"type":37,"value":1124},{"type":32,"tag":79,"props":1312,"children":1313},{"class":81,"line":118},[1314,1318,1322],{"type":32,"tag":79,"props":1315,"children":1316},{"style":103},[1317],{"type":37,"value":1180},{"type":32,"tag":79,"props":1319,"children":1320},{"style":1064},[1321],{"type":37,"value":1067},{"type":32,"tag":79,"props":1323,"children":1324},{"style":103},[1325],{"type":37,"value":1072},{"type":32,"tag":33,"props":1327,"children":1328},{},[1329,1334],{"type":32,"tag":40,"props":1330,"children":1332},{"className":1331},[],[1333],{"type":37,"value":1254},{"type":37,"value":1335}," se renderiza en el servidor y se envía como HTML al cliente — la hidratación ocurre únicamente para este componente. El resto de la página permanece estática. En un sitio de e-commerce, movimos las tarjetas de producto a islands y redujimos el costo de hidratación en un 64% (TBT de 380ms a 135ms).",{"type":32,"tag":49,"props":1337,"children":1339},{"id":1338},"optimización-del-rendimiento-de-build",[1340],{"type":37,"value":1341},"Optimización del Rendimiento de Build",{"type":32,"tag":33,"props":1343,"children":1344},{},[1345],{"type":37,"value":1346},"Cuando los builds de SSG superan los 15,000+ páginas y tardan 20 minutos, el pipeline de CI\u002FCD se queda en estado obsoleto. Existen tres formas de mejorar el rendimiento de build de Nuxt 3:",{"type":32,"tag":33,"props":1348,"children":1349},{},[1350],{"type":32,"tag":309,"props":1351,"children":1352},{},[1353],{"type":37,"value":1354},"1. Prerender Paralelo:",{"type":32,"tag":69,"props":1356,"children":1358},{"className":71,"code":1357,"language":73,"meta":16,"style":16},"nitro: {\n  prerender: {\n    concurrency: 20,\n    interval: 0\n  }\n}\n",[1359],{"type":32,"tag":40,"props":1360,"children":1361},{"__ignoreMap":16},[1362,1373,1384,1405,1422,1429],{"type":32,"tag":79,"props":1363,"children":1364},{"class":81,"line":82},[1365,1369],{"type":32,"tag":79,"props":1366,"children":1367},{"style":97},[1368],{"type":37,"value":547},{"type":32,"tag":79,"props":1370,"children":1371},{"style":103},[1372],{"type":37,"value":552},{"type":32,"tag":79,"props":1374,"children":1375},{"class":81,"line":109},[1376,1380],{"type":32,"tag":79,"props":1377,"children":1378},{"style":97},[1379],{"type":37,"value":560},{"type":32,"tag":79,"props":1381,"children":1382},{"style":103},[1383],{"type":37,"value":552},{"type":32,"tag":79,"props":1385,"children":1386},{"class":81,"line":118},[1387,1392,1396,1401],{"type":32,"tag":79,"props":1388,"children":1389},{"style":97},[1390],{"type":37,"value":1391},"    concurrency",{"type":32,"tag":79,"props":1393,"children":1394},{"style":103},[1395],{"type":37,"value":197},{"type":32,"tag":79,"props":1397,"children":1398},{"style":133},[1399],{"type":37,"value":1400},"20",{"type":32,"tag":79,"props":1402,"children":1403},{"style":103},[1404],{"type":37,"value":415},{"type":32,"tag":79,"props":1406,"children":1407},{"class":81,"line":144},[1408,1413,1417],{"type":32,"tag":79,"props":1409,"children":1410},{"style":97},[1411],{"type":37,"value":1412},"    interval",{"type":32,"tag":79,"props":1414,"children":1415},{"style":103},[1416],{"type":37,"value":197},{"type":32,"tag":79,"props":1418,"children":1419},{"style":133},[1420],{"type":37,"value":1421},"0\n",{"type":32,"tag":79,"props":1423,"children":1424},{"class":81,"line":167},[1425],{"type":32,"tag":79,"props":1426,"children":1427},{"style":103},[1428],{"type":37,"value":263},{"type":32,"tag":79,"props":1430,"children":1431},{"class":81,"line":210},[1432],{"type":32,"tag":79,"props":1433,"children":1434},{"style":103},[1435],{"type":37,"value":760},{"type":32,"tag":33,"props":1437,"children":1438},{},[1439,1445],{"type":32,"tag":40,"props":1440,"children":1442},{"className":1441},[],[1443],{"type":37,"value":1444},"concurrency: 20",{"type":37,"value":1446}," renderiza 20 rutas simultáneamente. Sin embargo, existe riesgo de memory leak — funciona sin problemas con 32GB de RAM, pero en 8GB podrías experimentar errores OOM (Out of Memory). Prueba en tu servidor de CI\u002FCD de producción.",{"type":32,"tag":33,"props":1448,"children":1449},{},[1450],{"type":32,"tag":309,"props":1451,"children":1452},{},[1453],{"type":37,"value":1454},"2. Build Incremental (Experimental):",{"type":32,"tag":69,"props":1456,"children":1458},{"className":71,"code":1457,"language":73,"meta":16,"style":16},"experimental: {\n  buildCache: true\n}\n",[1459],{"type":32,"tag":40,"props":1460,"children":1461},{"__ignoreMap":16},[1462,1474,1490],{"type":32,"tag":79,"props":1463,"children":1464},{"class":81,"line":82},[1465,1470],{"type":32,"tag":79,"props":1466,"children":1467},{"style":97},[1468],{"type":37,"value":1469},"experimental",{"type":32,"tag":79,"props":1471,"children":1472},{"style":103},[1473],{"type":37,"value":552},{"type":32,"tag":79,"props":1475,"children":1476},{"class":81,"line":109},[1477,1482,1486],{"type":32,"tag":79,"props":1478,"children":1479},{"style":97},[1480],{"type":37,"value":1481},"  buildCache",{"type":32,"tag":79,"props":1483,"children":1484},{"style":103},[1485],{"type":37,"value":197},{"type":32,"tag":79,"props":1487,"children":1488},{"style":133},[1489],{"type":37,"value":823},{"type":32,"tag":79,"props":1491,"children":1492},{"class":81,"line":118},[1493],{"type":32,"tag":79,"props":1494,"children":1495},{"style":103},[1496],{"type":37,"value":760},{"type":32,"tag":33,"props":1498,"children":1499},{},[1500],{"type":37,"value":1501},"Lee rutas sin cambios desde caché. Sin embargo, hasta Nuxt 3.12, esta funcionalidad está en beta — la invalidación de caché puede funcionar incorrectamente.",{"type":32,"tag":33,"props":1503,"children":1504},{},[1505,1510],{"type":32,"tag":309,"props":1506,"children":1507},{},[1508],{"type":37,"value":1509},"3. Chunking de Rutas:",{"type":37,"value":1511},"\nDivide las rutas en lotes y construye en paralelo con jobs:",{"type":32,"tag":69,"props":1513,"children":1517},{"className":1514,"code":1515,"language":1516,"meta":16,"style":16},"language-bash shiki shiki-themes github-dark","# Pipeline de CI\u002FCD\nnuxt build --prerender-routes=\"\u002F,\u002Fabout\"\nnuxt build --prerender-routes=\"\u002Fblog\u002F**\" --append\nnuxt build --prerender-routes=\"\u002Fproduct\u002F**\" --append\n","bash",[1518],{"type":32,"tag":40,"props":1519,"children":1520},{"__ignoreMap":16},[1521,1530,1553,1578],{"type":32,"tag":79,"props":1522,"children":1523},{"class":81,"line":82},[1524],{"type":32,"tag":79,"props":1525,"children":1527},{"style":1526},"--shiki-default:#6A737D",[1528],{"type":37,"value":1529},"# Pipeline de CI\u002FCD\n",{"type":32,"tag":79,"props":1531,"children":1532},{"class":81,"line":109},[1533,1538,1543,1548],{"type":32,"tag":79,"props":1534,"children":1535},{"style":97},[1536],{"type":37,"value":1537},"nuxt",{"type":32,"tag":79,"props":1539,"children":1540},{"style":122},[1541],{"type":37,"value":1542}," build",{"type":32,"tag":79,"props":1544,"children":1545},{"style":133},[1546],{"type":37,"value":1547}," --prerender-routes=",{"type":32,"tag":79,"props":1549,"children":1550},{"style":122},[1551],{"type":37,"value":1552},"\"\u002F,\u002Fabout\"\n",{"type":32,"tag":79,"props":1554,"children":1555},{"class":81,"line":118},[1556,1560,1564,1568,1573],{"type":32,"tag":79,"props":1557,"children":1558},{"style":97},[1559],{"type":37,"value":1537},{"type":32,"tag":79,"props":1561,"children":1562},{"style":122},[1563],{"type":37,"value":1542},{"type":32,"tag":79,"props":1565,"children":1566},{"style":133},[1567],{"type":37,"value":1547},{"type":32,"tag":79,"props":1569,"children":1570},{"style":122},[1571],{"type":37,"value":1572},"\"\u002Fblog\u002F**\"",{"type":32,"tag":79,"props":1574,"children":1575},{"style":133},[1576],{"type":37,"value":1577}," --append\n",{"type":32,"tag":79,"props":1579,"children":1580},{"class":81,"line":144},[1581,1585,1589,1593,1598],{"type":32,"tag":79,"props":1582,"children":1583},{"style":97},[1584],{"type":37,"value":1537},{"type":32,"tag":79,"props":1586,"children":1587},{"style":122},[1588],{"type":37,"value":1542},{"type":32,"tag":79,"props":1590,"children":1591},{"style":133},[1592],{"type":37,"value":1547},{"type":32,"tag":79,"props":1594,"children":1595},{"style":122},[1596],{"type":37,"value":1597},"\"\u002Fproduct\u002F**\"",{"type":32,"tag":79,"props":1599,"children":1600},{"style":133},[1601],{"type":37,"value":1577},{"type":32,"tag":33,"props":1603,"children":1604},{},[1605],{"type":37,"value":1606},"Con este enfoque, dividimos un build de 18 min en 3 jobs paralelos, reduciendo el tiempo total a 6.5 min.",{"type":32,"tag":49,"props":1608,"children":1610},{"id":1609},"consideraciones-para-edge-deployment",[1611],{"type":37,"value":1612},"Consideraciones para Edge Deployment",{"type":32,"tag":33,"props":1614,"children":1615},{},[1616],{"type":37,"value":1617},"Al desplegar SSG en Cloudflare Pages, Vercel Edge o Netlify, ten en cuenta:",{"type":32,"tag":33,"props":1619,"children":1620},{},[1621,1626,1628,1634,1636,1642],{"type":32,"tag":309,"props":1622,"children":1623},{},[1624],{"type":37,"value":1625},"Cloudflare Pages:",{"type":37,"value":1627}," Requiere ",{"type":32,"tag":40,"props":1629,"children":1631},{"className":1630},[],[1632],{"type":37,"value":1633},"nitro.preset: 'cloudflare-pages'",{"type":37,"value":1635},". No hay soporte nativo para ISR, solo SWR funciona. El caché-control se configura manualmente mediante archivos ",{"type":32,"tag":40,"props":1637,"children":1639},{"className":1638},[],[1640],{"type":37,"value":1641},"_headers",{"type":37,"value":724},{"type":32,"tag":33,"props":1644,"children":1645},{},[1646,1651,1653,1659],{"type":32,"tag":309,"props":1647,"children":1648},{},[1649],{"type":37,"value":1650},"Vercel:",{"type":37,"value":1652}," Soporta ISR nativamente, pero ",{"type":32,"tag":40,"props":1654,"children":1656},{"className":1655},[],[1657],{"type":37,"value":1658},"vercel.json",{"type":37,"value":1660}," puede sobrescribir route-rules — riesgo de conflicto de configuración. Usa la configuración de Nuxt como fuente única de verdad.",{"type":32,"tag":33,"props":1662,"children":1663},{},[1664,1669,1671,1677,1679,1684,1686,1692],{"type":32,"tag":309,"props":1665,"children":1666},{},[1667],{"type":37,"value":1668},"Netlify:",{"type":37,"value":1670}," Los archivos ",{"type":32,"tag":40,"props":1672,"children":1674},{"className":1673},[],[1675],{"type":37,"value":1676},"_redirects",{"type":37,"value":1678}," y ",{"type":32,"tag":40,"props":1680,"children":1682},{"className":1681},[],[1683],{"type":37,"value":1641},{"type":37,"value":1685}," se generan automáticamente, pero SWR requiere configuración manual en ",{"type":32,"tag":40,"props":1687,"children":1689},{"className":1688},[],[1690],{"type":37,"value":1691},"netlify.toml",{"type":37,"value":724},{"type":32,"tag":33,"props":1694,"children":1695},{},[1696,1698,1707],{"type":37,"value":1697},"En los proyectos de ",{"type":32,"tag":1699,"props":1700,"children":1704},"a",{"href":1701,"rel":1702},"https:\u002F\u002Fwww.roibase.com.tr\u002Fes\u002Fheadless",[1703],"nofollow",[1705],{"type":37,"value":1706},"Headless Commerce",{"type":37,"value":1708}," de Roibase, desplegamos storefronts construidos con Nuxt 3 SSG en Cloudflare Pages. La combinación de caché edge + ISR logra TTFB (Time to First Byte) por debajo de 40ms y LCP (Largest Contentful Paint) alrededor de 1.2s.",{"type":32,"tag":1710,"props":1711,"children":1712},"hr",{},[],{"type":32,"tag":33,"props":1714,"children":1715},{},[1716],{"type":37,"value":1717},"Usar Nuxt 3 SSG estratégicamente significa elegir el modo de renderizado correcto para cada ruta. Combinando prerender en tiempo de build, ISR bajo demanda y SWR, puedes tanto optimizar Core Web Vitals como reducir costos de build. Revisa tus estrategias de hidratación — minimizar la carga de JavaScript del lado del cliente representa aproximadamente el 60% de la ganancia de rendimiento total.",{"type":32,"tag":1719,"props":1720,"children":1721},"style",{},[1722],{"type":37,"value":1723},"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":118,"depth":118,"links":1725},[1726,1729,1732,1735,1738,1739],{"id":51,"depth":109,"text":54,"children":1727},[1728],{"id":296,"depth":118,"text":299},{"id":348,"depth":109,"text":351,"children":1730},[1731],{"id":516,"depth":118,"text":519},{"id":768,"depth":109,"text":771,"children":1733},[1734],{"id":915,"depth":118,"text":918},{"id":1028,"depth":109,"text":1031,"children":1736},[1737],{"id":1204,"depth":118,"text":1207},{"id":1338,"depth":109,"text":1341},{"id":1609,"depth":109,"text":1612},"markdown","content:es:tech:estrategia-ssg-nuxt-3-prerrender-optimizacion-build.md","content","es\u002Ftech\u002Festrategia-ssg-nuxt-3-prerrender-optimizacion-build.md","es\u002Ftech\u002Festrategia-ssg-nuxt-3-prerrender-optimizacion-build","md",1785218705338]