[{"data":1,"prerenderedAt":1746},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fen\u002Ftech\u002Fnuxt-3-ssg-prerender-strategies-and-build-optimization":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":7,"_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: Prerender Strategies and Build Optimization","Technical guide to Nuxt 3's static generation capabilities. Route rules, Nitro prerender, incremental static regeneration, and production deployment patterns.","2026-07-19",[21,22,23,24,25],"nuxt3","ssg","static-generation","prerender","web-performance",8,"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,912,918,931,1012,1025,1031,1044,1188,1200,1206,1219,1324,1334,1340,1345,1353,1434,1445,1453,1495,1500,1510,1600,1605,1611,1616,1642,1660,1693,1709,1713,1718],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36,39,46],{"type":37,"value":38},"text","Nuxt 3's static site generation engine, Nitro, is the first production-grade solution in the Vue ecosystem combining ISR (Incremental Static Regeneration) and route-level prerender control. In 2026, claims surfaced that SSG was dead — in reality, hybrid rendering strategies (SSG + on-demand ISR) became the most cost-effective way to optimize Core Web Vitals. Nuxt 3's ",{"type":32,"tag":40,"props":41,"children":43},"code",{"className":42},[],[44],{"type":37,"value":45},"routeRules",{"type":37,"value":47}," API enables managing this hybrid architecture through a single configuration file.",{"type":32,"tag":49,"props":50,"children":52},"h2",{"id":51},"route-level-rendering-strategy",[53],{"type":37,"value":54},"Route-Level Rendering Strategy",{"type":32,"tag":33,"props":56,"children":57},{},[58,60,66],{"type":37,"value":59},"In Nuxt 3, rendering mode is no longer determined at the application level but at the route level. Within ",{"type":32,"tag":40,"props":61,"children":63},{"className":62},[],[64],{"type":37,"value":65},"nuxt.config.ts",{"type":37,"value":67},", you can define separate strategies for each route:",{"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,263],{"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":257},{"class":81,"line":26},[258],{"type":32,"tag":79,"props":259,"children":260},{"style":103},[261],{"type":37,"value":262},"  }\n",{"type":32,"tag":79,"props":264,"children":266},{"class":81,"line":265},9,[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},"This structure provides these advantages: static pages (landing, blog archives) are generated at build time, while dynamic content (product pages) is prerendered on demand. The ",{"type":32,"tag":40,"props":278,"children":280},{"className":279},[],[281],{"type":37,"value":282},"swr: 3600",{"type":37,"value":284}," setting for the ",{"type":32,"tag":40,"props":286,"children":288},{"className":287},[],[289],{"type":37,"value":290},"\u002Fblog\u002F**",{"type":37,"value":292}," route ensures the page is served via CDN with stale-while-revalidate strategy for 1 hour — users see the cached version while revalidation is triggered in the background.",{"type":32,"tag":294,"props":295,"children":297},"h3",{"id":296},"isr-vs-swr-decision",[298],{"type":37,"value":299},"ISR vs SWR Decision",{"type":32,"tag":33,"props":301,"children":302},{},[303],{"type":37,"value":304},"ISR (Incremental Static Regeneration) and SWR (Stale-While-Revalidate) are often conflated. ISR generates pages on demand after build and caches them, refreshing after a set duration. SWR is an HTTP cache-control header — it serves the old version while updating in the background.",{"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},"Choose ISR:",{"type":37,"value":315}," For infrequently updated but high-traffic pages like product catalogs or CMS content. ",{"type":32,"tag":40,"props":317,"children":319},{"className":318},[],[320],{"type":37,"value":321},"isr: 60",{"type":37,"value":323}," = revalidate every 60 seconds.",{"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},"Choose SWR:",{"type":37,"value":333}," For content where freshness isn't immediately critical, like blog posts or documentation. ",{"type":32,"tag":40,"props":335,"children":337},{"className":336},[],[338],{"type":37,"value":282},{"type":37,"value":340}," = 1-hour CDN cache + background revalidation.",{"type":32,"tag":33,"props":342,"children":343},{},[344],{"type":37,"value":345},"At Roibase, we reduced build time by 73% with ISR (12min → 3.2min). On an e-commerce site with 15,000 product pages, we prerendered the first 500 products at build time and generated the remainder on demand via ISR.",{"type":32,"tag":49,"props":347,"children":349},{"id":348},"nitro-prerender-crawler",[350],{"type":37,"value":351},"Nitro Prerender Crawler",{"type":32,"tag":33,"props":353,"children":354},{},[355],{"type":37,"value":356},"Nuxt 3's prerender engine, Nitro, automatically crawls internal links to generate related pages at build time. However, controlling this crawler's behavior is critical for performance:",{"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":26},[482],{"type":32,"tag":79,"props":483,"children":484},{"style":103},[485],{"type":37,"value":262},{"type":32,"tag":79,"props":487,"children":488},{"class":81,"line":265},[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},"The ",{"type":32,"tag":40,"props":499,"children":501},{"className":500},[],[502],{"type":37,"value":503},"crawlLinks: true",{"type":37,"value":505}," setting carries a risk: every ",{"type":32,"tag":40,"props":507,"children":509},{"className":508},[],[510],{"type":37,"value":511},"\u003Ca>",{"type":37,"value":513}," tag in a page is crawled, which can result in unintended routes being prerendered. For example, even if social media links in the footer are external, the crawler may still visit them.",{"type":32,"tag":294,"props":515,"children":517},{"id":516},"prerender-route-whitelist",[518],{"type":37,"value":519},"Prerender Route Whitelist",{"type":32,"tag":33,"props":521,"children":522},{},[523,525,531],{"type":37,"value":524},"To prerender only specific routes in production, use the ",{"type":32,"tag":40,"props":526,"children":528},{"className":527},[],[529],{"type":37,"value":530},"routes",{"type":37,"value":532}," array:",{"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":26},[749],{"type":32,"tag":79,"props":750,"children":751},{"style":103},[752],{"type":37,"value":262},{"type":32,"tag":79,"props":754,"children":755},{"class":81,"line":265},[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},"This pattern provides fetch-based prerender control. You pull the route list from your CMS and build only those pages. On an 8,000-page headless commerce project, this approach reduced build time from 18min to 4.5min.",{"type":32,"tag":49,"props":767,"children":769},{"id":768},"bundle-splitting-and-code-elimination",[770],{"type":37,"value":771},"Bundle Splitting and Code Elimination",{"type":32,"tag":33,"props":773,"children":774},{},[775],{"type":37,"value":776},"Nuxt 3's SSG mode does not automatically eliminate unused JavaScript in the bundle. Route-level code splitting optimizes this:",{"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":26},[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":265},[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":262},{"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,904,910],{"type":37,"value":497},{"type":32,"tag":40,"props":905,"children":907},{"className":906},[],[908],{"type":37,"value":909},"payloadExtraction: true",{"type":37,"value":911}," setting extracts prerendered page data payloads into separate JSON files. This means page transitions only load diffs, reducing the initial bundle by 40%.",{"type":32,"tag":294,"props":913,"children":915},{"id":914},"tree-shaking-for-unused-code-cleanup",[916],{"type":37,"value":917},"Tree Shaking for Unused Code Cleanup",{"type":32,"tag":33,"props":919,"children":920},{},[921,923,929],{"type":37,"value":922},"Nuxt 3 uses auto-import, but this can result in unused components being bundled. Disable automatic scanning with ",{"type":32,"tag":40,"props":924,"children":926},{"className":925},[],[927],{"type":37,"value":928},"components: { dirs: [] }",{"type":37,"value":930}," and manually import only components you use:",{"type":32,"tag":69,"props":932,"children":934},{"className":71,"code":933,"language":73,"meta":16,"style":16},"export default defineNuxtConfig({\n  components: false,\n  imports: {\n    dirs: ['composables']\n  }\n})\n",[935],{"type":32,"tag":40,"props":936,"children":937},{"__ignoreMap":16},[938,957,973,981,998,1005],{"type":32,"tag":79,"props":939,"children":940},{"class":81,"line":82},[941,945,949,953],{"type":32,"tag":79,"props":942,"children":943},{"style":86},[944],{"type":37,"value":89},{"type":32,"tag":79,"props":946,"children":947},{"style":86},[948],{"type":37,"value":94},{"type":32,"tag":79,"props":950,"children":951},{"style":97},[952],{"type":37,"value":100},{"type":32,"tag":79,"props":954,"children":955},{"style":103},[956],{"type":37,"value":106},{"type":32,"tag":79,"props":958,"children":959},{"class":81,"line":109},[960,965,969],{"type":32,"tag":79,"props":961,"children":962},{"style":103},[963],{"type":37,"value":964},"  components: ",{"type":32,"tag":79,"props":966,"children":967},{"style":133},[968],{"type":37,"value":226},{"type":32,"tag":79,"props":970,"children":971},{"style":103},[972],{"type":37,"value":415},{"type":32,"tag":79,"props":974,"children":975},{"class":81,"line":118},[976],{"type":32,"tag":79,"props":977,"children":978},{"style":103},[979],{"type":37,"value":980},"  imports: {\n",{"type":32,"tag":79,"props":982,"children":983},{"class":81,"line":144},[984,989,994],{"type":32,"tag":79,"props":985,"children":986},{"style":103},[987],{"type":37,"value":988},"    dirs: [",{"type":32,"tag":79,"props":990,"children":991},{"style":122},[992],{"type":37,"value":993},"'composables'",{"type":32,"tag":79,"props":995,"children":996},{"style":103},[997],{"type":37,"value":470},{"type":32,"tag":79,"props":999,"children":1000},{"class":81,"line":167},[1001],{"type":32,"tag":79,"props":1002,"children":1003},{"style":103},[1004],{"type":37,"value":262},{"type":32,"tag":79,"props":1006,"children":1007},{"class":81,"line":210},[1008],{"type":32,"tag":79,"props":1009,"children":1010},{"style":103},[1011],{"type":37,"value":271},{"type":32,"tag":33,"props":1013,"children":1014},{},[1015,1017,1023],{"type":37,"value":1016},"This radical approach reduced bundle size by 28% (340KB → 245KB gzip). The tradeoff: developer experience suffers — you must manually import each component. A hybrid approach: auto-import components in ",{"type":32,"tag":40,"props":1018,"children":1020},{"className":1019},[],[1021],{"type":37,"value":1022},"\u002Fcomponents\u002Fglobal",{"type":37,"value":1024},", manage others manually.",{"type":32,"tag":49,"props":1026,"children":1028},{"id":1027},"hydration-strategies",[1029],{"type":37,"value":1030},"Hydration Strategies",{"type":32,"tag":33,"props":1032,"children":1033},{},[1034,1036,1042],{"type":37,"value":1035},"SSG's largest cost is hydration — creating a Vue instance on the client side adds 200–400ms of TBT (Total Blocking Time). Nuxt 3's ",{"type":32,"tag":40,"props":1037,"children":1039},{"className":1038},[],[1040],{"type":37,"value":1041},"ssr: false",{"type":37,"value":1043}," disables this entirely but sacrifices SEO.",{"type":32,"tag":69,"props":1045,"children":1049},{"className":1046,"code":1047,"language":1048,"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",[1050],{"type":32,"tag":40,"props":1051,"children":1052},{"__ignoreMap":16},[1053,1072,1089,1106,1124,1140,1156,1172],{"type":32,"tag":79,"props":1054,"children":1055},{"class":81,"line":82},[1056,1061,1067],{"type":32,"tag":79,"props":1057,"children":1058},{"style":103},[1059],{"type":37,"value":1060},"\u003C",{"type":32,"tag":79,"props":1062,"children":1064},{"style":1063},"--shiki-default:#85E89D",[1065],{"type":37,"value":1066},"template",{"type":32,"tag":79,"props":1068,"children":1069},{"style":103},[1070],{"type":37,"value":1071},">\n",{"type":32,"tag":79,"props":1073,"children":1074},{"class":81,"line":109},[1075,1080,1085],{"type":32,"tag":79,"props":1076,"children":1077},{"style":103},[1078],{"type":37,"value":1079},"  \u003C",{"type":32,"tag":79,"props":1081,"children":1082},{"style":1063},[1083],{"type":37,"value":1084},"div",{"type":32,"tag":79,"props":1086,"children":1087},{"style":103},[1088],{"type":37,"value":1071},{"type":32,"tag":79,"props":1090,"children":1091},{"class":81,"line":118},[1092,1097,1102],{"type":32,"tag":79,"props":1093,"children":1094},{"style":103},[1095],{"type":37,"value":1096},"    \u003C",{"type":32,"tag":79,"props":1098,"children":1099},{"style":1063},[1100],{"type":37,"value":1101},"ClientOnly",{"type":32,"tag":79,"props":1103,"children":1104},{"style":103},[1105],{"type":37,"value":1071},{"type":32,"tag":79,"props":1107,"children":1108},{"class":81,"line":144},[1109,1114,1119],{"type":32,"tag":79,"props":1110,"children":1111},{"style":103},[1112],{"type":37,"value":1113},"      \u003C",{"type":32,"tag":79,"props":1115,"children":1116},{"style":1063},[1117],{"type":37,"value":1118},"HeavyInteractiveWidget",{"type":32,"tag":79,"props":1120,"children":1121},{"style":103},[1122],{"type":37,"value":1123}," \u002F>\n",{"type":32,"tag":79,"props":1125,"children":1126},{"class":81,"line":167},[1127,1132,1136],{"type":32,"tag":79,"props":1128,"children":1129},{"style":103},[1130],{"type":37,"value":1131},"    \u003C\u002F",{"type":32,"tag":79,"props":1133,"children":1134},{"style":1063},[1135],{"type":37,"value":1101},{"type":32,"tag":79,"props":1137,"children":1138},{"style":103},[1139],{"type":37,"value":1071},{"type":32,"tag":79,"props":1141,"children":1142},{"class":81,"line":210},[1143,1147,1152],{"type":32,"tag":79,"props":1144,"children":1145},{"style":103},[1146],{"type":37,"value":1096},{"type":32,"tag":79,"props":1148,"children":1149},{"style":1063},[1150],{"type":37,"value":1151},"StaticContent",{"type":32,"tag":79,"props":1153,"children":1154},{"style":103},[1155],{"type":37,"value":1123},{"type":32,"tag":79,"props":1157,"children":1158},{"class":81,"line":233},[1159,1164,1168],{"type":32,"tag":79,"props":1160,"children":1161},{"style":103},[1162],{"type":37,"value":1163},"  \u003C\u002F",{"type":32,"tag":79,"props":1165,"children":1166},{"style":1063},[1167],{"type":37,"value":1084},{"type":32,"tag":79,"props":1169,"children":1170},{"style":103},[1171],{"type":37,"value":1071},{"type":32,"tag":79,"props":1173,"children":1174},{"class":81,"line":26},[1175,1180,1184],{"type":32,"tag":79,"props":1176,"children":1177},{"style":103},[1178],{"type":37,"value":1179},"\u003C\u002F",{"type":32,"tag":79,"props":1181,"children":1182},{"style":1063},[1183],{"type":37,"value":1066},{"type":32,"tag":79,"props":1185,"children":1186},{"style":103},[1187],{"type":37,"value":1071},{"type":32,"tag":33,"props":1189,"children":1190},{},[1191,1192,1198],{"type":37,"value":497},{"type":32,"tag":40,"props":1193,"children":1195},{"className":1194},[],[1196],{"type":37,"value":1197},"\u003CClientOnly>",{"type":37,"value":1199}," component renders only its wrapped content on the client side. In HTML generated via SSG, this section remains a placeholder; Vue skips it during hydration. With this pattern, we reduced TBT from 420ms to 180ms on a landing page hosting an analytics dashboard.",{"type":32,"tag":294,"props":1201,"children":1203},{"id":1202},"selective-hydration",[1204],{"type":37,"value":1205},"Selective Hydration",{"type":32,"tag":33,"props":1207,"children":1208},{},[1209,1211,1217],{"type":37,"value":1210},"Nuxt 3.8+ includes the ",{"type":32,"tag":40,"props":1212,"children":1214},{"className":1213},[],[1215],{"type":37,"value":1216},"nuxt-island",{"type":37,"value":1218}," component, enabling partial hydration:",{"type":32,"tag":69,"props":1220,"children":1222},{"className":1046,"code":1221,"language":1048,"meta":16,"style":16},"\u003Ctemplate>\n  \u003CNuxtIsland name=\"ProductCard\" :props=\"{ id: 123 }\" \u002F>\n\u003C\u002Ftemplate>\n",[1223],{"type":32,"tag":40,"props":1224,"children":1225},{"__ignoreMap":16},[1226,1241,1309],{"type":32,"tag":79,"props":1227,"children":1228},{"class":81,"line":82},[1229,1233,1237],{"type":32,"tag":79,"props":1230,"children":1231},{"style":103},[1232],{"type":37,"value":1060},{"type":32,"tag":79,"props":1234,"children":1235},{"style":1063},[1236],{"type":37,"value":1066},{"type":32,"tag":79,"props":1238,"children":1239},{"style":103},[1240],{"type":37,"value":1071},{"type":32,"tag":79,"props":1242,"children":1243},{"class":81,"line":109},[1244,1248,1253,1258,1262,1267,1272,1277,1281,1286,1291,1296,1301,1305],{"type":32,"tag":79,"props":1245,"children":1246},{"style":103},[1247],{"type":37,"value":1079},{"type":32,"tag":79,"props":1249,"children":1250},{"style":1063},[1251],{"type":37,"value":1252},"NuxtIsland",{"type":32,"tag":79,"props":1254,"children":1255},{"style":97},[1256],{"type":37,"value":1257}," name",{"type":32,"tag":79,"props":1259,"children":1260},{"style":103},[1261],{"type":37,"value":654},{"type":32,"tag":79,"props":1263,"children":1264},{"style":122},[1265],{"type":37,"value":1266},"\"ProductCard\"",{"type":32,"tag":79,"props":1268,"children":1269},{"style":103},[1270],{"type":37,"value":1271}," :",{"type":32,"tag":79,"props":1273,"children":1274},{"style":97},[1275],{"type":37,"value":1276},"props",{"type":32,"tag":79,"props":1278,"children":1279},{"style":103},[1280],{"type":37,"value":654},{"type":32,"tag":79,"props":1282,"children":1283},{"style":122},[1284],{"type":37,"value":1285},"\"",{"type":32,"tag":79,"props":1287,"children":1288},{"style":103},[1289],{"type":37,"value":1290},"{ id: ",{"type":32,"tag":79,"props":1292,"children":1293},{"style":133},[1294],{"type":37,"value":1295},"123",{"type":32,"tag":79,"props":1297,"children":1298},{"style":103},[1299],{"type":37,"value":1300}," }",{"type":32,"tag":79,"props":1302,"children":1303},{"style":122},[1304],{"type":37,"value":1285},{"type":32,"tag":79,"props":1306,"children":1307},{"style":103},[1308],{"type":37,"value":1123},{"type":32,"tag":79,"props":1310,"children":1311},{"class":81,"line":118},[1312,1316,1320],{"type":32,"tag":79,"props":1313,"children":1314},{"style":103},[1315],{"type":37,"value":1179},{"type":32,"tag":79,"props":1317,"children":1318},{"style":1063},[1319],{"type":37,"value":1066},{"type":32,"tag":79,"props":1321,"children":1322},{"style":103},[1323],{"type":37,"value":1071},{"type":32,"tag":33,"props":1325,"children":1326},{},[1327,1332],{"type":32,"tag":40,"props":1328,"children":1330},{"className":1329},[],[1331],{"type":37,"value":1252},{"type":37,"value":1333}," is server-rendered and sent to the client as HTML; hydration occurs only for this component. The rest of the page remains static. On an e-commerce site, moving product cards to islands reduced hydration cost by 64% (TBT 380ms → 135ms).",{"type":32,"tag":49,"props":1335,"children":1337},{"id":1336},"build-performance-optimization",[1338],{"type":37,"value":1339},"Build Performance Optimization",{"type":32,"tag":33,"props":1341,"children":1342},{},[1343],{"type":37,"value":1344},"SSG builds exceeding 15,000 pages often exceed 20 minutes, leaving CI\u002FCD pipelines in stale conditions. Three approaches improve Nuxt 3 build performance:",{"type":32,"tag":33,"props":1346,"children":1347},{},[1348],{"type":32,"tag":309,"props":1349,"children":1350},{},[1351],{"type":37,"value":1352},"1. Parallel Prerender:",{"type":32,"tag":69,"props":1354,"children":1356},{"className":71,"code":1355,"language":73,"meta":16,"style":16},"nitro: {\n  prerender: {\n    concurrency: 20,\n    interval: 0\n  }\n}\n",[1357],{"type":32,"tag":40,"props":1358,"children":1359},{"__ignoreMap":16},[1360,1371,1382,1403,1420,1427],{"type":32,"tag":79,"props":1361,"children":1362},{"class":81,"line":82},[1363,1367],{"type":32,"tag":79,"props":1364,"children":1365},{"style":97},[1366],{"type":37,"value":547},{"type":32,"tag":79,"props":1368,"children":1369},{"style":103},[1370],{"type":37,"value":552},{"type":32,"tag":79,"props":1372,"children":1373},{"class":81,"line":109},[1374,1378],{"type":32,"tag":79,"props":1375,"children":1376},{"style":97},[1377],{"type":37,"value":560},{"type":32,"tag":79,"props":1379,"children":1380},{"style":103},[1381],{"type":37,"value":552},{"type":32,"tag":79,"props":1383,"children":1384},{"class":81,"line":118},[1385,1390,1394,1399],{"type":32,"tag":79,"props":1386,"children":1387},{"style":97},[1388],{"type":37,"value":1389},"    concurrency",{"type":32,"tag":79,"props":1391,"children":1392},{"style":103},[1393],{"type":37,"value":197},{"type":32,"tag":79,"props":1395,"children":1396},{"style":133},[1397],{"type":37,"value":1398},"20",{"type":32,"tag":79,"props":1400,"children":1401},{"style":103},[1402],{"type":37,"value":415},{"type":32,"tag":79,"props":1404,"children":1405},{"class":81,"line":144},[1406,1411,1415],{"type":32,"tag":79,"props":1407,"children":1408},{"style":97},[1409],{"type":37,"value":1410},"    interval",{"type":32,"tag":79,"props":1412,"children":1413},{"style":103},[1414],{"type":37,"value":197},{"type":32,"tag":79,"props":1416,"children":1417},{"style":133},[1418],{"type":37,"value":1419},"0\n",{"type":32,"tag":79,"props":1421,"children":1422},{"class":81,"line":167},[1423],{"type":32,"tag":79,"props":1424,"children":1425},{"style":103},[1426],{"type":37,"value":262},{"type":32,"tag":79,"props":1428,"children":1429},{"class":81,"line":210},[1430],{"type":32,"tag":79,"props":1431,"children":1432},{"style":103},[1433],{"type":37,"value":760},{"type":32,"tag":33,"props":1435,"children":1436},{},[1437,1443],{"type":32,"tag":40,"props":1438,"children":1440},{"className":1439},[],[1441],{"type":37,"value":1442},"concurrency: 20",{"type":37,"value":1444}," renders 20 routes simultaneously. However, memory leaks are possible — runs smoothly on 32GB RAM but may trigger OOM (Out of Memory) errors on 8GB, so test on your production CI\u002FCD server.",{"type":32,"tag":33,"props":1446,"children":1447},{},[1448],{"type":32,"tag":309,"props":1449,"children":1450},{},[1451],{"type":37,"value":1452},"2. Incremental Build (Experimental):",{"type":32,"tag":69,"props":1454,"children":1456},{"className":71,"code":1455,"language":73,"meta":16,"style":16},"experimental: {\n  buildCache: true\n}\n",[1457],{"type":32,"tag":40,"props":1458,"children":1459},{"__ignoreMap":16},[1460,1472,1488],{"type":32,"tag":79,"props":1461,"children":1462},{"class":81,"line":82},[1463,1468],{"type":32,"tag":79,"props":1464,"children":1465},{"style":97},[1466],{"type":37,"value":1467},"experimental",{"type":32,"tag":79,"props":1469,"children":1470},{"style":103},[1471],{"type":37,"value":552},{"type":32,"tag":79,"props":1473,"children":1474},{"class":81,"line":109},[1475,1480,1484],{"type":32,"tag":79,"props":1476,"children":1477},{"style":97},[1478],{"type":37,"value":1479},"  buildCache",{"type":32,"tag":79,"props":1481,"children":1482},{"style":103},[1483],{"type":37,"value":197},{"type":32,"tag":79,"props":1485,"children":1486},{"style":133},[1487],{"type":37,"value":823},{"type":32,"tag":79,"props":1489,"children":1490},{"class":81,"line":118},[1491],{"type":32,"tag":79,"props":1492,"children":1493},{"style":103},[1494],{"type":37,"value":760},{"type":32,"tag":33,"props":1496,"children":1497},{},[1498],{"type":37,"value":1499},"Reads unchanged routes from cache. However, as of Nuxt 3.12, this is still beta — cache invalidation may behave incorrectly.",{"type":32,"tag":33,"props":1501,"children":1502},{},[1503,1508],{"type":32,"tag":309,"props":1504,"children":1505},{},[1506],{"type":37,"value":1507},"3. Route Chunking:",{"type":37,"value":1509},"\nSplit routes into batches and build via parallel jobs:",{"type":32,"tag":69,"props":1511,"children":1515},{"className":1512,"code":1513,"language":1514,"meta":16,"style":16},"language-bash shiki shiki-themes github-dark","# CI\u002FCD pipeline\nnuxt build --prerender-routes=\"\u002F,\u002Fabout\"\nnuxt build --prerender-routes=\"\u002Fblog\u002F**\" --append\nnuxt build --prerender-routes=\"\u002Fproduct\u002F**\" --append\n","bash",[1516],{"type":32,"tag":40,"props":1517,"children":1518},{"__ignoreMap":16},[1519,1528,1551,1576],{"type":32,"tag":79,"props":1520,"children":1521},{"class":81,"line":82},[1522],{"type":32,"tag":79,"props":1523,"children":1525},{"style":1524},"--shiki-default:#6A737D",[1526],{"type":37,"value":1527},"# CI\u002FCD pipeline\n",{"type":32,"tag":79,"props":1529,"children":1530},{"class":81,"line":109},[1531,1536,1541,1546],{"type":32,"tag":79,"props":1532,"children":1533},{"style":97},[1534],{"type":37,"value":1535},"nuxt",{"type":32,"tag":79,"props":1537,"children":1538},{"style":122},[1539],{"type":37,"value":1540}," build",{"type":32,"tag":79,"props":1542,"children":1543},{"style":133},[1544],{"type":37,"value":1545}," --prerender-routes=",{"type":32,"tag":79,"props":1547,"children":1548},{"style":122},[1549],{"type":37,"value":1550},"\"\u002F,\u002Fabout\"\n",{"type":32,"tag":79,"props":1552,"children":1553},{"class":81,"line":118},[1554,1558,1562,1566,1571],{"type":32,"tag":79,"props":1555,"children":1556},{"style":97},[1557],{"type":37,"value":1535},{"type":32,"tag":79,"props":1559,"children":1560},{"style":122},[1561],{"type":37,"value":1540},{"type":32,"tag":79,"props":1563,"children":1564},{"style":133},[1565],{"type":37,"value":1545},{"type":32,"tag":79,"props":1567,"children":1568},{"style":122},[1569],{"type":37,"value":1570},"\"\u002Fblog\u002F**\"",{"type":32,"tag":79,"props":1572,"children":1573},{"style":133},[1574],{"type":37,"value":1575}," --append\n",{"type":32,"tag":79,"props":1577,"children":1578},{"class":81,"line":144},[1579,1583,1587,1591,1596],{"type":32,"tag":79,"props":1580,"children":1581},{"style":97},[1582],{"type":37,"value":1535},{"type":32,"tag":79,"props":1584,"children":1585},{"style":122},[1586],{"type":37,"value":1540},{"type":32,"tag":79,"props":1588,"children":1589},{"style":133},[1590],{"type":37,"value":1545},{"type":32,"tag":79,"props":1592,"children":1593},{"style":122},[1594],{"type":37,"value":1595},"\"\u002Fproduct\u002F**\"",{"type":32,"tag":79,"props":1597,"children":1598},{"style":133},[1599],{"type":37,"value":1575},{"type":32,"tag":33,"props":1601,"children":1602},{},[1603],{"type":37,"value":1604},"This approach split an 18min build into 3 parallel jobs, reducing total time to 6.5min.",{"type":32,"tag":49,"props":1606,"children":1608},{"id":1607},"edge-deployment-considerations",[1609],{"type":37,"value":1610},"Edge Deployment Considerations",{"type":32,"tag":33,"props":1612,"children":1613},{},[1614],{"type":37,"value":1615},"When deploying SSG to Cloudflare Pages, Vercel Edge, or Netlify, consider these points:",{"type":32,"tag":33,"props":1617,"children":1618},{},[1619,1624,1626,1632,1634,1640],{"type":32,"tag":309,"props":1620,"children":1621},{},[1622],{"type":37,"value":1623},"Cloudflare Pages:",{"type":37,"value":1625}," The ",{"type":32,"tag":40,"props":1627,"children":1629},{"className":1628},[],[1630],{"type":37,"value":1631},"nitro.preset: 'cloudflare-pages'",{"type":37,"value":1633}," setting is required. ISR is unsupported; only SWR works. Cache-control must be manually configured via the ",{"type":32,"tag":40,"props":1635,"children":1637},{"className":1636},[],[1638],{"type":37,"value":1639},"_headers",{"type":37,"value":1641}," file.",{"type":32,"tag":33,"props":1643,"children":1644},{},[1645,1650,1652,1658],{"type":32,"tag":309,"props":1646,"children":1647},{},[1648],{"type":37,"value":1649},"Vercel:",{"type":37,"value":1651}," Natively supports ISR but ",{"type":32,"tag":40,"props":1653,"children":1655},{"className":1654},[],[1656],{"type":37,"value":1657},"vercel.json",{"type":37,"value":1659}," can override route-rules — configuration conflicts are possible. Use Nuxt config as the single source of truth.",{"type":32,"tag":33,"props":1661,"children":1662},{},[1663,1668,1670,1676,1678,1683,1685,1691],{"type":32,"tag":309,"props":1664,"children":1665},{},[1666],{"type":37,"value":1667},"Netlify:",{"type":37,"value":1669}," Automatically generates ",{"type":32,"tag":40,"props":1671,"children":1673},{"className":1672},[],[1674],{"type":37,"value":1675},"_redirects",{"type":37,"value":1677}," and ",{"type":32,"tag":40,"props":1679,"children":1681},{"className":1680},[],[1682],{"type":37,"value":1639},{"type":37,"value":1684}," files, but SWR requires manual ",{"type":32,"tag":40,"props":1686,"children":1688},{"className":1687},[],[1689],{"type":37,"value":1690},"netlify.toml",{"type":37,"value":1692}," configuration.",{"type":32,"tag":33,"props":1694,"children":1695},{},[1696,1698,1707],{"type":37,"value":1697},"At Roibase, we deploy Nuxt 3 SSG-built storefronts to Cloudflare Pages for ",{"type":32,"tag":1699,"props":1700,"children":1704},"a",{"href":1701,"rel":1702},"https:\u002F\u002Fwww.roibase.com.tr\u002Fen\u002Fheadless",[1703],"nofollow",[1705],{"type":37,"value":1706},"Headless Commerce",{"type":37,"value":1708}," projects. Edge caching combined with ISR keeps TTFB (Time to First Byte) under 40ms and LCP (Largest Contentful Paint) around 1.2s.",{"type":32,"tag":1710,"props":1711,"children":1712},"hr",{},[],{"type":32,"tag":33,"props":1714,"children":1715},{},[1716],{"type":37,"value":1717},"Using Nuxt 3 SSG strategically means selecting the correct rendering mode for each route. By combining build-time prerender, on-demand ISR, and SWR, you can optimize Core Web Vitals while reducing build costs. Review your hydration strategies — reducing client-side JavaScript burden accounts for 60% of performance gains.",{"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":914,"depth":118,"text":917},{"id":1027,"depth":109,"text":1030,"children":1736},[1737],{"id":1202,"depth":118,"text":1205},{"id":1336,"depth":109,"text":1339},{"id":1607,"depth":109,"text":1610},"markdown","content:en:tech:nuxt-3-ssg-prerender-strategies-and-build-optimization.md","content","en\u002Ftech\u002Fnuxt-3-ssg-prerender-strategies-and-build-optimization.md","en\u002Ftech\u002Fnuxt-3-ssg-prerender-strategies-and-build-optimization","md",1785218698696]