사이트맵 XML 완전 가이드: 구조·오류·Health Score 최적화
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
목차
사이트를 배포하고 나서 "Google이 내 페이지를 왜 안 잡아가지?"라는 고민을 한 번쯤 해봤을 것입니다. 원인의 상당수는 sitemap.xml에 있습니다. URL이 누락됐거나, 필드 값이 잘못됐거나, 중복 URL이 섞여 있거나. 사이트맵 XML 검사기를 사용하면 sitemap.xml을 붙여넣거나 파일을 드롭하는 것만으로
URL 수·필드 커버리지·오류·Health Score를 즉시 확인할 수 있습니다.
sitemap.xml이란?#
sitemap.xml은 검색 엔진에 웹사이트의 URL 구조를 알려주는 XML 파일입니다. Google·Bing 등의 크롤러는 이 파일을 읽어
어떤 페이지를 크롤링해야 하는지, 마지막으로 수정된 시점은 언제인지, 얼마나 자주 변경되는지를 파악합니다.
사이트맵을 제출하지 않아도 검색 엔진은 내부 링크를 따라 페이지를 발견할 수 있습니다. 그러나 사이트맵이 있으면 크롤링 효율이 높아지고,
고아 페이지(orphan page, 다른 페이지에서 링크가 없는 페이지)도 색인될 가능성이 높아집니다.
공식 명세는 sitemaps.org에서 확인할 수 있으며,
Google·Yahoo·Microsoft가 공동으로 정한 표준입니다.
urlset vs sitemapindex 차이#
사이트맵에는 두 가지 유형이 있습니다.
| 유형 | 루트 태그 | 역할 | 사용 시점 |
|---|---|---|---|
| 일반 사이트맵 | <urlset> | 개별 URL 목록을 직접 포함 | 페이지 수 50,000개 미만 |
| 사이트맵 인덱스 | <sitemapindex> | 여러 하위 사이트맵 파일을 참조 | 대형 사이트, 50,000 URL 초과 시 분산 처리 |
단일 sitemap.xml 파일에는 URL을 최대 50,000개까지만 담을 수 있고,
비압축 크기도 50 MB를 넘으면 안 됩니다. 이를 초과하는 사이트는 <sitemapindex>로 여러 파일을 묶어 관리합니다.
4개 핵심 필드 설명#
| 필드 | 필수 여부 | 허용 값 | SEO 영향 |
|---|---|---|---|
<loc> | 필수 | 절대 URL (https:// 포함) | 직접적: 색인 대상 URL 지정 |
<lastmod> | 선택 | ISO 8601 날짜 (예: 2026-04-23 또는 2026-04-23T10:00:00+09:00) | 콘텐츠 신선도 신호 |
<changefreq> | 선택 | always hourly daily weekly monthly yearly never | 크롤링 힌트 (Google은 참고용으로만 사용) |
<priority> | 선택 | 0.0–1.0 (기본 0.5) | 같은 사이트 내 상대적 우선순위 힌트 |
<loc> 필드가 없으면 해당 <url> 항목 전체가 무효입니다. <priority>는 사이트 간 비교에 사용되지 않으며,
같은 사이트 내부에서만 상대적 순서를 힌트로 줍니다.
XML 코드 예시#
urlset 예시 (일반 사이트맵)#
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2026-04-20</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://example.com/about</loc>
<lastmod>2026-03-15</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://example.com/blog/post-1</loc>
<lastmod>2026-04-22</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
</urlset>
sitemapindex 예시 (사이트맵 인덱스)#
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://example.com/sitemap-pages.xml</loc>
<lastmod>2026-04-20</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-blog.xml</loc>
<lastmod>2026-04-22</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-products.xml</loc>
<lastmod>2026-04-18</lastmod>
</sitemap>
</sitemapindex>
Health Score 계산법#
사이트맵 XML 검사기는 사이트맵의 품질을 100점 만점으로 평가합니다.
| 항목 | 배점 | 기준 |
|---|---|---|
| loc 커버리지 | 25점 | 전체 <url>에 <loc> 존재 비율 |
| 유효성 오류 없음 | 25점 | missing_loc, invalid_changefreq, invalid_priority, duplicate_url 오류 건수 |
| lastmod 커버리지 | 20점 | 전체 URL 중 <lastmod> 보유 비율 |
| changefreq 유효성 | 15점 | 허용 값 7가지 내 사용 여부 |
| priority 유효성 | 15점 | 0.0–1.0 범위 내 값 사용 여부 |
등급 기준
| 점수 | 등급 |
|---|---|
| 90–100점 | Excellent |
| 70–89점 | Good |
| 50–69점 | Fair |
| 0–49점 | Poor |
자주 발생하는 4가지 오류와 해결법#
1. missing_loc#
<url> 블록에 <loc> 태그가 없는 경우입니다. 이 오류가 있으면 해당 URL은 검색 엔진에서 완전히 무시됩니다.
<!-- 오류: loc 없음 -->
<url>
<lastmod>2026-04-01</lastmod>
</url>
<!-- 수정: loc 추가 -->
<url>
<loc>https://example.com/page</loc>
<lastmod>2026-04-01</lastmod>
</url>
2. invalid_changefreq#
changefreq 값이 명세에 정의된 7가지 (always, hourly, daily, weekly, monthly, yearly, never) 외의 값일 때 발생합니다.
<!-- 오류: 허용되지 않은 값 -->
<changefreq>sometimes</changefreq>
<!-- 수정: 허용 값으로 교체 -->
<changefreq>weekly</changefreq>
3. invalid_priority#
priority 값이 0.0–1.0 범위를 벗어날 때 발생합니다. 1.5나 -0.1 같은 값은 무효입니다.
<!-- 오류: 범위 초과 -->
<priority>1.5</priority>
<!-- 수정: 유효 범위 내 값 -->
<priority>0.9</priority>
4. duplicate_url#
동일한 <loc> 값이 사이트맵에 두 번 이상 등장할 때 발생합니다. 중복 URL은 크롤링 예산을 낭비하고 canonical 신호를 혼란스럽게 합니다. 사이트맵 생성 스크립트에서 URL 목록을 Set 자료구조로 de-duplicate하면 예방할 수 있습니다.
lastmod 커버리지 최적화 전략#
lastmod 커버리지는 Health Score에서 20점을 차지하지만,
더 중요한 것은 값의 정확성입니다. Google은 부정확한 lastmod를 반복적으로 감지하면 이 필드를 무시하기 시작합니다.
권장 전략
- 블로그 포스트·제품 페이지처럼 자주 업데이트되는 콘텐츠는 실제 수정 시각을 ISO 8601 형식으로 기록합니다.
- 정적 페이지(소개 페이지, 고정 랜딩 등)는 실제로 변경된 날짜만 업데이트합니다. 크롤러를 유인하기 위해 변경 없이 날짜만 갱신하면 역효과가 납니다.
- CMS나 빌드 파이프라인에서 파일의
git log --format="%ci" -1 -- <path>명령 결과를lastmod로 자동 주입하면 정확도를 유지할 수 있습니다.
50,000 URL 제한 주의사항#
sitemaps.org 명세에 따르면 단일 사이트맵 파일의 제한은 다음과 같습니다.
- 최대 URL 수: 50,000개
- 최대 파일 크기: 50 MB (비압축 기준)
이 제한을 초과하는 경우에는 사이트맵을 여러 파일로 분할하고 <sitemapindex>로 묶어야 합니다. 예를 들어 블로그 URL, 제품 URL, 정적 페이지 URL을 각각 별도 사이트맵 파일로 분리한 뒤
인덱스 파일에서 참조하는 구조가 일반적입니다.
사이트맵 XML 검사기는 50,000 URL 초과 여부를 자동으로 감지해 경고합니다.
도구 사용 방법#
사이트맵 XML 검사기는 세 가지 방법으로 사이트맵을 입력받습니다.
- 텍스트 붙여넣기: 브라우저에서
https://example.com/sitemap.xml을 열어 XML 전체를 복사한 뒤 텍스트 영역에 붙여넣습니다. - 파일 드롭: 로컬에 저장된
.xml파일을 드래그 앤 드롭하거나 파일 선택 버튼으로 업로드합니다. - 직접 입력: 작은 사이트맵이라면 XML을 직접 타이핑하거나 수정해 검사할 수 있습니다.
입력 후 결과는 6개 탭으로 나뉩니다.
- Overview: URL 수, 사이트맵 유형(urlset/sitemapindex), Health Score 요약
- Coverage: loc/lastmod/changefreq/priority 필드별 커버리지 비율
- Errors: 오류 유형별 목록과 해당 URL
- URLs: 전체 URL 목록과 각 필드 값
- Depth: URL 경로 깊이 분포 (도메인 기준 슬래시 단계)
- Insights: Health Score를 기반으로 자동 생성된 개선 제안
사이트맵을 최적화한 뒤 할 일#
사이트맵을 수정하고 나면 Google Search Console에서 직접 제출하는 것이 가장 빠른 방법입니다. Search Console > 사이트맵 메뉴에서 sitemap.xml URL을 입력하면
즉시 제출 및 상태 확인이 가능합니다.
사이트맵 외에도 JSON 형식의 구조화 데이터를 점검하고 싶다면
JSON 포매터를 함께 활용해보세요. 개발 워크플로우에서 두 도구를 조합하면 SEO 기술 기반을 체계적으로 관리할 수 있습니다.