Next.jsでタイトルとメタタグとOGPを動的に設定する使い方 Head設定の実装サンプル
2025年12月21日
Next.jsでHeadタグの設定について
よく使用するが毎回調べたりしていたためメモします。
Typescriptにて記述しています。
環境
- React 16.3.2
- Next.js 5.1
- typescript 2.8.3
サンプルコード
ディレクトリ構成
css├── components
│ └── head.tsx
└── page
├── index.tsx
└── item.tsx
next/headをインポートしHeadタグで囲ってあげると
ヘッド要素を展開してくれます。
components/head.tsximport * as React from 'react';
import Head from 'next/head';
interface Props {
title: string;
description: string;
keyword: string;
image: string;
url: string;
}
export default ({ title, description, keyword, image, url }: Props): JSX.Element => {
return (
<Head>
<title>{title}</title>
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta name="keywords" content={keyword'} />
<meta property="og:type" content="blog" />
<meta property="og:url" content={url} />
<meta property="og:image" content={image} />
<meta property="og:site_name" content={title} />
<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@tcr_jp" />
<meta name="twitter:url" content={image} />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content={image} />
<link rel="canonical" href={url} />
<link rel="shortcut icon" href={'https://t-cr.jp/favicon.ico'} />
<link rel="apple-touch-icon" href={'https://t-cr.jp/logo.png'} />
</Head>
);
};
作成したcomponents/head.tsxをインポートします。
インポートしたHeadを記述する場所についてはどこに記述しても問題ありません。
子コンポーネントに設置することもできます。
page/index.tsx
import * as React from 'react';
import Head from 'components/head';
class App extends React.Component {
public render(): JSX.Element {
return (
<div>
<Head
title={'タイトル'}
description={'ディスクリプション'}
keyword={'キーワード'}
image={'https://t-cr.jp/img.jpg'}
url={'https://t-cr.jp'}
/>
コンテンツ
</div>
);
}
}
export defualt App;
他のページから同じように設定することで
ページごとにデータを渡して動的に設置することが可能です。
page/item.tsx
import * as React from 'react';
import Head from 'components/head';
class Item extends React.Component {
public render(): JSX.Element {
return (
<div>
<Head
title={'タイトル'}
description={'ディスクリプション'}
keyword={'キーワード'}
image={'https://t-cr.jp/img.jpg'}
url={'https://t-cr.jp'}
/>
コンテンツ
</div>
);
}
}
export defualt Item;
著書
article【緊急】Vercelセキュリティインシデント(2026年4月)環境変数が漏洩?今すぐやるべき対策まとめ
article2025年12月21日Next.jsをインストールしてTypeScript環境をセットアップする手順 最初に動かすまでを整理
article2025年12月21日Next.js 6から7へTypeScriptで移行を運用する手順 実施対応を再現できる形で整理
article2025年12月21日Next.jsでタイトルとメタタグとOGPを動的に設定する使い方 Head設定の実装サンプル
articleNext.js を Bun で動かす開発環境:起動速度・互換性・落とし穴
articleNext.js × pnpm/Turborepo 初期構築:ワークスペース・共有パッケージ・CI 最適化
article2026年1月23日TypeScriptのtypeとinterfaceを比較・検証する 違いと使い分けの判断基準を整理
article2026年1月23日TypeScript Genericsの使用例を早見表でまとめる 記法と頻出パターンを整理
article2026年1月22日TypeScriptの型システムを概要で理解する 基礎から全体像まで完全解説
article2026年1月22日TypeScriptでよく出るエラーをトラブルシュートでまとめる 原因と解決法30選
article2026年1月21日TailwindとTypeScriptとReactのユースケース 型安全なデザインシステムを設計して構築する
article2026年1月20日TypeScriptで関数型プログラミングを設計に取り入れる 純粋関数で堅牢にする手順
articleClaude Code と Codex を並列で動かしたときの動き: 同じファイルでも書き換えは消えない
articleClaude Code の Stop フックで、終わる前にテストを走らせる手順: 失敗が残ったまま終わらない
articleClaude Code と Codex のスキルの置き場所の動き: .claude/skills と .agents/skills は互いに読まない
articleClaude Code の /security-review で変更を点検する手順: origin/HEAD がないと止まる
articleClaude Code と Codex のスキルを入れる前に中身を確かめる手順: security-audit で見る5か所
articleCloudflare の security-audit スキルを Claude Code と Codex で比較: 3つとも見つけ、進め方に差
