다국어 웹사이트를 구축하고 한국어 페이지에 접근했는데 구글 검색 결과에 영어 페이지가 노출되거나, 반대로 미국 사용자에게 한국어 페이지가 먼저 뜨는 황당한 상황을 경험해봤을 것이다.
다만 대부분의 개발자들은 URL에 /ko/나 /en/ 같은 경로만 붙여두면 검색엔진이 알아서 언어별로 색인해줄 것이라 생각하고, Hreflang 태그의 정확한 표준 규격과 상호 참조 원리를 몰라 크롤링 오류를 방지하지 못하는 경우가 많다.
이번에는 Hreflang 태그가 정확히 무엇인지, 언어 및 국가 코드 타겟팅이 왜 필요한지, 그리고 HTML head와 XML 사이트맵에서 오차 없이 설정하는 방법까지 완벽하게 정리해서 소개하겠다.
Hreflang 태그는 검색엔진 크롤러에게 특정 페이지의 언어별, 국가별 변형 버전이 존재함을 알려주는 HTML 메타 속성이다.
동일한 내용의 콘텐츠가 여러 언어로 존재할 때 검색엔진은 이를 중복 문서로 오인할 수 있다. 이때 Hreflang을 올바르게 정의해두면 사용자 접속 지역과 브라우저 언어 설정에 맞는 최적의 URL을 검색 결과에 표시해준다.
| 구분 | 설정 미비 시 문제점 | Hreflang 정상 적용 시 |
|---|---|---|
| 검색 노출 | 지역/언어 타깃이 엉켜 타깃 국가 검색 결과에 노출 누락 | 사용자의 국가 및 언어 환경에 맞는 URL 정확히 노출 |
| 중복 콘텐츠 | 영어(US)와 영어(UK) 페이지가 중복 문서로 제재받을 위험 | 지역별 변형 문서로 정식 인정받아 페널티 방지 |
| 이탈률(Bounce Rate) | 잘못된 언어 페이지로 진입한 사용자의 즉시 이탈 발생 | 본인 언어 페이지로 바로 진입하여 이탈률 감소 |
Hreflang 속성을 적용하는 방법은 크게 세 가지가 있다. 프로젝트 규모와 파일 형태에 따라 적절한 방식을 선택해야 한다.
- HTML <head> 태그 방식: 가장 직관적이며 소규모 웹사이트나 단일 페이지 앱에서 쉽게 적용 가능하다.
- HTTP 응답 헤더 방식: PDF 파일이나 비HTML 문서의 다국어 버전을 제공할 때 필수적으로 사용된다.
- XML 사이트맵 방식: 페이지 수가 수천 개 이상인 대규모 서비스에서 HTML 코드 비대화를 막고 중앙에서 일괄 관리할 때 가장 추천한다.
실무에서 자주 발생하는 잘못된 적용 사례와 이를 보완한 올바른 코드 구조를 확인해보자.
✗ 잘못된 코드 (잘못된 언어 코드 사용 및 자기 참조/x-default 누락)
<!-- ✗ 잘못된 예시: kr은 국가 코드이며 언어 코드가 아님. 자기 자신 페이지 누락 -->
<link rel="alternate" hreflang="kr" href="https://example.com/ko/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/" />✓ 올바른 코드 (ISO 표준 규격 준수, 자기 참조 및 x-default 포함)
<!-- ✓ 올바른 예시: ISO 639-1 언어 코드(ko) 준수, 자기 참조 포함, 기본 언어(x-default) 지정 -->
<link rel="alternate" hreflang="ko" href="https://example.com/ko/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/" />결과: 구글 크롤러가 한국어 사용자에게는 /ko/ 경로를, 그 외 언어권 사용자에게는 x-default로 지정된 /en/ 경로를 안정적으로 반환한다.
✗ 잘못된 코드 (xhtml 네임스페이스 누락 및 상호 참조 고리 분단)
<!-- ✗ 잘못된 예시: xhtml 네임스페이스 선언 누락으로 인한 XML 파싱 에러 발생 -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/ko/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/"/>
</url>
</urlset>✓ 올바른 코드 (네임스페이스 정의 및 양방향 상호 참조 완성)
<!-- ✓ 올바른 예시: xmlns:xhtml 정의 및 각 URL 노드 내 전체 언어쌍 명시 -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com/ko/</loc>
<xhtml:link rel="alternate" hreflang="ko" href="https://example.com/ko/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/"/>
</url>
<url>
<loc>https://example.com/en/</loc>
<xhtml:link rel="alternate" hreflang="ko" href="https://example.com/ko/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/"/>
</url>
</urlset>결과: XML 파싱 오류 없이 구글 검색 콘솔에서 즉시 색인 상호 연동 상태가 확인된다.
실무 개발 현장에서 가장 많이 발생하는 세 가지 실수를 반드시 점검해야 한다.
첫째, 언어 코드 표기 오류다. 흔히 한국어를 표시할 때 kr을 사용하는데, 이는 국가 코드다. 언어 코드는 ISO 639-1 규격인 ko를 써야 하고, 특정 국가를 타깃팅하려면 ko-KR 형태로 언어-국가 순서를 맞춰야 한다.
둘째, 상호 양방향 링크(Reciprocal Links) 누락이다. A 페이지가 B 페이지를 Hreflang으로 가리키고 있다면, 반드시 B 페이지도 A 페이지를 동일한 태그로 가리키고 있어야 한다. 한쪽만 연결되어 있으면 구글 검색엔진은 해당 Hreflang 지시를 무시한다.
셋째, 상대 경로 사용이다. Hreflang 태그 내의 href 속성은 반드시 https://를 포함한 절대 경로(Absolute URL)로 작성해야 크롤러가 정확히 인식한다.
Hreflang 태그는 다국어 서비스를 제공하는 웹사이트의 글로벌 SEO 성패를 결정지어주는 핵심 요소다. 국가 코드 오타 수정이나 양방향 상호 참조 같은 작은 최적화와 습관이 모여서 전 세계 사용자에게 정확한 언어의 콘텐츠를 전달하는 큰 효과를 만든다는 점을 잊지 말자. 이 글의 실전 코드를 참고해 지금 바로 구글 검색 콘솔의 Hreflang 태그 상태를 점검하면, 글로벌 검색 유입 최적화라는 최종 결과를 얻을 수 있을 것이다.