사이드프로젝트 slecs

사이트맵 인덱스 루트 엘리먼트 오류 수정으로 크롤러 파싱 오류 해결

목차

sitemap-index.xml이 잘못된 루트 엘리먼트를 쓰고 있었다. <urlset> 대신 <sitemapindex> 를 써야 했는데, 아마 처음 작성할 때 일반 sitemap 파일 구조를 그대로 가져와서 붙인 게 원인이었을 것.

뭐가 문제였나

Sitemap 스펙에는 크게 두 가지 파일 형식이 있다.

파일 종류 루트 엘리먼트 역할
일반 Sitemap <urlset> 개별 URL 목록을 나열
Sitemap Index <sitemapindex> 여러 sitemap 파일을 묶는 상위 인덱스

이 둘은 구조가 비슷해 보이지만 완전히 다른 스펙이다. <urlset> 안에는 <url> 엘리먼트가 들어가고, <sitemapindex> 안에는 <sitemap> 엘리먼트가 들어간다. 크롤러(Googlebot 포함)는 이 루트 엘리먼트를 보고 어떤 방식으로 파싱할지 결정하기 때문에, 잘못된 루트를 쓰면 파일 자체를 아예 무시하거나 오류로 처리한다.

실제로 Google Search Console 에서 sitemap 을 제출했을 때 "파싱할 수 없음" 같은 에러가 떴다면 이 케이스일 가능성이 높다. 특히 sitemap-index 를 처음 도입할 때 기존 sitemap.xml 파일에서 복붙하면 이런 실수가 자연스럽게 발생한다.

수정한 내용

blog/src/pages/sitemap-index.xml.ts 파일에서 루트 엘리먼트를 교체하고, 내부 구조도 표준에 맞게 정리했다.

<!-- 잘못된 구조 (urlset은 개별 sitemap 파일에서 씀) -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap-posts.xml</loc>
  </sitemap>
</urlset>

<!-- 올바른 구조 (sitemapindex가 상위 인덱스 파일의 루트) -->
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap-posts.xml</loc>
  </sitemap>
</sitemapindex>

blog/public/robots.txt 도 같이 손댔는데, sitemap 경로 선언이 들어가 있는 파일이라 같이 정합성을 맞춰둔 것으로 보인다. robots.txt 의 Sitemap: 지시어에 명시된 경로가 실제 파일 경로, 그리고 그 파일의 구조까지 전부 일치해야 크롤러가 정상적으로 인식한다.

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

이 한 줄이 크롤러에게 "인덱스 파일 여기 있어요" 라고 알려주는 진입점이기 때문에, 여기까지 같이 확인하고 정리한 건 올바른 수순이었다.

짧지만 놓치기 쉬운 것들

SEO 관련 작업은 수정 결과가 바로 보이지 않는다는 게 특징이다. robots.txt 나 sitemap 구조를 고쳐도 크롤러가 다시 방문해서 재인식하기까지 시간이 걸리고, 그 전까지는 Search Console 에서 이전 상태가 남아 있다. 그래서 이런 fix 는 "배포했으니 됐겠지" 가 아니라 며칠 뒤 Search Console 에서 직접 제출 요청을 해보거나, URL 검사 도구로 파싱 여부를 확인하는 것까지 챙겨야 한다.

또 Astro / Next.js 같은 프레임워크에서 .xml.ts 형태로 sitemap 을 동적 생성할 때는, Content-Type 헤더가 application/xml 또는 text/xml 로 나가는지도 같이 확인하는 게 좋다. 구조가 맞아도 헤더가 틀리면 크롤러가 HTML 로 오해할 수 있다.

작은 수정처럼 보이지만 sitemap 인덱스 구조가 제대로 잡혀 있어야 이후에 카테고리별, 날짜별 sitemap 을 분리해서 붙이는 작업도 깔끔하게 확장된다. 기초 스펙을 정확히 짚고 넘어가는 게 맞았다.

끝.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.