최근 247COMPASS 공식 웹사이트를 기존 WordPress 환경에서 정적 사이트 생성기인 Hugo로 전면 마이그레이션했습니다.
콘텐츠 구조 정제, 템플릿 커스텀, 다국어 영문(/en/) 사이트 구축, 그리고 300여 개가 넘는 용어사전 지식 그래프 구축까지. 전 과정을 AI 코딩 에이전트인 Codex와 긴밀하게 협업하며 진행했습니다. 로컬 빌드는 오류 없이 끝났고, 배포 후 브라우저에서도 모든 것이 순조롭게 마무리된 것처럼 보였습니다.
하지만 구글 서치콘솔(Google Search Console, GSC)에 사이트맵을 제출하는 과정에서 복병을 만났습니다. 영어 사이트맵은 정상 수집되었으나, 기존 한국어 사이트맵만 ‘가져올 수 없음 / 읽을 수 없음’ 오류가 계속 표시되었습니다.
로컬과 실제 서버 모두에서 XML 파일은 HTTP 200 OK로 응답했고, 문법 오류도 없었습니다. 그런데 검색엔진이 사이트맵을 읽지 못하는 이유는 무엇일까요?
SEO·GEO 경험이 많다면 빠르게 짚어 볼 수 있는 지점일 거예요. 저는 사이트맵의 위치와 수록된 URL을 대조했고, 한국어 페이지는 루트에 있는데 사이트맵은 /ko/ 아래에 있다는 점을 확인했습니다.
이 문제를 Codex에 지시했을 때는, 제가 제시한 맥락만으로 실패 원인을 단정할 수 없다는 대답이 돌아왔어요. 참 똑똑한 어시스턴트입니다. 그래서 더 구체적인 맥락과 원하는 구조를 전달했고, 한국어 사이트맵을 루트로 옮겨 경로 스코프를 명확하게 정리했습니다.
HTTP 응답과 XML 문법뿐 아니라, 사이트맵의 위치·URL 구조·서치콘솔 제출 조건까지 함께 확인해야 한다는 경험이었습니다. 정적 사이트 전환이나 다국어 확장을 준비하는 분들을 위해 점검 과정과 적용한 구조를 공유합니다. 글 하단에는 이 작업에 활용할 수 있도록 다듬은 프롬프트도 첨부했습니다.
1. 흔히 저지르는 구조적 실수: 비대칭 URL과 사이트맵 스코프#
단일 언어 사이트를 운영하던 기업은 일반적으로 루트 도메인을 기본 언어로 유지하려 합니다:
- 기존 한국어 페이지:
example.com/about/,example.com/services/(루트 스코프) - 신규 영어 페이지:
example.com/en/about/,example.com/en/services/(서브디렉터리 스코프)
이 구조 자체는 기존에 쌓아둔 루트 도메인의 백링크와 권위(SEO Equity)를 보존하고, 국내 검색엔진(네이버 등)과의 호환성을 유지하는 데 매우 실용적입니다.
문제는 사이트 생성기(SSG)나 CMS가 사이트맵을 분리 생성할 때 발생합니다.
다국어 설정을 켜면 시스템은 관성적으로 언어 코드별 하위 폴더를 만들어 사이트맵을 쪼개는 경우가 많습니다:
- 영어 사이트맵:
example.com/en/sitemap.xml - 한국어 사이트맵:
example.com/ko/sitemap.xml
영문 사이트맵은 파일 위치와 수록 URL의 경로가 일치합니다. 반면 한국어 사이트맵은 기본 디렉터리 스코프와 맞지 않습니다. 제출 방식과 소유권 확인 조건을 함께 점검해야 하는 지점입니다.
2. 검색엔진의 규칙: ‘Sitemap Path-Scope’ 제약#
사이트맵을 점검할 때는 먼저 파일 위치에 따른 기본 디렉터리 스코프를 확인해야 합니다.
사이트맵의 기본 경로 범위:
일반적으로 사이트맵은 자신이 위치한 디렉터리와 그 하위 경로의 URL을 대상으로 합니다.
- 영문 사이트맵 (
/en/sitemap.xml):- 사이트맵 위치:
/en/ - 수록된 페이지:
/en/about/,/en/services/ - 판정: 파일 위치와 수록 URL이 일치하여 기본 경로 스코프 조건을 충족합니다.
- 사이트맵 위치:
- 한국어 사이트맵 (
/ko/sitemap.xml):- 사이트맵 위치:
/ko/ - 수록된 페이지:
/about/,/services/(루트 경로) - 판정: 수록 URL이
/ko/밖에 있으므로 기본 경로 스코프와 일치하지 않습니다.
- 사이트맵 위치:
다만 Google은 Search Console을 통해 제출한 사이트맵에는 이 디렉터리 제한의 예외가 적용될 수 있다고 안내합니다. 따라서 이 경로 차이만으로 모든 제출이 실패한다고 단정할 수는 없습니다. 여러 도메인의 URL을 한 사이트맵에 담는 교차 제출(Cross-site Submission) 역시 별도의 소유권 확인 조건을 가진 절차입니다. Google 공식 사이트맵 가이드
이번에는 제출 조건에 의존하지 않고 기본 경로 스코프까지 충족하도록 한국어 사이트맵을 루트로 옮겼습니다. HTTP 200과 유효한 XML은 중요한 점검 항목이지만, GSC의 실패 원인을 확정하려면 상세 오류와 마지막 조회 시각, 서버 로그를 함께 확인해야 합니다.
3. 다국어 사이트 아키텍처 선택 가이드#
그렇다면 다국어 사이트 전환 시 어떤 URL 구조와 사이트맵 전략을 취해야 할까요? 크게 두 가지 표준 모델이 있습니다.
아래 다이어그램에서 구조 탭을 바꾸고 사이트맵 파일을 직접 눌러 보세요. 파일이 선언한 URL이 스코프 안에 있는지 바로 확인할 수 있습니다.
모델 A: 루트 기본 언어 + 언어별 서브디렉터리 (기존 기본 언어 URL 유지에 적합)#
- 적합 대상: 기존 도메인의 국내 검색 순위 유지가 매우 중요하고, 지원 언어가 소수(예: 한국어 + 영어)인 기업.
- 사이트맵 해결책:
- 한국어 사이트맵을
/ko/하위에 두지 않고 루트 레벨로 승격시킵니다:example.com/sitemap-ko.xml - 루트의
example.com/sitemap.xml을 상위 사이트맵 인덱스(Sitemap Index)로 선언하고, 내부에서/sitemap-ko.xml과/en/sitemap.xml을 자식으로 참조하도록 구성합니다. - 이렇게 하면
sitemap-ko.xml의 스코프가 루트 전체를 커버하게 되므로 기본 경로 스코프 조건을 충족합니다. 실제 수집 여부는 GSC에서 별도로 확인합니다.
- 한국어 사이트맵을
모델 B: 완전 대칭형 서브디렉터리 (/ko/, /en/, /ja/) (글로벌 확장 권장)#
- 적합 대상: 여러 언어 시장을 동시에 공략하거나, 국가별 마케팅 대시보드를 완전히 분리해야 하는 엔터프라이즈.
- 특징:
- 루트(
example.com/)에 언어 선택 화면을 두고, 모든 실질적 콘텐츠는example.com/ko/,example.com/en/밑으로 격리합니다. - 사이트맵 역시
example.com/ko/sitemap.xml형태로 대칭 생성되며, 스코프 충돌이 원천적으로 발생하지 않습니다. - 단점: 기존 루트에 있던 모든 URL을
/ko/로 301 리디렉션해야 하므로, 검색엔진이 변경된 주소를 재학습하는 동안 일시적인 트래픽 흔들림을 감내해야 합니다.
- 루트(
4. 실무 체크리스트: 배포 전 필수 점검 4단계#
다국어 사이트 마이그레이션을 준비 중이라면 배포 버튼을 누르기 전 아래 4가지를 반드시 점검하세요.
- 상호 참조 Hreflang 태그 확인:
- 국문 페이지와 영문 페이지의
<head>에 상대방과 자신을 가리키는hreflang태그(ko,en,x-default)가 양방향으로 1:1 매핑되어 있는지 확인합니다.
- 국문 페이지와 영문 페이지의
- 사이트맵 파일 위치와 수록 URL의 스코프 검증:
- 사이트맵 XML 내부의
<loc>URL들이 해당 사이트맵 파일이 위치한 디렉터리보다 상위 경로를 침범하고 있지 않은지 확인합니다.
- 사이트맵 XML 내부의
- 구형 URL에 대한 301 리디렉션:
- 서치콘솔이 과거에 이미 긁어갔던
/ko/sitemap.xml이나 기존 CMS의 레거시 URL이 남아있다면, 404가 아닌 새로운 목적지로 301 영구 이동을 걸어 크롤링 예산을 낭비하지 않도록 합니다.
- 서치콘솔이 과거에 이미 긁어갔던
- 빌드 파이프라인 자동 검증 스크립트 구축:
- CI/CD 빌드 시점에 정적 산출물의 사이트맵 파일 경로와 XML 내 URL 스코프를 자동 검사하는 스크립트를 연결하여 배포 후 오류를 사전에 차단합니다.

