WEBOPIXEL

Gatsby.jsにreact-helmetを導入してhead要素(メタタグ)をカスタマイズする

Posted: 2019.10.14 / Category: javascript / Tag: 

GatsbyでHTMLファイルを書き出すと、初期状態ではメタタグはおろかタイトルもないんですよね。
その辺のカスタマイズは「helmet」とというプラグイン使うと簡単らしいでご紹介します。

Sponsored Link

Gatsbyがはじめての方は下記の記事も参考にしてください。

React製静的サイトジェネレーターGatsby使ってみた

インストール

下記コマンドでプラグインをインストールします。
react-helmetはReactのコンポーネントですが、それをGatsbyのプラグインで利用できるようにしたのがgatsby-plugin-react-helmetですね。

$ npm install --save gatsby-plugin-react-helmet react-helmet

プロジェクトルートにあるgatsby-config.jsを編集してこのプラグインを使えるようにします。

gatsby-config.js

module.exports = {
	plugins: [`gatsby-plugin-react-helmet`]
}

これで準備完了。

使ってみる

試しにindexページに設定してみましょう。

page/index.js

import React from 'react'
import Helmet from "react-helmet"

export default () => (
	<div>
		<Helmet
			htmlAttributes={{
				lang: 'ja',
			}}
			title="Gastbyサンプル"
			meta={[
				{ name: 'description', content: 'このページはGastbyサンプルです。' }
			]}
		/>
	</div>
)

Helmetの部分はこんな感じにタグっぽく書いてもOKです。

<Helmet>
	<title>Gastbyサンプル</title>
	<meta name="description" content="このページはGastbyサンプルです。" />
	<html lang="ja" />
</Helmet>

外部コンポーネント化

head要素は各ページで共通で使用する部分もあるのでHelmetの部分は外部コンポーネントにした方がいいですね。
例えばsrc/components/head.jsを下記のように作成してみます。

src/components/head.js

import React from 'react'
import Helmet from "react-helmet"

export default (props) => (
	<Helmet
		htmlAttributes={{
			lang: 'ja',
		}}
		title={ (props.title ? props.title + ' | ' : '') + "サイトタイトル"  }
		meta={[
			{
				name: 'description',
				content: props.description || 'Gastbyサンプル'
			}
		]}   
	/>
)

あとはコンポーネントをインポートして配置するだけで使えます。
index.jsを下記のように編集してみましょう。

src/page/index.js

import React from 'react'
import Head from '../components/head'

export default () => (
	<div>
		<Head />
	</div>
)

下層ページではpropsを設定して、細かく調節できます。

<Head
	title="自己紹介"
	description="自己紹介ページです。"
/>

以上、react-helmetの基本的な使い方がわかったと思いますが、react-helmetはスターターデーマによっては最初から組み込まれているのがあるので、基本的にはそちらを使用した方がいいかと思います。

gatsby-plugin-react-helmet