From Nuxt to Hugo
Situation
I had wanted to use Hugo for a while, and when it came time to move my Nuxt 2 site forward I chose to migrate instead of upgrading to Nuxt 3. Nuxt excels at dynamic Vue apps, but this project is a content-first site. Hugo’s static build pipeline, multi-language support, and minimal runtime footprint were a much better fit.
Solution
- Map the objectives
- Audit what Nuxt is doing for you: data fetching, dynamic routes, plugins, and middleware.
- Decide what can become pre-generated content versus what still needs runtime logic.
- Move the content first
- Export Markdown from the Nuxt Content module (or your CMS) and drop it into Hugo’s
content/tree. - Translate front matter into TOML/YAML front matter so Hugo can read titles, dates, and taxonomies.
- Export Markdown from the Nuxt Content module (or your CMS) and drop it into Hugo’s
- Recreate layouts intentionally
- Identify Nuxt layouts and Vue components that map to Hugo templates or partials.
- Rebuild only what adds value; Hugo’s Go templates often need fewer abstractions.
- Replace dynamic features
- For features like search, consider Hugo’s JSON outputs plus a lightweight client-side index.
- For forms or comments, integrate external services or serverless functions instead of writing Vue logic.
- Tighten the build & deploy loop
hugo server -Dgives fast local previews;hugo --gc --minifymirrors production.- Deployment shrinks to uploading the
public/folder or letting Netlify handle it.
It’s not DNS
It cannot be DNS
It was DNS
Good luck with your migration! If you hit a snag, it’s probably DNS—check it anyway.
