본문 바로가기

Study/Next

optimization with <head> & <image>

head & meta

html 페이지는 크게 <head>와 <body> 부분으로 나눌 수 있다. 이 때 <head>에는 페이지 자체에 대한 설명을 담을 수 있다.

  • head 태그의 자식 요소로 여러 meta 태그가 존재할 수 있다.
  • 검색 엔진 크롤러는 meta 태그의 title, desctiption과 같은 정보를 수집한다.
  • 따라서 SEO를 위해서는 head 태그를 제대로 구성해야 한다.

how to add <head>?

import Head from 'next/head'
import Layout from '../components/layout/layout'
import '../styles/globals.css'

function MyApp({ Component, pageProps }) {
  return (
    <Layout>
      <Head>
        <title>Next.js Events App</title>
        <meta name="description" content="find events whatever you want" />
      </Head>
      <Component {...pageProps} />
    </Layout>
  )
}

export default MyApp

 

  1. Head 태그는 jsx 코드 상에 위치하기만 하면 된다. 어디에 코드를 위치시켜야 하는지는 관계 없다.
  2. main page 뿐만 아니라, 모든 페이지 컴포넌트에서 Head 태그를 사용할 수 있다.
  3. jsx 문법을 이용해서 Head 컨텐츠를 dynamic value로 설정할 수 있다.
  4. 모든 페이지에 공통적으로 적용할 Head는 _app.js 파일에서 return 할 수 있다.
    • next.js는 하나의 컴포넌트에 존재할 수 있는 여러 개의 Head를 하나로 병합하고, 이 과정에서 생길 수 있는 충돌도 해결해 준다.

_document.js로 html 전체 틀 구성하기

image(공식문서)

이미지 파일을 최적화 하지 않은 상태로 network 탭을 확인해 보자. 페이지를 hard refresh 하면, 이미지 파일의 size와 확장자가 원본과 같은 것을 확인할 수 있다. 이미지 size가 크면 사용자 경험을 저해할 수 있으며, 브라우저마다 지원하는 확장자가 다를 수 있기 때문에 이미지 파일을 최적화 할 필요가 있다.

+) hard refresh | 새로고침 버튼을 마우스 우클릭하면, 캐시를 지우고 hard refresh 할 수 있다.

next.js가 제공하는 image 모듈을 이용하면, 간편하게 이미지를 최적화할 수 있다.

 

  1. request가 발생하면, 요청한 사용자의 OS와 device 크기에 맞는 이미지를 반환한다.
  2. 인간이 구분할 수 없는 수준에서 원본 이미지의 quality를 낮추고, 파일 크기를 줄인다.
  3. 뿐만 아니라 사용자의 브라우저에 최적화된 확장자의 이미지를 반환한다.
  4. 이 때 반환하는 이미지를 cache에 저장하고, 비슷한 크기의 device에서 request가 발생했을 때 재사용 한다.

 

import Image from "next/image"

<Image src={url} alt={description} width={100} height={100}/>

 

  1. image 파일을 직접 import 하는 것이 아니라면, width와 height 속성을 전달해 주어야 한다. ⇒ 이 때 width와 height은 사용자의 브라우저에서 이미지를 fetch 할 때의 크기일 뿐이고, 최종적인 스타일링은 CSS에 의해 결정된다.
  2. 그 외에도 다양한 속성 살펴보기

'Study > Next' 카테고리의 다른 글

API route  (0) 2022.10.20
what is _document.js?  (1) 2022.10.18
client side data fetching  (0) 2022.10.17
pre-rendering  (0) 2022.10.14
how useRouter works  (0) 2022.10.09