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, проще проверить вне приложения.
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.
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 с явно заданными размерами.
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.
Публикуйте изображение и метаданные вместе
Создайте файл, скопируйте фрагмент Next.js и проверьте развёртывание.
