캐노니컬 태그
캐노니컬 태그는 여러 URL이 거의 같은 콘텐츠를 제공할 때 어떤 URL을 대표로 삼을지 페이지 head 안의 link 요소로 알려 주는 장치입니다. 덕분에 검색엔진은 순위 신호를 변형된 URL마다 흩뿌리지 않고 하나의 주소로 모읍니다. 다만 이것은 명령이 아니라 힌트여서, 구글은 리디렉션과 내부 링크, 사이트맵을 함께 견주어 보고 다른 URL을 대표로 고를 수도 있습니다.
무엇을 모아 주고, 무엇은 제안에 그치는가
중복 URL은 일부러 만들어지는 경우가 거의 없습니다. 같은 상품이 두 카테고리에 걸리고, 추적 파라미터 하나가 페이지를 백 개로 늘리고, 인쇄용과 모바일용이 함께 살아 있고, 같은 콘텐츠가 www와 www 없는 도메인에서, 또 http와 https 양쪽에서 열립니다. 이런 변형들은 저마다 따로 링크와 노출을 쌓고, 그렇게 한 페이지가 같은 검색어를 두고 자기 자신과 경쟁하게 됩니다. 키워드 카니발리제이션에서 다룬 자해에 가까운 분산과 같은 현상입니다. 캐노니컬 태그는 남기고 싶은 버전을 지목하고, 나머지 버전의 신호를 그쪽으로 몰아 달라고 요청합니다.
창업자가 가장 자주 오해하는 지점은 이 요청의 세기입니다. 구글은 선언된 캐노니컬을 여러 입력 중 하나로 다루고, 전체 그림에서 자신이 선호하는 URL을 스스로 고릅니다.
- 선언한 캐노니컬 — 페이지 head 안에 있는 link 요소 그 자체.
- 리디렉션 — 301은 중복에 주석을 다는 대신 아예 없애기 때문에 태그보다 훨씬 강한 의사표시다.
- 내부 링크 — 사이트의 모든 링크가 선언하지 않은 쪽을 가리키고 있다면 그 선언은 자기 사이트의 내비게이션과 다투는 셈이다. 내부 링크가 이 판단과 분리될 수 없는 이유다.
- 사이트맵 — 목록에 올린 URL은 색인해 달라고 요청한 URL이기도 하다.
- [hreflang](/glossary/hreflang) 클러스터 — 서로를 참조하는 언어 변형은 한 묶음으로 읽히고, 클러스터와 어긋나는 캐노니컬은 대개 밀린다.
이 신호들이 서로 맞으면 태그는 거의 언제나 존중됩니다. 엇갈리면 구글이 스스로 결론을 내고, 자신이 고른 URL을 서치 콘솔에 알려 줍니다. 기술적으로는 멀쩡히 존재하는 캐노니컬이 아무 효력도 내지 못하는 일이 생기는 건 이 때문입니다.
가장 먼저 확인할 실패 유형
망가진 캐노니컬은 대부분 몇 가지 유형에 들어갑니다. 다른 곳으로 리디렉션되는 URL을 가리키는 캐노니컬은 더 이상 그 페이지를 서빙하지 않는 주소로 신호를 모아 달라고 요청하는 셈입니다. noindex 페이지를 가리키는 캐노니컬은 색인에서 빼 달라고 이미 요청해 둔 대상에 신호를 모으라고 말하는 셈입니다. 템플릿이 모든 페이지에 홈 캐노니컬을 박아 넣은 경우 — 실제로 흔한 버그입니다 — 사이트 전체가 하나의 문서라고 구글에 알리게 됩니다. 그리고 소스에는 올바르게 들어 있지만 스크립트나 렌더링 계층에 밀려 head까지 닿지 못한 캐노니컬은, 알아채기 가장 어려운 방식으로 망가져 있습니다. 확인하러 손이 가는 도구들이 하나같이 그 태그를 계속 보여 주기 때문입니다.
서치 콘솔에는 비슷해 보이지만 정반대를 뜻하는 두 상태가 있습니다. "적절한 표준 태그가 있는 대체 페이지"는 구글이 선언을 읽고 동의해 통합했다는 뜻으로, 중복에게는 건강한 종착점이지 쫓아다닐 오류가 아닙니다. "사용자가 선택한 표준 없는 중복 페이지"는 거의 같은 페이지를 찾았는데 쓸 만한 캐노니컬이 없어 구글이 대신 골랐다는 뜻입니다. 손대야 할 것은 후자이고, 가장 먼저 시험할 것은 태그가 가리키는 곳이 아니라 Googlebot이 그 태그를 받기는 하는지입니다.
구글이 우리 캐노니컬을 보지 못하게 됐을 때 배운 것
여기부터는 문서가 아니라 agentceres.com을 운영하며 얻은 이야기입니다. 2026년 8월, 서치 콘솔은 우리 사이트의 URL 88개를 사용자가 선택한 표준이 없는 중복으로 보고했습니다. 캐노니컬 태그는 그동안 내내 소스에 올바르게 들어 있었습니다. 원인은 두 겹 아래에 있었습니다. 마케팅과 법률 관련 라우트 열댓 개가 조용히 정적 프리렌더링에서 빠져 있었고, 우리 프레임워크는 동적으로 렌더링되는 페이지의 메타데이터를 스트리밍으로 내보냅니다. 그래서 제목과 robots 지시문, 캐노니컬, hreflang이 문서 시작에서 약 1.5KB 지점에 이미 닫힌 head보다 뒤, body 안으로 나가고 있었습니다. head 밖의 캐노니컬 링크는 캐노니컬 링크가 아니므로, 구글은 받은 그대로 기록했습니다. 아무것도 선언되지 않은 거의 동일한 페이지들로 보고 대신 골라 준 것입니다.
가장 많은 시간을 앗아간 대목이 전할 가치가 가장 큽니다. 서치 콘솔의 실제 URL 테스트는 크롤러와 다른 사용자 에이전트로 가져오는데, 그 에이전트가 우리 프레임워크에서 스트리밍 없이 완전한 메타데이터를 받는 봇 기본 목록에 들어 있었습니다. 반면 Googlebot은 의도적으로 들어 있지 않았습니다. 그래서 실제 URL 테스트는 실행할 때마다 head 안의 올바른 캐노니컬을 보여 준 반면, 정작 색인을 만드는 크롤은 아무것도 보지 못했습니다. 어떤 페이지가 중복으로 보고되면 어떤 라이브 테스트보다 색인된 결과와 원본 HTML을 믿으십시오. 소스 보기로 head가 어디서 닫히는지 찾으면 됩니다. 같은 사고의 더 단순한 절반도 본인 사이트에서 볼 만합니다. 우리 www 호스트가 모든 페이지를 리디렉션 없이 200으로 서빙하고 있어서, 구글이 www를 apex 도메인보다 위의 대표 호스트로 색인해 두었고 301 하나로 해결됐습니다. 이 규모의 수정은 서치 콘솔이 검증을 확정하기까지 보통 두어 주가 걸립니다. 캐노니컬 보고서가 아니라 트래픽 감소에서 거꾸로 짚어 가는 중이라면 내 웹사이트에 트래픽이 없는 이유가 이보다 앞선 점검을 다룹니다.
FAQ
- 캐노니컬 태그와 301 리디렉션은 같은 건가요?
- 다릅니다. 갈림길은 중복 URL에 계속 접근할 수 있느냐입니다. 301은 중복 자체를 없앱니다. 사람이든 크롤러든 요청하면 목적지에 도착하고, 검색엔진에 주는 지시에 모호함이 없습니다. 캐노니컬 태그는 두 URL을 모두 살려 둔 채 콘텐츠를 계속 서빙하면서, 순위 신호만 한쪽에 몰아 달라고 요청합니다. 옛 주소가 더는 아무에게도 필요 없을 때 — 이전, 슬러그 변경, www를 apex 도메인으로 합치는 경우 — 는 리디렉션을 씁니다. 두 URL이 실제로 모두 동작해야 할 때는 캐노니컬을 쓰며, 추적 파라미터와 필터 목록, 신디케이션 사본이 그 전형입니다.
- 페이지는 자기 자신을 캐노니컬로 지정해야 하나요?
- 기본값으로는 그렇게 하는 편이 좋습니다. 색인 대상 페이지마다 자기 참조 캐노니컬을 두는 데는 비용이 들지 않고, 파라미터나 끝 슬래시, 대문자가 만들어 낸 의도치 않은 변형의 모호함을 없애 줍니다. 안전한 쪽으로 무너진다는 점도 중요합니다. 언젠가 템플릿 버그가 캐노니컬을 엉뚱한 곳으로 돌려놓더라도, 자기 참조는 거기서 망가져 나온 상태여야지 거기로 망가져 들어간 상태여서는 안 됩니다. 예외는 페이지네이션 화면이나 남의 글 재게시처럼 정말로 다른 페이지에 통합돼야 하는 경우입니다.
- 구글이 제 캐노니컬 태그를 왜 무시하나요?
- 대개는 사이트의 다른 요소가 그와 어긋나거나, Googlebot이 애초에 받지 못했기 때문입니다. 어긋남은 평범합니다. 내부 링크와 사이트맵이 다른 변형을 가리키거나, 캐노니컬이 가리키는 곳이 리디렉션되거나, 그 대상이 noindex인 경우입니다. 전달 쪽 문제는 더 미묘하고 생각보다 흔합니다. 태그는 크롤러가 실제로 받는 HTML의 head 요소 안에 있어야 하며, 나중에 스크립트로 끼워 넣거나 렌더링 계층이 body로 내보내서는 성립하지 않습니다. 브라우저 검사 도구 대신 소스 보기로 원본 응답을 확인하십시오. 검사 도구는 스크립트가 실행된 뒤의 DOM을 보여 주기 때문에, Googlebot이 한 번도 받지 못한 태그를 태연히 보여 줍니다.
An AI growth team that runs this for you
AgentCeres is a managed AI marketing team — you approve what ships. 14-day free trial, from $39/month.