lottie
Seungjun's blog
blog
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 객체를 반환해야 한다.