メインコンテンツへ移動

Next.js 16 App Router

Next.js アプリに OG イメージを実装して検証する

静的 metadata、ルート認識 generateMetadata、または生成された opengraph-image を選択し、パブリック絶対 URL を使用して、展開された結果を検査します。

ファイルベースかコードベース metadata を慎重に選択する

固定値の場合、およびルート データによってタイトル、説明、または画像が変更される場合は、静的な metadata オブジェクト エクスポートを使用します。どちらのエクスポートも Server Components に属します。

opengraph-image という名前のファイルは、ファイルベースの metadata を提供できます。ビジュアルがルート データに依存する場合、生成された opengraph-image.tsx は ImageResponse を返すことができます。静的 metadata と generateMetadata を同じルート セグメントからエクスポートしないでください。

静的 metadata 付き metadataBase

metadataBase は相対 metadata URL を解決します。https://starterpackai.com/og/home.png のような絶対指定の公開画像 URL も示すと、アプリ外から確認しやすくなります。

tsx
import type { Metadata } from 'next'

export const metadata: Metadata = {
  metadataBase: new URL('https://starterpackai.com'),
  title: 'A clear page title',
  description: 'A concise share description',
  openGraph: {
    images: ['https://starterpackai.com/og/home.png'],
  },
}

Next.js 16 のルート認識 generateMetadata

Next.js 16 の App Router では params は Promise です。先に await params してからルート固有のデータを読み込み、generateMetadata を返します。

tsx
import type { Metadata } from 'next'

type Props = { params: Promise<{ slug: string }> }

export async function generateMetadata({ params }: Props): Promise<Metadata> {
  const { slug } = await params
  const post = await getPost(slug)

  return {
    title: post.title,
    openGraph: { images: [post.ogImageUrl] },
  }
}

動的 opengraph-image と ImageResponse

サーバー側の opengraph-image.tsx で params を await し、明示したサイズで ImageResponse を返します。

tsx
import { ImageResponse } from 'next/og'

export const size = { width: 1200, height: 630 }
export const contentType = 'image/png'

export default async function Image({
  params,
}: {
  params: Promise<{ slug: string }>
}) {
  const { slug } = await params
  return new ImageResponse(
    <div style={{ display: 'flex', padding: 80 }}>{slug}</div>,
    size
  )
}

導入検証チェックリスト

  • metadata または generateMetadata がサーバー コンポーネント ルート セグメントで実行されていることを確認します。
  • デプロイされた HTML を開き、最終的な og:title、og:description、および og:image の値を確認します。
  • 別のセッションで絶対パブリック イメージ URL を開き、イメージ応答が成功することを確認します。
  • 小さなリンクカード サイズでレンダリングされた 1200×630 構成を確認します。
  • パブリック チェッカーを実行し、キャッシュが一致しない場合はプラットフォーム固有のデバッガーを使用します。

Next.js実装ガイド

Next.jsのOG画像に関する質問

静的・動的ページでのApp Routerの主な選択肢です。

metadataとgenerateMetadataのどちらを使いますか?

固定値はmetadata、ルートデータで内容が変わる場合はgenerateMetadataを使います。

opengraph-imageファイルも使えますか?

はい。App Routerはファイルベースのメタデータに対応し、metadata APIでは明示的・動的に制御できます。

画像URLを絶対URLにする理由は?

ソーシャルクローラーはブラウザ外から取得します。公開絶対URLなら迷わず直接アクセスできます。

画像とメタデータを一緒に公開

素材を作り、Next.js用コードをコピーしてデプロイ結果を検証します。