Quick Module Setup Guide
Introduction
Nuxt SEO bundles 9 modules via @nuxtjs/seo: Sitemap, Robots, OG Image, Schema.org, Link Checker, SEO Utils, Site Config, AI Ready, and Skew Protection. Most work out-of-the-box, but you may need some configuration
depending on your site's requirements.
@nuxtjs/seo (the alias) or individual modules, the configuration is the same. Each module is independent and configured through its own options. See the introduction for details.This guide will give you a quick overview of each module and what you need to do to get started.
Check out the StackBlitz Demo if you want to see a working example.
Sitemap
Generates a sitemap at /sitemap.xml based on your app data sources.
- When prerendering or using static only routes, it will automatically generate a sitemap for you without any configuration.
- If you have dynamic routes, you'll need to set up a handler for Dynamic URLs.
I18n features: the sitemap module will automatically generate a multi sitemap with each locale having its own sitemap.
See I18n Sitemap for more information.
Robots
Generates a robots.txt at /robots.txt.
Will append a <meta name="robots" content="<rule>"> and a X-Robots-Tag HTTP header.
- If you have any other environments besides development and production, you need to configure the
envoption. See the Disabling Indexing guide for more information. - By default, all routes are allowed for all user-agents. See Disabling Page Indexing to start blocking routes.
I18n features: any Disallow rules in the robots module will automatically have the locale prefixes added.
See I18n Robots for more information.
OG Image
Generate dynamic Open Graph images for your pages.
- It needs a renderer dependency. If your app has no OG Image template and no renderer, OG images stay off. The module logs one line with the
enablecommand. - If a template needs a renderer that is not installed,
nuxt devin an interactive terminal asks before it installs anything. In CI and AI agent shells, it logs the install command instead. - A production build fails when a page uses a template whose renderer is not installed.
- If OG Image signs URLs, production needs
NUXT_APP_SECRET. See URL Signing. - See the Tutorial: Getting Familiar With Nuxt OG Image docs on setting it up.
If you want dynamic images, install a renderer:
npx nuxt-og-image enable takumiIf you don't intend to generate dynamic images, disable this module with ogImage: false.
Schema.org
Automatically generates schema.org JSON-LD for your pages.
- Provides default Schema.org for your pages.
- It's recommended to Setup Your Identity for your site as well.
- You can opt in to more Schema.org using useSchemaOrg.
Link Checker
Checks all links for issues that may be affecting your SEO.
- When building your site it will check links
- You can also run it manually by opening the "Link Checker" tab in Nuxt DevTools
SEO Utils
A few extra SEO Nuxt features that don't fit anywhere else.
- See the SEO Utils Introduction for more information.
- Automatic File Metadata Icons and Open Graph Images
- Opt in seoMeta in your nuxt.config and route rules
- Automatic default meta for your site.
- Automatic fallback title for your site.
- Opt-in breadcrumbs with Schema.org support
AI Ready
Makes your pages readable by AI agents.
- Serves /llms.txt and a Markdown version of every page. A prerender also writes
/llms-full.txt. - Publishes Agent Skills from
public/skills/<name>/SKILL.mdin your project and layers. Files under the rootskills/directory stay private. - Generates an API catalog when you configure an MCP server and a site URL.
- Background indexing and cron stay off until you enable them. The database also stays off, unless an MCP server or WebMCP site tools need it.
To turn off Agent Skills or the API catalog, set aiReady: { agentSkills: false } or aiReady: { apiCatalog: false }.
See the AI Ready docs for more information. If you don't want AI Ready, disable this module with aiReady: false.
Skew Protection
Keeps the assets of earlier builds available after a deploy. Open tabs and crawlers stop hitting ChunkLoadError and 404 errors on old chunks.
Nuxt SEO changes two Skew Protection defaults:
updateStrategy: 'polling': it checks for new versions with Nuxt's app manifest polling, so it opens no persistent connection.cookie: false: it sets no version cookie. Connection, route, and IP tracking also stay off.
Your skewProtection options take precedence over these defaults.
Skew Protection stores old assets in node_modules/.cache/nuxt-seo/skew-protection. If your CI starts from a clean checkout, cache that directory between builds, or set skewProtection.storage. Without that history, the module cannot keep the assets of earlier deployments.
If a server handler calls isClientOutdated(), set skewProtection.cookie to a cookie config object.
See the Skew Protection docs for more information. If you don't want Skew Protection, disable this module with skewProtection: false.
Shared Configuration
Nuxt Site Config allows you to configure all Nuxt SEO modules at build time and runtime, for example in a multi-tenant or i18n app.
nuxt-site-config manually. It installs automatically with any Nuxt SEO module.You should set the following config. Since v5, site config is no longer inferred from package.json or your project directory, so these values must be set explicitly:
url- The canonical URL of your site, avoids duplicate content and consolidates page rank.name- The name of your site, used in the title and meta tags. Required if you want your site name in SEO output.description- The description of your site, used in the meta tags.defaultLocale- The default locale of your site, used in the meta tags. (you can omit this if you're using@nuxtjs/i18nornuxt-i18n-micro)
export default defineNuxtConfig({
site: {
url: 'https://example.com',
name: 'Awesome Site',
description: 'Welcome to my awesome site!',
defaultLocale: 'en', // not needed if you have @nuxtjs/i18n or nuxt-i18n-micro installed
}
})I18n features: you can dynamically set the site config based on the current locale.
This is useful for setting the url and name properties based on the page the user is currently on.
See I18n Site Config for more information.