Перейти к основному содержимому

Next.js 16 App Router

Внедрите и проверьте изображения OG в приложении Next.js.

Выберите статический metadata, generateMetadata с учетом маршрута или сгенерированный opengraph-image, используйте общедоступный абсолютный URL и проверьте развернутый результат.

Выбирайте metadata на основе файла или кода сознательно.

Используйте статический экспорт объекта metadata для фиксированных значений и generateMetadata, когда данные маршрута меняют заголовок, описание или изображение. Оба экспорта принадлежат Server Components.

Файл с именем opengraph-image может предоставлять файловый metadata. Сгенерированный opengraph-image.tsx может возвращать ImageResponse, когда визуальный элемент зависит от данных маршрута. Не экспортируйте статические metadata и generateMetadata из одного и того же сегмента маршрута.

Статический metadata с metadataBase

metadataBase разрешает относительные URL в metadata; абсолютный общедоступный URL изображения, например https://starterpackai.com/og/home.png, проще проверить вне приложения.

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'],
  },
}

generateMetadata с учетом маршрута в Next.js 16

В 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 выполните await params и верните 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 при небольшом размере карты ссылок.
  • Запустите общедоступную программу проверки metadata, а затем используйте отладчики для конкретной платформы, если кэши не совпадают.

Руководство Next.js

Вопросы об OG в Next.js

Ключевые решения App Router для статических и динамических страниц.

metadata или generateMetadata?

Используйте metadata для постоянных значений и generateMetadata, когда содержимое зависит от данных маршрута.

Можно использовать файл opengraph-image?

Да. App Router поддерживает файловые метаданные, а API metadata дают явное или динамическое управление.

Почему URL изображения должен быть абсолютным?

Социальные роботы загружают его вне вашей сессии. Публичный абсолютный URL однозначно доступен.

Публикуйте изображение и метаданные вместе

Создайте файл, скопируйте фрагмент Next.js и проверьте развёртывание.