| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 디자인 패턴
- 쿼리
- 정리
- java
- 코드테스트
- 서버
- jsp
- 자바
- 코드 테스트
- oracle
- 오라클
- JavaScript
- 백엔드
- 스프링
- 미니정리
- 프런트엔드
- spring
- node.js
- BACK-END
- 데이터베이스
- 자바스크립트
- 프로그래머스
- SQL
- 프론트엔드
- MySQL
- jpa
- Next.js
- web
- 알고리즘
- 스프링부트
- Today
- Total
참치코더의 꿈 메모장
Next.js / 정적 메타 데이터 , 동적 메타 데이터 선언 방법 본문

메타 데이터를 사용하는 이유....
1. SEO(검색 엔진 최적화)
- 구글, 네이버 같은 검색 엔진은 페이지 내용을 크롤링할 때, <title>과 <meta description>을 참고한다.
- 적절한 메타데이터를 사용하면, 검색 결과에 표시되는 내용을 제어할 수 있다.
- 적절한 조작을 가하면 검색 시 클릭률(CTR) 증가, 검색 랭킹 개선이 가능하다.
|
1
2
|
<title>Next.js 배우기</title>
<meta name="description" content="Next.js 정적/동적 데이터 활용법"/>
|
cs |
2. SNS 공유 최적화 (Open Graph, Twitter Cards)
- 페이스북, 트위터, 카카오톡 같은 SNS에서 페이지를 공유할 때 메타데이터를 참고한다.
- 이미지, 제목, 설명을 동적으로 바꾸면 공유 카드 미리보기를 컨트롤 할 수 있다.
- 페이지 공유 시 보기 좋은 카드, 클릭 유도할 수 있는 카드를 해당 데이터를 이용해 만들 수 있다.
|
1
2
3
|
<title>Next.js 배우기</title>
<meta name="description" content="Next.js 정적/동적 데이터 활용법"/>
<meta property="og:image" content="https://example.com/thumnail.png"/>
|
cs |
3. 접근성 & 표준 준수
- <meta charset="UTF-8"> 처럼 문자 인코딩 설정은 한글/영문 혼합 페이지에서 문자 깨짐 방지.
- 표준 메타데이터를 사용하면 크롤러, 스크린리더 등 접근성에 도움을 준다.
자 그럼 웹 크롤러 등이 사이트의 어떤 부분을 크롤링해도 되는지 또는 안되는지 명시하는 규칙을
가지는 파일을 뭐라고 할까?
해당 파일을 robots.txt 라고 한다.
4. robots.txt?
- 검색 엔진 로봇(크롤러)가 웹사이트를 방문할 때 어떤 페이지를 크롤링할지, 어떤 페이지를 제외할지
알려주는 텍스트 파일이다.
- 웹사이트 루트 디렉토리에 위치해야 한다.
크롤러 기본 구조(.txt)
User-agent : [크롤러 이름] -> 적용할 크롤러, *은 모든 크롤러,
Disallow : [접근 금지할 경로] -> 크롤러 금지 경로,
Allow : [허용할 경로] -> 크롤링 허용 경로
Sitemap : [사이트맵 URL] -> 사이트맵 URL을 알려줘 크롤링 효율 향상
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// 만약 robots.txt 파일을 동적으로 생성하고 싶다면, app 디렉터리의 최상위 경로에 robots.ts 파일을 생성하고
// robots() 함수를 디폴트 익스포트 하면 된다.
// 프로젝트 전체에서 단 1개의 robots.txt만 만들어진다.
import {MetadataRoute} from 'next';
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: '*',
allow: '/',
disallow: '/private/'
},
sitemap: 'https://www.example.com/sitemap.xml',
// sitemap만 크롤러가 탐색하는게 아닌 해당 우선 참고 대상이 된다.(더 빠른 크롤링 가능)
};
}
|
cs |
정적 메타데이터 (Static Metadata)
- 정적 메타데이터는 빌드 시점에 고정된 메타 정보이다.
- 보통 블로그나 사이트 전체에 공통으로 들어가는 사이트 이름, 기본 설명 등이 이에 해당된다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import type {metadata} from 'next';
interface PageProps {
params: Promise<{postId: string}>;
}
export async function generateMetadata(props: PageProps): Promise<Metadata>{
const {params} = props;
const {postId} = await params;
return {
title: `Title (Post ID: ${postId})`,
description: `Description (Post ID: ${postId})`,
}
}
|
cs |
동적 메타데이터 (Dynamic Metadata)
- 동적 메타데이터는 페이지 요청이나 데이터에 따라 변하는 메타 정보이다.
- 블로그 글 제목, 설명, 이미지 등을 글 내용에 따라 동적으로 설정한다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import {notFound} from 'next/navigation';
interface Post {
id: string;
title: string;
description: string;
}
async function getPost(id: string): Promise<Post | null> {
const posts = [
{ id: '1', title: 'Next.js 배우기', description: 'Next.js를 배우는 방법'},
{ id: '2', title: 'React 배우기', description: 'React를 배우는 방법'},
];
return posts.find(p => p.id === id) || null;
}
// 동적 메타데이터
export async function generateMetadata({ params } : { params: {id: string } }) {
const post = await getPost(params.id);
if (!post) return {title: 'Not Found'};
return {
title: post.title,
description: post.description,
};
}
// 페이지 컴포넌트
export default async function PostPage({ params }: { params: { id: string } }) {
const post = await getPost(params.id);
if (!post) return notFound();
return <div>{post.title}</div>;
}
|
cs |
'Next.js' 카테고리의 다른 글
| Next.js / API 서버 호출 및 동시 호출 방법 정리(코드 위주) (0) | 2025.10.05 |
|---|---|
| Next.js / 기본적인 파일 기반 라우팅(폴더 구조), CSR VS SSR, 메타데이터 정리 (0) | 2025.10.02 |
| Next.js / 앱 라우터의 라우트 핸들러 미니정리 (0) | 2025.09.30 |
| Next.js / 페이지, 레이아웃, 템플릿 사용법 정리 (0) | 2025.09.25 |
| Next.js / 라우팅 기본 정리 (ver 12- , ver13+) 비교 (0) | 2025.09.20 |