Мета-теги
Управление мета-тегами при переходе с Nuxt 2 на Nuxt 3.
В Nuxt 3 мета-теги можно задавать так:
- В
nuxt.config. - Через композабл
useHead. - Через глобальные мета-компоненты.
Доступны: title, titleTemplate, base, script, noscript, style, meta, link, htmlAttrs, bodyAttrs.
Nuxt использует
Unhead для управления мета-тегами; детали реализации могут меняться.Миграция
- В
nuxt.configпереименуйтеheadвmeta. Общую конфигурацию мета можно перенести вapp.vue. (Ключhidдля дедупликации больше не используется.) - Если в
headнужен доступ к состоянию компонента, переходите наuseHeadили встроенные мета-компоненты. - Для Options API при использовании
defineNuxtComponentдоступен методhead().
useHead
<script>
export default {
data: () => ({
title: 'Моё приложение',
description: 'Описание приложения',
}),
head () {
return {
title: this.title,
meta: [{
hid: 'description',
name: 'description',
content: this.description,
}],
}
},
}
</script>
<script setup lang="ts">
const title = ref('Моё приложение')
const description = ref('Описание приложения')
// Мета будет реактивно обновляться при изменении title/description
useHead({
title,
meta: [{
name: 'description',
content: description,
}],
})
</script>
Мета-компоненты
В Nuxt 3 есть мета-компоненты для тех же задач. Они похожи на HTML-теги, но предоставляются Nuxt и имеют сходный функционал.
<script>
export default {
head () {
return {
title: 'Моё приложение',
meta: [{
hid: 'description',
name: 'description',
content: 'Описание приложения',
}],
}
},
}
</script>
<template>
<div>
<Head>
<Title>Моё приложение</Title>
<Meta
name="description"
content="Описание приложения"
/>
</Head>
<!-- -->
</div>
</template>
- Используйте заглавные буквы в именах компонентов, чтобы отличать их от нативных HTML-элементов (
<Title>, а не<title>). - Эти компоненты можно размещать в любом месте шаблона страницы.
Поддержка Options API
Nuxt 3 (Options API)
<script>
// при использовании метода head в Options API нужен defineNuxtComponent
export default defineNuxtComponent({
head (nuxtApp) {
// head получает nuxtApp, но не имеет доступа к экземпляру компонента
return {
meta: [{
name: 'description',
content: 'Описание моей страницы.',
}],
}
},
})
</script>