[{"data":1,"prerenderedAt":203},["ShallowReactive",2],{"blog-from-wordpress-to-nuxt-ssg":3},{"id":4,"title":5,"author":6,"body":7,"date":193,"description":194,"extension":195,"meta":196,"navigation":197,"path":198,"seo":199,"sitemap":200,"stem":201,"__hash__":202},"blog\u002Fblog\u002Ffrom-wordpress-to-nuxt-ssg.md","From WordPress to Static: Rebuilding Our Website with Nuxt","Jani Golob",{"type":8,"value":9,"toc":186},"minimark",[10,14,17,22,25,54,62,66,69,136,141,148,153,159,162,176,180,183],[11,12,13],"p",{},"Our old website ran on WordPress. It worked, but it carried the usual baggage: a PHP runtime and database to keep patched, a theme layered with plugins, and render-blocking assets we didn't control. For a site that changes a few times a month, that's a lot of moving parts for no benefit.",[11,15,16],{},"So we rebuilt it.",[18,19,21],"h2",{"id":20},"the-new-stack","The New Stack",[11,23,24],{},"The site is now a statically generated Nuxt app:",[26,27,28,36,42,48],"ul",{},[29,30,31,35],"li",{},[32,33,34],"strong",{},"Nuxt with SSG:"," every page is pre-rendered to plain HTML at build time. No server-side rendering at request time, no origin compute at all.",[29,37,38,41],{},[32,39,40],{},"Nuxt Content:"," blog posts like this one are markdown files in the repo, parsed at build time.",[29,43,44,47],{},[32,45,46],{},"Tailwind CSS:"," styles are purged down to what the pages actually use.",[29,49,50,53],{},[32,51,52],{},"AWS CloudFront:"," the build output is uploaded to S3 and served from CloudFront edge locations. Every request is a cache hit on a static file.",[11,55,56,57,61],{},"Deployment is a git push. CodeBuild runs ",[58,59,60],"code",{},"nuxt generate"," and syncs the output — no servers, no database, nothing to patch.",[18,63,65],{"id":64},"the-numbers","The Numbers",[11,67,68],{},"Lighthouse (mobile), before and after:",[70,71,72,88],"table",{},[73,74,75],"thead",{},[76,77,78,82,85],"tr",{},[79,80,81],"th",{},"Metric",[79,83,84],{},"WordPress",[79,86,87],{},"Nuxt SSG",[89,90,91,103,114,125],"tbody",{},[76,92,93,97,100],{},[94,95,96],"td",{},"Performance score",[94,98,99],{},"49",[94,101,102],{},"91",[76,104,105,108,111],{},[94,106,107],{},"Largest Contentful Paint",[94,109,110],{},"7.6 s",[94,112,113],{},"3.1 s",[76,115,116,119,122],{},[94,117,118],{},"First Contentful Paint",[94,120,121],{},"2.7 s",[94,123,124],{},"2.4 s",[76,126,127,130,133],{},[94,128,129],{},"Cumulative Layout Shift",[94,131,132],{},"0.618",[94,134,135],{},"0.003",[11,137,138],{},[32,139,140],{},"Before — WordPress:",[11,142,143],{},[144,145],"img",{"alt":146,"src":147},"Lighthouse report for the WordPress site: performance score 49, LCP 7.6 s, CLS 0.618","\u002Fblog\u002Flighthouse-wordpress.webp",[11,149,150],{},[32,151,152],{},"After — Nuxt SSG on CloudFront:",[11,154,155],{},[144,156],{"alt":157,"src":158},"Lighthouse report for the Nuxt site: performance score 91, LCP 3.1 s, CLS 0.003","\u002Fblog\u002Flighthouse-nuxt.webp",[11,160,161],{},"The two metrics that moved the most are the ones users feel:",[26,163,164,170],{},[29,165,166,169],{},[32,167,168],{},"LCP dropped from 7.6 s to 3.1 s."," The hero content is in the initial HTML and the largest asset is an optimized WebP served from the edge, instead of being assembled by PHP and fetched from a distant origin.",[29,171,172,175],{},[32,173,174],{},"CLS dropped from 0.618 to 0.003."," The old theme loaded fonts and widgets that pushed content around as they arrived. Now layout is fixed at build time and nothing shifts after first paint.",[18,177,179],{"id":178},"why-it-matters","Why It Matters",[11,181,182],{},"Beyond the score: the attack surface is gone (static files have no admin panel to exploit), hosting costs are near zero, and the whole site is versioned in git — content included. Reviewing a blog post is a pull request, not a WYSIWYG editor.",[11,184,185],{},"If your site is mostly content that changes on human timescales, you probably don't need a CMS runtime. Build it once, put it on a CDN, and move on.",{"title":187,"searchDepth":188,"depth":188,"links":189},"",2,[190,191,192],{"id":20,"depth":188,"text":21},{"id":64,"depth":188,"text":65},{"id":178,"depth":188,"text":179},"2026-07-14","We replaced our WordPress site with a statically generated Nuxt app served from AWS CloudFront. The Lighthouse performance score went from 49 to 91.","md",{},true,"\u002Fblog\u002Ffrom-wordpress-to-nuxt-ssg",{"title":5,"description":194},{"loc":198},"blog\u002Ffrom-wordpress-to-nuxt-ssg","qBpY6VvqPrlmzXoWf2_vCPuyBSqESUCt77rpttQ-c2Y",1784104565882]