중급GoogleNaver

XML 사이트맵 전략: 설계부터 Search Console 제출까지

핵심 요약 (TL;DR)

XML 사이트맵의 구조·우선순위 설정·인덱스 사이트맵·동적 생성 방법과 Google Search Console·네이버 서치어드바이저 제출 절차를 다룹니다.

읽기 14 2025-03-22

XML 사이트맵이란 무엇이며 왜 필요한가

XML 사이트맵(Sitemap)은 검색엔진이 사이트의 모든 중요한 URL을 빠르게 발견하고 색인할 수 있도록 URL 목록을 구조화된 형식으로 제공하는 파일입니다. Google 공식 문서에 따르면, 다음 경우에 사이트맵이 특히 중요합니다:

  • 사이트 규모가 크거나 (500페이지 이상) 새로 생성된 경우
  • 내부 링크 구조가 빈약해 크롤러가 모든 페이지를 발견하기 어려운 경우
  • 새로 발간된 콘텐츠를 빠르게 색인받고 싶은 경우
  • 비디오·이미지·뉴스 같은 특수 콘텐츠를 SERP에서 노출시키고 싶은 경우

주의: 사이트맵에 포함한다고 해서 색인이 보장되지는 않습니다. 사이트맵은 크롤링 "힌트"이며, 최종 색인 여부는 구글이 콘텐츠 품질을 평가해 결정합니다.

XML 사이트맵 구조와 태그

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
  <url>
    <loc>https://example.com/seo/fundamentals</loc>
    <lastmod>2025-03-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://example.com/images/seo-guide.webp</image:loc>
      <image:title>SEO 기초 가이드</image:title>
    </image:image>
  </url>
</urlset>
태그필수?설명권장 값
loc✅ 필수페이지 URL (절대 경로, HTTPS 포함)canonical URL과 동일해야 함
lastmod선택마지막 수정일 (ISO 8601 형식)2025-03-22 또는 2025-03-22T09:00:00+09:00
changefreq선택예상 변경 빈도 (힌트, 구글이 강제로 따르지는 않음)daily, weekly, monthly, yearly
priority선택사이트 내 상대적 중요도 (0.0~1.0)홈: 1.0, 카테고리: 0.8, 글: 0.6

사이트맵 인덱스 파일: 대규모 사이트 전략

하나의 사이트맵 파일에는 최대 50,000개 URL / 50MB까지 담을 수 있습니다. 이를 초과하는 대규모 사이트는 사이트맵 인덱스 파일로 여러 사이트맵을 묶어야 합니다.

<!-- sitemap-index.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap-blog.xml</loc>
    <lastmod>2025-03-22</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-pages.xml</loc>
    <lastmod>2025-03-22</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-products.xml</loc>
    <lastmod>2025-03-22</lastmod>
  </sitemap>
</sitemapindex>

콘텐츠 유형별로 사이트맵을 분리하면 관리가 쉽고, 특정 사이트맵의 색인 현황을 Search Console에서 별도로 모니터링할 수 있습니다.

Next.js 동적 사이트맵 생성 (App Router)

Next.js 13+ App Router에서는 app/sitemap.ts 파일로 동적 사이트맵을 생성할 수 있습니다.

// app/sitemap.ts
import type { MetadataRoute } from 'next'

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const baseUrl = 'https://example.com'

  // 정적 페이지
  const staticPages = [
    { url: baseUrl, lastModified: new Date(), priority: 1.0 },
    { url: `${baseUrl}/study`, lastModified: new Date(), priority: 0.9 },
    { url: `${baseUrl}/tools`, lastModified: new Date(), priority: 0.8 },
  ]

  // 동적 페이지 (DB에서 가져오기)
  const posts = await fetchAllPosts()
  const dynamicPages = posts.map(post => ({
    url: `${baseUrl}/blog/${post.slug}`,
    lastModified: new Date(post.updatedAt),
    priority: 0.7,
  }))

  return [...staticPages, ...dynamicPages]
}

이 파일은 자동으로 /sitemap.xml 경로에서 제공됩니다. 별도의 사이트맵 플러그인 설치 없이도 동적 URL을 포함한 완전한 사이트맵이 생성됩니다.

사이트맵에 절대 포함하지 말아야 할 URL

제외해야 할 URL이유
noindex 페이지색인 제외 페이지를 사이트맵에 포함하면 신호 충돌
canonical이 다른 URL을 가리키는 페이지비정규 URL이므로 제외
robots.txt로 차단된 URL크롤러가 접근 불가
리다이렉트 되는 URL (301/302)최종 목적지 URL만 포함
깨진 링크 (404/500)색인 불가 페이지
검색 결과 페이지 (?q=...)Thin Content 위험
로그인 후에만 접근 가능한 페이지크롤러가 접근 불가

Google Search Console·네이버 서치어드바이저 제출

Google Search Console 제출

  1. Google Search Console 접속 → 속성 선택
  2. 좌측 메뉴 → Sitemaps 클릭
  3. 사이트맵 URL 입력 후 "제출" 클릭
  4. 제출 후 "성공" 상태와 색인된 URL 수 확인

네이버 서치어드바이저 제출

  1. 네이버 서치어드바이저 접속 → 웹마스터 도구
  2. 사이트 선택 → 요청 → 사이트맵 제출
  3. 사이트맵 URL 입력 후 확인

robots.txt에도 명시: 사이트맵 위치를 robots.txt에도 추가하면, Search Console 외에도 모든 크롤러가 사이트맵을 자동으로 발견할 수 있습니다.

# robots.txt
Sitemap: https://example.com/sitemap.xml

자주 묻는 질문 (FAQ)

Q. 사이트맵이 없어도 구글에 색인되나요?
네, 가능합니다. Google은 내부 링크와 외부 백링크를 따라 페이지를 발견하고 색인합니다. 하지만 사이트맵이 있으면 (1) 새 콘텐츠를 더 빠르게 발견하고, (2) 내부 링크가 없는 고아 페이지도 크롤링할 수 있으며, (3) lastmod 정보로 변경된 페이지를 우선 재크롤링합니다. 규모가 작고 내부 링크가 탄탄한 사이트라면 사이트맵 없이도 충분하지만, 있으면 더 효율적입니다.
Q. changefreq와 priority를 구글이 실제로 사용하나요?
구글은 공식적으로 changefreq와 priority를 무시한다고 밝혔습니다. 이 두 태그는 사이트맵 프로토콜 초기에 정의됐지만, 사이트 운영자가 정확하게 설정하지 않는 경우가 많아 신뢰성이 낮다고 판단한 것입니다. 반면 lastmod는 정확하게 설정했을 때 크롤링 우선순위에 영향을 줍니다. 따라서 lastmod를 정확하게 관리하는 것에 집중하세요.
Q. 사이트맵에 포함된 URL 수와 색인된 URL 수가 다른 이유는?
Google이 사이트맵의 모든 URL을 색인하는 것은 아닙니다. 색인되지 않는 일반적인 이유: (1) Thin Content - 내용이 너무 적거나 가치가 낮은 페이지, (2) 중복 콘텐츠 - 유사한 내용의 다른 페이지가 이미 색인됨, (3) 크롤 예산 부족 - 대규모 사이트에서 우선순위가 낮은 페이지, (4) noindex 충돌 - 사이트맵에는 있지만 noindex가 설정됨. GSC의 "인덱스 생성 범위" 보고서에서 구체적 사유를 확인할 수 있습니다.
Q. 사이트맵을 얼마나 자주 업데이트해야 하나요?
이상적으로는 콘텐츠가 변경될 때마다 자동으로 업데이트되어야 합니다. Next.js의 sitemap.ts나 WordPress처럼 동적으로 생성되는 사이트맵은 매 요청 시 최신 상태를 반환합니다. 정적 사이트맵을 사용하는 경우에는 새 콘텐츠 발행 시 수동으로 업데이트하거나, CI/CD 파이프라인에서 빌드 시 자동 생성하도록 설정하세요.
Q. 여러 사이트맵을 GSC에 제출해도 되나요?
네, 각각 별도로 제출하거나 사이트맵 인덱스 파일 하나로 묶어 제출할 수 있습니다. 콘텐츠 유형별로 분리(sitemap-blog.xml, sitemap-products.xml, sitemap-pages.xml)하면 GSC에서 각 사이트맵의 색인 현황을 개별적으로 모니터링할 수 있어 디버깅에 유리합니다. 대규모 이커머스 사이트에서 특히 권장됩니다.

지금 읽으신 SEO 지식, 바로 적용해보세요!

검색엔진 최적화는 실전입니다. SEO SOVISS의 무료 분석 도구로 내 웹사이트의 오디트 점수를 즉시 확인하고 기술적 문제점을 점검해보세요.

내 웹사이트 진단하기 →
정수아

데이터분석팀 선임

정수아

GA4, Search Console 및 서버 로그 데이터를 기반으로 사용자 행동을 분석하고 트래픽 갭(Traffic Gap)을 도출합니다.

SEO SOVISS 전체 집필진 보기 →