My Boundary As Much As I Experienced

Next.js의 <Head> 사용방법 (MetaData) 본문

FrontEnd/Next.js

Next.js의 <Head> 사용방법 (MetaData)

Bumang 2024. 4. 22. 11:31

예전에 사용해봤던 React Snap, React Helmet의 사용법과 유사하다.

그러나 ReactSnap이나 ReactHelmet처럼 번거로운 설정들이 필요없다는 것이 장점이다.

 

Next.js에서 Head 설정하기

우선 아래와 같이 import 시켜준다. 

import Head from "next/head";

 

전체적으로 이름을 정해주려면 우선 _app.js파일(page router) 혹은 Document파일 등에 가서 아래와 같이 지정해준다.

메타태그 또한 같이 지정가능하다. 

메타태그는 검색엔진을 검색할 때 중요한 태그가 되니 되도록이면 넣어주도록 하자. 

 <Head>
        <title>Next Events</title>
        <meta name='description' content='NextJS Events' />
        <meta name='viewport' content='initial-scale=1.0, width=device-width' />
      </Head>

 

 

그러나 페이지마다 다른 Head title 설정도 가능하다. 

Head 태그 안에다가 title / image / description, og tag 등을 넣어주면 된다.

import Head from "next/head";

import { getFeaturedEvents } from '../helpers/api-util';
import EventList from '../components/events/event-list';

function HomePage(props) {
  return (
    <div>
      <Head>
        <title>내 홈페이지</title>
        <meta name="description" content="Find a lot of great events that allow you to evolve..."/>
      </Head>
      <EventList items={props.events} />
    </div>
  );
}

 

 

동적 라우팅일 때도, props로 각기 다른 정보를 담아 <Head></Head>태그 안에서 사용할 수도 있다.

function PostDetailPage(props) {
  return (
    <Fragment>
      <Head>
        <title>{props.post.title}</title>
        <meta name='description' content={props.post.excerpt} />
      </Head>
      <PostContent post={props.post} />
    </Fragment>
  );
}

 

 

 

아직 안 해봤지만 ReactSnap이나 ReactHelmet을 같이 쓸 땐,

메타데이터를 각각의 코드에 모두 적용하는 반복이 싫어서 Tag라는 메타데이터 주입용 컴포넌트를 만들어서 관리하였다.

<Tag title={title} desc={desc} ... /> 컴포넌트 안에 원하는 메타데이터를 넣어서 사용 가능하게 딱 한 줄로 정리하였다.