---
title: "Nuxt SEO Kit to Nuxt SEO · Nuxt SEO"
canonical_url: "https://nuxtseo.com/docs/nuxt-seo/migration-guide/nuxt-seo-kit"
last_updated: "2026-08-16T09:55:26.005Z"
meta:
  description: "Migrate from the nuxt-seo-kit package v1 to the new v2 @nuxtjs/seo."
  "og:description": "Migrate from the nuxt-seo-kit package v1 to the new v2 @nuxtjs/seo."
  "og:title": "Nuxt SEO Kit to Nuxt SEO · Nuxt SEO"
---

Nuxt SEO on GitHub

Switch to Nuxt SEOSwitch to RobotsSwitch to SitemapSwitch to OG ImageSwitch to Schema.orgSwitch to Link CheckerSwitch to SEO UtilsSwitch to Site ConfigSwitch to Skew ProtectionSwitch to AI Ready

**Migration Guides**

# **Nuxt SEO Kit to Nuxt SEO**

**What you'll learn**

- Package changed from `**nuxt-seo-kit**` to `**@nuxtjs/seo**`
- `**<SeoKit>**` and `**useSeoKit()**` removed, functionality is now automatic
- Site config moved from `**runtimeConfig.public**` to `**site**` key

## Support

If you get stuck with the migration or have post-migration bugs, please get in touch.

- [**~~Jump in the Discord~~**](https://discord.com/invite/5jDAMswWwX)
- [**~~Make a GitHub issue~~**](https://github.com/harlan-zw/nuxt-seo/issues)
- [**~~Provide feedback~~**](https://github.com/harlan-zw/nuxt-seo/discussions/108)

## Module Rename

With v2 the module name and scope is clarified with the rename to Nuxt SEO.

- 1.\* - Nuxt SEO Kit `**nuxt-seo-kit**` (Nuxt Layer)
- 2.x - Nuxt SEO `**@nuxtjs/seo**` (Nuxt Module)

The v2 allows you to use all SEO modules at runtime, prerendering is no longer required. It also comes with improved i18n compatibility.

It has been renamed to provide a better base for growing out the Nuxt SEO ecosystem as well as to make the layer -> module change more obvious.

```sh
# remove nuxt-seo-kit
pnpm remove nuxt-seo-kit && pnpm i -D @nuxtjs/seo
```

nuxt.config.ts

```diff
export default defineNuxtConfig({
-  extends: ['nuxt-seo-kit'],
  modules: [
+  '@nuxtjs/seo',
  ]
})
```

## Breaking Changes

We removed the `**<SeoKit>**` component and `**useSeoKit()**` composable. Delete these from your code; a plugin now handles the functionality automatically.

**`**<SeoKit>**`, `**useSeoKit()**` removed**: these APIs set up all the default meta and module configuration for you.

In v2, they are no longer needed as functionality has been moved to a plugin.

```diff
<template>
-  <SeoKit />
</template>
```

```diff
<script setup>
-  useSeoKit()
</script>
```

If you'd like to opt-out of the these v2 configurations, you can set [**~~automaticDefaults~~**](https://nuxtseo.com/docs/seo-utils/api/config#automaticdefaults) to `**false**`.

## Site Config Changes

In v1, site config was set through runtime config. In v2, we have a dedicated module with helpers for handling this config called [**~~nuxt-site-config~~**](https://nuxtseo.com/docs/site-config/getting-started/introduction).

The move to a module is to allow greater flexibility in changing site configuration at runtime.

If you were specifying any static config in `**runtimeConfig**` previously, it's now recommended to move this to the `**site**` key.

```ts
export default defineNuxtConfig({
  runtimeConfig: {
    public: {
      // you can remove environment variables, they'll be set automatically
      siteUrl: process.env.NUXT_PUBLIC_SITE_URL,
      siteName: 'My App'
    }
  }
})
```

When updating your config:

- All keys are without the `**site**` prefix
- The `**language**` config has been renamed to `**defaultLocale**`

The behavior for environment variables hasn't changed. It's recommended to read [**~~how site config works~~**](https://nuxtseo.com/docs/site-config/guides/how-it-works) for more advanced configuration.

## Prerendering Changes

In v1, you had to prerender all pages, and we modified your `**nuxt.config**` to ensure this happened.

In v2, the server can generate everything at runtime, and we no longer provide the prerendering changes.

If you'd like to keep the prerendering changes, you can add this to your nuxt.config.

nuxt.config.ts

```ts
export default defineNuxtConfig({
  nitro: {
    prerender: {
      crawlLinks: true,
      routes: [
        '/',
      ],
    },
  },
})
```

## Module Upgrades

### Nuxt Robots

Upgraded from v1 to v3:

- [**~~v2 release notes~~**](https://github.com/harlan-zw/nuxt-simple-robots/releases/tag/v2.0.0)
- [**~~v3 release notes~~**](https://nuxtseo.com/docs/robots/releases/v3)

No breaking changes.

### Nuxt Sitemap

Upgraded from v1 to v3:

- [**~~v2 release notes~~**](https://github.com/nuxt-modules/sitemap/releases/tag/v2.0.0)
- [**~~v3 release notes~~**](https://nuxtseo.com/docs/sitemap/releases/v3)

No breaking changes.

### Nuxt [**~~Schema.org~~**](http://Schema.org)

Upgraded from v2 to v3:

- [**~~v3 release notes~~**](https://nuxtseo.com/docs/schema-org/releases/v3)

No breaking changes.

### Nuxt OG Image

Upgraded from v1 to v2:

- [**~~v2 release notes~~**](https://nuxtseo.com/docs/og-image/releases/v2)

We removed the following options from `**nuxt.config**` `**ogImage**`:

- `**host**`, `**siteUrl**` - see [**~~installation~~**](https://nuxtseo.com/docs/og-image/getting-started/installation) for details.
- `**forcePrerender**` - removed (no longer needed)
- `**satoriProvider**` - removed (use `**runtimeSatori**` instead)
- `**browserProvider**` - removed (use `**runtimeBrowser**` instead)
- `**experimentalInlineWasm**` - we removed this; it's now automatic based on environment
- `**experimentalRuntimeBrowser**` - we removed this; it's now automatic based on environment

The following options have been deprecated from the `**defineOgImage**` options:

- `**static**` - use `**cache**` instead

If you were referencing the old default template, you will need to update it.

- `**OgImageBasic**` - remove the property and let the system select the fallback automatically

Composables & Components:

- `**defineOgImageStatic()**` is deprecated, use `**defineOgImage()**` (default behavior is to cache), if you want to be verbose you can use `**defineOgImageCached()**` or `**<OgImageCached />**`
- `**<OgImageStatic />**` is deprecated, use `**<OgImage />**`
- `**defineOgImageDynamic()**` is deprecated, use `**defineOgImageWithoutCache()**`
- `**<OgImageDynamic />**` is deprecated, use `**<OgImageWithoutCache />**`

If you were using the runtime browser previously, you will need to manually opt-in for it to work in production.

nuxt.config.ts

```ts
export default defineNuxtConfig({
  ogImage: {
    runtimeBrowser: true
  }
})
```

```vue
<script setup lang="ts">
defineOgImageStatic(
  { /* */ }
)
</script>
```

### Nuxt Link Checker

Upgraded from v1 to v2:

- [**~~v2 release notes~~**](https://nuxtseo.com/docs/link-checker/releases/v2)

Changes to nuxt.config `**linkChecker**`:

- `**exclude**` renamed to `**excludeLinks**`
- `**failOn404**` renamed to `**failOnError**`

### Nuxt SEO Utils

The `**nuxt-unhead**` module has been renamed to `**nuxt-seo-utils**`. This is to better reflect the scope of the module.

Upgraded from v1 to v3:

- [**~~v2 release notes~~**](https://github.com/harlan-zw/nuxt-seo-utils/releases/tag/v2.0.0)
- [**~~v3 release notes~~**](https://nuxtseo.com/docs/seo-utils/releases/v3)

If you were using the `**unhead**` key to configure the module, you will need to change it to `**seo**`.

nuxt.config.ts

```diff
export default defineNuxtConfig({
-  unhead: {
+  seo: {
  }
})
```

**Was this page helpful?**

### **Related **

[**v2 Beta to v2 RC**](https://nuxtseo.com/docs/nuxt-seo/migration-guide/beta-to-rc)

[**Site Config**](https://nuxtseo.com/docs/site-config/getting-started/introduction)

[**v2 Beta to v2 RC** Migrate from the Nuxt SEO v2 beta to the v2 RC.](https://nuxtseo.com/docs/nuxt-seo/migration-guide/beta-to-rc) [**v3 to v4** Migrate from Nuxt SEO v3 to v4.](https://nuxtseo.com/docs/nuxt-seo/migration-guide/v3-to-v4)