Skip to main content

Metadata

Metadata란?

  • 웹 페이지의 정보를 정의하는 데이터
  • 주로 HTML 문서의 <head>태그 내에 위치
  • 검색 엔진 최적화(SEO), 소셜 미디어 공유, 브라우저의 탭 제목 및 기타 사용자 인터페이스 요소에서 웹페이지를 표현
(src/)app/layout.js
import { Inter } from "next/font/google";
import "./globals.css";

const inter = Inter({ subsets: ["latin"] });

export const metadata = {
title: "Create Next App",
description: "Generated by create next app",
};

export default function RootLayout({ children }) {
return (
<html lang="en">
<body className={inter.className}>{children}</body>
</html>
);
}
note

Next.js를 설치 후, app의 layout.js를 확인하면 볼 수 있는 코드이다.

export const metadata = {
title: "Create Next App",
description: "Generated by create next app",
};

위와 같이 layout.js 혹은 page.js에서 정적 metadata를 설정할 수 있다.

Metadata 설정

정적 Metadata 설정

  • metadata변수를 이용하여 직접 값을 입력
(src/)app/page.js
import Link from "next/link";

export default function Home() {
return <Link href="/info">페이지 이동</Link>;
}
(src/)app/layout.js
import "./globals.css";

export const metadata = {
title: "Create Next App",
description: "Generated by create next app",
};

export default function RootLayout({ children }) {
return (
<html lang="en">
<body style={{ width: "100vw", height: "100vh" }}>{children}</body>
</html>
);
}
(src/)app/info/page.js
export const metadata = {
title: "title: 정보 페이지~",
description: "description: 정보 페이지 입니다~",
};

export default function InfoPage() {
return <>정보 페이지 입니다~</>;
}
note

image

Next.js를 실행시키면 위와 같은 화면이 출력된다.
초기 metadata 중 title 값인 Create Next App이 확인된 것을 볼 수 있다.

image

app의 page.js에서 Link를 통해 info페이지에 진입했을 때의 화면이다.
info의 page.js에도 정적 metadata 변수를 생성하였다.
위와 같이 title: 정보 페이지~가 출력된 것을 확인할 수 있다.

동적 Metadata 설정

  • 웹 페이지의 콘텐츠나 사용자의 특정 요청에 따라 메타 정보를 변경해야 할 때 사용
  • Next.js에서 제공하는 generateMetadata함수를 이용하여 metadata를 동적 생성
(src/)app/page.js
import Link from "next/link";

export default function Home() {
return <Link href="/10">페이지 이동</Link>;
}
(src/)app/[slug]/page.js
export async function generateMetadata({ params }) {
const id = params.slug;
const response = await fetch(
`https://jsonplaceholder.typicode.com/todos/${id}`
);
const todo = await response.json();

return {
title: `${todo.title} - ${todo.id}`,
};
}

export default function DynamicPage({ params }) {
return <>동적 페이지: {params.slug}</>;
}
note

동적 라우팅에 해당 되는 path값으로 API 데이터의 제목을 metadata로 설정하는 코드이다.
metadata를 만들 때, metadata변수를 이용하여 정적 metadata만 만들 수 있다.
반면 generateMetadata함수를 이용하면 정적 혹은 동적인 metadata를 만들 수 있다.
metadata변수를 생성 시에 사용되었던 속성들을 generateMeta함수의 반환값으로 작성하면 된다.

동적 라우팅 경로: /1

image

동적 라우팅 경로: /10

image

위와 같이 라우팅 경로가 다를 때마다 metadata가 달라진 것을 확인