Next.js 블로그 만들기 — 검색엔진 등록 4종 완전 정복
블로그를 만들었는데 검색이 안 된다
블로그를 배포하고 며칠 뒤 구글에서 사이트 이름을 검색해봤다. 결과가 없다. 당연하다. 검색엔진은 새로 생긴 사이트를 자동으로 찾아주지 않는다.
검색에 노출되려면 직접 등록해야 한다. 주요 검색엔진 4곳에 등록하는 과정을 정리했다.
| 검색엔진 | 서비스명 | URL |
|---|---|---|
| Search Console | search.google.com/search-console | |
| Bing | Webmaster Tools | bing.com/webmasters |
| Naver | 서치어드바이저 | searchadvisor.naver.com |
| Daum | 검색등록 | register.search.daum.net |
사전 준비: sitemap.xml과 RSS 피드
검색엔진에 등록할 때 공통적으로 필요한 게 두 가지 있다.
sitemap.xml
사이트의 모든 페이지 목록을 알려주는 파일이다. 이전 글(Cloudflare Pages로 이전하기)에서 빌드 시 자동 생성하도록 구성했다.
https://tera-log.pages.dev/sitemap.xml
RSS 피드 (feed.xml)
블로그 포스트를 구독할 수 있는 피드다. Next.js의 Route Handler로 생성했다.
import { getAllPostMetas } from '@/lib/posts'
import { SITE_CONFIG } from '@/lib/constants'
export const dynamic = 'force-static'
function escapeXml(str: string): string {
return str
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''')
}
export function GET() {
const posts = getAllPostMetas()
const items = posts
.map(
(post) => ` <item>
<title>${escapeXml(post.title)}</title>
<link>${SITE_CONFIG.url}/posts/${post.slug}</link>
<guid>${SITE_CONFIG.url}/posts/${post.slug}</guid>
<description>${escapeXml(post.description)}</description>
<pubDate>${new Date(post.date).toUTCString()}</pubDate>
<category>${escapeXml(post.category)}</category>
</item>`
)
.join('\n')
const xml = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>${escapeXml(SITE_CONFIG.title)}</title>
<link>${SITE_CONFIG.url}</link>
<description>${escapeXml(SITE_CONFIG.description)}</description>
<language>ko</language>
<lastBuildDate>${new Date().toUTCString()}</lastBuildDate>
<atom:link href="${SITE_CONFIG.url}/feed.xml" rel="self" type="application/rss+xml"/>
${items}
</channel>
</rss>`
return new Response(xml, {
headers: { 'Content-Type': 'application/xml; charset=utf-8' },
})
}output: 'export' 환경에서는 export const dynamic = 'force-static'이 필수다. 없으면 빌드 시 에러가 난다.
빌드하면 out/feed.xml/index.html로 생성되고, Cloudflare Pages에서 https://tera-log.pages.dev/feed.xml로 접근할 수 있다.
robots.txt
검색엔진 크롤러에게 sitemap 위치를 알려주는 역할도 한다. public/ 디렉토리에 넣으면 된다.
User-agent: *
Allow: /
Sitemap: https://tera-log.pages.dev/sitemap.xml1. Google Search Console
가장 중요한 검색엔진. 전 세계 검색 점유율 90% 이상이다.
사이트 등록
- Search Console 접속
- URL 접두어 방식 선택 →
https://tera-log.pages.dev입력 - 소유권 확인 —
*.pages.dev도메인은 DNS 인증이 불가하므로 HTML 파일 업로드 방식을 사용한다
구글이 제공하는 googleXXXXXXX.html 파일을 public/ 디렉토리에 넣고 배포하면 인증이 완료된다.
사이트 이름 문제
등록 후 검색 결과에서 사이트 이름이 Cloudflare로 표시될 수 있다. pages.dev 도메인 때문에 구글이 Cloudflare 사이트로 오인하는 것이다.
이를 해결하기 위해 두 가지를 추가했다.
메타데이터 보강:
export const metadata: Metadata = {
// ...
applicationName: SITE_CONFIG.title, // 'teralog'
openGraph: {
// ...
siteName: SITE_CONFIG.title,
},
}JSON-LD 구조화 데이터:
<head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
'@context': 'https://schema.org',
'@type': 'WebSite',
name: SITE_CONFIG.title,
url: SITE_CONFIG.url,
}),
}}
/>
</head>applicationName은 HTML <meta> 태그로 렌더링되고, JSON-LD는 구글이 사이트 이름을 판별할 때 직접적으로 참고하는 구조화 데이터다. 두 가지를 함께 설정하면 구글이 사이트 이름을 올바르게 인식할 확률이 높아진다.
sitemap 제출
Search Console > Sitemaps 메뉴에서 sitemap.xml을 제출한다. 구글이 크롤링하고 인덱싱하는 데 며칠에서 몇 주 걸릴 수 있다.
2. Bing Webmaster Tools
Bing은 점유율이 낮지만, Microsoft Edge 기본 검색엔진이고 ChatGPT의 웹 검색에도 Bing 인덱스가 사용된다. 등록해두면 손해 볼 것 없다.
사이트 등록 및 인증
- Bing Webmaster Tools 접속
- URL을 수동으로 추가 선택 →
https://tera-log.pages.dev입력 - 인증 방식: HTML 메타 태그 선택
Bing이 제공하는 메타 태그를 Next.js Metadata API로 추가한다:
export const metadata: Metadata = {
// ...
verification: {
other: {
'msvalidate.01': '인증코드',
},
},
}빌드하면 <meta name="msvalidate.01" content="인증코드" />가 <head>에 렌더링된다.
sitemap과 RSS 제출
Bing Webmaster Tools에서 두 가지를 제출할 수 있다:
- Sitemaps 메뉴:
https://tera-log.pages.dev/sitemap.xml - RSS 제출:
https://tera-log.pages.dev/feed.xml
3. 네이버 서치어드바이저
국내 검색 점유율 1위. 한국어 블로그라면 반드시 등록해야 한다.
사이트 등록 및 인증
- 서치어드바이저 접속
- 웹마스터 도구 > 사이트 관리 > 사이트 등록
https://tera-log.pages.dev입력- 인증 방식: HTML 태그 선택
네이버가 제공하는 인증 메타 태그를 추가한다:
export const metadata: Metadata = {
// ...
verification: {
other: {
'naver-site-verification': '인증코드',
'msvalidate.01': '인증코드',
},
},
}sitemap과 RSS 제출
인증 완료 후 요청 메뉴에서:
- 사이트맵 제출:
https://tera-log.pages.dev/sitemap.xml - RSS 제출:
https://tera-log.pages.dev/feed.xml
네이버는 RSS 피드를 통해 새 글을 더 빠르게 수집하므로, sitemap과 RSS 모두 제출하는 것이 좋다.
4. 다음 검색등록
카카오(다음) 검색에도 노출되려면 별도 등록이 필요하다. 다른 검색엔진과 달리 인증 과정이 없어서 가장 간단하다.
등록 방법
- 다음 검색등록 접속
- 블로그 등록 선택
- URL 입력:
https://tera-log.pages.dev - 제출
별도의 소유권 인증이나 메타 태그 추가가 필요 없다. 신청 후 검수를 거쳐 등록된다.
최종 layout.tsx 메타데이터
4개 검색엔진 등록을 위해 추가한 메타데이터를 정리하면 이렇다:
export const metadata: Metadata = {
title: {
default: SITE_CONFIG.title,
template: `%s | ${SITE_CONFIG.title}`,
},
description: SITE_CONFIG.description,
applicationName: SITE_CONFIG.title,
icons: {
icon: `${BASE_PATH}/images/favicon.png`,
},
openGraph: {
title: SITE_CONFIG.title,
description: SITE_CONFIG.description,
type: 'website',
locale: 'ko_KR',
siteName: SITE_CONFIG.title,
url: SITE_CONFIG.url,
},
verification: {
other: {
'naver-site-verification': '인증코드',
'msvalidate.01': '인증코드',
},
},
}| 속성 | 용도 |
|---|---|
applicationName | 구글 사이트 이름 인식 |
openGraph.siteName | OG 메타에서 사이트명 명시 |
verification.other | 네이버, Bing 소유권 인증 |
여기에 <head>의 JSON-LD 구조화 데이터까지 더하면, 검색엔진이 사이트를 정확하게 식별할 수 있다.
등록 후 체크리스트
등록만 하면 끝이 아니다. 며칠 후 다시 돌아와서 확인해야 할 것들이 있다.
- Google: Search Console > 실적 탭에서 노출 수 확인. URL 검사로 개별 페이지 인덱싱 상태 확인
- Bing: Webmaster Tools > 사이트 활동에서 크롤링 상태 확인
- 네이버: 서치어드바이저 > 콘텐츠 확산 > 수집 현황에서 페이지 수집 여부 확인
- 다음:
site:tera-log.pages.dev로 검색하여 인덱싱 여부 확인
구글은 보통 며칠이면 인덱싱되지만, 네이버와 다음은 수 주 이상 걸릴 수 있다. 새 글을 올릴 때마다 Search Console의 URL 검사에서 색인 생성 요청을 하면 반영이 빨라진다.
관심 있을 만한 포스트
Next.js 블로그 만들기 — 정적 블로그에 맞춤 추천 포스트 기능 추가
localStorage에 조회 이력을 저장하고, 태그 가중치 스코어링으로 정적 블로그에서도 개인화 추천을 구현하는 방법.
Next.js 블로그 만들기 — GitHub Pages에서 Cloudflare Pages로 이전하기
GitHub Pages의 한계를 넘어 Cloudflare Pages로 블로그를 이전한 과정. 비교, 설정, SEO까지 한 번에 정리.
Next.js 블로그 만들기 — 정적 블로그에 검색 기능 추가
빌드 타임 검색 인덱스 생성과 클라이언트 사이드 필터링으로 정적 블로그에 검색 기능을 구현하기. Cmd+K 단축키, 오버레이 UI까지.
Next.js 블로그 만들기 — 카드 그리드와 포스트 상세 페이지
Velog 스타일 카드 UI와 MDX 렌더링 상세 페이지 구현. 반응형 그리드, SEO 메타데이터, 정적 사이트 생성까지.
Next.js 15로 개인 블로그 만들기 — 프로젝트 셋업
왜 직접 블로그를 만들었는지, 기술 스택 선정 이유와 프로젝트 초기 구성까지. Next.js 15 + Tailwind CSS v4 + MDX 기반 블로그의 시작.
Bun vs Node.js vs Deno — 뭐가 다른지, 그래서 뭘 쓰면 좋은지 (2026 기준)
런타임 3대장 비교: 호환성(Node), 속도/번들(Bun), 올인원/보안(Deno). 팀/프로덕트 상황별 선택 기준과 체크리스트까지 정리.
번들러(Bundle)란 뭐고, 왜 필요할까? — 요즘 번들러/빌드 툴 비교 가이드
번들러의 역할(모듈/의존성/트랜스파일/최적화)을 쉽게 설명하고, Vite·Rollup·esbuild·Webpack·Rspack·Turbopack 같은 도구를 상황별로 비교합니다.
Claude Code 에이전트 팀 — 여러 AI가 협업하는 새로운 방식
Claude Code의 실험적 기능인 에이전트 팀을 정리했다. 여러 Claude 인스턴스가 리더-팀원 구조로 작업을 분담하고, 서로 메시지를 주고받으며 병렬로 협업하는 구조다.