← EonsFlow

사이트맵을 못 찾는 이유 — /sitemap.xml 을 먼저 찔러보면 안 됩니다

2026년 8월 30일

어떤 사이트의 글 목록을 모아야 할 때 사이트맵은 좋은 출발점입니다. 그런데 주소를 자동으로 찾으려고 /sitemap.xml 부터 요청하면, 응답은 200인데 내용이 사이트맵이 아닌 일이 생깁니다.

200을 받고도 실패하는 이유

워드프레스는 없는 주소에 404 대신 홈페이지를 그대로 돌려주는 경우가 있습니다. 흔히 soft 404라고 부릅니다. 그래서 /sitemap.xml을 요청하면 HTTP 200에 HTML 한 뭉치가 옵니다.

여기서 <loc> 태그만 세면 0개가 나옵니다. 그런데 요청은 성공했으니 "사이트맵은 있는데 비어 있다"고 판단하게 됩니다. 실제로는 사이트맵을 아직 못 찾은 겁니다. 다음 후보를 시도해야 하는데 거기서 멈춰버립니다.

200 이라고 사이트맵이 아닙니다

내용이 사이트맵인지 먼저 확인해야 합니다. 루트 요소가 <urlset> 이나 <sitemapindex> 인지 보는 게 가장 간단합니다. 둘 다 아니면 "빈 사이트맵"이 아니라 "사이트맵이 아님"으로 처리하고 다음 주소로 넘어가야 합니다.

플러그인마다 주소가 다릅니다

워드프레스 사이트맵 주소는 무엇이 만들었느냐에 따라 갈립니다.

Yoast SEO · Rank Math/sitemap_index.xml
워드프레스 기본(5.5+)/wp-sitemap.xml
그 외 · 수동 생성/sitemap.xml · /sitemap-index.xml

국내에서 많이 쓰는 Yoast와 Rank Math가 sitemap_index.xml을 쓴다는 점이 중요합니다. /sitemap.xml부터 시도하면 앞서 말한 soft 404에 걸려서, 정작 있는 사이트맵을 못 보고 끝납니다.

순서를 이렇게 잡습니다

  1. /sitemap_index.xml
  2. /sitemap.xml
  3. /wp-sitemap.xml
  4. /sitemap-index.xml

각 단계에서 루트 요소를 확인하고, 사이트맵이 맞을 때만 파싱합니다. 더 확실한 방법은 /robots.txt를 먼저 읽는 것입니다 — 대부분 거기에 Sitemap: 줄로 정확한 주소가 적혀 있습니다.

User-agent: *
Allow: /

Sitemap: https://example.com/sitemap_index.xml

인덱스는 한 겹 더 들어갑니다

<sitemapindex>는 글 목록이 아니라 하위 사이트맵의 목록입니다. 글 주소를 얻으려면 그 안의 <loc>을 다시 받아와야 합니다. 글이 많은 사이트는 하위 사이트맵이 수십 개가 되기도 하므로, 몇 개까지 따라갈지 상한을 두는 편이 안전합니다. 상한에 걸려 멈췄다면 그 사실을 결과에 남겨야 나중에 숫자를 믿을 수 있습니다.

이 글은 EonsFlow가 블로그 자동화 도구를 만들며 겪은 내용을 정리한 것입니다. 같은 맥락으로 워드프레스 REST API로 글 전부 가져오기도 정리해 두었습니다.