/sitemap.xml 을 먼저 찔러보면 안 됩니다
어떤 사이트의 글 목록을 모아야 할 때 사이트맵은 좋은 출발점입니다. 그런데 주소를 자동으로 찾으려고
/sitemap.xml 부터 요청하면, 응답은 200인데 내용이 사이트맵이 아닌 일이 생깁니다.
워드프레스는 없는 주소에 404 대신 홈페이지를 그대로 돌려주는 경우가 있습니다.
흔히 soft 404라고 부릅니다. 그래서 /sitemap.xml을 요청하면 HTTP 200에 HTML 한 뭉치가 옵니다.
여기서 <loc> 태그만 세면 0개가 나옵니다. 그런데 요청은 성공했으니
"사이트맵은 있는데 비어 있다"고 판단하게 됩니다. 실제로는 사이트맵을 아직 못 찾은 겁니다.
다음 후보를 시도해야 하는데 거기서 멈춰버립니다.
내용이 사이트맵인지 먼저 확인해야 합니다. 루트 요소가
<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에 걸려서, 정작 있는 사이트맵을 못 보고 끝납니다.
/sitemap_index.xml/sitemap.xml/wp-sitemap.xml/sitemap-index.xml
각 단계에서 루트 요소를 확인하고, 사이트맵이 맞을 때만 파싱합니다.
더 확실한 방법은 /robots.txt를 먼저 읽는 것입니다 — 대부분 거기에
Sitemap: 줄로 정확한 주소가 적혀 있습니다.
User-agent: *
Allow: /
Sitemap: https://example.com/sitemap_index.xml
<sitemapindex>는 글 목록이 아니라 하위 사이트맵의 목록입니다.
글 주소를 얻으려면 그 안의 <loc>을 다시 받아와야 합니다.
글이 많은 사이트는 하위 사이트맵이 수십 개가 되기도 하므로,
몇 개까지 따라갈지 상한을 두는 편이 안전합니다. 상한에 걸려 멈췄다면
그 사실을 결과에 남겨야 나중에 숫자를 믿을 수 있습니다.
이 글은 EonsFlow가 블로그 자동화 도구를 만들며 겪은 내용을 정리한 것입니다. 같은 맥락으로 워드프레스 REST API로 글 전부 가져오기도 정리해 두었습니다.