Next.js로 프로젝트를 개발했다면, Vercel과 같은 클라우드 플랫폼에 도메인 배포 후, 외부 사용자들이 구글이나 네이버 검색을 통해 해당 사이트를 조회하고, 쉽게 접근할 수 있도록 잘 노출시키는 것이 중요하다.

이번 게시글의 목적은 Next.js으로 개발된 웹 서비스를 구글(Google) 검색에 제대로 노출시킬 수 있도록 하는 것이다. 따라서 이하의 내용은 배포가 선행되었음을 가정하고 진행한다.

시작하기

1


2

3 4

방법 #1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang='en'>
      <head>
        <link rel='icon' href='/images/cube-logo.png' />
        /* 이곳에 붙여넣기 */
        <meta
          name='google-site-verification'
          content='isENqoS-vEJn7rno17EZWfhCbHez5XsiJAMitll0aE4'
        />
      </head>
      <body className='text-sm'>...</body>
    </html>
  );
}


나아가 검색 결과로 노출 시에 서비스에 대한 구체적인 설명을 추가하려면, 하단과 같이 metadata를 수정하면 된다. 그리고, meta 태그를 직접 추가하는 방법 대신 metadata 객체 내에서 verification 항목을 추가하여 관리하는 방법도 가능하다.

위 방법의 장점은 네이버 서치어드바이저 같은 타검색 엔진 최적화 도구에 개발한 서비스를 추가적으로 등록할 때 객체로써 직관적 관리가 가능하다는 점이라 생각한다.

방법 #2

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
export const metadata = {
  title: '서비스명',
  description: '이 서비스는 ~~~~~~를 목표로 합니다',
  keywords: ['example', '성열암', '블로그', '성열암 블로그', '개발 블로그'],
  authors: [{ name: '성열암', url: 'https://example.vercel.com/' }],
  openGraph: {
    title: '서비스명 - 성열암',
    description: '이 서비스는 ~~~~~~를 목표로 합니다',
    url: 'https://example.vercel.com/',
    siteName: 'Example',
    images: [
      {
        url: 'https://example/images/cube-logo.png',
        width: 800,
        height: 600,
        alt: '서비스 로고',
      },
    ],
    locale: 'ko_KR',
    type: 'website',
  },
  verification: {
    /* google의 value로써 복사했던 meta 태그 내 content 속성 값을 이곳에 붙여넣기 */
    google: 'is~~~~~~~~~~~여기에 붙여넣기~~~~~~~~~~~~~~',
    other: {
      'naver-site-verification': 'naver search advisor 인증 코드 입력란',
    },
  },
};


1
2
3
4
5
6
7
8
9
/** @type {import('next').NextConfig} */

const withBundleAnalyzer = require('@next/bundle-analyzer')({
  enabled: process.env.ANALYZE === 'true',
});

const nextConfig = { ... };

module.exports = withBundleAnalyzer(nextConfig);


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/** @type {import('next-sitemap').IConfig} */
const config = {
  siteUrl: process.env.NEXT_PUBLIC_SITE_URL, // 사이트의 기본 URL
  generateRobotsTxt: true, // robots.txt 파일 생성 여부
  sitemapSize: 7000, // 각 sitemap의 최대 URL 수
  changefreq: 'daily', // 검색 엔진에 대한 URL 업데이트 빈도
  priority: 0.7, // 기본 URL 우선 순위
  // exclude는 sitemap.xml 생성 시 제외할 URL를 포함 (e.g., private page)
  exclude: [
    '*/register*', // 'register'가 포함된 모든 경로 제외
    '*/edit*', // 'edit'이 포함된 모든 경로 제외
    '*/mypage*', // 'mypage'이 포함된 모든 경로 제외
  ],
};

module.exports = config;
1
npm run build # 또는 yarn build

5

(예시 이미지)

sitemap-0.yml과 같이 숫자가 붙은 sitemap 파일은 사이트맵 분할 기능에 의해 생성된 분할된 사이트맵 파일 중 하나이다.

6

7


8


9 10 11


12


13


14

(위 방법으로 등록했던 웹 서비스)


이렇게 다른 서비스 및 개인 개발 블로그의 포스트 또한 구글 검색에 노출시킬 수 있다.

15


여담으로.. 대학 후배 중 한 분께서 검색 중에 우연히 위 게시글을 접해 신기했다는 연락을 주어 이렇게 게시글로 작성하게 되었다.

velog나 티스토리의 경우 게시글 작성 시 자동으로 구글에서 크롤링되는 것으로 알고 있지만, 일반적인 웹 페이지의 경우에는 그렇지 않으므로, 위와 같은 등록 절차가 있어야 구글과 같은 검색 엔진에 서비스를 노출시킬 수 있는 것 같다.

서비스를 잘 만드는 것과 더불어 잘 홍보하는 것 또한 매우 중요한 과정이므로, 개발했던 여러 서비스들을 한번 등록해 보길 바란다.