useHead
En esta página
Usage#
The useHead composable allows you to manage your head tags in a programmatic and reactive way, powered by Unhead. It lets you customize the meta tags, links, scripts, and other elements in the <head> section of your HTML document.
```vue [app/app.vue]
::warning
If the data comes from a user or other untrusted source, we recommend you check out [`useHeadSafe`](/docs/4.x/api/composables/use-head-safe).
::
::note
The properties of `useHead` can be dynamic, accepting `ref`, `computed` and `reactive` properties. The `meta` parameter can also accept a function returning an object to make the entire object reactive.
::
## Type
```ts [Signature]
export function useHead (meta: MaybeComputedRef<MetaObject>): ActiveHeadEntry<UseHeadInput>
interface MetaObject {
title?: string
titleTemplate?: string | ((title?: string) => string)
base?: Base
link?: Link[]
meta?: Meta[]
style?: Style[]
script?: Script[]
noscript?: Noscript[]
htmlAttrs?: HtmlAttributes
bodyAttrs?: BodyAttributes
}
interface ActiveHeadEntry<Input> {
/**
* Updates the entry with new input.
*
* Will first clear any side effects for previous input.
*/
patch: (input: Input) => void
/**
* Dispose the entry, removing it from the active head.
*
* Will queue side effects for removal.
*/
dispose: () => void
}
See @unhead/schema for more detailed types.
Parameters#
meta: An object accepting head metadata properties to customize the page's <head> section. All properties support reactive values (ref, computed, reactive) or can be a function returning the metadata object.
| Property | Type | Description |
|---|---|---|
title |
string |
Sets the page title. |
titleTemplate |
string \| ((title?: string) => string) |
Configures a dynamic template to customize the page title. Can be a string with %s placeholder or a function. |
base |
Base |
Sets the <base> tag for the document. |
link |
Link[] |
Array of link objects. Each element is mapped to a <link> tag, where object properties correspond to HTML attributes. |
meta |
Meta[] |
Array of meta objects. Each element is mapped to a <meta> tag, where object properties correspond to HTML attributes. |
style |
Style[] |
Array of style objects. Each element is mapped to a <style> tag, where object properties correspond to HTML attributes. |
script |
Script[] |
Array of script objects. Each element is mapped to a <script> tag, where object properties correspond to HTML attributes. |
noscript |
Noscript[] |
Array of noscript objects. Each element is mapped to a <noscript> tag, where object properties correspond to HTML attributes. |
htmlAttrs |
HtmlAttributes |
Sets attributes of the <html> tag. Each object property is mapped to the corresponding attribute. |
bodyAttrs |
BodyAttributes |
Sets attributes of the <body> tag. Each object property is mapped to the corresponding attribute. |
Return Values#
This composable does not return any value. It registers the head metadata with Unhead, which manages the actual DOM updates.
Example#
Basic Meta Tags#
```vue [app/pages/about.vue]
### Reactive Meta Tags
```vue [app/pages/profile.vue]
<script setup lang="ts">
const profile = ref({ name: 'John Doe' })
useHead({
title: computed(() => profile.value.name),
meta: [
{
name: 'description',
content: computed(() => `Profile page for ${profile.value.name}`),
},
],
})
</script>
Using a Function for Full Reactivity#
```vue [app/pages/dynamic.vue]
### Adding External Scripts and Styles
```vue [app/pages/external.vue]
<script setup lang="ts">
useHead({
link: [
{
rel: 'stylesheet',
href: 'https://cdn.example.com/styles.css',
},
],
script: [
{
src: 'https://cdn.example.com/script.js',
async: true,
},
],
})
</script>
Body and HTML Attributes#
```vue [app/pages/themed.vue]
```
:read-more{to="/docs/4.x/getting-started/seo-meta"}