--- navigation.icon: uil:file-search-alt description: Improve your Nuxt app's SEO with powerful head config, composables and components. --- # SEO and Meta Improve your Nuxt app's SEO with powerful head config, composables and components. ## App Head Providing an [app.head](/docs/api/configuration/nuxt-config#head) property in your `nuxt.config.ts` allows you to customize the head for your entire app. ::alert{type=info} This method does not allow you to provide reactive data, if you need global reactive data you can use `useHead` in `app.vue`. :: Shortcuts are available to make configuration easier: `charset` and `viewport`. You can also provide any of the keys listed below in [Types](#types). ### Defaults Out-of-the-box, Nuxt provides sane defaults, which you can override if needed. - `charset`: `utf-8` - `viewport`: `width=device-width, initial-scale=1` ### Example ```ts{}[nuxt.config.ts] export default defineNuxtConfig({ app: { head: { charset: 'utf-16', viewport: 'width=500, initial-scale=1', title: 'My App', meta: [ // { name: 'description', content: 'My amazing site.' } ], } } }) ``` :ReadMore{link="/docs/api/configuration/nuxt-config/#head"} ## Composable: `useHead` The `useHead` composable function allows you to manage your head tags in a programmatic and reactive way, powered by [@vueuse/head](https://github.com/vueuse/head). As with all composables, it can only be used with a components `setup` and lifecycle hooks. ### Example ```vue{}[app.vue] ``` ::ReadMore{link="/docs/api/composables/use-head"} :: ## Composable: `useSeoMeta` and `useServerSeoMeta` The `useSeoMeta` and `useServerSeoMeta` composables let you define your site's SEO meta tags as a flat object with full TypeScript support. This helps you avoid typos and common mistakes, such as using `name` instead of `property`. In most instances, the meta does not need to be reactive as robots will only scan the initial load. So we recommend using `useServerSeoMeta` as a performance-focused utility that will not do anything (or return a `head` object) on the client. ### Example #### Simple ```vue{}[app.vue] ``` #### Reactive When inserting tags that are reactive, for example, from an API request, you should use the computed getter syntax, the same as `useHead`. ```vue{}[app.vue] ``` ::ReadMore{link="https://unhead.harlanzw.com/guide/composables/use-seo-meta"} :: ## Components Nuxt provides ``, `<Base>`, `<NoScript>`, `<Style>`, `<Meta>`, `<Link>`, `<Body>`, `<Html>` and `<Head>` components so that you can interact directly with your metadata within your component's template. Because these component names match native HTML elements, it is very important that they are capitalized in the template. `<Head>` and `<Body>` can accept nested meta tags (for aesthetic reasons) but this has no effect on _where_ the nested meta tags are rendered in the final HTML. ### Example <!-- @case-police-ignore html --> ```vue{}[app.vue] <script setup> const title = ref('Hello World') </script> <template> <div> <Head> <Title>{{ title }}