--- 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](/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 other key 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="/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="/api/composables/use-head"} :: ## Components Nuxt provides ``, `<Base>`, `<Script>`, `<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 }}