1. Sitemap이란
검색 엔진이 사이트의 URL 구조를 빠르게 파악하도록 도와주는 XML 문서다.
정적 페이지, 게시글, 제품 등 “크롤링 중요도가 높은 URL”을 나열한다.
가. 반드시 필요한가
필수는 아니다.
크롤러가 사이트 링크 구조를 통해 자연스레 발견할 수 있다면 없어도 검색된다.
하지만 새로운 URL이 많거나 사이트 규모가 크면 sitemap이 큰 도움이 된다.
나. 어떤 URL을 sitemap에 넣어야 하는가
- 반드시 넣는 항목
- 메인 페이지
- 고정 페이지 (회사 소개, 정책, FAQ 등)
- 카테고리/게시판 등의 구조적 페이지
- 검색 엔진에서 중요도 높은 페이지
- 넣지 않아도 되는 항목
- 너무 자주 생성/삭제되는 실시간 게시글
- 로그인/개인정보 기반 페이지
- 의미 없는 리스트 페이지
- 필터·검색 결과 페이지
- SEO 가치가 낮은 동적 URL
- 커뮤니티 게시글 포함 여부
- 게시글이 적거나 SEO가 중요 → sitemap에 포함
- 게시글이 너무 많고 실시간으로 생성/삭제 → sitemap에서 제외해도 문제 없음
- 대규모 커뮤니티 대부분은 게시글 sitemap을 쓰지 않는다
- 게시글 수가 적고 SEO가 중요하다
→ 게시글 sitemap 포함 권장 (변경된 게시글 빠른 인덱싱 가능) - 게시글이 매우 많고 실시간 생성/삭제된다
→ 게시글 sitemap 비포함 권장
→ 크롤러는 게시판 리스트 페이지만 있어도 모든 글을 자연스럽게 찾아간다
→ sitemap 관리 비용이 효과 대비 크다 - 게시글은 sitemap에서 제외하되, 게시판/카테고리만 포함
→ 가장 현실적이고 비용 효율적
→ 대부분 커뮤니티가 채택하는 방식
2. Sitemap의 기술적 제한 및 구조
1. Sitemap 크기 제한
- 1개의 sitemap 파일은 최대 50,000 URL
- 또는 50MB (압축 전)
2. sitemap index
URL이 많은 경우 여러 sitemap을 나누고 아래 같은 index 파일을 둔다.
/sitemap-index.xml
├─ /sitemap-static.xml
├─ /sitemap-posts-1.xml
├─ /sitemap-posts-2.xml
└─ ...
검색 엔진은 index 파일 1개만 보면 전부 읽어간다.
3. Sitemap 생성 전략
가. 전략 A. 정적 Sitemap (규모 작거나 변경 빈도 낮을 때)
- 단순 XML 파일을 직접 작성
- 배포 시 포함
- 변화가 거의 없는 사이트에 적합
나. 전략 B. 동적 Sitemap (DB 기반)
/sitemap.xml요청 시 서버가 DB에서 URL을 조회하여 XML 생성- 새로운 게시글이 많지 않을 때 유용
- 게시글 1만 개 이하 정도에서 실용적
다. 전략 C. 정적 + 캐시 + 일정 주기 재생성 (가장 현실적인 방법)
- sitemap 파일을 생성해 캐시에 저장
- 10분~1시간마다 재생성
- 서버 부하 적고 규모가 커도 효율적
- 대부분의 서비스들이 채택
라. 전략 D. 아예 게시글 Sitemap을 만들지 않는 방법
- 커뮤니티형 사이트의 일반적 선택
- 크롤러가 게시판 리스트에서 페이지를 자연스럽게 수집하면 충분
4. 기술 스택별 Sitemap 생성 방식 개요
| 기술 스택 | Sitemap 생성 방식 | 비고 |
|---|---|---|
| Node.js (Express) | – 라우트에서 XML 직접 생성 – sitemap-generator 등 크롤링 기반 생성 |
서버 사이드에서 직접 XML 문자열 반환하거나 CLI 도구 활용 |
| Next.js | – next-sitemap 패키지 – app/sitemap.js(App Router)로 자동 생성 |
프레임워크에서 공식적으로 sitemap 자동 생성 기능 지원 |
| Spring Boot | – Controller에서 XML 문자열 반환 – 스케줄러로 sitemap index/파일 생성 | 대규모 사이트에서 sitemap 파일 분할 생성 시 유용 |
| Django | – django.contrib.sitemaps 기본 지원 |
프레임워크 차원에서 sitemap 클래스 기반 자동 생성 |
| Flask | – 라우트에서 XML 직접 생성 | Django와 달리 기본 기능 없음 → 직접 처리 |
| Laravel | – spatie/laravel-sitemap 패키지 사용 |
가장 널리 쓰이는 sitemap 패키지 |
| Static Site (Hugo, Jekyll, Astro) | – 빌드 시 자동 sitemap 생성 | 대부분 기본 기능 또는 플러그인 제공 |
5. 로봇 설정 (robots.txt)
모든 sitemap은 robots.txt에 반드시 명시한다.
User-agent: *
Allow: /
Sitemap: https://example.com/sitemap.xml
검색 엔진이 sitemap의 위치를 빠르게 알 수 있다.
7. 요약
- sitemap은 검색엔진에게 “중요한 URL”을 알려주는 도구일 뿐, 전부 넣을 필요는 없다
- 게시글 수가 적으면 sitemap에 넣고, 많으면 넣지 않아도 된다
- sitemap은 정적/동적/캐시+스케줄러 형태 중 선택할 수 있다
- sitemap에는 최대 50,000개 URL이 담긴다
- 대규모 서비스는 sitemap index 방식으로 나눈다
- 업데이트가 잦은 사이트는 sitemap을 실시간 생성하지 않고 주기 생성+캐싱 방식 사용
- 커뮤니티형 사이트는 게시글 sitemap을 생략해도 SEO에 큰 문제 없다
- robots.txt에 sitemap을 반드시 선언해야 한다
- Sitemap은 SEO 최적화의 한 요소일 뿐이며 크롤링/링크 구조가 더 큰 영향을 준다