다국어 웹사이트를 개발하여 한국어, 영어, 일본어 등 언어별 페이지를 제공하고 있는데 구글 검색 결과에서 한국어 사용자에게 영문 페이지가 노출되거나, 중복 콘텐츠로 분류되어 인덱싱이 누락되는 현상을 경험해봤을 것이다.
다만 대부분의 개발자들은 단순히 언어별 URL 구조(/ko/, /en/)만 나눠놓으면 검색엔진이 알아서 사용자의 국가에 맞춰 보여줄 것이라고 착각하지만, 정작 구글이 언어별 관계를 파악하는 핵심 메커니즘인 hreflang 속성을 정확히 적용하지 못하는 경우가 많다.
이번에는 hreflang 태그가 정확히 무엇인지, 왜 언어별 검색 노출에 필수적인지, 그리고 실무 웹사이트에 어떻게 올바르게 적용하고 검증하는지 완벽하게 정리해서 소개하겠다.
hreflang은 HTML <link> 요소의 속성 중 하나로, 검색엔진(Google, Yandex 등)에게 특정 페이지의 언어별/지역별 변형(Alternate) 버전이 존재한다는 것을 알려주는 역할을 한다.
예를 들어 동일한 내용을 한국어(/ko/about)와 영어(/en/about)로 제공할 때, 두 페이지가 완전히 별개의 스팸/중복 페이지가 아니라 특정 언어 사용자를 위한 '대체 페이지'임을 명시하는 것이다.
hreflang을 올바르게 설정하면 다음과 같은 이점을 얻을 수 있다.
- 사용자 경험(UX) 향상: 한국에서 검색한 사용자에게는 한국어 페이지를, 미국에서 검색한 사용자에게는 영어 페이지를 우선적으로 노출시킨다.
- 중복 콘텐츠(Duplicate Content) 불이익 방지: 미국, 영국, 호주용 영어 페이지처럼 내용이 거의 동일한 경우 검색엔진이 중복 페이지로 판단하여 색인에서 제외하는 것을 막아준다.
hreflang을 적용하는 방법은 크게 3가지가 있다. 웹사이트의 규모와 아키텍처에 맞춰 알맞은 방식을 선택해야 한다.
| 방식 | 적용 위치 | 장점 | 단점 |
|---|---|---|---|
| HTML Head 태그 | <head> 내부 | 구현이 직관적이고 소규모 사이트에 적합함 | 언어 수와 페이지 수가 많아지면 HTML 용량이 커짐 |
| HTTP 응답 헤더 | 서버 Response Header | PDF 등 HTML이 아닌 파일에도 적용 가능함 | 헤더 설정 관리가 까다로울 수 있음 |
| XML 사이트맵 | sitemap.xml | HTML 소스를 더럽히지 않고 대규모 사이트에 유리함 | XML 파일 구조가 복잡해짐 |
대부분의 개발자들이 실수하는 부분은 '자기 참조(Self-reference)'와 '양방향 상호 참조(Return tag)'를 누락하는 것이다. A 페이지가 B 페이지를 지칭하면, B 페이지도 반드시 A 페이지를 지칭하는 hreflang 태그를 포함해야 구글이 이를 정식으로 인정한다.
아래 코드는 한국어 페이지 HTML 헤더에 작성된 나쁜 예시다.
<!-- 잘못된 예: 자기 자신(ko)에 대한 참조가 없고, 국가/언어 포맷이 틀림 -->
<head>
<link rel="alternate" hreflang="kr" href="https://example.com/ko/page" />
<link rel="alternate" hreflang="en-US" href="https://example.com/en/page" />
</head>✗ kr은 국가 코드일 뿐 유효한 언어 코드가 아니다. ISO 639-1 형식인 ko를 사용해야 한다.
✗ 한국어 페이지 스스로를 가리키는 self-referencing 태그가 빠져 있다.
✗ 영어 페이지(/en/page) 측 HTML에 한국어 페이지를 역으로 가리키는 태그가 없으면 양방향 참조 실패로 무효 처리된다.
다음은 한국어 페이지(https://example.com/ko/page)의 <head> 영역에 들어갈 올바른 태그 예시다.
<head>
<!-- 1. 자기 자신 참조 -->
<link rel="alternate" hreflang="ko" href="https://example.com/ko/page" />
<!-- 2. 다른 언어 타겟 -->
<link rel="alternate" hreflang="en" href="https://example.com/en/page" />
<link rel="alternate" hreflang="ja" href="https://example.com/ja/page" />
<!-- 3. 특정 지역 타겟 (언어-국가 순) -->
<link rel="alternate" hreflang="en-us" href="https://example.com/en-us/page" />
<!-- 4. 일치하는 언어가 없을 때 보여줄 기본 폴백(Fallback) 페이지 -->
<link rel="alternate" hreflang="x-default" href="https://example.com/en/page" />
</head>✓ 언어 코드는 ISO 639-1(예: ko, en, ja)을 준수하며, 국가를 구분할 때는 ISO 3166-1 alpha-2(예: en-us, en-gb)를 덧붙인다.
✓ x-default를 지정하여 지정되지 않은 다른 국가/언어 사용자에게 보여줄 대표 URL을 명시했다.
✓ 동일한 태그 세트가 /en/page, /ja/page, /en-us/page의 <head>에도 똑같이 들어가야 완벽하게 동작한다.
실무에서 hreflang 태그를 적용할 때 발생하기 쉬운 오류를 정리했다.
- 언어 코드와 국가 코드의 혼동:
hreflang="kr"은 존재하지 않는 언어 지정이다. 반드시ko(언어) 또는ko-KR(언어-국가) 형태로 작성해야 한다. 국가 코드만 단독으로(hreflang="US") 사용할 수 없다. - 상대 경로 사용 금지: URL 속성값에는 절대 경로(
https://...)를 사용해야 한다. 상대 경로(/en/page)를 쓰면 크롤러가 인식하지 못할 수 있다. - canonical 태그와의 관계: 각 언어 페이지는 자기 자신을 가리키는
canonical태그를 가져야 한다. 예를 들어 /ko/page의 canonical은 자기 자신인 /ko/page여야지, 영문 메인 /en/page를 가리키면 안 된다. - noindex 페이지에 지정 금지:
noindex처리된 페이지에는 hreflang 태그를 설정하지 않는다. 색인되지 않는 페이지를 대체 페이지로 제안하면 크롤링 에러가 발생한다.
다국어 웹사이트의 검색 노출 최적화는 단순히 번역된 문장을 게시하는 것으로 끝나지 않는다. 정확한 ISO 언어 및 국가 코드를 사용한 hreflang 설정과 양방향 링크 구조 구성이 모여서 글로벌 검색 엔진에서 올바른 타겟 유저를 유입시키는 큰 효과를 만든다는 점을 잊지 말자. 이 글의 올바른 태그 예시와 체크리스트를 참고해 현재 운영 중인 사이트의 <head> 소스나 사이트맵을 점검하면, 구글 서치 콘솔의 hreflang 오류를 완벽히 해결하고 국가별 타겟 검색 노출을 정상화할 수 있을 것이다.