v5.0.0 · Nuxt SEO

[NuxtSEO](https://nuxtseo.com/ "Home")

- [Modules](https://nuxtseo.com/docs/nuxt-seo/getting-started/introduction)
- [Tools](https://nuxtseo.com/tools)
- [Pro](https://nuxtseo.com/pro)
- [Learn SEO](https://nuxtseo.com/learn-seo/nuxt) [Releases](https://nuxtseo.com/releases)

[1.4K](https://github.com/harlan-zw/nuxt-seo)

[Nuxt SEO on GitHub](https://github.com/harlan-zw/nuxt-seo)

[User Guides](https://nuxtseo.com/docs/nuxt-seo/getting-started/introduction)

[Releases](https://nuxtseo.com/docs/nuxt-seo/releases/v5)

Nuxt SEO

- [Switch to Nuxt SEO](https://nuxtseo.com/docs/nuxt-seo/getting-started/introduction)
- [Switch to Robots](https://nuxtseo.com/docs/robots/getting-started/introduction)
- [Switch to Sitemap](https://nuxtseo.com/docs/sitemap/getting-started/introduction)
- [Switch to OG Image](https://nuxtseo.com/docs/og-image/getting-started/introduction)
- [Switch to Schema.org](https://nuxtseo.com/docs/schema-org/getting-started/introduction)
- [Switch to Link Checker](https://nuxtseo.com/docs/link-checker/getting-started/introduction)
- [Switch to SEO Utils](https://nuxtseo.com/docs/seo-utils/getting-started/introduction)
- [Switch to Site Config](https://nuxtseo.com/docs/site-config/getting-started/introduction)
- [Switch to Skew Protection](https://nuxtseo.com/docs/skew-protection/getting-started/introduction)
- [Switch to AI Ready](https://nuxtseo.com/docs/ai-ready/getting-started/introduction)

Search…```k`` /`

v5.1.3

- Playgrounds
- [Discord Support](https://discord.com/invite/275MBUBvgP)

### Changelog

### Migration Guides

- [v2 RC to v2 Stable](https://nuxtseo.com/docs/nuxt-seo/migration-guide/rc-to-stable)
- [v2 Beta to v2 RC](https://nuxtseo.com/docs/nuxt-seo/migration-guide/beta-to-rc)
- [Nuxt SEO Kit to Nuxt SEO](https://nuxtseo.com/docs/nuxt-seo/migration-guide/nuxt-seo-kit)
- [v3 to v4](https://nuxtseo.com/docs/nuxt-seo/migration-guide/v3-to-v4)
- [v4 to v5](https://nuxtseo.com/docs/nuxt-seo/migration-guide/v4-to-v5)

### Releases

- [v5.0.0](https://nuxtseo.com/docs/nuxt-seo/releases/v5)

Releases

# v5.0.0

[Copy for LLMs](https://nuxtseo.com/docs/nuxt-seo/releases/v5.md)

## [Introduction](#introduction)

Nuxt SEO v5 bumps every sub-module to a new major version (except OG Image, which stays on v6). The common thread is the **Site Config v4** dependency; addressing those changes first will make the rest of the migration smooth.

For step-by-step upgrade instructions, see the [v4 to v5 migration guide](https://nuxtseo.com/docs/nuxt-seo/migration-guide/v4-to-v5).

## [🛠️ DevTools Unity](#️-devtools-unity)

The biggest change in v5 is that every Nuxt SEO module now shares a single DevTools foundation through our new **shared DevTools layer** (`nuxtseo-layer-devtools`).

Previously each module shipped its own DevTools client with inconsistent layouts, patterns, and capabilities. In v5, all DevTools clients extend a common Nuxt layer that provides:

- **Consistent layout and navigation** across every module, with a module switcher to jump between them
- **Setup checklist** that validates your configuration across all installed modules, flagging required and recommended actions
- **Built-in troubleshooting**, update indicators, and production mode preview in every module

Nuxt SEO Utils gets a brand new DevTools client for the first time, and the DevTools for Robots, Sitemap, Schema.org, and Link Checker have all been revamped to use the shared layer.

![Nuxt SEO v5 Setup Checklist showing module configuration tips for Site Config, Robots, and Sitemap](https://nuxtseo.com/images/nuxt-seo/releases/v5.png)

## [🔗 ESLint Link Checking](#eslint-link-checking)

Nuxt Link Checker v5 ships an [ESLint](https://eslint.org) integration with zero-config `@nuxt/eslint` support:

- `link-checker/valid-route` (error): validates relative URLs match known routes with "did you mean?" suggestions
- `link-checker/valid-sitemap-link` (warn): checks URLs exist in the sitemap
- Scans Vue templates, TS/JS (`navigateTo`, `router.push`), and Markdown links

If you're using `@nuxt/eslint`, the rules are registered automatically. Otherwise, add them manually:

eslint.config.ts

```
import linkChecker from 'nuxt-link-checker/eslint'

export default [
  linkChecker,
]
```

Example output when a link doesn't match any route:

```
error  Link "/abut" does not match any known route. Did you mean "/about"?  link-checker/valid-route
```

## [📱 Social Share Links](#social-share-links)

SEO Utils v8 introduces `useShareLinks()`, a composable for generating social sharing URLs (Twitter, Facebook, LinkedIn, WhatsApp, Telegram, Reddit, Pinterest, Email) with built-in UTM tracking.

```
<script setup lang="ts">
const links = useShareLinks({
  title: 'Check out Nuxt SEO v5!',
  twitter: { via: 'harlodev', hashtags: ['nuxt', 'seo'] },
  utm: { source: 'auto', campaign: 'v5-launch' },
})
</script>

<template>
  <nav>
    <a :href="links.twitter">Share on X</a>
    <a :href="links.linkedin">Share on LinkedIn</a>
    <a :href="links.reddit">Share on Reddit</a>
  </nav>
</template>
```

The composable resolves the canonical URL of the current route automatically and appends per-platform UTM parameters. Pass `utm: false` to disable tracking entirely.

## [🖼️ Favicon Generation CLI](#️-favicon-generation-cli)

New `nuxt-seo-utils icons` CLI command generates all favicon and icon variants from a single source image:

```
npx nuxt-seo-utils icons --source logo.svg
```

This generates `favicon.ico`, `apple-touch-icon.png` (180x180), and PNG icons at 16, 32, 192, and 512px from your source image in `public/`. Requires `sharp` as a dev dependency.

## [⚡ Inline Minification](#inline-minification)

SEO Utils v8 automatically minifies inline scripts and styles injected via `useHead`.

**Before** (what you write):

```
useHead({
  script: [{
    innerHTML: \`
      // Track page view
      window.dataLayer = window.dataLayer || [];
      window.dataLayer.push({
        'event': 'page_view',
        'page_path': window.location.pathname
      });
    \`,
  }],
  style: [{
    innerHTML: \`
      /* Critical above-the-fold styles */
      .hero {
        display: flex;
        align-items: center;
        justify-content: center;
        min-height: 100vh;
      }
    \`,
  }],
})
```

**After** (rendered HTML):

```
<script>window.dataLayer=window.dataLayer||[];window.dataLayer.push({event:"page_view",page_path:window.location.pathname});</script>
<style>.hero{display:flex;align-items:center;justify-content:center;min-height:100vh}</style>
```

## [📄 `definePageMeta` Sitemap Config](#definepagemeta-sitemap-config)

Sitemap v8 lets you configure sitemap options directly in `definePageMeta`:

```
<script setup lang="ts">
definePageMeta({
  sitemap: {
    changefreq: 'daily',
    priority: 0.8,
  },
})
</script>
```

## [🌐 i18n Multi-Sitemap Improvements](#i18n-multi-sitemap-improvements)

Custom sitemaps are now auto-expanded per locale when using i18n multi-sitemap mode. Previously you had to manually define a sitemap per locale. Now any sitemap with `includeAppSources: true` is automatically expanded:

nuxt.config.ts

```
export default defineNuxtConfig({
  sitemap: {
    sitemaps: {
      // Expanded to "en-pages", "fr-pages", etc. automatically
      pages: { includeAppSources: true },
      // Static sitemaps without includeAppSources are kept as-is
      external: { urls: ['https://example.com/extra'] },
    },
  },
})
```

## [⚠️ Breaking Changes](#️-breaking-changes)

All modules now depend on **Site Config v4**, which removes implicit site name inference, legacy `site*` runtime config keys, and several deprecated server-side APIs. Several Content v3 composables have also been renamed (e.g. `asSitemapCollection()` → `defineSitemapSchema()`).

See the [migration guide](https://nuxtseo.com/docs/nuxt-seo/migration-guide/v4-to-v5) for the full list of breaking changes and how to address them.

## [🐞 Bug Fixes](#bug-fixes)

### [SSR Memory Leaks Fixed](#ssr-memory-leaks-fixed)

- **Schema.org**: reactive scopes not being disposed
- **Site Config**: computed refs in i18n plugin

### [i18n Fixes](#i18n-fixes)

- Sitemap: base URL in multi-sitemap redirect, exclude filters with base URL/i18n prefixes, respect `autoI18n: false`
- SEO Utils: resolve fallback page titles from translation keys

### [Other Fixes](#other-fixes)

- Schema.org: `@id` URLs now respect `app.baseURL`, Nuxt context preserved in computed refs
- Robots: `skipSiteIndexable` now skips `Disallow: /` rules, route rules nullish guard
- SEO Utils: error pages preserve user-defined titles, `useServerSeoMeta` takes precedence over site defaults
- Sitemap: chunked sitemaps path resolution, Content v3 `.navigation` path filtering
- Link Checker: serialize RegExp in `excludeLinks` for client-side filtering

## [📚 Live Examples](#live-examples)

Every module now ships standalone examples in its repository. These are real Nuxt apps that stay in sync with the latest code, so they always reflect the current API.

Open any example directly in [StackBlitz](https://stackblitz.com):

| Module | Examples |
| --- | --- |
| **Robots** | [basic](https://stackblitz.com/github/nuxt-modules/robots/tree/main/examples/basic), [i18n](https://stackblitz.com/github/nuxt-modules/robots/tree/main/examples/i18n), [custom-rules](https://stackblitz.com/github/nuxt-modules/robots/tree/main/examples/custom-rules) |
| **Sitemap** | [basic](https://stackblitz.com/github/nuxt-modules/sitemap/tree/main/examples/basic), [i18n](https://stackblitz.com/github/nuxt-modules/sitemap/tree/main/examples/i18n), [dynamic-urls](https://stackblitz.com/github/nuxt-modules/sitemap/tree/main/examples/dynamic-urls) |
| **OG Image** | [basic-satori](https://stackblitz.com/github/nuxt-modules/og-image/tree/main/examples/basic-satori), [basic-takumi](https://stackblitz.com/github/nuxt-modules/og-image/tree/main/examples/basic-takumi), [content](https://stackblitz.com/github/nuxt-modules/og-image/tree/main/examples/content), [i18n](https://stackblitz.com/github/nuxt-modules/og-image/tree/main/examples/i18n) |
| **Schema.org** | [basic](https://stackblitz.com/github/harlan-zw/nuxt-schema-org/tree/main/examples/basic), [blog](https://stackblitz.com/github/harlan-zw/nuxt-schema-org/tree/main/examples/blog), [e-commerce](https://stackblitz.com/github/harlan-zw/nuxt-schema-org/tree/main/examples/e-commerce) |
| **Link Checker** | [basic](https://stackblitz.com/github/harlan-zw/nuxt-link-checker/tree/main/examples/basic), [broken-links](https://stackblitz.com/github/harlan-zw/nuxt-link-checker/tree/main/examples/broken-links), [skip-inspection](https://stackblitz.com/github/harlan-zw/nuxt-link-checker/tree/main/examples/skip-inspection) |
| **SEO Utils** | [basic](https://stackblitz.com/github/harlan-zw/nuxt-seo-utils/tree/main/examples/basic), [breadcrumbs](https://stackblitz.com/github/harlan-zw/nuxt-seo-utils/tree/main/examples/breadcrumbs), [meta-tags](https://stackblitz.com/github/harlan-zw/nuxt-seo-utils/tree/main/examples/meta-tags) |
| **Site Config** | [basic](https://stackblitz.com/github/harlan-zw/nuxt-site-config/tree/main/examples/basic), [env-driven](https://stackblitz.com/github/harlan-zw/nuxt-site-config/tree/main/examples/env-driven), [multi-site](https://stackblitz.com/github/harlan-zw/nuxt-site-config/tree/main/examples/multi-site) |

Because examples live alongside each module's source, they are always tested against the latest version and never fall out of date.

## [Module Version Summary](#module-version-summary)

| Module | v4 | v5 |
| --- | --- | --- |
| `nuxt-site-config` | v3 | **v4** |
| `nuxt-seo-utils` | v7 | **v8** |
| `@nuxtjs/sitemap` | v7 | **v8** |
| `@nuxtjs/robots` | v5 | **v6** |
| `nuxt-schema-org` | v5 | **v6** |
| `nuxt-link-checker` | v4 | **v5** |
| `nuxt-og-image` | v6 | v6 _(no major change)_ |

[Edit this page](https://github.com/harlan-zw/nuxt-seo/edit/main/docs/content/7.releases/1.v5.md)

[Markdown For LLMs](https://nuxtseo.com/docs/nuxt-seo/releases/v5.md)

Did this page help you?

[v4 to v5 Migrate from Nuxt SEO v4 to v5.](https://nuxtseo.com/docs/nuxt-seo/migration-guide/v4-to-v5) 

On this page

- [Introduction](#introduction)
- [🛠️ DevTools Unity](#️-devtools-unity)
- [🔗 ESLint Link Checking](#eslint-link-checking)
- [📱 Social Share Links](#social-share-links)
- [🖼️ Favicon Generation CLI](#️-favicon-generation-cli)
- [⚡ Inline Minification](#inline-minification)
- [📄 definePageMeta Sitemap Config](#definepagemeta-sitemap-config)
- [🌐 i18n Multi-Sitemap Improvements](#i18n-multi-sitemap-improvements)
- [⚠️ Breaking Changes](#️-breaking-changes)
- [🐞 Bug Fixes](#bug-fixes)
- [📚 Live Examples](#live-examples)
- [Module Version Summary](#module-version-summary)

[GitHub](https://github.com/harlan-zw/nuxt-seo) [ Discord](https://discord.com/invite/275MBUBvgP)

### [NuxtSEO](https://nuxtseo.com/ "Home")

- [Getting Started](https://nuxtseo.com/docs/nuxt-seo/getting-started/introduction)
- [MCP](https://nuxtseo.com/docs/nuxt-seo/guides/mcp)

Modules

- [Robots](https://nuxtseo.com/docs/robots/getting-started/introduction)
- [Sitemap](https://nuxtseo.com/docs/sitemap/getting-started/introduction)
- [OG Image](https://nuxtseo.com/docs/og-image/getting-started/introduction)
- [Schema.org](https://nuxtseo.com/docs/schema-org/getting-started/introduction)
- [Link Checker](https://nuxtseo.com/docs/link-checker/getting-started/introduction)
- [SEO Utils](https://nuxtseo.com/docs/seo-utils/getting-started/introduction)
- [Site Config](https://nuxtseo.com/docs/site-config/getting-started/introduction)
- [Skew Protection](https://nuxtseo.com/docs/skew-protection/getting-started/introduction)
- [AI Ready](https://nuxtseo.com/docs/ai-ready/getting-started/introduction)

### [NuxtSEO Pro](https://nuxtseo.com/pro "Nuxt SEO Pro")

- [Getting Started](https://nuxtseo.com/pro)
- [Dashboard](https://nuxtseo.com/pro/dashboard)
- [Pro MCP](https://nuxtseo.com/pro/docs/getting-started/mcp-setup)

### [Learn SEO](https://nuxtseo.com/learn-seo "Learn SEO")

Nuxt

- [Mastering Meta](https://nuxtseo.com/learn-seo/nuxt/mastering-meta)
- [Controlling Crawlers](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers)
- [Launch & Listen](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen)
- [Routes & Rendering](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering)
- [Staying Secure](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/security)

Vue

- [Vue SEO Guide](https://nuxtseo.com/learn-seo/vue)
- [Mastering Meta](https://nuxtseo.com/learn-seo/vue/mastering-meta)
- [Controlling Crawlers](https://nuxtseo.com/learn-seo/vue/controlling-crawlers)
- [SPA SEO](https://nuxtseo.com/learn-seo/vue/spa)
- [SSR Frameworks](https://nuxtseo.com/learn-seo/vue/ssr-frameworks)
- [SEO Checklist](https://nuxtseo.com/learn-seo/checklist)
- [Pre-Launch Warmup](https://nuxtseo.com/learn-seo/pre-launch-warmup)
- [Backlinks & Authority](https://nuxtseo.com/learn-seo/backlinks)

### [Tools](https://nuxtseo.com/tools "SEO Tools")

- [Social Share Debugger](https://nuxtseo.com/tools/social-share-debugger)
- [Robots.txt Generator](https://nuxtseo.com/tools/robots-txt-generator)
- [Meta Tag Checker](https://nuxtseo.com/tools/meta-tag-checker)
- [HTML to Markdown](https://nuxtseo.com/tools/html-to-markdown)
- [XML Sitemap Validator](https://nuxtseo.com/tools/xml-sitemap-validator)
- [Schema.org Validator](https://nuxtseo.com/tools/schema-validator)
- [Keyword Idea Generator](https://nuxtseo.com/tools/keyword-generator)
- [Keyword Research](https://nuxtseo.com/tools/keyword-research)
- [SERP Analyzer](https://nuxtseo.com/tools/serp-analyzer)
- [Domain Rankings](https://nuxtseo.com/tools/domain-rankings)

Copyright © 2023-2026 Harlan Wilton - [MIT License](https://github.com/harlan-zw/nuxt-seo/blob/main/license) · [mdream](https://mdream.dev)