---
title: "Nuxt SEO Kit to Nuxt SEO"
description: "Migrate from the nuxt-seo-kit package v1 to the new v2 @nuxtjs/seo."
canonical_url: "https://nuxtseo.com/docs/nuxt-seo/migration-guide/nuxt-seo-kit"
last_updated: "2026-05-09T03:22:05.349Z"
---

<key-takeaways>

- 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

</key-takeaways>

## 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.

<code-group>

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

```bash [yarn]
yarn remove nuxt-seo-kit && yarn add -D @nuxtjs/seo
```

```bash [npm]
npm remove nuxt-seo-kit && npm install -D @nuxtjs/seo
```

</code-group>

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

## Breaking Changes

<warning>

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

</warning>

### `<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](/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](/docs/site-config/getting-started/introduction).

The move to a module is to allow greater flexible 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.

<code-group>

```ts [v1]
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'
    }
  }
})
```

```ts [v2]
export default defineNuxtConfig({
  site: {
    name: 'My App'
  }
})
```

</code-group>

When updating your config:

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

The behaviour for environment variables hasn't changed, it's recommended to read [how site config works](/docs/site-config/getting-started/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.

```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](/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](/docs/sitemap/releases/v3)

No breaking changes.

### Nuxt Schema.org

Upgraded from v2 to v3:

- [v3 release notes](/docs/schema-org/releases/v3)

No breaking changes.

### Nuxt OG Image

Upgraded from v1 to v2:

- [v2 release notes](/docs/og-image/releases/v2)

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

- `host`, `siteUrl` - see [installation](/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 behaviour 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.

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

<code-group>

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

```vue [v2]
<script setup lang="ts">
defineOgImage({ /* */ })
</script>
```

</code-group>

### Nuxt Link Checker

Upgraded from v1 to v2:

- [v2 release notes](/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](/docs/seo-utils/releases/v3)

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

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