다국어 웹사이트를 개발하여 한국어, 영어, 일본어 등 언어별 페이지를 제공하고 있는데 구글 검색 결과에서 한국어 사용자에게 영문 페이지가 노출되거나, 중복 콘텐츠로 분류되어 인덱싱이 누락되는 현상을 경험해봤을 것이다.
다만 대부분의 개발자들은 단순히 언어별 URL 구조(/ko/, /en/)만 나눠놓으면 검색엔진이 알아서 사용자의 국가에 맞춰 보여줄 것이라고 착각하지만, 정작 구글이 언어별 관계를 파악하는 핵심 메커니즘인 hreflang 속성을 정확히 적용하지 못하는 경우가 많다.
이번에는 hreflang 태그가 정확히 무엇인지, 왜 언어별 검색 노출에 필수적인지, 그리고 실무 웹사이트에 어떻게 올바르게 적용하고 검증하는지 완벽하게 정리해서 소개하겠다.

 

1. hreflang 태그란 무엇인가?

hreflang은 HTML <link> 요소의 속성 중 하나로, 검색엔진(Google, Yandex 등)에게 특정 페이지의 언어별/지역별 변형(Alternate) 버전이 존재한다는 것을 알려주는 역할을 한다.
예를 들어 동일한 내용을 한국어(/ko/about)와 영어(/en/about)로 제공할 때, 두 페이지가 완전히 별개의 스팸/중복 페이지가 아니라 특정 언어 사용자를 위한 '대체 페이지'임을 명시하는 것이다.

hreflang을 올바르게 설정하면 다음과 같은 이점을 얻을 수 있다.

  • 사용자 경험(UX) 향상: 한국에서 검색한 사용자에게는 한국어 페이지를, 미국에서 검색한 사용자에게는 영어 페이지를 우선적으로 노출시킨다.
  • 중복 콘텐츠(Duplicate Content) 불이익 방지: 미국, 영국, 호주용 영어 페이지처럼 내용이 거의 동일한 경우 검색엔진이 중복 페이지로 판단하여 색인에서 제외하는 것을 막아준다.

 

2. hreflang 설정 방법 3가지

hreflang을 적용하는 방법은 크게 3가지가 있다. 웹사이트의 규모와 아키텍처에 맞춰 알맞은 방식을 선택해야 한다.

방식적용 위치장점단점
HTML Head 태그<head> 내부구현이 직관적이고 소규모 사이트에 적합함언어 수와 페이지 수가 많아지면 HTML 용량이 커짐
HTTP 응답 헤더서버 Response HeaderPDF 등 HTML이 아닌 파일에도 적용 가능함헤더 설정 관리가 까다로울 수 있음
XML 사이트맵sitemap.xmlHTML 소스를 더럽히지 않고 대규모 사이트에 유리함XML 파일 구조가 복잡해짐

 

3. 실전 예제 및 흔한 실수

대부분의 개발자들이 실수하는 부분은 '자기 참조(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에 한국어 페이지를 역으로 가리키는 태그가 없으면 양방향 참조 실패로 무효 처리된다.

 

✓ 올바른 코드 (표준 ISO 코드 적용 및 x-default 설정)

다음은 한국어 페이지(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>에도 똑같이 들어가야 완벽하게 동작한다.

 

4. 주의사항 및 흔한 실수 체크리스트

실무에서 hreflang 태그를 적용할 때 발생하기 쉬운 오류를 정리했다.

  • 언어 코드와 국가 코드의 혼동: hreflang="kr"은 존재하지 않는 언어 지정이다. 반드시 ko(언어) 또는 ko-KR(언어-국가) 형태로 작성해야 한다. 국가 코드만 단독으로(hreflang="US") 사용할 수 없다.
  • 상대 경로 사용 금지: URL 속성값에는 절대 경로(https://...)를 사용해야 한다. 상대 경로(/en/page)를 쓰면 크롤러가 인식하지 못할 수 있다.
  • canonical 태그와의 관계: 각 언어 페이지는 자기 자신을 가리키는 canonical 태그를 가져야 한다. 예를 들어 /ko/page의 canonical은 자기 자신인 /ko/page여야지, 영문 메인 /en/page를 가리키면 안 된다.
  • noindex 페이지에 지정 금지: noindex 처리된 페이지에는 hreflang 태그를 설정하지 않는다. 색인되지 않는 페이지를 대체 페이지로 제안하면 크롤링 에러가 발생한다.

 

5. 마무리

다국어 웹사이트의 검색 노출 최적화는 단순히 번역된 문장을 게시하는 것으로 끝나지 않는다. 정확한 ISO 언어 및 국가 코드를 사용한 hreflang 설정과 양방향 링크 구조 구성이 모여서 글로벌 검색 엔진에서 올바른 타겟 유저를 유입시키는 큰 효과를 만든다는 점을 잊지 말자. 이 글의 올바른 태그 예시와 체크리스트를 참고해 현재 운영 중인 사이트의 <head> 소스나 사이트맵을 점검하면, 구글 서치 콘솔의 hreflang 오류를 완벽히 해결하고 국가별 타겟 검색 노출을 정상화할 수 있을 것이다.