metadataseonext.js
Next.js Metadata API - SEO와 소셜 미디어 최적화
✨ AI 요약
긴 글, 핵심만 먼저 — 이 글을 3줄로 정리해드려요.
조회 1
Next.js 13+ App Router에서는 metadata 객체나 generateMetadata 함수로 SEO 메타데이터를 선언적으로 관리할 수 있습니다.
이 글에서는 페이지별 메타데이터 설정과 동적 메타데이터 생성 방법을 정리합니다.
1. 정적 메타데이터
// app/about/page.tsx
export const metadata = {
title: "About Us",
description: "회사 소개 페이지입니다.",
openGraph: {
title: "About Us",
description: "회사 소개 페이지입니다.",
images: ["/og-image.jpg"],
},
twitter: {
card: "summary_large_image",
title: "About Us",
description: "회사 소개 페이지입니다.",
},
};
export default function AboutPage() {
return <div>About</div>;
}
metadata객체로 정적 메타데이터를 정의할 수 있습니다.
2. 동적 메타데이터
// app/blog/[slug]/page.tsx
export async function generateMetadata({
params,
}: {
params: Promise<{ slug: string }>;
}): Promise<Metadata> {
const { slug } = await params;
const post = await getPost(slug);
return {
title: post.title,
description: post.excerpt,
openGraph: {
title: post.title,
description: post.excerpt,
images: [post.imageUrl],
},
};
}
generateMetadata함수로 동적으로 메타데이터를 생성할 수 있습니다.
3. 루트 레이아웃 메타데이터
// app/layout.tsx
export const metadata = {
metadataBase: new URL("https://kwkang.net"),
title: {
default: "kwkang.log",
template: "%s | kwkang.log",
},
description: "개발 블로그",
openGraph: {
type: "website",
locale: "ko_KR",
url: "https://kwkang.net",
siteName: "kwkang.log",
},
};
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="ko">
<body>{children}</body>
</html>
);
}
- 루트 레이아웃에서 기본 메타데이터를 설정하고, 하위 페이지에서
template으로 확장할 수 있습니다.
4. Open Graph 이미지
export const metadata = {
openGraph: {
images: [
{
url: "/og-image.jpg",
width: 1200,
height: 630,
alt: "Page description",
},
],
},
};
- Open Graph 이미지는 1200x630 크기를 권장합니다.
5. JSON-LD 구조화된 데이터
export default function BlogPost({ post }: { post: Post }) {
const jsonLd = {
"@context": "https://schema.org",
"@type": "BlogPosting",
headline: post.title,
datePublished: post.publishedAt,
author: {
"@type": "Person",
name: "kwkang",
},
};
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
<article>{/* ... */}</article>
</>
);
}
- JSON-LD로 구조화된 데이터를 추가하면 검색 엔진이 콘텐츠를 더 잘 이해할 수 있습니다.
6. 실무 팁
- 기본값 설정: 루트 레이아웃에서 기본 메타데이터 설정
- 동적 생성: 블로그 포스트, 제품 페이지 등은
generateMetadata사용 - 이미지 최적화: OG 이미지는 적절한 크기로 최적화
- 검증: Google Search Console, Facebook Debugger로 메타데이터 확인
Next.js Metadata API는 "SEO를 선언적으로 관리한다"는 철학을 따릅니다.
각 페이지에서 필요한 메타데이터를 명확하게 정의하면, 검색 엔진과 소셜 미디어에서 더 나은 노출을 얻을 수 있습니다.