OGP(Open Graph Protocol)は、WebページがSNSでシェアされた際に、リンクカード(プレビュー)として表示される情報を定義するための仕組みです。Next.jsでは、静的・動的どちらのOGP設定にも対応しており、特にSNSでの見栄えを整えたいときに重要です。
OGPでは、HTMLのメタタグを使って、ページのタイトルや説明、画像などを定義します。代表的なOGPメタタグは以下の通りです:
og:title
- ページのタイトルog:description
- ページの概要説明og:image
- プレビュー画像のURLog:url
- ページのURLog:type
- ページの種類(例: website, articleなど)これらを正しく設定することで、TwitterやLINE、Facebookなどでリンクを共有した際に適切なプレビューが表示されるようになります。
静的なページでは、export const metadata
を使ってOGPメタタグを定義します。
1import { Metadata } from 'next';
2
3 export const metadata: Metadata = {
4 title: 'ページタイトル',
5 description: 'このページの説明文です。',
6 openGraph: {
7 title: 'OGP用タイトル',
8 description: 'OGP用の説明文です。',
9 url: 'https://example.com/page', // ← 必ず絶対URLにすること!
10 type: 'website',
11 images: [
12 {
13 url: 'https://example.com/ogp.jpg', // ← 相対パス不可!必ず絶対URLにする
14 width: 1200,
15 height: 630,
16 alt: 'OGP画像の代替テキスト',
17 },
18 ],
19 },
20 };
21
注意:画像URL(og:image
)やページURL(og:url
)は相対パスではなく絶対パスで指定する必要があります。相対パスを使うとOGPが正しく表示されない場合があります。
ブログ記事や商品ページなど、ページによって内容が変わる場合には、generateMetadata
を使って動的にOGPを設定します。
1import { Metadata } from 'next';
2
3 type Props = {
4 params: { slug: string };
5 };
6
7 export async function generateMetadata({ params }: Props): Promise<Metadata> {
8 const post = await fetchPost(params.slug); // 仮のデータ取得処理
9 const siteUrl = 'https://example.com';
10
11 return {
12 title: post.title,
13 description: post.description,
14 openGraph: {
15 title: post.title,
16 description: post.description,
17 url: `${siteUrl}/blog/${params.slug}`, // ← 絶対パスで!
18 type: 'article',
19 images: [
20 {
21 url: `${siteUrl}/ogp/${params.slug}.jpg`, // ← 必ず絶対パスにする
22 width: 1200,
23 height: 630,
24 alt: post.title,
25 },
26 ],
27 },
28 };
29 }
30
このように、ページの内容に応じたOGP情報を動的に返すことが可能です。ここでも、画像URLやページURLは必ず絶対パスで記述してください。
OGP用の画像には以下のような推奨仕様があります:
Vercelなどのホスティングを使っている場合は、/public
フォルダ内に画像を配置すれば、https://example.com/ogp.jpg
のようなURLでアクセスできます。
Next.jsでは、metadata
とgenerateMetadata
を活用することで、静的・動的にOGP設定を行えます。OGP画像やURLは必ず絶対パスで記述することが重要です。適切なOGP設定は、SNSでの見栄えを向上させ、クリック率にも大きく影響します。