DocsUpgrade GuideMigrate to Nuxt Bridge
Meta Tags
Learn how to migrate from Nuxt 2 to Nuxt Bridge new meta tags.
If you need to access the component state with head
, you should migrate to using useHead
.
If you need to use the Options API, there is a head()
method you can use when you use defineNuxtComponent
.
Migration
Set bridge.meta
import { defineNuxtConfig } from '@nuxt/bridge'export default defineNuxtConfig({ bridge: { meta: true, nitro: false // If migration to Nitro is complete, set to true }})
Update head properties
In your nuxt.config
, rename head
to meta
. (Note that objects no longer have a hid
key for deduplication.)
export default { head: { titleTemplate: '%s - Nuxt', meta: [ { charset: 'utf-8' }, { name: 'viewport', content: 'width=device-width, initial-scale=1' }, { hid: 'description', name: 'description', content: 'Meta description' } ] }}
useHead
Composables
Nuxt Bridge provides a new Nuxt 3 meta API that can be accessed with a new useHead
composable.
<script setup lang="ts">useHead({ title: 'My Nuxt App',})</script>
This
useHead
composable uses @unhead/vue
under the hood (rather than vue-meta
) to manipulate your <head>
.We recommend not using the native Nuxt 2
head()
properties in addition to useHead
, as they may conflict.For more information on how to use this composable, see the docs.
Options API
<script>// if using options API `head` method you must use `defineNuxtComponent`export default defineNuxtComponent({ head (nuxtApp) { // `head` receives the nuxt app but cannot access the component instance return { meta: [{ name: 'description', content: 'This is my page description.' }] } }})</script>
Title Template
If you want to use a function (for full control), then this cannot be set in your nuxt.config, and it is recommended instead to set it within your /layouts
directory.
layouts/default.vue
<script setup lang="ts">useHead({ titleTemplate: (titleChunk) => { return titleChunk ? `${titleChunk} - Site Title` : 'Site Title'; }})</script>