일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- html
- 참조자료형
- JavaScript
- WAI-ARIA
- Router
- JS
- 코드스테이츠
- Prototype
- CDD
- frontend
- condestates
- 원시자료형
- codestates
- 회고
- 자바스크립트
- 프론트엔드
- 호스트인식
- 객체지향
- 계산기
- self reliance
- OOP
- Javascript #코드스테이츠
- cta button
- css
- 코드스테이스
- 개발자
- codestate
- cta버튼
- css in js
- 프로토타입
- Today
- Total
jh.nrtv
Next.js 13에 metadata 설정하기 본문
Next.js 13.4.1 로 진행중인 프로젝트에서 메타데이터를 설정하고자 한다.
먼저 'Next.js에 메타데이터 설정하기' 등의 키워드로 검색하면 가장 보편적으로 소개하는 방법이 있다.
✅ 가장 보편적인 방법 - import <Head> from 'next/head'
React.js의 CRA로 만든 앱은 index.html이 존재하기 때문에 <head> 태그 내에서 <title> 태그를 바꿔야 한다.
하지만 Next.js의 create-next-app의 경우에는 index.html 파일이 존재하지 않는데
따라서 조금 다른 방법으로 <head>태그를 조작해야 한다.
/pages/_app.js
import Head from "next/head";
function MyApp({ Component, pageProps }) {
return (
<>
{/* 메타데이터 변경 */}
<Head>
<title>프로젝트 이름 </title>
<meta name="description" content="이 프로젝트는 ~~한 프로젝트 입니다." />
<link rel="shortcut icon" href="/favicon.ico" />
</Head>
<Component {...pageProps} />
</>
);
}
export default MyApp;
위와 같이 'next/head'에서 <Head>태그를 임포트 하고
그 안에서 <title> 이나 <meta>태그를 조작한다.
_app.js 말고도 각각의 page.js 에서도 위의 방법으로 변경이 가능하다고 한다.
하지만 next.js 13버전 이상을 사용하는 나에게는 이 방법이 작동되지 않았다.
✅ Next 13.xx에 Static metadata 적용 - import { Metadatat } from 'next'
더 찾아보니 어떤 게시글에서 13 버전 이상부터 새로운 메타데이터 방식이 도입되었다고 한다.
그 형식은 아래와 같다.
import { Metadata } from "next";
//! next.js 13 부터 기본적으로 metadata가 아래와 같은 형식으로 포함되어있음
export const metadata: Metadata = {
title: "프로젝트 이름 ",
description: "프로젝트 설명 ",
};
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
...
<body className={inter.className}>
<div className="wrap">
<Header />
<div className="page">{children}</div>
<Footer />
</div>
</body>
</html>
);
}
기본적인 사용법은 layout.tsx나 page.tsx 등의 파일에서 Metadata Object를 'next'에서 임포트 후 사용한다.
각 페이지의 page.tsx에서 다르게 적용한다면 메타데이터도 달라져서 SEO에 기여할 수 있다.
최초에 프로젝트를 생성하면 아래와 같은 기본 메타데이터가 layout.tsx에 포함되어 있는데 이유는 모르겠으나 아래와 같이import {Metadata} 없이 작동시켜도 정삭 작동됨을 확인할 수 있다.
export const metadata = {
title: "UpperNightProject",
description: "심야영업 카페를 모아놓은 지도입니다.",
};
✅ Next 13.xx에 Dynamic metadata 적용 - metadata생성 함수 선언하기
동적으로 메타데이터를 설정하는 것도 가능한데, 예를 들어 아래와 같이 상품 상세페이지에서 상품의 이름을 title 태그 안에 넣을 때에는
<title>Product - Camera</title>
아래와 같이 product 정보를 받은 후에 title을 설정하는 함수(generateMetadata)를 만들어서 사용하면 된다.
import { Metadata } from "next";
type Props = {
params: { productId: string };
};
export const generateMetadata = async (
props: Props
): Promise<Metadata> => {
const { params } = props
const product = await fetchProductById(params.productId)
return {
title: product.title,
};
};
참조링크
'Next.js' 카테고리의 다른 글
Next.js 프로젝트에 Quill Editor 사용하기 (0) | 2023.07.25 |
---|---|
Next.js Server Component 에서 페이지네이션 구현하기 (0) | 2023.07.22 |