63.1 언어별 URL은 어떻게 나누죠?

다국어 사이트를 만들 때 제일 먼저 부딪히는 질문이에요. 한국어 페이지와 영어 페이지를 서로 다른 주소로 나눠야 하거든요. 크게 세 가지 방법이 있어요.


1. 경로: example.com/ko/, example.com/en/
2. 서브도메인: ko.example.com, en.example.com
3. 국가 도메인: example.co.kr, example.com


첫째 경로 방식은 주소 앞에 /ko/, /en/처럼 언어 조각을 붙여요. 도메인 하나로 관리하니 설정이 제일 쉽고, 그동안 쌓은 도메인 신뢰도(검색 점수)를 한 도메인에 모을 수 있어요. 둘째 서브도메인은 언어별로 앞 이름을 나눠요. 서버를 지역별로 두기 좋지만 도메인 신뢰도가 쪼개질 수 있고요. 셋째 국가 도메인(ccTLD, 국가 코드 최상위 도메인)은 .co.kr, .fr처럼 나라 도메인을 따로 사요. 지역 신호가 가장 강하지만 도메인을 여러 개 사서 관리해야 해 비용이 커요.


정답은 없어요. 다만 중소 규모라면 경로 방식이 시작하기 편하고 관리 부담도 적어서 저는 이걸 먼저 권해요. 어떤 방식이든 공통 원칙이 하나 있어요. 언어마다 고유한 URL을 줘야 한다는 거예요.


여기서 흔한 실수 하나. 접속한 사람 IP를 보고 같은 URL에서 언어만 몰래 바꿔 보여주는 거예요. 사용자에겐 편해 보여도 검색봇에겐 독이에요. 구글 봇은 대개 미국에서 접속하니 영어 화면만 보고 한국어 페이지는 아예 못 찾거든요. 언어는 URL로 구분하고, IP 기반 자동 전환을 쓰더라도 사용자가 직접 언어를 바꿀 링크는 꼭 남겨두세요.

63.2 검색엔진은 어떤 언어를 보여줄지 어떻게 알죠?

URL을 나눴다고 끝이 아니에요. 검색엔진이 한국 사용자에겐 /ko/를, 미국 사용자에겐 /en/를 보여줘야 하잖아요. 그런데 구글 입장에선 이 둘이 거의 똑같은 페이지로 보여요. 같은 내용을 언어만 바꿨으니까요. 자칫 중복 콘텐츠로 오해받아 하나만 노출되고 나머진 묻힐 수 있어요.


그래서 "이 페이지들은 같은 글의 다른 언어 버전이야. 사용자 언어에 맞는 걸 골라 보여줘"라고 알려줘야 해요. 이 신호가 바로 hreflang(언어 대체 표시)이에요.

63.3 hreflang은 정확히 어떻게 쓰죠?

가장 흔한 방법은 각 페이지 <head>에 link 태그로 형제 언어들을 나열하는 거예요. 한국어와 영어 두 버전이 있다면 이렇게요.


<link rel="alternate" hreflang="ko" href="https://example.com/ko/pricing">
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing">


포인트가 둘이에요. 첫째, hreflang 값은 언어 코드예요. "ko", "en"처럼 언어만 쓰거나, 지역까지 나눌 땐 "en-US", "en-GB", "pt-BR"처럼 언어-지역으로 붙여요. 언어가 먼저, 지역이 뒤예요. 둘째, 자기 자신도 목록에 넣어야 해요. /ko/ 페이지의 head에도 ko와 en이 둘 다 들어가야 하죠. 이걸 자기 참조(self-referencing)라고 하는데, 빠뜨리는 실수가 정말 많아요. 참고로 이 목록을 head 대신 XML 사이트맵에 몰아 적을 수도 있어요. 페이지가 수천 개면 사이트맵 방식이 관리하기 편해요.

63.4 x-default는 뭐죠?

여기 특별한 값이 하나 있어요. hreflang="x-default"예요. "위 언어 중 딱 맞는 게 없을 때 여기로 보내"라는 기본 도착지예요.


<link rel="alternate" hreflang="ko" href="https://example.com/ko/pricing">
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing">
<link rel="alternate" hreflang="x-default" href="https://example.com/pricing">


예를 들어 프랑스어 사용자가 검색했는데 우리 사이트엔 ko와 en만 있어요. 이때 x-default로 지정한 페이지로 보내는 거예요. 보통 언어 선택 화면이나 기본 언어 페이지를 x-default로 걸어요. 없어도 동작은 하지만, 목록에 없는 언어의 사용자를 어디로 안내할지 정해두면 훨씬 친절하죠.

63.5 흔한 실수는 뭐죠?

hreflang은 규칙이 까다로워서, 틀려도 에러 하나 없이 조용히 무시되는 경우가 잦아요. 그래서 더 골치예요. 대표적인 함정 세 가지를 짚을게요.


첫째, 양방향이 아니어서예요. /ko/가 /en/을 가리키면 /en/도 반드시 /ko/를 되가리켜야 해요. 한쪽만 걸면 구글이 짝을 못 믿고 통째로 무시해요. 둘째, 자기 참조 누락이에요. 앞서 말했듯 자기 자신도 목록에 있어야 해요. 셋째, 잘못된 코드예요. "en_US"처럼 밑줄을 쓰거나(하이픈이 맞아요), "kr"처럼 없는 언어 코드(한국어는 ko예요)를 쓰면 무효가 돼요. "en-uk"도 흔한 오타로, 영국 지역 코드는 gb예요.

63.6 canonical이랑 hreflang은 같이 어떻게 쓰죠?

마지막으로 canonical(대표 URL 지정)과의 궁합이에요. 여기서 사고가 제일 많이 나요. 언뜻 "영어를 대표로 삼고 한국어 canonical을 영어로 걸까?" 싶은데, 절대 안 돼요. 그러면 구글이 한국어 페이지를 영어의 사본으로 여겨 색인에서 빼버려요.


규칙은 간단해요. 각 언어 페이지의 canonical은 자기 자신을 가리켜야 해요.


<!-- /ko/pricing 페이지 안 -->
<link rel="canonical" href="https://example.com/ko/pricing">
<link rel="alternate" hreflang="ko" href="https://example.com/ko/pricing">
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing">


canonical은 "나는 나 자신이 대표"라고 말하고, hreflang은 "내 언어 형제는 이것들"이라고 말해요. 역할이 다른 두 신호가 이렇게 짝을 이뤄야 각 언어 페이지가 제 언어권에서 온전히 노출돼요.

63.7 오늘 배운 걸 묶어볼게요

다국어 URL과 SEO의 뼈대예요.


핵심
1. URL은 경로, 서브도메인, 국가 도메인 중 고르고 대개 경로 방식이 무난해요.
2. 언어 버전은 hreflang으로 "같은 글의 다른 언어"임을 알려요.
3. hreflang 목록엔 자기 자신도 넣고(자기 참조) 양쪽이 서로 가리켜야 해요.
4. 목록에 없는 언어는 x-default로 안내해요.
5. canonical은 각자 자기 자신을 가리켜요. 대표를 한 언어로 몰면 안 돼요.


정리하면 다국어 SEO는 "이건 번역본이지 사본이 아니다"를 검색엔진에 또박또박 알려주는 일이에요. URL을 잘 나누고, hreflang으로 언어를 짝지어주고, canonical로 각자의 대표성을 지켜주면, 각 나라 사용자가 자기 언어 페이지를 검색 결과에서 바로 만나요.