Last fetched just now. Updated every 24 hours.
No significant changes
No significant changes
No significant changes
(5633a)canonicalQueryWhitelist override - by @harlan-zw (aa555)No significant changes
zeroRuntime prerender detection when no manual nitro.prerender.routes - by @harlan-zw in https://github.com/nuxt-modules/sitemap/issues/593 (688d1)(9cfba)(87a25)html - by @harlan-zw in https://github.com/nuxt-modules/og-image/issues/545 (25c05)autoI18n: false - by @harlan-zw in https://github.com/nuxt-modules/sitemap/issues/589 (28b65)article:published_time for lastmod - by @harlan-zw in https://github.com/nuxt-modules/sitemap/issues/590 (f537f)chunkSize config precedence over chunks number - by @harlan-zw in https://github.com/nuxt-modules/sitemap/issues/591 (ad522)(e2f67)(4f17e)autoI18n: false to suppress hreflang tag generation - by @harlan-zw in https://github.com/nuxt-modules/sitemap/issues/587 (ee92b)No significant changes
(86327)No significant changes
No significant changes
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.
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:
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 Link Checker v5 ships an ESLint integration with zero-config @nuxt/eslint support:
link-checker/valid-route (error): validates relative URLs match known routes with "did you mean?" suggestionslink-checker/valid-sitemap-link (warn): checks URLs exist in the sitemapnavigateTo, router.push), and Markdown linksIf you're using @nuxt/eslint, the rules are registered automatically. Otherwise, add them manually:
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
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.
const links = useShareLinks({
title: 'Check out Nuxt SEO v5!',
twitter: { via: 'harlodev', hashtags: ['nuxt', 'seo'] },
utm: { campaign: 'v5-launch' },
})
Share on X
Share on LinkedIn
Share on Reddit
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.
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):
window.dataLayer=window.dataLayer||[];window.dataLayer.push({event:"page_view",page_path:window.location.pathname});
.hero{display:flex;align-items:center;justify-content:center;min-height:100vh}
definePageMeta Sitemap ConfigSitemap v8 lets you configure sitemap options directly in definePageMeta:
definePageMeta({
sitemap: {
changefreq: 'daily',
priority: 0.8,
},
})
Custom sitemaps are now auto-expanded per locale when using i18n multi-sitemap mode.
Several modules now expose debug endpoints in production:
/__robots__/debug-production.json/__sitemap__/debug-production.json/__nuxt-seo-utilsNamed priority constants are now available via SiteConfigPriority.runtime, etc.
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 for the full list of breaking changes and how to address them.
@id URLs now respect app.baseURL, Nuxt context preserved in computed refsskipSiteIndexable now skips Disallow: / rules, route rules nullish guarduseServerSeoMeta takes precedence over site defaults.navigation path filteringexcludeLinks for client-side filteringEvery 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:
| Module | Examples |
|---|---|
| Robots | basic, i18n, custom-rules |
| Sitemap | basic, i18n, dynamic-urls |
| OG Image | basic-satori, basic-takumi, content, i18n |
| Schema.org | basic, blog, e-commerce |
| Link Checker | basic, broken-links, skip-inspection |
| SEO Utils | basic, breadcrumbs, meta-tags |
| Site Config | basic, env-driven, 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 | 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) |
asSeoCollection - by @harlan-zw (40d4f)(a149d)(b55b7)(c67ce)(e51be)(92d9d)(3dcf8)(9902a)(bd05a)No significant changes
No significant changes
No significant changes
No significant changes
No significant changes
(0b817)(851b1)No significant changes
No significant changes
No significant changes
No significant changes
No significant changes
No significant changes
Nuxt Skew Protection v1 marks the module's first stable release. The focus: giving you full control over how and when outdated clients respond to new deployments, while making version state observable on both client and server.
This release also cleans up the API surface, shortening names and aligning conventions before committing to semver stability.
Run the automated codemod to migrate your project, or paste the LLM upgrade prompt into Claude, ChatGPT, etc. for a guided migration.
npx nuxt-skew-protection migrate
See the breaking changes below for details on what changed.
Every incoming request now carries event.context.skewVersion populated from the client's cookie. Use the new getClientVersion(event) server utility to read it explicitly, or isClientOutdated(event) to check staleness in API handlers.
export default defineEventHandler((event) => {
if (isClientOutdated(event)) {
// return stale-safe response or set cache headers
}
})
The composable now exposes an isRollback computed ref that is true when the server version is older than the client version, indicating a deployment was rolled back. This lets you distinguish "user needs to update" from "we rolled back, the user is ahead."
A new Nuxt DevTools panel gives you full visibility into skew protection state during development. It includes four tabs:
connectionTracking: true).The panel is available at /__nuxt-skew-protection in dev mode and can proxy production endpoints for live debugging.
Version detection gets faster when multiple tabs share discoveries. When one tab detects a deployment update, every other tab in the same browser learns about it instantly via BroadcastChannel, eliminating duplicate polling and reducing unnecessary network requests. Enabled by default; disable with multiTab: false.
Previously the module always showed a notification and waited for the user to click reload. Now you choose the behaviour that fits your app with a single config option.
export default defineNuxtConfig({
skewProtection: {
// 'prompt' (default) | 'immediate' | 'idle' | false
reloadStrategy: 'idle',
},
})
immediate reloads the moment chunks are invalidated. idle waits until the user switches tabs or the browser is idle, avoiding mid-interaction disruption. Set false to disable built-in handling and drive your own logic through hooks.
The following internal dependencies have new minimum versions. These shouldn't have any direct effect on your site, however, you may want to double check their release notes.
skew:chunks-outdatedThe Nuxt hook skew-protection:chunks-outdated has been shortened to skew:chunks-outdated.
// Before
nuxtApp.hooks.hook('skew-protection:chunks-outdated', (payload) => {
// ...
})
// After
nuxtApp.hooks.hook('skew:chunks-outdated', (payload) => {
// ...
})
isAppOutdatedisOutdated was renamed to isAppOutdated to distinguish it from chunk-level staleness.
// Before
const { isOutdated } = useSkewProtection()
// After
const { isAppOutdated } = useSkewProtection()
bundleAssetsbundlePreviousDeploymentChunks was renamed to bundleAssets for brevity.
// Before
const before = { skewProtection: { bundlePreviousDeploymentChunks: true } }
// After
const after = { skewProtection: { bundleAssets: true } }
/__skew/Internal API routes moved from /_skew/ to /__skew/ (double underscore) to follow the Nuxt convention for internal routes. Update any custom proxy rules or firewall allowlists.
sameSite changed from strict to lax so the cookie survives cross-origin navigations (e.g. OAuth redirects). maxAge shortened from 60 days to 7 days to reduce stale version drift.
checkForUpdates RemovedWe removed the standalone export. Use the composable method instead:
// Before
import { checkForUpdates } from '#skew-protection'
// After
const { checkForUpdates } = useSkewProtection()
_generate Compat RemovedWe removed the internal _generate compatibility check from early pre-releases. If you were on v0.4 or earlier, upgrade to v0.7.6 first, then to v1.
Paste this into Claude, ChatGPT, or any LLM to migrate your codebase automatically.
# Upgrade Guide: nuxt-skew-protection v0.x to v1.0.0
You are helping me upgrade nuxt-skew-protection from v0.x to v1.0.0 in my Nuxt project.
## Breaking Changes
### 1. Hook Renamed
**What changed:** `skew-protection:chunks-outdated` → `skew:chunks-outdated`
**Search my codebase for:** `skew-protection:chunks-outdated`
**Regex pattern:** `skew-protection:chunks-outdated`
**Before:**
```ts
nuxtApp.hooks.hook('skew-protection:chunks-outdated', callback)
```
**After:**
```ts
nuxtApp.hooks.hook('skew:chunks-outdated', callback)
```
### 2. Composable Return Renamed
**What changed:** `isOutdated` → `isAppOutdated` on the `useSkewProtection()`{lang="ts"} return.
**Search my codebase for:** `isOutdated`
**Regex pattern:** `isOutdated(?!Payload|\.)`{lang="ts"}
**Before:**
```ts
const { isOutdated } = useSkewProtection()
```
**After:**
```ts
const { isAppOutdated } = useSkewProtection()
```
### 3. Config Renamed
**What changed:** `bundlePreviousDeploymentChunks` → `bundleAssets`
**Search my codebase for:** `bundlePreviousDeploymentChunks`
**Regex pattern:** `bundlePreviousDeploymentChunks`
**Before:**
```ts
skewProtection: { bundlePreviousDeploymentChunks: true }
```
**After:**
```ts
skewProtection: { bundleAssets: true }
```
### 4. Route Prefix Changed
**What changed:** `/_skew/` → `/__skew/` (double underscore)
**Search my codebase for:** `/_skew/`
**Regex pattern:** `/_skew/`
**Before:**
```ts
$fetch('/_skew/sse')
```
**After:**
```ts
$fetch('/__skew/sse')
```
### 5. Standalone checkForUpdates Removed
**What changed:** The standalone `checkForUpdates` export no longer exists. Use the composable.
**Search my codebase for:** `import { checkForUpdates }`
**Regex pattern:** `checkForUpdates.*from.*#skew`
**Before:**
```ts
import { checkForUpdates } from '#skew-protection'
checkForUpdates()
```
**After:**
```ts
const { checkForUpdates } = useSkewProtection()
checkForUpdates()
```
### 6. Cookie Defaults Changed
**What changed:** `sameSite` is now `lax` (was `strict`), `maxAge` is now 7 days (was 60 days).
**Action:** No code changes needed unless you explicitly rely on the old defaults. If you need the old behaviour, set them in config:
```ts
skewProtection: {
cookie: { sameSite: 'strict', maxAge: 60 * 60 * 24 * 60 }
}
```
## Verification Checklist
1. `pnpm install` (update lockfile)
2. `npx nuxi typecheck` (catch type errors)
3. `pnpm build` (catch build-time issues)
4. `pnpm test` (catch runtime regressions)
5. Test SSR page load, verify no hydration mismatch warnings
---
Please scan my codebase for all affected patterns listed above and generate a complete migration plan. For each file that needs changes, show me the exact diff.
# pnpm
pnpm add nuxt-skew-protection@^1
# npm
npm install nuxt-skew-protection@^1
# yarn
yarn add nuxt-skew-protection@^1
reloadStrategy option: prompt, immediate, idle, or false (4b6a9fe)BroadcastChannel (4b6a9fe)/__skew/health monitoring endpoint (4b6a9fe)event.context.skewVersion on all server requests (4b6a9fe)getClientVersion(event) server utility (4b6a9fe)isRollback detection on composable (4b6a9fe)serverVersion reactive ref on composable (4b6a9fe)isOpen slot prop on SkewNotification (4b6a9fe)useState for isConnected, serverVersion, manifest (4b6a9fe)8dc6d1e)d19bfcf)Nuxt AI Ready v1 focuses on API consistency, security, and reliability.
The headline change is the migration to mdream v1, a rewrite of the HTML to markdown engine with a cleaner API and better output. Alongside this, v1 tightens endpoint security, unifies type inconsistencies, and fixes race conditions in the cron system.
Most breaking changes have a backward compatibility layer that emits deprecation warnings, so upgrading won't immediately break your app. See the full migration steps and compat shims below, or paste the agent migration prompt into your AI coding tool to upgrade automatically.
The HTML to Markdown engine has been rewritten. mdream v1 ships a native Rust engine (up to 8x faster), WebAssembly for edge runtimes, and a simpler declarative API while keeping the JS engine available as @mdream/js for users who need imperative hook based plugins. The preset option is replaced by top-level flags, and extraction plugins are now declarative objects instead of function wrappers.
// nuxt.config.ts
export default defineNuxtConfig({
aiReady: {
mdreamOptions: {
minimal: true,
clean: true
}
}
})
The nuxt-ai-ready status command now shows richer diagnostics: activity stats (1h/24h), recent pages, IndexNow backoff status, cron run history, and sitemap health.
Endpoint authentication is consolidated into a single requireAuth() utility, replacing duplicated auth logic across 6 route handlers.
The following internal dependencies have new minimum versions. These shouldn't have any direct effect on your site, however, you may want to double check their release notes.
mdreamOptions changed from HTMLToMarkdownOptions & { preset?: 'minimal' } to the new MdreamOptions type from mdream v1. The preset key no longer exists.
aiReady: {
- mdreamOptions: { preset: 'minimal' },
+ mdreamOptions: { minimal: true },
}
cacheMaxAgeSeconds is now llmsTxtCacheSeconds to clarify it only controls the llms.txt cache, not markdown route caching.
aiReady: {
- cacheMaxAgeSeconds: 600,
+ llmsTxtCacheSeconds: 600,
}
BulkDocument is now PageDocument.
-import type { BulkDocument } from 'nuxt-ai-ready'
+import type { PageDocument } from 'nuxt-ai-ready'
The Nitro runtime hook ai-ready:markdown is now ai-ready:page:markdown, matching the build-time hook name.
-nitroApp.hooks.hook('ai-ready:markdown', (ctx) => {
+nitroApp.hooks.hook('ai-ready:page:markdown', (ctx) => {
ctx.markdown += '\n\nCustom footer'
})
PageEntry.headings and PageIndexedContext.headings changed from string (JSON) to Array> (already parsed). Remove any JSON.parse() calls on .headings.
const page = await queryPages(event, { route: '/about' })
-const headings = JSON.parse(page.headings)
+const headings = page.headings // already parsed
All /__ai-ready/* endpoints now require an Authorization: Bearer header instead of ?secret= in the query string. This prevents secrets from leaking into server logs and referrer headers.
-fetch('/__ai-ready/poll?secret=TOKEN', { method: 'POST' })
+fetch('/__ai-ready/poll', {
+ method: 'POST',
+ headers: { Authorization: 'Bearer TOKEN' },
+})
-curl -X POST "https://site.com/__ai-ready/poll?secret=TOKEN"
+curl -H "Authorization: Bearer TOKEN" -X POST "https://site.com/__ai-ready/poll"
Update any CI scripts, external cron jobs, or monitoring tools that call these endpoints.
v1 includes a backward compatibility layer to ease migration. The following deprecated patterns still work but emit warnings:
cacheMaxAgeSeconds in nuxt.config.ts is auto-mapped to llmsTxtCacheSeconds with a build warningmdreamOptions.preset triggers a build warning explaining the new shape?secret= query auth still works on all /__ai-ready/* endpoints but logs a deprecation warning per requestThese compatibility shims will be removed in v2. Update your config and endpoints at your earliest convenience.
INSERT ... ON CONFLICT DO UPDATE ... WHERE instead of check-then-set (854551f)JSON.parse calls replaced with safeJsonParse() across query layer (854551f)poll, prune, and indexnow endpoints (limit, timeout, ttl clamping) (854551f)console.warn replaced with logger.warn in cron runner (854551f)Accept headers (f513c08)Copy this prompt into your AI coding agent (Claude Code, Cursor, Copilot, etc.) to migrate automatically:
I'm upgrading nuxt-ai-ready to v1. Apply these breaking changes to my codebase:
1. mdream options: `mdreamOptions` in nuxt.config.ts changed shape. Replace `{ preset: 'minimal' }` with `{ minimal: true }`. The type changed from `HTMLToMarkdownOptions` to `MdreamOptions`.
2. Config rename: `cacheMaxAgeSeconds` is now `llmsTxtCacheSeconds` in nuxt.config.ts under the `aiReady` key.
3. Type rename: `BulkDocument` is now `PageDocument`. Update all imports from 'nuxt-ai-ready'.
4. Hook rename: The Nitro runtime hook `ai-ready:markdown` is now `ai-ready:page:markdown`. Update all hooks.hook() and hooks.callHook() calls.
5. Headings type change: `PageEntry.headings` and `PageIndexedContext.headings` changed from `string` (JSON) to `Array>` (parsed). Remove any JSON.parse() calls on .headings since it's now already parsed.
6. Auth mechanism change: All `/__ai-ready/*` endpoints now use `Authorization: Bearer ` header instead of `?secret=` query parameter. Update any fetch calls, curl commands, CI scripts, or external cron jobs that hit these endpoints.
Note: v1 includes backward compatibility shims for `cacheMaxAgeSeconds`, `mdreamOptions.preset`, and `?secret=` query auth. These emit deprecation warnings and will be removed in v2. After applying changes, verify no deprecation warnings remain in your build output or server logs.
Search my entire codebase for these patterns and apply all necessary changes.
mdream v1 - by @harlan-zw (931e6)(c2bb4)(16b2d)(8827c)(f513c)(7f60a)(14a58)No significant changes
No significant changes
No significant changes
No significant changes
No significant changes
No significant changes
No significant changes
No significant changes
No significant changes
No significant changes
No significant changes
twitter:image:src paths - by @harlan-zw (b606e)(3dc9c)definePageMeta sitemap data during ssg - by @harlan-zw in https://github.com/nuxt-modules/sitemap/issues/585 (8b7d4)(a528f)(45410)(57ac2)No significant changes
The v5 release adds ESLint integration for instant broken link feedback in your editor, migrates DevTools to a shared layer, and bumps internal dependencies.
Nuxt Site Config is a module used internally by Nuxt Link Checker.
The major update to v4.0.0 shouldn't have any direct effect on your site, however, you may want to double-check the breaking changes.
The DevTools client has been migrated to nuxtseo-layer-devtools, a shared layer used across all Nuxt SEO modules. This means the DevTools panel is now consistent across modules and maintained in one place. No action is needed unless you were importing DevTools internals directly.
Broken links are typically only caught at build time or during development server navigation. The new ESLint integration gives you instant feedback directly in your editor by validating relative URLs against your app's known routes and sitemap data.
link-checker/valid-routeChecks that relative URLs match a known vue-router route pattern. Uses radix3 for dynamic route matching and fuse.js for "did you mean?" typo suggestions.
Severity: error
link-checker/valid-sitemap-linkChecks that relative URLs exist in the sitemap. For dynamic routes, warns when sibling URLs exist in the sitemap but the linked URL does not.
Severity: warn
Both rules scan for relative URLs in:
{lang="html"},, ``{lang="html"}navigateTo('...'), router.push('...'), router.replace('...')[text](/url) link syntax (via processor)External URLs, anchors, mailto/tel links, and dynamic bindings are automatically skipped.
@nuxt/eslintIf you're using @nuxt/eslint, both rules are automatically registered via the eslint:config:addons hook. Zero-config.
For manual setup, import the standalone export:
import linkCheckerPlugin from 'nuxt-link-checker/eslint'
export default [
{
files: ['**/*.vue', '**/*.ts'],
plugins: {
'link-checker': linkCheckerPlugin,
},
rules: {
'link-checker/valid-route': 'error',
'link-checker/valid-sitemap-link': 'warn',
},
},
]
See the ESLint Integration guide for full details including markdown support, skipping links, and configuration options.
(1c416)excludePages config to skip link checking on specific pages - by @harlan-zw (f9a58)(b7109)(7e5d1)The v8 release introduces social sharing composables, a CLI for icon generation, automatic inline minification, devtools integration, and several quality of life improvements for i18n and breadcrumb users.
Nuxt Site Config is a module used internally by Nuxt SEO Utils.
The major update to v4.0.0 shouldn't have any direct effect on your site, however, you may want to double-check the breaking changes.
useShareLinks() ComposableAdding social share buttons to your site means wrangling platform specific URL formats, query parameters, and UTM tracking across every network. useShareLinks() handles all of that, giving you reactive share URLs for 8 platforms with built in UTM attribution.
const links = useShareLinks({
title: 'Check this out',
utm: { campaign: 'launch' }
})
Share on Twitter
Share on Facebook
Share on LinkedIn
Supported platforms: twitter, facebook, linkedin, whatsapp, telegram, reddit, pinterest, email.
UTM tracking is enabled by default with automatic per-platform utm_source values. Disable with utm: false or provide a custom configuration.
useShareLinks({
utm: {
source: 'auto', // uses platform name
medium: 'social',
campaign: 'spring-launch'
},
twitter: { via: 'harloops', hashtags: ['nuxt', 'seo'] },
pinterest: { media: 'https://example.com/image.png' }
})
Nuxt minifies your bundled JS and CSS, but inline and tags injected via useHead() or hydration payloads ship unminified. On content heavy pages this adds meaningful weight to every SSR response. v8 now automatically minifies these inline tags in production with zero configuration.
Two complementary modes work together:
app.head content.useHead() injections on every SSR request, compatible with any deployment target.Enabled by default. Configure or disable per mode:
export default defineNuxtConfig({
seo: {
minify: true, // default — both modes
// minify: { build: true, runtime: false },
// minify: false,
},
})
See the Inline Minification guide for full details.
nuxt-seo-utils icons CLI CommandEvery platform expects a different icon size and format: browsers want favicon.ico, iOS needs apple-touch-icon.png, PWAs require 192px and 512px variants. Manually exporting and maintaining all of these from a single logo is tedious. This CLI command generates every variant from one source image.
npx nuxt-seo-utils icons --source logo.svg
Generates the following files in your public directory:
favicon.ico (32x32)icon-16x16.pngicon-32x32.pngapple-touch-icon.png (180x180)icon-192x192.pngicon-512x512.pngAccepts SVG, PNG, JPG, and WebP source formats.
tagPriority for OG Meta TagsSome crawlers stop reading after a certain byte limit. If large style blocks appear before your OG meta tags, crawlers may never see them. This option lets you control where SEO meta tags are placed in the so they render before style blocks that could push them past the limit.
export default defineNuxtConfig({
seoUtils: {
tagPriority: 30 // default
}
})
Lower values place tags earlier in the ``. The default of 30 ensures SEO tags appear before style blocks (priority 40-60).
Debugging SEO issues usually means viewing page source, checking meta tags manually, and testing share previews through each platform. The new devtools panel at /__nuxt-seo-utils gives you a single dashboard to inspect all meta tags and preview social share cards during development.
useFallbackTitle() ComposablePages without an explicit useHead({ title }) still need a reasonable title for SEO and browser tabs. Previously this fallback logic was internal. Now it's exposed as a standalone composable so you can use the same resolution logic (route metadata, i18n keys, title cased URL segments) anywhere in your app.
const title = useFallbackTitle()
// /about-us → "About Us"
// 404 page → "404 - Not Found"
fast-glob with tinyglobby for faster file matchingpages.{routeName}.title)@id and double registrationuseServerSeoMeta takes precedence over site defaults(1edae)(494bc)(4e939)(d35cd)(c5682)(15ad7)(e1125)(147a5)(add78)(5fcd4)(23116)(cede3)(387ea)(71a01)(01499)(5f5ca)(dc9be)(ebcb1)(47fb3)(f52ae)infer-seo-meta-tags plugin - by @hacknug in https://github.com/harlan-zw/nuxt-seo-utils/issues/80 (83b54)(63067)(458bf)(93f7b)(de334)defineOgImageSchema() composable - by @harlan-zw in https://github.com/nuxt-modules/og-image/issues/520 (e9cde)(0784c)(6f8ac)(6e8f4)(f3e30)(08594)(31b1a)(47e85)(3ba63)(dd4e0)(c850d)The v6 major of Nuxt Schema.org adds a new content composable, fixes SSR memory leaks, resolves @id URL generation issues, and migrates the devtools to the shared nuxtseo infrastructure.
Nuxt Site Config is a module used internally by Nuxt Schema.org.
Its major update to v4.0.0 shouldn't have any direct effect on your site, however, you may want to double check the breaking changes.
The devtools panel has been migrated to the shared nuxtseo-shared infrastructure. The UI has been cleaned up and now includes a schema validator, debug view, raw JSON view, and documentation links. If you relied on the previous devtools layout, the information is still available under new navigation tabs.
defineSchemaOrgSchema() ComposableA new composable for @nuxt/content v3 that simplifies adding Schema.org fields to your content schema.
import { defineCollection, z } from '@nuxt/content'
import { defineSchemaOrgSchema } from 'nuxt-schema-org/content'
export default defineContentConfig({
collections: {
pages: defineCollection({
type: 'page',
source: '**/*.md',
schema: z.object({
...defineSchemaOrgSchema(z),
}),
}),
},
})
This replaces the previous asSchemaOrgCollection() helper, which is now deprecated.
Reactive scopes created during SSR were not being disposed, causing memory to accumulate across requests. The plugin now resolves paths directly on the server without creating computed refs, avoiding leaked reactive watchers entirely.
@id URLs Now Respect app.baseURLAll defineXYZ helpers (e.g. defineWebPage, defineOrganization) now correctly include app.baseURL when generating @id values. Previously, sites deployed under a base path (e.g. /docs/) would produce @id URLs missing that prefix.
Passing a computed ref to useSchemaOrg() could trigger "useNuxtApp() called outside of setup" errors when Unhead later evaluated the getter. The composable now wraps ref inputs with runWithContext() to preserve the Nuxt async context.
defineSchemaOrgSchema() composable - by @harlan-zw in https://github.com/harlan-zw/nuxt-schema-org/issues/110 (8b2c4)(c02ae)(52977)(dede4)(b2e6e)(0700a)No significant changes
The v6 major of Nuxt Robots adds new content composables, improves validation with warnings support, and includes several important bug fixes.
Nuxt Site Config is a module used internally by Nuxt Robots.
Its major update to v4.0.0 shouldn't have any direct effect on your site, however, you may want to double check the breaking changes.
robots:config Hook ContextThe HookRobotsConfigContext now includes a warnings: string[] field alongside the existing errors: string[]. If you use the robots:config Nitro hook and inspect the context, be aware of this new field.
defineRobotsSchema() ComposableA new composable for @nuxt/content v3 that simplifies adding robots fields to your content schema.
import { defineCollection, z } from '@nuxt/content'
import { defineRobotsSchema } from '@nuxtjs/robots/content'
export default defineContentConfig({
collections: {
pages: defineCollection({
type: 'page',
source: '**/*.md',
schema: z.object({
...defineRobotsSchema(z),
}),
}),
},
})
This replaces the previous asRobotsCollection() helper, which is now deprecated.
The robots.txt validation system now supports warnings in addition to errors. The first warning checks for Disallow: /api rules, which may unintentionally block API routes that need to be accessible.
Warnings appear in the devtools debug view alongside errors, helping you catch potential misconfigurations before they cause issues.
A new /__robots__/debug-production.json server route is available in development. It fetches your production site's robots.txt, validates it, and returns a structured response with errors, warnings, parsed groups, and sitemaps. This makes it easy to compare your local configuration against what's live in production.
skipSiteIndexable Now Skips Disallow: /Previously, setting skipSiteIndexable: true (used by sitemap generation) only skipped the site config indexable check. It now also filters out Disallow: / root disallow rules from path matching, ensuring sitemap URLs are correctly generated on staging or non-indexable environments. Specific path rules like /admin still apply as expected.
Route rules with undefined or null values no longer cause runtime errors. The normaliseRobotsRouteRule function now safely handles nullish input.
Meta tag parsing in the devtools debug view is now attribute order agnostic, fixing cases where `` was not detected.
defineRobotsSchema() composable - by @harlan-zw in https://github.com/nuxt-modules/robots/issues/283 (ac97d)(379bb)(393d7)skipSiteIndexable now skips disallow: / robots.txt rules - by @harlan-zw in https://github.com/nuxt-modules/robots/issues/282 (57957)(37f52)(3a626)The v8 release focuses on a fully rewritten devtools experience and several quality of life improvements for Nuxt Content v3 and i18n users.
Nuxt Site Config is a module used internally by Nuxt Sitemap.
The major update to v4.0.0 shouldn't have any direct effect on your site, however, you may want to double-check the breaking changes.
asSitemapCollection() DeprecatedThe asSitemapCollection() composable has been replaced by defineSitemapSchema(). The old API still works but will log a deprecation warning.
import { defineCollection, z } from '#content/collections'
- import { asSitemapCollection } from '#sitemap/content'
+ import { defineSitemapSchema } from '#sitemap/content'
export const collections = {
- content: defineCollection(asSitemapCollection({
- type: 'page',
- source: '**/*.md',
- schema: z.object({ title: z.string() })
- }))
+ content: defineCollection({
+ type: 'page',
+ source: '**/*.md',
+ schema: z.object({
+ title: z.string(),
+ sitemap: defineSitemapSchema()
+ })
+ })
}
defineSitemapSchema() ComposableA new composable for Nuxt Content v3 that provides a cleaner API for integrating sitemap configuration into your content collections. Supports filter, onUrl, and name options.
import { defineCollection, z } from '#content/collections'
import { defineSitemapSchema } from '#sitemap/content'
export const collections = {
content: defineCollection({
type: 'page',
source: '**/*.md',
schema: z.object({
title: z.string(),
sitemap: defineSitemapSchema({
filter: entry => !entry.path?.startsWith('/draft'),
onUrl: (url) => {
// customize URL entries
return url
}
})
})
})
}
definePageMeta Sitemap ConfigurationYou can now configure sitemap options directly in your page components using definePageMeta.
definePageMeta({
sitemap: {
changefreq: 'daily',
priority: 0.8
}
})
Custom sitemaps with includeAppSources: true are now automatically expanded per locale, generating {locale}-{name} formatted sitemaps.
A new /__sitemap__/debug-production.json endpoint is available in development mode, allowing you to inspect what the production sitemap output will look like during development.
.navigation paths from sitemap URL generationafterParse hook to prevent silent HMR failuresautoI18n: false to generate single sitemap instead of per-locale sitemapsrobots instead of index in route rules type definitionsitemapsPathPrefix: '/'chalk with consola/utils for a smaller bundleURL.canParse() instead of try/catch new URL() for URL validationaddPrerenderRoutes() API instead of manual route pushingdefineSitemapSchema() composable - by @harlan-zw in https://github.com/nuxt-modules/sitemap/issues/576 (603e6)definePageMeta sitemap configuration not applied - by @harlan-zw in https://github.com/nuxt-modules/sitemap/issues/572 (9f74a)(94bc2)autoI18n: false to generate single sitemap - by @harlan-zw in https://github.com/nuxt-modules/sitemap/issues/570 (94458)(e25b9)(0ce4e)(c0058)(fbc69)robots instead of index in route rules - by @harlan-zw in https://github.com/nuxt-modules/sitemap/issues/569 (e9167)chalk with consola/utils - by @KazariEX in https://github.com/nuxt-modules/sitemap/issues/555 (ae520)No significant changes
No significant changes
No significant changes
defineRobotsSchema() composable - by @harlan-zw in https://github.com/nuxt-modules/robots/issues/283 (ac97d)(379bb)(393d7)skipSiteIndexable now skips disallow: / robots.txt rules - by @harlan-zw in https://github.com/nuxt-modules/robots/issues/282 (57957)(37f52)Previously, site.name was automatically inferred from your package.json name field or project directory name. This caused package name leakage in public APIs (e.g., @nuxtjs/sitemap exposing internal package names).
You must now explicitly set site.name:
export default defineNuxtConfig({
site: {
name: 'My Website',
}
})
Or via environment variable:
NUXT_SITE_NAME="My Website"
If not set, site.name will be undefined.
site* Runtime Config KeysThe deprecated siteUrl, siteName, and siteDescription runtime config keys have been removed.
export default defineNuxtConfig({
- runtimeConfig: {
- public: {
- siteUrl: 'https://example.com',
- }
- },
+ site: {
+ url: 'https://example.com',
+ }
})
useSiteConfig ComposableThe server-side useSiteConfig()composable has been removed to resolve auto-import name collisions between client and server composables.
Use getSiteConfig() on the server instead:
-const config = useSiteConfig(event)
+const config = getSiteConfig(event)
The client-side useSiteConfig() composable is unchanged.
getSiteIndexable ComposableThe getSiteIndexable() composable has been removed. Check the indexable property directly:
-const indexable = getSiteIndexable(event)
+const { indexable } = getSiteConfig(event)
#internal/nuxt-site-config Barrel ExportThe legacy #internal/nuxt-site-config import path has been removed. Use the documented public APIs instead.
SiteConfig Type AliasThe deprecated SiteConfig type alias has been removed. Use SiteConfigResolved instead:
-import type { SiteConfig } from 'nuxt-site-config'
+import type { SiteConfigResolved } from 'nuxt-site-config'
Site config priority levels are now exposed as named constants for better readability when setting config priorities:
import { SiteConfigPriority } from 'site-config-stack'
updateSiteConfig({
name: 'My Site',
_priority: SiteConfigPriority.runtime,
})
Available priorities: system, vendor, nitro, config, i18n, build, runtime.
(e7538)#internal/nuxt-site-config legacy barrel export - by @harlan-zw in https://github.com/harlan-zw/nuxt-site-config/issues/86 (b3890)(bee54)(2bef8)(9bda3)(ee955)(3a8b1)(db201)(074e9)(b7009)create and switch commands with DX improvements - by @harlan-zw in https://github.com/nuxt-modules/og-image/issues/508 (871b2)(36119)(4d710)(1e882)(ff5df)(c5fac)(cbd7d)(2403d)(2206d)This is a major release upgrading OG Image to v6 with a new Takumi renderer, multiple OG images per page, native Tailwind v4 support, and redesigned DevTools — plus stability fixes across Robots and Site Config.
Our recommendation for upgrading is to run:
npx nuxt upgrade --dedupe
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
For OG Image v6, run the migration CLI:
npx nuxt-og-image migrate v6
Full migration guide: https://nuxtseo.com/og-image/migration-guide/v6
📦 Module Updates
No significant changes
(61f8f)(4a5c8)(aac48)(e5c25)defineOgImage({ url }) -> useSeoMeta - by @harlan-zw in https://github.com/nuxt-modules/og-image/issues/496 (2e762)Nuxt OG Image v6 is the next major release.
Nuxt OG Image v6 brings a complete overhaul focused on performance, modern tooling, and developer experience.
Full migration guide: https://nuxtseo.com/og-image/migration-guide/v6
npx nuxt-og-image migrate v6
Takumi is a Rust-based renderer that directly rasterizes to PNG/JPEG/WebP - no SVG intermediate step. It's 2-10x faster than Satori+Resvg.
See PR #414.
Takumi and Satori are feature-compatible within Nuxt OG Image - both support Tailwind CSS, custom fonts, emoji, edge runtimes, and all the same template features. The difference is speed: Takumi is always faster thanks to its Rust-based direct rasterization.
Use Takumi by creating components with the .takumi.vue suffix:
components/OgImage/MyTemplate.takumi.vue
See the Takumi docs for the full feature list.
Nuxt OG Image now has first-class support for multiple CSS approaches - not just Tailwind. All of these work out of the box with zero configuration:
See PR #430.
@theme values just workprimary, secondary, etc.) are automatically resolvedNo configuration needed.
The OG image DevTools have been completely overhauled:
Renderer dependencies are no longer bundled. Install what you need based on your renderer and runtime.
See PR #415.
Takumi (recommended):
npm i @takumi-rs/core # Node.js
npm i @takumi-rs/wasm # Edge runtimes
Satori:
npm i satori @resvg/resvg-js # Node.js
npm i satori @resvg/resvg-wasm # Edge runtimes
Browser:
npm i playwright-core
Running nuxi dev will prompt you to install missing dependencies automatically.
Define multiple images with different dimensions for different platforms. Shared props are passed once and applied to all variants.
See PR #305.
Pass shared props as the second argument and size variants as the third — no prop duplication needed:
defineOgImage('NuxtSeo', { title: 'My Page' }, [
{ key: 'og' }, // Default 1200x600 for Twitter/Facebook
{ key: 'whatsapp', width: 800, height: 800 }, // Square for WhatsApp
])
Per-variant props override shared props when needed:
defineOgImage('NuxtSeo', { title: 'My Page', description: 'Full description' }, [
{ key: 'og' },
{ key: 'whatsapp', width: 800, height: 800, props: { description: 'Short' } },
])
Alternatively, pass all options inline per variant:
defineOgImage('NuxtSeo', [
{ props: { title: 'My Page' } },
{ props: { title: 'My Page' }, key: 'whatsapp', width: 800, height: 800 },
])
Custom fonts now use @nuxt/fonts instead of the legacy ogImage.fonts config.
See PR #432.
export default defineNuxtConfig({
modules: ['@nuxt/fonts', 'nuxt-og-image'],
fonts: {
families: [
{ name: 'Inter', weights: [400, 700], global: true }
]
}
})
The global: true option is required for fonts to be available in OG Image rendering.
OG Image components now require a renderer suffix in their filename. This enables automatic renderer detection, multiple renderer variants, and tree-shaking.
See PR #433.
# Before
components/OgImage/MyTemplate.vue
# After
components/OgImage/MyTemplate.takumi.vue # Recommended
components/OgImage/MyTemplate.satori.vue
Run the migration CLI to rename automatically:
npx nuxt-og-image migrate v6
Community templates (NuxtSeo, SimpleBlog, etc.) are no longer bundled in production. Eject them to your project before building.
See PR #426.
npx nuxt-og-image eject NuxtSeo
Templates continue to work in development without ejecting.
OG Image URLs now use a Cloudinary-style format with options encoded in the path. This enables better CDN caching since identical options produce identical URLs.
See PR #305.
| v5 | v6 |
|---|---|
/__og-image__/image/ | /_og/d/ |
/__og-image__/static/ | /_og/s/ |
(598f3)(c9058)(94eae)(22cbd)(407a4)(357e3)(0e046)(c64fd)(55594)(d0d2f)(0936a)(d60e2)(f1d1f)(0b9f8)(51f23)(7a347)(611d0)(c3db6)(43436)(c5a14)(cde40)(dbee0)(7ad13)(81f05)(c8ee9)(f9be0)(a8c02)(f1273)(527f4)(2cb46)(9be7b)(23efb)(bbeee)(05f43)(1d142)(16ed4)(10886)(d22ed)zeroRuntime mode - by @harlan-zw (7afb1)zeroRuntime mode - by @harlan-zw in https://github.com/nuxt-modules/og-image/issues/428 (97fb4)(7b5b1)(4ccd2)(09d24)(265ca)(055ea)(ff3bb)(4191d)(6a4d7)(e87dd)(fd94e)(a7658)(c07a7)(b1f4a)(caaf8)(0d68b)(ac3d1)(1194b)(ef72b)(696d9)(34976)(31979)(b14ae)(3ad2f)(02369)(67dc8)(e4878)(057df)!important - by @harlan-zw (b5684)(c70c8)(1d368)(86068)(cfcf4)(15eec)(76a85)props={} in URLs - by @harlan-zw (7caa4)font-display -> font file - by @harlan-zw (3d4a5)(2e816)(b4668)defineOgImage() props - by @harlan-zw (4df12)(e9aa0)(f88f8)(6c3b0)(d6db9)(40b43)(56ad2)(e7aef)(f1634)(8a02b)(6c83b)(f4ddd)(e71ca)(db043)(541e1)(64d59)(88054)(6b505)(64e2a)(bdde7)(b7735)(acb75)(a883f)(c2a0b)(ad590)(19bf8)(163c5)(a57c3)(c84be)(6c00c)getOgImagePath as deprecated - by @harlan-zw (00497)(b3367)(b7356)(682b5)(a5333)(fdb7a)(f4041)(6c733)(ba55b)(3971c)(bb98f)(720de)(3717e)(779a2)(a98e2)(684df)(e3293)(bf6fe)(61d1d)(d8152)(77d7b)(d1a37)(c5e58)(053c5)(5f570)(70a49)(f9d18)(bffc9)(4d8ab)(4ba33)(ad5be)(3c6f6)(3cdb8)(cd975)(1690d)(ec018)(3e777)(3828f)(3fe47)(34c6a)(5e4ac)(3de78)(b1427)(61d7c)(349bd)(1cce4)(1e6d1)gap-* classes - by @harlan-zw in https://github.com/nuxt-modules/og-image/issues/465 (575c6)(0b0f6)(0920f)(a8042)(46e40)(4c2e5)(9d219)(0ef91)(609d3)(00c5d)(25303)(a10f6)(b5e68)(bbb83)(370e5)(8f208)(e2bf6)(a0a2f)(87adb)(829a5)(8c151)satori-html requirement - by @harlan-zw (58738)(da385)(c84df)(d3802)(ef33b)(bb255)(70a72)(59161)(cb875)(c5e58)(053c5)(428ad)(3ff4c)(d60e2)(bf6fe)(61d1d)(d8152)(77d7b)(d1a37)(e2bf6)(e3293)No significant changes
(f21ab)(720de)(3717e)(779a2)(ce307)(279b9)(1bf24)(b0030)No significant changes
(bb98f)(6788d)(863a8)No significant changes
This release brings major updates to Robots and Sitemap with definePageMeta() integration, a new zeroRuntime sitemap mode, a redesigned sitemap.xsl, and improved i18n support across modules, plus stability fixes throughout.
Highlights:
definePageMeta() integration for per-page robot rules and improved i18n custom route path supportzeroRuntime mode, definePageMeta() integration, redesignedOur recommendation for upgrading is to run:
npx nuxt upgrade --dedupe
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
Nuxt Robots (v5.6.4 → v5.7.0)
definePageMeta integration@nuxtjs/robots/utiluseBotDetection() empty when ran client-side onlyuseRobotsRule type, prevent _robots.txt in final bundleNuxt Sitemap (v7.4.9 → v7.6.0)
zeroRuntime mode for fully static sitemap generationsitemap:prerender:donedefinePageMetaonUrl functionparseSitemapIndex() utility/Nuxt Site Config (v3.2.11 → v3.2.19)
getNitroOrigin resolution reworkdevServer.hostimport.meta.env(d696a)(13294)(a8294)(3c6b1)(b236d)(439c6)(277a0)(3958a)definePageMeta - by @harlan-zw (b61c5)(d5d84)(acc20)(ae9cc)onUrl function - by @harlan-zw (0eebd)(94d01)parseSitemapIndex() - by @harlan-zw (6001c)(ac22c)(895a7)(bded4)(bd610)(52ea7)(22739)(63b45)(9e178)(8e046)(5ae3c)No significant changes
debugCron - by @harlan-zw (394c2)(9e122)(e6c51)(8f0e3)(b6c54)(aac00)(e72fe)(ebed7)(0d6cb)(b3a99)No significant changes
(75c52)(73d37)(6938c)sitemap:sources hook - by @harlan-zw (a021e)(785ce)zeroRuntime mode - by @harlan-zw in https://github.com/nuxt-modules/sitemap/issues/532 (1fa92)sitemap:prerender:done - by @harlan-zw in https://github.com/nuxt-modules/sitemap/issues/534 (a4051)_encoded: true - by @harlan-zw (b1b17)(018de)(2d7db)1 -> 1.0 - by @harlan-zw (f6b9c)(09957)(117eb)(b9582)(690f4)(0f2df)(60eae)(232ee)(47a8f)(f852d)(427fb)useSkewProtection() lazy mode - by @harlan-zw (f3179)(e48a9)useBotDetection() empty when ran client side only - by @harlan-zw (7aba3)(b03f3)(b6c34)(b22f0)(6ad50)(63ad0)@nuxtjs/robots/util" - by @harlan-zw (4c64e)@nuxtjs/robots/util - by @harlan-zw (6c9ad)No significant changes
This release brings significant updates across all Nuxt SEO modules with new features for robots and sitemap, plus numerous stability improvements throughout the ecosystem.
Highlights:
Content-Signal directive support and Bot DetectionOur recommendation for upgrading is to run:
npx nuxt upgrade --dedupe
This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.
Nuxt Robots
https://github.com/nuxt-modules/robots/releases/tag/v5.5.5 → https://github.com/nuxt-modules/robots/releases/tag/v5.6.4
Nuxt Sitemap
https://github.com/nuxt-modules/sitemap/releases/tag/v7.4.7 → https://github.com/nuxt-modules/sitemap/releases/tag/v7.4.9
Nuxt Link Checker
https://github.com/harlan-zw/nuxt-link-checker/releases/tag/v4.3.2 → https://github.com/harlan-zw/nuxt-link-checker/releases/tag/v4.3.9
Nuxt OG Image
https://github.com/harlan-zw/nuxt-og-image/releases/tag/v5.1.11 → https://github.com/harlan-zw/nuxt-og-image/releases/tag/v5.1.13
Nuxt Schema.org
https://github.com/harlan-zw/nuxt-schema-org/releases/tag/v5.0.9 → https://github.com/harlan-zw/nuxt-schema-org/releases/tag/v5.0.10
Nuxt SEO Utils
https://github.com/harlan-zw/nuxt-seo-utils/releases/tag/v7.0.16 → https://github.com/harlan-zw/nuxt-seo-utils/releases/tag/v7.0.19
Nuxt Site Config
https://github.com/harlan-zw/nuxt-site-config/releases/tag/v3.2.7 → https://github.com/harlan-zw/nuxt-site-config/releases/tag/v3.2.11
(55ee0)getNitroOrigin resolution - by @harlan-zw (8f2a5)(99d50)zod optional peer dependency - by @harlan-zw (29fef)(1487e)(924f3)(eadd0)(10059)(c5ed3)(8dcf4)(ad7ab)(1cd18)(cfb62)No significant changes
(6593d)(ae7d3)(853e5)(0589b)(f3e5d)zod peer dependency for schema merge - by @harlan-zw (9fca6)(1a61f)(cfc6f)No significant changes
(02b72)(c098f)(77f7e)(dace5)(70306)(16233)(0446a)No significant changes
Content-Signal support - by @harlan-zw in https://github.com/nuxt-modules/robots/issues/251 (93d52)(0a3ce)robots:config normalizing - by @harlan-zw in https://github.com/nuxt-modules/robots/issues/234 (59c44)Content-Signal - by @harlan-zw (092c3)(25eb3)No significant changes
No significant changes
No significant changes
This version implements module dependencies that are available with Nuxt v4.1, and improved Nuxt Content v3.7 compatibility and NPM trusted publishing for all modules for improved security.
It bumps the Nuxt Robots versions, which include the new features:
Content-Usage directive https://github.com/nuxt-modules/robots/pull/226(90214)moduleDependencies - by @harlan-zw (73fd6)(ed173)Updated SEO related packages:
These updates bring the latest bug fixes and improvements from the Nuxt SEO ecosystem.
No significant changes
No significant changes
No significant changes
No significant changes
dist publishing - by @harlan-zw (b77e1)dist publishing - by @harlan-zw (6218d)@nuxtjs/robots as optional dependency - by @harlan-zw (da80a)(8885d)moduleDependencies - by @harlan-zw (3d5ba)(2f845)@nuxt/content v3.7 compatibility - by @harlan-zw (dd4ff)moduleDependencies - by @harlan-zw (135dd)(e974f)(36d01)(1f83b)moduleDependencies - by @harlan-zw (03ef4). to be included in sitemap - by @harlan-zw (947d1)No significant changes
moduleDependencies for i18n integrations - by @harlan-zw (0ea8e)(7c6e9)get* function names over use* - by @harlan-zw (94342)(2584b)(967d0)Updated SEO related packages:
These updates bring the latest bug fixes and improvements from the Nuxt SEO ecosystem, namely:
nitro.static over _generate - by @danielroe in https://github.com/harlan-zw/nuxt-link-checker/issues/62 (a1953)(13347)(2bc98)nitro.static over _generate - by @danielroe in https://github.com/nuxt-modules/sitemap/issues/458 (6bd89)(40501)(45226)urls more gracefully - by @harlan-zw (ec35f)(166e8)⚠️ This release introduces several features, performance improvements and bug fixes, it's recommended to test your sitemap after upgrading.
(40ba0)(ae50a)(25e92)defaultLocale, fallback to en - by @harlan-zw (86f02)watch to sync mode - by @zumm in https://github.com/harlan-zw/nuxt-seo-utils/issues/63 (75faa)(dd88b)(dc044)Updated SEO related packages:
@nuxtjs/robots: ^5.2.8 → ^5.2.10@nuxtjs/sitemap: ^7.2.9 → ^7.2.10nuxt-og-image: ^5.1.1 → ^5.1.2nuxt-schema-org: ^5.0.4 → ^5.0.5nuxt-seo-utils: ^7.0.5 → ^7.0.8nuxt-site-config: ^3.1.7 → ^3.1.9These updates bring the latest bug fixes and improvements from the Nuxt SEO ecosystem.
When using PNPM please run pnpm dedupe after upgrade.
(46d03)(132d7)(78e72)(341c9)(2d3b3)hideRoot, hideCurrent - by @harlan-zw (04351)No significant changes
(d01c9)(da0a2)(b089b)The markdown and HTML reports have been reworked for improved usability. Reports are now also publically publishable. Check a live example here: https://nuxtseo.com/__link-checker__/link-checker-report.
html and markdown report templates - by @harlan-zw in https://github.com/harlan-zw/nuxt-link-checker/issues/54 (ebd40)(95e5b)(9fa91)(8f222)(0c00f)ultrahtml for link parsing - by @harlan-zw in https://github.com/harlan-zw/nuxt-link-checker/issues/53 (270ae)(63f49)No significant changes
@unhead/schema implicitly - by @harlan-zw (549b7)(1f1cf)(f20e3)useBreadcrumbItems() context - by @harlan-zw in https://github.com/harlan-zw/nuxt-seo-utils/issues/40 (14a19)(ddd77)(6abb2)(e500f)(a1956)(b1634)(d0c6b)(7093c)(f2926)(fc828)(7da67)No significant changes
(b1634)(d0c6b)(7a1ef)(f02db)host has trailing slash - by @harlan-zw (c932f)inLanguage ref - by @harlan-zw (8bfe7)(1ca3b)shiki bundlesmultiTenancy site config https://github.com/harlan-zw/nuxt-site-config/pull/40All modules now support Nuxt Content v3 including Robots, Sitemap, OG Image, Schema.org and Link Checker.
You can either install them manually by following the individual module instructions or use the Nuxt SEO asSeoCollection() to register them all at once.
No significant changes
(ecf35)(84a58)(2cccd)No significant changes
(99404)(64c44)(3d3d9)#link-checker alias - by @harlan-zw (04fde)(44ec3)node prop being exposed - by @harlan-zw (84895)(c1baa)No significant changes
No significant changes
This release has been almost two years in the making. Please read the Announcing Nuxt SEO Stable post to learn about the history of Nuxt SEO, what the stable means and what is planned for the module.
Ready to upgrade? Check out the migration guides:
defineOgImage() - by @harlan-zw (f50ec)defineOgImage() - by @harlan-zw (5eac2)nuxt-seo-ui module - by @harlan-zw (cc7c5)@nuxtjs/robots - by @harlan-zw (991bf)@nuxtjs/sitemap v6 beta - by @harlan-zw (a6204)nuxt-seo-utils - by @harlan-zw (dd466)(2de57)canonicalDomain config - by @harlan-zw (1a6ce)identity site config - by @harlan-zw (5a90e)twitter site config - by @harlan-zw (807f7)currentLocale site config - by @harlan-zw (47b2f)(578e5)fallbackTitle as separate plugin - by @harlan-zw (eb3bc)useBreadcrumbItems() - by @harlan-zw (1b5d8)(b1e43)canonicalQueryWhitelist - by @harlan-zw in https://github.com/harlan-zw/nuxt-seo/issues/282 (568c2)(5ed69)(5dae2)(a1e98)(ccbab)useServerHead for static head data - by @harlan-zw (ba518)(185b8)(0585c)(6d00c)(6fcf8)(164a2)(0f309)(1cda3)%siteName param - by @harlan-zw (fb23e)(c306a)(9560a)(8cd22)(a7edb)lang attribute - by @harlan-zw (ce573)(f0387)nuxt-schema-org - by @harlan-zw (38514)fallbackTitle by default - by @harlan-zw (9e0a0)(44830)(66929)(75ddb)og:type back in - by @harlan-zw (9dae0)NuxtLink component - by @harlan-zw (18793)(79d42)(c34fe)(534f5)(ca435)(b0dcd)to optional - by @harlan-zw (48353)(5c0c9)(31f0d)(09a4c)import.meta.* properties - by @danielroe in https://github.com/harlan-zw/nuxt-seo/issues/211 (0fad0)(2f195)(840cf)redirectToCanonicalSiteUrl redirects - by @harlan-zw (bac31)useBreadcrumbItems generating invalid schema.org - by @harlan-zw (e321b)useBreadcrumbItems - by @harlan-zw (2005a)lang when using Nuxt I18n - by @harlan-zw (58e4f)(81163)useBreadcrumbItems support static meta from dynamic routes - by @terion-name in https://github.com/harlan-zw/nuxt-seo/issues/323 (d3895)og-image and sitemap version locks - by @harlan-zw (76b7e)(79e4d)(b76b2)(f6fd1)(6b0d7)overrides, append and prepend - by @harlan-zw (a1d8b)(919a2)(c1696)(bc1dc)(f5a4d)The v5 major of Nuxt Link Checker is a simple release to remove deprecations and add support for the Nuxt SEO v2 stable.
Nuxt Site Config is a module used internally by Nuxt Link Checker.
The major update to v3.0.0 shouldn't have any direct effect on your site, however, you may want to double-check the breaking changes.
(5a290)The v5 major of Nuxt Schema.org is a simple release to remove deprecations and add support for the Nuxt SEO v2 stable.
Nuxt Site Config is a module used internally by Nuxt Schema.org.
The major update to v3.0.0 shouldn't have any direct effect on your site, however, you may want to double-check the breaking changes.
(d44e2)(252a1)(6dee1)no-missing-href rule - by @harlan-zw (e12ab)no-double-slashes rule - by @harlan-zw (11b8f)no-non-ascii-chars rule - by @harlan-zw (3d663)no-duplicate-query-params rule - by @harlan-zw (bfe9e)no-whitespace rule - by @harlan-zw (ce79e)no-uppercase-chars rule - by @harlan-zw (7e92d)no-baseless - by @harlan-zw (370aa)skipInspections not honoured - by @harlan-zw (2df19)No significant changes
No significant changes
(f1659)(53b71)(bc1dc)(f5a4d)(d3895)No significant changes
(c1696)@nuxtjs/sitemap v6 stable - by @harlan-zw (a6204).⚠️ Please see https://github.com/nuxt-modules/sitemap/pull/320 if you have submitted multi-sitemap URLS in Google Search Console as the paths have changed.
⚠️ Please verify your sitemap output.
No significant changes
No significant changes
@nuxtjs/sitemap v6 beta - by @harlan-zw (a6204).⚠️ Please see https://github.com/nuxt-modules/sitemap/pull/320 if you have submitted multi-sitemap URLS in Google Search Console as the paths have changed.
canonicalQueryWhitelist - by @harlan-zw in https://github.com/harlan-zw/nuxt-seo/issues/282 (568c2)useBreadcrumbItems - by @harlan-zw (2005a)lang when using Nuxt I18n - by @harlan-zw (58e4f)Reports should be easier to work with now that routes with no warnings or errors will be filtered out.
With these new reports, you can save them in json format or save them anywhere using the new report.storage option which supports an unstorage instance or a string path.
export default defineNuxtConfig({
lineChecker: {
report: {
// save json reports in the public directory
json: true,
storage: './public',
}
}
})
(83b48)report.json for json reports - by @harlan-zw (fd721)report.storage save reports anywhere using unstorage - by @harlan-zw (a7c74)(b2685)(75388)(077e1)(70849)(6cc2c)(9e099)No significant changes
Check GitHub for older releases.