Nuxt gives you a massive SEO head start — server-side rendering by default, automatic code splitting, and a clean head management API. But "SEO-friendly framework" and "SEO-optimized site" are two very different things.
This is the checklist I run on every Nuxt project before launch. It is ordered by impact.
1. Server-side rendering — confirm it is on
Nuxt 4 defaults to SSR, but it is easy to accidentally disable it per-route with ssr: false in definePageMeta. Any route Google needs to index must render on the server.
Check it with a simple curl: curl -s https://yoursite.com/page | grep '<h1'. You should see real content, not an empty <div id="__nuxt">.
2. Per-page meta with useSeoMeta
Do not rely on a global title template alone. Every page should declare its own title, description, and OG tags:
useSeoMeta({
title: 'The Nuxt 4 SEO Checklist for 2026',
description: 'A practical, code-level SEO checklist for Nuxt 4 in 2026.',
ogTitle: 'The Nuxt 4 SEO Checklist for 2026',
ogDescription: 'A practical, code-level SEO checklist for Nuxt 4 in 2026.',
ogImage: 'https://yoursite.com/og/checklist.png',
twitterCard: 'summary_large_image',
})
3. Structured data
Search engines reward pages that declare what they are. For a blog post, that is Article. For a product, Product with offers. Nuxt's useHead makes this trivial:
useHead({
script: [{
type: 'application/ld+json',
innerHTML: JSON.stringify({
'@context': 'https://schema.org',
'@type': 'Article',
headline: 'The Nuxt 4 SEO Checklist for 2026',
author: { '@type': 'Person', name: 'Creativitas' },
datePublished: '2026-10-18',
}),
}],
})
4. Sitemap and robots
The @nuxtjs/seo module generates both automatically. Confirm /sitemap.xml includes every indexable route, and /robots.txt does not block crawlers. This takes five minutes and is forgotten on half the Nuxt sites I audit.
5. Core Web Vitals
Google's ranking signal is dominated by three numbers: LCP, CLS, and INP. Nuxt helps, but it does not save you from:
- Unoptimized images — use
<NuxtImg>with explicit width and height to prevent CLS. - Render-blocking fonts — preload or use
font-display: swap. - Heavy client hydration — keep client-only components minimal and SSR the important ones.
Run PageSpeed Insights on a production URL, not localhost. A 99 on localhost means nothing.
6. Canonical URLs
Duplicate content is the silent SEO tax. Set a canonical on every page:
useHead({
link: [{ rel: 'canonical', href: `https://yoursite.com${route.path}` }],
})
7. Internal linking
Search engines follow links, not sitemaps. Every blog post should link to at least one product page and one related article. This is also the highest-leverage conversion tactic you have — an article that links to a product converts 3 to 5 times better than one that does not.
The mistakes that quietly kill rankings
- Client-only rendered content — Google may or may not index it. Do not gamble.
- Missing meta descriptions — Google will pull random text from your page. Ugly in SERPs.
- No OG image — social shares look broken. Kills click-through from Twitter and LinkedIn.
- Slow TTFB — edge deployment is not optional anymore.
Where Nuxas fits
Nuxas ships with this entire checklist pre-configured: @nuxtjs/seo, per-page useSeoMeta, structured data helpers, sitemap generation, and OG image pipelines. You do not rebuild SEO from scratch — you inherit a working baseline and customize from there.