Nuxt SEO v5
Status: Production Ready | Dependencies: Nuxt >=3.0.0
Use this skill when building SEO-optimized Nuxt applications with any combination of the 8 official Nuxt SEO modules plus standalone modules.
Quick Start (5 Minutes)
1. Install Complete SEO Bundle
# Recommended (v5)
npx nuxt module add @nuxtjs/seo
2. Configure Site Settings
export default defineNuxtConfig({
modules: ['@nuxtjs/seo'],
site: {
url: 'https://example.com',
name: 'My Awesome Site',
description: 'Building amazing web experiences',
defaultLocale: 'en'
}
})
CRITICAL (v5 Breaking Change):
site.nameis NO LONGER auto-inferred frompackage.json— set it explicitly- Set
site.urlto production URL (required for sitemaps and canonical URLs) - Set
defaultLocaleif using i18n
3. Restart and Verify
Visit these URLs to verify:
/robots.txt- Robots file/sitemap.xml- Sitemap/__robots__/debug-production.json- Debug (v5)/__sitemap__/debug-production.json- Debug (v5)
Individual Module Install
npx nuxt module add @nuxtjs/robots
npx nuxt module add @nuxtjs/sitemap
npx nuxt module add nuxt-og-image
Module Overview
| Module | Version | Purpose | |--------|---------|---------| | @nuxtjs/seo | v5.1.0 | Primary SEO module (installs all 8 as bundle) | | @nuxtjs/robots | v6.0.6 | Manages robots.txt and bot detection | | @nuxtjs/sitemap | v8.0.11 | Generates XML sitemaps with advanced features | | nuxt-og-image | v6.3.1 | Creates Open Graph images via Vue templates | | nuxt-schema-org | v6.0.4 | Builds Schema.org structured data graphs | | nuxt-link-checker | v5.0.6 | Finds and fixes broken links with ESLint integration | | nuxt-seo-utils | v8.1.4 | SEO utilities, share links, favicons, inline minification | | nuxt-site-config | v4.0.7 | Centralized site configuration management |
Standalone (MIT): nuxt-ai-ready (llms.txt), nuxt-skew-protection (version safety) Pro (Paid): Nuxt SEO Pro — Search Console, Core Web Vitals, MCP server
For detailed module docs: Load references/module-details.md
Critical Rules
Always Do
- Set
site.urlANDsite.nameexplicitly in nuxt.config.ts (v5: name no longer auto-inferred) - Use environment variables for multi-environment setups
- Configure robots.txt to block admin/private pages
- Add Schema.org structured data to all important pages
- Generate OG images for social sharing
- Use
getSiteConfig(event)on server side (v5:useSiteConfig(event)removed) - Use
defineSitemapSchema()for Content v3 (v5:asSitemapCollection()deprecated)
Never Do
- Forget to set
site.urlandsite.name(breaks sitemaps, canonical URLs, titles) - Allow crawling of staging environments
- Use
useSiteConfig(event)on server side (v5: usegetSiteConfig(event)) - Use
asSitemapCollection()(v5: usedefineSitemapSchema()) - Use
getSiteIndexable()(v5: use{ indexable } = getSiteConfig(event))
Known Issues Prevention
Issue #1: Sitemap Not Generating
Error: /sitemap.xml returns 404 | Fix: Set site.url in nuxt.config.ts
Issue #2: robots.txt Missing
Error: /robots.txt not accessible | Fix: Install @nuxtjs/robots and set site.url
Issue #3: OG Images Not Rendering
Error: /__og-image__/og.png returns error | Fix: Use Satori-compatible CSS or switch to Chromium renderer
Issue #4: Schema Validation Errors
Error: Invalid JSON-LD | Fix: Follow official Schema.org types, validate with Google Rich Results Test
Issue #5: Broken Internal Links
Error: 404 on internal links | Fix: Enable nuxt-link-checker with ESLint rules during development
Issue #6: Duplicate Meta Tags
Error: Multiple meta tags with same property | Fix: Let modules handle meta tags automatically
Issue #7: Canonical URL Issues
Error: Wrong canonical URL | Fix: Configure site.url and trailingSlash correctly
Issue #8: Sitemap Index Errors
Error: Sitemap index XML malformed | Fix: Use chunkSize option to split large sitemaps
Issue #9: Crawling Staging Environment
Error: Staging indexed by Google | Fix: disallow: process.env.NUXT_PUBLIC_ENV === 'staging' ? ['/'] : []
Issue #10: Missing Social Sharing Images
Error: No preview on social media | Fix: Use defineOgImage() on all important pages
Issue #11: Missing Site Name (v5 Breaking)
Error: Site title/og:site_name missing | Fix: Set site.name in nuxt.config.ts or NUXT_SITE_NAME env var Ref: https://nuxtseo.com/docs/nuxt-seo/migration-guide/v4-to-v5
Issue #12: Server-Side useSiteConfig Error (v5 Breaking)
Error: useSiteConfig is not a function on server | Fix: Use getSiteConfig(event) on server side Ref: https://github.com/harlan-zw/nuxt-site-config/releases
Issue #13: Deprecated Content Composables (v5 Breaking)
Error: asSitemapCollection is not defined | Fix: Use defineSitemapSchema(), defineSchemaOrgSchema(), defineRobotsSchema() Ref: https://nuxtseo.com/docs/nuxt-seo/migration-guide/v4-to-v5
Issue #14: OG Image Security Errors (v5)
Error: OG image requests return 403 or signature errors | Fix: Use defineOgImage() properly; don't manually construct OG image URLs Ref: https://nuxtseo.com/docs/og-image/getting-started/introduction
Configuration Example
export default defineNuxtConfig({
modules: ['@nuxtjs/seo'],
site: {
url: process.env.NUXT_PUBLIC_SITE_URL,
name: 'My Site',
defaultLocale: 'en'
},
robots: {
disallow: process.env.NUXT_PUBLIC_ENV === 'staging' ? ['/'] : []
},
sitemap: {
sitemaps: {
blog: { sources: ['/api/__sitemap__/blog'] }
}
}
})
New v5 Features
- Social Share Links:
useShareLinks({ title, twitter, utm })with UTM tracking - Favicon Generation:
npx nuxt-seo-utils icons --source logo.svg - ESLint Link Checking:
import linkChecker from 'nuxt-link-checker/eslint' - definePageMeta Sitemap:
definePageMeta({ sitemap: { changefreq: 'daily', priority: 0.8 } }) - Inline Minification:
seo: { minify: true }
When to Load References
Load reference files based on the user's specific needs:
| Load When | Reference File | |-----------|---------------| | Upgrading v4→v5, breaking changes | references/v5-migration-guide.md | | Rendering modes, JSON-LD, canonical URLs, IndexNow | references/seo-guides.md | | AI optimization, llms.txt, MCP tools | references/pro-modules.md | | I18n SEO, route rules, link checker rules | references/advanced-seo-guides.md | | OG image templates, Satori/Chromium, fonts | references/og-image-guide.md | | Nuxt Content integration, asSeoCollection | references/nuxt-content-integration.md | | Dynamic sitemaps, multi-sitemaps, chunking | references/sitemap-advanced.md | | Server-side hooks, Nitro plugins | references/nitro-api-reference.md | | llms.txt, AI crawlers, content signals | references/ai-seo-tools.md | | Module capabilities overview | references/modules-overview.md | | First-time setup, package manager specifics | references/installation-guide.md | | Composable API docs, parameter lists | references/api-reference.md | | Blog, e-commerce, multi-language patterns | references/common-patterns.md | | Specific module configuration | references/module-details.md | | Production SEO guidelines | references/best-practices.md | | Error resolution, module conflicts | references/troubleshooting.md | | Multi-environment, advanced features | references/advanced-configuration.md |
Bundled Resources
Agents
| Agent | Purpose | |-------|---------| | seo-auditor.md | Comprehensive SEO audit | | schema-generator.md | Generate Schema.org structured data | | og-image-generator.md | Create custom OG image templates