cheolung.dev

SEO 적용하기 (검색엔진 최적화)

NextJS
2024년 3월 3일
/thumbnail/nextjs.png

목차

1. Metadata 활용

관련 공식문서 내용

정적 메타데이터

layout.tsx
export const metadata: Metadata = {
  title: 'cheolung\'s blog',
  description: '개봘 관련 이야기를 나누는 블로그입니다.',
};
  • layout.tsx or page.tsx에 정의

동적 메타 데이터

/app/posts/[..slug]/page.tsx
// ...
import { Metadata } from 'next';
 
// seo
export const generateMetadata = ({params}): Metadata => {
  const post = allPosts.find(
    (p) => p._raw.flattenedPath === params.slug.join('/')
  );
  return { 
    title: post.title,
    category: post.category,
    description: post.description,
    openGraph: {
      images: [{
        url: post.thumbnail,
      }]
    }
  }
}
 
// ...
  • 동적 값이 필요한 메타데이터의 경우 generateMetadata 함수를 활용한다.

  • 블로그 게시물 상세페이지에 활용하였다.

  • title : 사용자가 검색 결과에서 웹사이트를 입력하기 위해 클릭할 때 표시되는 내용

  • description : 제목에 있는 정보 보완, 구글에 따르면 해당 요소는 순위 지정 목적으로 고려되지 않지만 검색 결과에 대한 클릭률에 영향을 미칠 수 있다고 한다.

  • openGraph : 웹 사이트가 소셜 미디어에 공유될 때 미리보기에 사용되는 메타 데이터를 정의

    ex) 카카오톡으로 공유를 할 때 페이지의 미리보기가 카드 형식 처럼 표시된다.

  • 페이지를 들어가보면 메타 태그가 생성된 것을 확인해볼 수 있다. metadata

2. sitemap

관련 공식문서 내용

검색엔진 크롤러가 사이트를 보다 효율적으로 색인화 할 수 있게 해준다.

/app/sitemap.ts
import { allPosts } from 'contentlayer/generated';
import { MetadataRoute } from 'next';
 
const postSiteMap: MetadataRoute.Sitemap = allPosts.map((post) => {
  return {
    url: `https://cheolung.dev/posts/${post._raw.flattenedPath}`,
    lastModified: new Date(),
    changeFrequency: 'daily',
    priority: 1,
  };
});
 
export default function sitemap(): MetadataRoute.Sitemap {
  return [
    {
      url: 'https://cheolung.dev',
      lastModified: new Date(),
      changeFrequency: 'daily',
      priority: 1,
    },
    {
      url: 'https://cheolung.dev/posts',
      lastModified: new Date(),
      changeFrequency: 'daily',
      priority: 0.9,
    },
    {
      url: 'https://cheolung.dev/algorithm',
      lastModified: new Date(),
      changeFrequency: 'daily',
      priority: 0.5,
    },
    ...postSiteMap,
  ];
}
  • 동적 url의 경우 contentlayer에 있는 게시물의 경로정보를 가져와서 직접 추가해주었다.
  • url/sitemap.xml 경로에 파일이 생성된 것을 확인할 수 있다. sitemap

3. robots.txt

관련 공식문서 내용

검색 엔진 크롤러에게 내 사이트에 액세스할 수 있는 url을 알려주는 용도

/app/robots.ts
import { MetadataRoute } from 'next'
 
export default function robots(): MetadataRoute.Robots {
  return {
    rules: {
      userAgent: '*',
      allow: '/',
    //   disallow: '/private/',
    },
    sitemap: 'https://cheolung.dev/sitemap.xml',
  }
}
  • sitemap url을 추가해주자.
  • disallow의 경우에는 admin 경로 같은거 있으면 넣으면 된다.
  • url/robots.txt 경로에 파일이 생성된 것을 확인할 수 있다. robots

4. Google Search console

sitemap을 생성한 후에 크롤러와 봇들이 글들을 수집하도록 검색엔진에 사이트를 등록해줘야 한다.

Google Search Console Link

gs1 아무거나 해도 된다. 필자의 경우 도메인을 샀으므로 신규 기능을 써보겠다.

gs2 도메인은 가비아에 샀으므로 txt 유형으로 DNS 설정에 추가해주자. gs3

gs4 이렇게 하면 성공적으로 소유권 인증이 완료 된다.

이 후 URL/sitemap.xml 경로로 사이트맵을 제출한다. gs5

시간이 좀 지나면 색인이 생성되고 검색이 되는것을 확인할 수 있다.

5. Naver Search Advisor

네이버 웹 마스터 도구

네이버의 경우 소유권 확인을 위해 html 파일을 제공해주는데 이 파일을 그냥 public 폴더에 넣으면 인증 완료된다.

인증 완료 후 사이트맵 url을 추가해주자 nsa