logo
n min

📷

Next.js App Router で SSG ビルド時に 動的に OGP を生成する.

投稿日

更新日

はじめに

本サイトで、OGP の生成を実装した際の実装方法を基に、Next.js App Router で SSG ビルド時に 動的に OGP を生成する方法を紹介します。

以下、Next.js と出てくる場合は、Next.js App Router を指します。

本記事の対象読者

  • Next.js App Router で Static Site Generation (SSG) を利用している方
  • OGP の生成を実装したい方
  • ビルド時に OGP を生成したい方

本記事の環境

  • Next.js 15.3.2
  • @vercel/og (Next.js に含まれています)

OGP の基本

OGP とは

OGP とは、Open Graph Protocol の略で、SNS などでシェアされた際に表示される画像やタイトル、説明文などの情報を指定するためのプロトコルです。

以下のような、リンクカードに表示されている情報が OGP の一例です。

OGP の主なメタタグ

OGP で使用される主なメタタグは以下の通りです:

Next.js での OGP 実装方法

1. 静的な OGP の設定

Next.js では、 opengraph-image.(jpg|jpeg|png|gif) というファイルを任意のルートに配置することで、静的な OGP を設定することができます。Metadata に自動的に記述されます。

<head>

該当のルートに配置されていない場合は、上位のルートに配置されているファイルが使用されます。

2. 動的な OGP の生成

App Router では、@vercel/og が含まれているため、next/og を利用することで、簡単に OGP を生成することができます。

2.1 基本的な実装

/posts/[slug]/og.png/route.tsx のようなルートで生成することにより、https://example.com/posts/slug/og.png で OGP を取得することが出来ます。

今回の構成では、/api/og などのエッジ関数を利用せずに、ビルド時に OGP を生成することができます。

src/app/posts/[slug]/og.png/route.tsx

2.2 フォントの読み込み

日本語を含む OGP 画像を生成する場合、フォントの明示的な指定が必要です。以下は、Google Fonts からサブセット化したフォントを読み込む実装例です。

src/app/posts/[slug]/og.png/route.tsx

2.3 生成した OGP の適用

生成した OGP 画像をサイトに反映するには、以下のようにメタデータを設定します。

src/app/posts/[slug]/page.tsx

3. 実装時の注意点

  1. フォントの読み込み

    • 日本語を含む場合は、必ずフォントを明示的に指定する必要があります
    • アルファベットのみの際も、私の環境ではエラーが発生しました
    • Google Fonts のサブセット化機能を活用することで、必要な文字のみを読み込むことができます
  2. 画像サイズ

    • OGP 画像の推奨サイズは 1200x630 ピクセルです
    • SNS によっては、1:1にクロップされる場合が多いため、中心の 630x630 に伝えたい内容を配置することを推奨します
  3. ビルド時の生成

    • dynamic = 'force-static' を指定することで、ビルド時に静的に生成されます
    • generateStaticParams で生成するパラメータを指定する必要があります
  4. エラーハンドリング

    • フォントの読み込みや画像生成時のエラーを適切に処理する必要があります
  5. style の指定

    • divdisplay は必ず flex | block | none のいずれかを明示する必要があります
  6. メタデータの設定

    • メタデータの設定は、generateMetadata で行うことができます
    • 設定のし忘れや、内容の不備があると、SEO に悪影響を与える可能性があります

まとめ

Next.js App Router では、ルーティングに少し工夫をすることで、SSG ビルド時に動的な OGP 画像を生成することができます。

日本語フォントの適切な読み込みと、メタデータの設定に注意を払い、適切な画像サイズを設定することで、より良い OGP 画像を生成することができます。

リンク

参考にした記事

本サイトの OGP