이 태그에 대한 통념의 절반을 뒤집는 사실부터 시작하겠습니다. rel="canonical"은 명령이 아니라 힌트입니다.
구글은 이것을 다른 모든 신호와 함께 저울질합니다. 내부 링크, 사이트맵, 리디렉션, hreflang. 이 신호들이 서로 어긋나면 검색엔진은 스스로 옳다고 판단한 URL을 고르고 여러분의 canonical을 무시합니다. 중복 URL 통합에 관한 구글 공식 문서에 그렇게 적혀 있습니다.
나머지는 모두 여기서 따라 나옵니다. canonical은 혼자서는 작동하지 않고, 다른 신호들이 같은 곳을 가리킬 때만 작동합니다.
문법
태그는 <head> 안에 넣습니다.
<link rel="canonical" href="https://example.com/page">
가장 자주 어겨지는 세 가지 규칙.
절대 URL을 쓰십시오. 상대 경로도 기술적으로는 허용되지만, 기준 URL에 오류가 있으면 곧바로 무의미해집니다. 스킴과 호스트까지 전부 적으십시오.
태그는 정확히 하나. 한 페이지에 서로 다른 canonical이 둘 있으면 구글은 둘 다 버립니다. SEO 플러그인 두 개를 동시에 돌릴 때 나오는 전형적인 결과입니다.
오직 <head> 안에만. 스크립트가 엉뚱한 위치에 넣는 식으로 <body>에 들어간 canonical은 반영되지 않습니다.
자체 HTML이 없는 파일(PDF, 이미지)에서는 canonical을 HTTP 헤더로 보냅니다.
Link: <https://example.com/document.pdf>; rel="canonical"
canonical이 해결하는 것
해결하는 문제는 하나입니다. 같은 내용이 여러 URL에 존재하고, 그 모두가 접근 가능한 상태로 남아야 하는 상황입니다.
전형적인 경우:
- 정렬과 필터 파라미터:
?sort=price,?color=red; - UTM 태그와 광고 식별자;
- 여러 카테고리에 걸린 동일 상품;
- 인쇄용 페이지;
- 서로 다른 서브도메인에 있는 같은 자료.
어느 경우에도 단순히 리디렉션할 수 없습니다. 그 페이지 자체가 필요하기 때문입니다. canonical은 어느 주소를 주된 것으로 볼지 검색엔진에 알려주고, 신호를 그쪽으로 모읍니다.
자기 참조 canonical
페이지는 canonical을 자기 자신으로 향하게 할 수 있습니다. 필수는 아니지만 유용합니다. 누군가 여러분의 URL 끝에 엉뚱한 파라미터를 붙여 열었을 때 검색엔진이 그것을 별도 페이지로 취급하는 사태에 대한 보험이 됩니다.
canonical이 아닌 것
오류의 대부분이 여기서 나오므로, 이웃한 도구들을 한 표에 모았습니다.
| 목적 | 도구 | 왜 canonical이 아닌가 |
|---|---|---|
| 페이지가 영구 이전함 | 301 리디렉션 | canonical은 옛 주소를 접근 가능한 채로 둠 |
| 목적지가 일시적으로 바뀜 | 302 리디렉션 | 같은 이유 |
| 페이지가 색인에 없어야 함 | noindex |
canonical은 색인에서 아무것도 빼지 않음 |
| 페이지를 크롤링하지 말아야 함 | robots.txt | 이것도 색인에서 빼주지는 않음 |
| 같은 내용의 여러 언어판 | hreflang + 자기 참조 canonical | 이들은 중복이 아님 |
| 페이지네이션 목록 | 아무것도 안 씀 | 2, 3, 4페이지는 각자 독립적 |
두 항목은 특히 강조할 만합니다.
canonical은 301을 대신하지 못합니다. 페이지가 실제로 이전했다면 리디렉션하십시오. canonical은 두 URL이 모두 계속 작동해야 하는 상황을 위한 것입니다.
페이지네이션은 중복이 아닙니다. 목록의 모든 페이지 canonical을 1페이지로 향하게 하는 것은 흔한 실수입니다. 2, 3페이지의 내용은 다르고, 여러분은 그것을 색인에서 지우고 있을 뿐입니다.
canonical과 hreflang
가장 까다로운 부분이자, 이 영역에서 가장 값비싼 실수가 사는 곳입니다.
그 실수란 모든 언어판을 영어판으로 canonical하는 것입니다. 영어가 '본체'라는 논리는 그럴듯해 보입니다. 결과는 정반대입니다. 독일어와 스페인어 페이지가 독립적이지 않다고 검색엔진에 알리는 셈이 되어, 그 페이지들은 각자의 시장에서 사라집니다.
올바른 구성:
- 각 언어판은 canonical을 자기 자신으로 향하게 한다;
- 모든 판이
hreflang으로 서로를 나열한다. 자기 자신도 포함한다; - 관계는 상호적이어야 한다. A가 B를 참조하면 B도 A를 참조해야 한다;
hreflang은 파라미터가 붙은 변형이 아니라 정규 URL을 가리킨다;x-default는 어떤 언어에도 맞지 않는 방문자를 위한 대체본을 지정한다.
지금 읽고 계신 이 사이트가 그렇게 만들어져 있습니다. YouTube 링크 단축에 관한 페이지는 21개 언어판이 있고, 각각이 자기 자신으로 canonical합니다. 중국어판은 이렇습니다.
<link rel="canonical" href="https://lix.li/suoduan-youtube-lianjie">
<link rel="alternate" hreflang="en" href="https://lix.li/shorten-youtube-link">
<link rel="alternate" hreflang="zh" href="https://lix.li/suoduan-youtube-lianjie">
<link rel="alternate" hreflang="es" href="https://lix.li/acortar-link-youtube">
canonical이 영어가 아니라 중국어 URL을 가리킨다는 점, 그리고 중국어판이 자신의 hreflang 목록에 들어 있다는 점을 눈여겨보십시오.
자주 나오는 실수
구글은 주요 항목을 오래전 rel=canonical의 다섯 가지 실수에 관한 글에 정리했고, 목록은 그 뒤로 거의 바뀌지 않았습니다.
404를 반환하는 URL을 가리키는 canonical. 태그 전체가 무시됩니다.
noindex가 걸린 페이지를 가리키는 canonical. 모순된 신호입니다. '이것을 주된 것으로 보라'와 '이것을 색인하지 말라'를 동시에 말하는 셈입니다.
robots.txt로 차단된 URL을 가리키는 canonical. 크롤러가 가져올 수 없으므로 확인할 수도 없습니다.
연쇄. A가 B를, B가 C를 가리킴. Search Console에서는 '정규 URL이 선택되지 않음'이 됩니다. 최종 URL을 곧바로 가리키십시오.
http와 https, www와 비-www 혼용. canonical의 스킴과 호스트는 주된 것으로 삼는 사이트 버전과 일치해야 합니다.
같은 페이지의 canonical과 noindex. 둘 중 하나만 고르십시오.
구글이 다른 URL을 선택했을 때
Search Console에서는 '중복. 사용자가 표준으로 지정하지 않은 페이지를 구글이 표준으로 선택함'으로 나타납니다.
이는 마크업 오류도 아니고 벌점도 아닙니다. 다른 신호들이 여러분의 태그를 눌렀다는 통지입니다. 확인할 것:
- 내부 링크. 사이트 전체가 파라미터 붙은 변형으로 링크하는데 canonical만 깨끗한 URL을 가리킨다면, 검색엔진은 링크를 믿습니다.
- 사이트맵. 정규 URL만 담겨야 합니다.
- 리디렉션. canonical이 가리키는 곳이 또 어딘가로 리디렉션한다면 태그는 힘을 잃습니다.
- 정말 중복인지. 내용이 눈에 띄게 다르다면 검색엔진이 별개 페이지로 다루는 것이 타당합니다.
신호를 정렬하면 태그는 작동하기 시작합니다. 알고리즘과 다투는 것은 소용없습니다. 알고리즘은 전체 그림을 읽습니다.
단축 링크와 canonical
자주 나오지만 일반 가이드가 답하지 않는 질문입니다.
단축 링크가 페이지의 중복을 만드는가? 아닙니다.
단축 서비스는 내용의 사본을 제공하지 않습니다. HTTP 리디렉션을 반환할 뿐입니다. 302 응답에는 본문도 <head>도 없으므로 canonical을 넣을 자리가 물리적으로 없습니다. 크롤러는 리디렉션을 따라가 목적지를 다루고, 목적지는 자신의 canonical을 가지고 있습니다. 이 구조는 단축 URL은 어떻게 작동하는가에서 설명합니다.
이 사이트의 단축 링크는 추가로 X-Robots-Tag: noindex, nofollow 헤더를 반환하여, 리디렉션 자체를 색인하지 말 것을 명시적으로 요청합니다.
그렇다면 자체 단축 도메인은? 리디렉션하는 한 이것도 중복을 만들지 않습니다. 중복은 같은 내용을 리디렉션 없이 두 도메인에서 제공할 때 생깁니다. 그때야말로 주 도메인을 가리키는 canonical이 필요합니다. 독자 도메인 단축 링크의 의의는 따로 다루며, 연결은 독자 도메인 페이지에서 할 수 있습니다.
짧은 체크리스트
- 페이지당 canonical 하나,
<head>안에, 절대 URL로. - 대상이 200을 반환하고, robots.txt로 차단되지 않았으며,
noindex도 걸려 있지 않다. - 연쇄 금지 — 최종 URL을 곧바로 가리킨다.
- 각 언어판은 자기 자신으로 canonical하고, hreflang은 상호적이다.
- 사이트맵과 내부 링크가 같은 정규 URL로 향한다.
- 페이지네이션과 이전된 페이지는 canonical이 아니라 각자의 도구로 해결한다.