Meta 标签
管理你的 meta 标签,从 Nuxt 2 到 Nuxt 3。
Nuxt 3 提供了几种不同的方式来管理你的 meta 标签:
- 通过你的
nuxt.config。 - 通过
useHead组合式函数。 - 通过全局 meta 组件。
你可以自定义 title、titleTemplate、base、script、noscript、style、meta、link、htmlAttrs 和 bodyAttrs。
Nuxt 目前使用
Unhead 来管理你的 meta 标签,但实现细节可能会变化。
::迁移
- 在你的
nuxt.config中,将head重命名为meta。考虑将这个共享的 meta 配置移入你的app.vue中。(注意,对象不再有用于去重的hid键。) - 如果你需要使用组件状态来操作
head,你应该迁移到使用useHead。你也可以考虑使用内置的 meta 组件。 - 如果你需要使用 Options API,在使用
defineNuxtComponent时有一个可用的head()方法。
useHead
<script>
export default {
data: () => ({
title: 'My App',
description: 'My App Description',
}),
head () {
return {
title: this.title,
meta: [{
hid: 'description',
name: 'description',
content: this.description,
}],
}
},
}
</script>
<script setup lang="ts">
const title = ref('My App')
const description = ref('My App Description')
// 当你在上面更改 title/description 时,这将是响应式的
useHead({
title,
meta: [{
name: 'description',
content: description,
}],
})
</script>
Meta 组件
Nuxt 3 还提供了 meta 组件,你可以使用它们来完成相同的任务。虽然这些组件看起来类似于 HTML 标签,但它们是由 Nuxt 提供的,并具有类似的功能。
<script>
export default {
head () {
return {
title: 'My App',
meta: [{
hid: 'description',
name: 'description',
content: 'My App Description',
}],
}
},
}
</script>
<template>
<div>
<Head>
<Title>My App</Title>
<Meta
name="description"
content="My app description"
/>
</Head>
<!-- -->
</div>
</template>
- 确保这些组件名称使用大写字母,以将它们与原生 HTML 元素区分开(
<Title>而不是<title>)。 - 你可以将这些组件放在页面模板的任何位置。
Options API
Nuxt 3 (Options API)
<script>
// 如果使用 options API 的 `head` 方法,你必须使用 `defineNuxtComponent`
export default defineNuxtComponent({
head (nuxtApp) {
// `head` 接收 nuxt app,但无法访问组件实例
return {
meta: [{
name: 'description',
content: 'This is my page description.',
}],
}
},
})
</script>