generateMetadata
generateMetadata function
동적 메타데이터는 현재 라우트 파라미터, 외부 데이터, 부모 세그먼트의 메타데이터와 같은 동적 정보에 따라 달라진다. 이는 Metadata 객체를 반환하는 generateMetadata 함수를 export 하는 것으로 설정할 수 있다.
import { Metadata, ResolvingMetadata } from 'next'
type Props = {
params: { id: string }
searchParams: {
[key: string]:
string | string[] | undefined
}
};
export async function generateMetadata(
{ params, searchParams }: Props,
parent: ResolvingMetadata)
: Promise<Metadata> {
// read route params
const id = params.id
// fetch data
const product = await fetch('url)
.then((res) => res.json())
// optionally access and extend (rather than replace) parent metadata
const previousImages = (await parent)
.openGraph?
.images || []
return {
title: product.title,
openGraph: {
images: [
'/some-specific-page-image.jpg',
...previousImages
],
},
}}
export default function Page({ params, searchParams }: Props) {}
Parameters
generateMetadata 함수는 다음과 같은 파라미터를 받는다.
props - 현재 라우트의 매개변수를 포함하는 객체
params - 루트 세그먼트부터 generateMetadata가 호출되는 세그먼트까지의 동적 라우트 매개변수 객체를 포함하는 객체
searchParams - 현재 URL의 검색 파라미터를 포함하는 객체.
parent - 부모 라우트 세그먼트에서 해결된 메타데이터의 프로미스.
params 예시:
Route | URL | params |
---|---|---|
app/shop/[slug]/page.js | /shop/1 | { slug: '1' } |
app/shop/[tag]/[item]/page.js | /shop/1/2 | { tag: '1', item: '2' } |
app/shop/[...slug]/page.js | /shop/1/2 | { slug: ['1', '2'] } |
searchParams 예시:
URL | searchParams |
---|---|
/shop?a=1 | { a: '1' } |
/shop?a=1&b=2 | { a: '1', b: '2' } |
/shop?a=1&a=2 | { a: ['1', '2'] } |
Returns
generateMetadata는 하나 이상의 메타데이터 필드를 포함하는 Metadata 객체를 반환해야 한다.