---
sidebar: auto
---
# API Reference
## Plugin options
### keyName
- type `string`
- default `metaInfo`
The name of the component option that contains all the information that gets converted to the various meta tags & attributes for the page
### attribute
- type `string`
- default `data-vue-meta`
The name of the attribute vue-meta arguments on elements to know which it should manage and which it should ignore.
### ssrAttribute
- type `string`
- default `data-vue-meta-server-rendered`
The name of the attribute that is added to the `html` tag to inform `vue-meta` that the server has already generated the meta tags for the initial render
See [How to prevent update on page load](/faq/prevent-initial)
### tagIDKeyName
- type `string`
- default `vmid`
The property that tells `vue-meta` to overwrite (instead of append) an item in a tag list.
For example, if you have two `meta` tag list items that both have `vmid` of 'description',
then vue-meta will overwrite the shallowest one with the deepest one.
### contentKeyName
- type `string`
- default `content`
The key name for the content-holding property
### metaTemplateKeyName
- type `string`
- default `template`
The key name for possible meta templates
### refreshOnceOnNavigation
- type `boolean`
- default `false`
When `true` then `vue-meta` will pause updates once page navigation starts and resumes updates when navigation finishes (resuming also triggers an update).
This could both be a performance improvement as a possible fix for 'flickering' when you are e.g. replacing stylesheets
## Plugin methods
The `vue-meta` plugin injects a `$meta()` function in the Vue prototype which provides the following methods
:::tip Note
`$meta()` is a function so we only need to insert it once in the `Vue.prototype`, but still use `this` to reference the component it was called from
:::
### $meta().getOptions
- returns [`pluginOptions`](/api/#plugin-options)
Could be used by third-party libraries who wish to interact with `vue-meta`
### $meta().refresh
- returns [`metaInfo`](/api/#metaInfo-properties)
Updates the current metadata with new metadata.
Useful when updating metadata as the result of an asynchronous action that resolves after the initial render takes place.
### $meta().inject
- returns [`metaInfo`](/api/#metaInfo-properties)
:::tip SSR only
`inject` is available in the server plugin only and is not available on the client
:::
It returns a special `metaInfo` object where all keys have an object as value which contains a `text()` method for returning html code
See [Rendering with renderToString](/guide/ssr.html#simple-rendering-with-rendertostring) for an example
### $meta().pause
- arguments:
- refresh (type `boolean`, default `false`)
- returns `resume()`
Pauses global metadata updates until either the returned resume method is called or [resume](/api/#meta-resume)
### $meta().resume
- arguments:
- refresh (type `boolean`, default `false`)
- returns [`metaInfo`](/api/#metaInfo-properties) (optional)
Resumes metadata updates after they have been paused. If `refresh` is `true` it immediately initiates a metadata update by calling [refresh](/api/#meta-refresh)
## metaInfo properties
::: tip Note
The documentation below uses `metaInfo` as `keyName` in the examples, please note that this is [configurable](/api/#keyname) and could be different in your case
:::
### title
- type `string`
Maps to the inner-text value of the `
` element.
```js
{
metaInfo: {
title: 'Foo Bar'
}
}
```
```html
Foo Bar
```
### titleTemplate
- type `string | Function`
The value of `title` will be injected into the `%s` placeholder in `titleTemplate` before being rendered. The original title will be available on `metaInfo.titleChunk`.
```js
{
metaInfo: {
title: 'Foo Bar',
titleTemplate: '%s - Baz'
}
}
```
```html
Foo Bar - Baz
```
The property can also be a function:
```js
titleTemplate: (titleChunk) => {
// If undefined or blank then we don't need the hyphen
return titleChunk ? `${titleChunk} - Site Title` : 'Site Title';
}
```
### htmlAttrs
### headAttrs
### bodyAttrs
- type `object`
Each **key:value** maps to the equivalent **attribute:value** of the `` element.
Since `v2.0` value can also be an `Array`
```js
{
metaInfo: {
htmlAttrs: {
lang: 'en',
amp: true
},
bodyAttrs: {
class: ['dark-mode', 'mobile']
}
}
}
```
```html
Foo Bar
```
### base
- type `object`
Maps to a newly-created `` element, where object properties map to attributes.
```js
{
metaInfo: {
base: { target: '_blank', href: '/' }
}
}
```
```html
```
### meta
- type `collection`
Each item in the array maps to a newly-created `` element, where object properties map to attributes.
```js
{
metaInfo: {
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' }
]
}
}
```
```html
```
#### Content templates
Since `v1.5.0`, you can now set up meta templates that work similar to the titleTemplate:
```js
{
metaInfo: {
meta: [
{ charset: 'utf-8' },
{
'property': 'og:title',
'content': 'Test title',
'template': chunk => `${chunk} - My page`, //or as string template: '%s - My page',
'vmid': 'og:title'
}
]
}
}
```
```html
```
### link
- type `collection`
Each item in the array maps to a newly-created `` element, where object properties map to attributes.
```js
{
metaInfo: {
link: [
{ rel: 'stylesheet', href: '/css/index.css' },
{ rel: 'favicon', href: 'favicon.ico' }
]
}
}
```
```html
```
### style
- type `object`
Each item in the array maps to a newly-created `
```
### script
- type `collection`
Each item in the array maps to a newly-created `
```
#### Add json or other raw data
::: warning
You have to disable sanitizers so the content of `innerHTML` won't be escaped. Please see [__dangerouslyDisableSanitizersByTagID](/api/#dangerouslydisablesanitizersbytagid) for more info on related risks
:::
```js
{
metaInfo: {
script: [{
vmid: 'ldjson-schema',
innerHTML: '{ "@context": "http://schema.org" }',
type: 'application/ld+json'
}],
__dangerouslyDisableSanitizersByTagID: {
'ldjson-schema': ['innerHTML']
},
}
}
```
```html
```
#### Special attribute: `body: true`
If you e.g. wish to force delayed execution of a script or just want the script to be included in the `` of the page, add `body: true`.
Script tags with `body: true` are rendered just before ``
```js
{
metaInfo: {
script: [{
innerHTML: 'console.log("I am in body");',
type: 'text/javascript',
body: true
}]
}
}
```
### noscript
- type `collection`
Each item in the array maps to a newly-created `