概要
Nuxt.jsで、タイトルタグや、OGPなどのメタタグを設定する方法についてのメモです。
Nuxt.jsの公式ドキュメントはこちら。
https://ja.nuxtjs.org/docs/2.x/features/meta-tags-seo
共通設定
全てのページに反映させたい共通の内容は、nuxt.config.js
で設定できます。
デフォルトのOGPやタイトルをこちらで設定しておきます。
head: {
title: 'タイトル',
htmlAttrs: {
lang: 'ja',
prefix: 'og: http://ogp.me/ns#'
},
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ hid: 'description', name: 'description', content: '共通ディスクリプション' },
{ hid: 'og:site_name', property: 'og:site_name', content: 'サイト名' },
{ hid: 'og:url', property: 'og:url', content: 'サイトURL' }, //絶対パスで指定
{ hid: 'og:type', property: 'og:type', content: 'website' },
{ hid: 'og:image', property: 'og:image', content: '画像URL' }, //絶対パスで指定
{ hid: 'og:title', property: 'og:title', content: 'タイトル' },
{ hid: 'og:description', property: 'og:description', content: '共通ディスクリプション' },
{ name: 'twitter:card', content: 'summary' }
],
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
]
},
上から順に<title>
タグ、<title>
タグ、<meta>
タグ、<link>
タグが生成されます。各タグに対し、属性と値を連想配列で指定していけばよいので、直感的にわかりやすいかと思います。
hid
は、各メタタグを識別するための固有のIDです。任意の文字列でOKですが、property
の値と揃えておくとわかりやすいかと思います。
上記の設定で、htmlには下記のように出力されます。
<html lang="ja" prefix="og: http://ogp.me/ns#">
<head>
<title>タイトル</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta data-hid="description" name="description" content="共通ディスクリプション">
<meta data-hid="og:site_name" property="og:site_name" content="サイト名">
<meta data-hid="og:url" property="og:url" content="サイトURL">
<meta data-hid="og:type" property="og:type" content="website">
<meta data-hid="og:image" property="og:image" content="画像URL">
<meta data-hid="og:title" property="og:title" content="タイトル">
<meta data-hid="og:description" property="og:description" content="共通ディスクリプション">
<meta name="twitter:card" content="summary">
<link rel="icon" href="/favicon.ico">
</head>
<!-- 省略 -->
</html>
個別ページの設定
ページごとに個別の値を設定する場合は、各ページのVueファイルの<script>
タグ内で設定します。
<script>
export default {
head() {
return {
title: 'ページタイトル',
titleTemplate: '%s - サイト名',
meta: [
{ hid: 'description', name: 'description', content: 'ページディスクリプション' },
{ hid: 'og:url', property: 'og:url', content: 'ページURL' }, //絶対パス
{ hid: 'og:image', property: 'og:image', content: 'ページ用OGP画像URL' } //絶対パス
{ hid: 'og:title', property: 'og:title', content: 'ページタイトル' },
{ hid: 'og:description', property: 'og:description', content: 'ページディスクリプション' },
]
}
}
}
</script>
hid
は、nuxt.config.js
と同じ値を設定します。(hid
の値が異なると、別のタグと認識されるため、重複してタグが出力されます)
titleTemplate
を設定すると、title
に指定した値にを共通の書式で表示させることができます。
上記の設定で、htmlには下記のように出力されます。ページ側で設定した内容が反映されました。
<html lang="ja" prefix="og: http://ogp.me/ns#">
<head>
<title>ページタイトル - サイト名</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta data-hid="description" name="description" content="ページディスクリプション">
<meta data-hid="og:site_name" property="og:site_name" content="サイト名">
<meta data-hid="og:url" property="og:url" content="ページURL">
<meta data-hid="og:type" property="og:type" content="website">
<meta data-hid="og:image" property="og:image" content="ページ用OGP画像URL">
<meta data-hid="og:title" property="og:title" content="ページタイトル">
<meta data-hid="og:description" property="og:description" content="ページディスクリプション">
<meta name="twitter:card" content="summary">
<link rel="icon" href="/favicon.ico">
</head>
<!-- 省略 -->
</html>
参考
Nuxt.jsの公式ドキュメント: https://ja.nuxtjs.org/docs/2.x/features/meta-tags-seo
MetaAPi Refference: https://vue-meta.nuxtjs.org/api/