useSeoMeta()
The useSeoMeta
composable lets you define your site's SEO meta tags as a flat object with full TypeScript support.
This helps you avoid common mistakes, such as using name
instead of property
attributes, and prevents typos with over 100+ meta tags fully typed.
This is the recommended way to add meta tags to your site as it is XSS safe and provides comprehensive TypeScript support.
Basic Usage
import { useSeoMeta } from 'unhead'
useSeoMeta(unheadInstance, {
title: 'About',
description: 'My about page',
ogDescription: 'Still about my about page',
ogTitle: 'About',
ogImage: 'https://example.com/image.png',
twitterCard: 'summary_large_image',
})
Common Use Cases
Complete SEO Setup
import { useSeoMeta } from 'unhead'
useSeoMeta(unheadInstance, {
// Basic SEO
title: 'Product Name - Your Brand',
description: 'Detailed product description optimized for search engines.',
// Open Graph
ogTitle: 'Product Name - Your Brand',
ogDescription: 'Engaging description for social media shares.',
ogImage: 'https://example.com/product-social.jpg',
ogUrl: 'https://example.com/products/my-product',
ogType: 'product',
ogSiteName: 'Your Brand',
// Twitter
twitterTitle: 'Product Name - Your Brand',
twitterDescription: 'Engaging description for Twitter shares.',
twitterImage: 'https://example.com/product-twitter.jpg',
twitterCard: 'summary_large_image',
// Product specific (structured data will be generated)
articleAuthor: 'Author Name',
articlePublishedTime: '2023-01-01',
articleModifiedTime: '2023-02-15',
})
Dynamic Meta Tags
import { useSeoMeta } from 'unhead'
import { computed } from 'vue' // or equivalent in your framework
const product = ref({
name: 'Awesome Product',
description: 'This product is amazing',
image: 'https://example.com/image.png'
})
useSeoMeta(unheadInstance, {
title: computed(() => `${product.value.name} - Your Brand`),
description: computed(() => product.value.description),
ogImage: computed(() => product.value.image),
})
useServerSeoMeta
The useServerSeoMeta
composable is the same as useSeoMeta
but it is designed to run only on the server.
This can be useful to minimize your client bundle size, as most meta data does not need to be dynamic.
import { useServerSeoMeta } from 'unhead'
useServerSeoMeta({
title: 'About',
description: 'My about page',
ogDescription: 'Still about my about page',
ogTitle: 'About',
ogImage: 'https://example.com/image.png',
twitterCard: 'summary_large_image',
})
useServerSeoMeta
is often sufficient and more performant.Tree Shaking
The useServerSeoMeta
composable can be tree-shaken from your client bundle in most cases since search engines only need the initial SSR response.
For Nuxt, this is handled automatically. For other frameworks, you'll need to use the Unhead Vite Plugin.
How it works
The useSeoMeta
composable is powered by the zhead schema and unpackMeta
function. Unhead knows which meta tags belong where, as well as handling all the browser quirks for you.
API Reference
Input
A flat object with keys representing different meta tags. All properties are optional.
Return Value
The composable returns a MetaProxy
object that allows updating the meta tags reactively.
Best Practices
- Use
useServerSeoMeta
whenever possible for performance - Include essential meta tags for social sharing (og:title, og:description, og:image)
- Keep descriptions concise (under 160 characters) but informative
- Use unique titles and descriptions for each page
- Provide appropriately sized images for social sharing
Super-charged SEO
Use it with the Infer SEO Meta Tags guide to super-charge your app's SEO with minimal effort.