중급GoogleNaver
Canonical 태그와 중복 콘텐츠 해결 전략
핵심 요약 (TL;DR)
중복 콘텐츠가 SEO에 미치는 영향, rel=canonical 태그 구현법, www/non-www·https/http·trailing slash 변형 URL 통합 전략을 설명합니다.
중복 콘텐츠란 무엇이며 왜 문제인가
중복 콘텐츠(Duplicate Content)는 같거나 매우 유사한 콘텐츠가 다수의 URL에서 제공되는 상황입니다. Google은 이를 처리하는 방법을 결정해야 하므로, 다음과 같은 SEO 문제가 발생합니다.
| 문제 | 설명 |
|---|---|
| PageRank 분산 | 동일 콘텐츠의 여러 URL이 백링크를 나눠 받아 개별 권위도가 낮아짐 |
| 크롤 버짓 낭비 | 중복 URL을 크롤링하느라 중요 페이지 크롤링 기회 손실 |
| 의도치 않은 URL이 색인 | Google이 의도와 다른 URL을 정규 버전으로 선택할 수 있음 |
| 순위 분산 | 동일 콘텐츠가 여러 URL로 경쟁해 어느 것도 상위에 오르지 못함 |
주의: 중복 콘텐츠 자체는 Google 패널티 대상이 아닙니다. 다만 의도적인 조작(다른 도메인에 동일 글 게시 등)은 패널티 가능성이 있습니다. SEO 비효율이 주된 문제입니다.
중복 콘텐츠가 발생하는 주요 시나리오
| 시나리오 | 중복 URL 예시 |
|---|---|
| www vs non-www | https://example.com/page vs https://www.example.com/page |
| HTTP vs HTTPS | http://example.com/page vs https://example.com/page |
| Trailing slash 미통일 | https://example.com/page vs https://example.com/page/ |
| URL 파라미터 | /page?sort=asc vs /page?sort=desc vs /page |
| 세션 ID | /page vs /page?sessionid=xyz123 |
| 인쇄용 페이지 | /page vs /page?print=1 |
| 대소문자 혼용 | /SEO-Guide vs /seo-guide |
| 페이지네이션 | /blog vs /blog?page=1 |
Canonical 태그 올바른 구현법
Canonical 태그(<link rel="canonical">)는 검색엔진에게 여러 중복 URL 중 어느 URL이 정규(canonical) 버전인지 알려주는 힌트입니다. 강제 규칙이 아닌 힌트이므로, Google이 항상 따르지 않을 수도 있습니다.
<!-- <head> 안에 삽입 --> <link rel="canonical" href="https://example.com/seo/fundamentals" />
Canonical 태그 구현 규칙
| 규칙 | 이유 |
|---|---|
| 절대 URL 사용 (https://example.com/...) | 상대 URL은 해석 오류 가능 |
| 자기 자신을 가리키는 Self-Canonical 포함 | 모든 페이지에 canonical이 있어야 신뢰성 높음 |
| 정규 URL은 반드시 인덱싱 가능해야 함 | noindex나 robots.txt 차단된 URL 지정 금지 |
| 정규 URL은 200 상태코드여야 함 | 404·301 URL 지정 금지 |
| HTTPS를 canonical로 지정 | HTTP·HTTPS 혼용 시 HTTPS가 정규 |
Next.js canonical 설정
// app/layout.tsx 또는 페이지별 generateMetadata
export const metadata = {
alternates: {
canonical: 'https://example.com/seo/fundamentals',
},
}
URL 파라미터 처리: 가장 흔한 중복 원인
URL 파라미터(?sort=, ?color=, ?page= 등)는 중복 콘텐츠의 가장 흔한 원인입니다. 처리 방법은 파라미터의 성격에 따라 다릅니다.
| 파라미터 유형 | 예시 | 처리 방법 |
|---|---|---|
| 콘텐츠 변경 없음 (추적 파라미터) | ?utm_source=, ?fbclid=, ?sessionid= | GSC Parameter 도구에서 "크롤링 안 함" 설정 + canonical로 파라미터 없는 URL 지정 |
| 정렬/필터 (콘텐츠 동일한 경우) | ?sort=price, ?color=red | canonical을 기본 URL(파라미터 없는)로 지정 |
| 페이지네이션 | ?page=2, ?p=3 | 각 페이지에 고유 콘텐츠 + self-canonical (rel="prev/next"는 구글이 2019년 공식 지원 종료) |
| 콘텐츠 실질적으로 다른 경우 | ?lang=ko, ?type=video | 각 URL 독립적으로 색인, hreflang 또는 별도 canonical 설정 |
자주 묻는 질문 (FAQ)
Q. canonical 태그를 넣으면 Google이 반드시 따르나요?
아닙니다. Canonical 태그는 "힌트(hint)"이지 강제 지시가 아닙니다. Google은 canonical 태그를 참고하되, 페이지 내용, 사이트맵, 내부 링크, 리다이렉트 등을 종합적으로 평가하여 정규 URL을 결정합니다. Google Search Console의 "URL 검사" 도구에서 Google이 실제로 선택한 canonical URL을 확인할 수 있습니다.
Q. 중복 콘텐츠가 있으면 Google 패널티를 받나요?
일반적인 중복 콘텐츠는 패널티 대상이 아닙니다. Google은 URL 파라미터, www/non-www 차이 등으로 발생하는 자연스러운 중복을 이해합니다. 다만 의도적으로 다른 도메인에 동일 콘텐츠를 게시하거나, 자동 생성으로 대량의 중복 페이지를 만드는 경우에는 스팸 정책 위반으로 처벌받을 수 있습니다.
Q. 모든 페이지에 self-canonical을 넣어야 하나요?
권장됩니다. Self-canonical(자기 자신을 가리키는 canonical)은 해당 페이지가 정규 버전임을 명확히 선언합니다. 파라미터가 붙은 URL 변형이 생겨도 원본 URL이 정규 버전으로 유지됩니다. Next.js에서는
generateMetadata의 alternates.canonical로 쉽게 설정할 수 있습니다.Q. canonical 태그와 301 리다이렉트 중 어떤 것을 써야 하나요?
상황에 따라 다릅니다. 사용자도 정규 URL로 이동해야 한다면 301 리다이렉트가 적합합니다(HTTP→HTTPS, www→non-www). 사용자에게는 두 URL 모두 접근 가능하되 검색엔진에게만 정규 URL을 알려주고 싶다면 canonical 태그를 사용합니다(파라미터 변형, 인쇄용 페이지).
Q. 교차 도메인 canonical은 가능한가요?
네, 가능합니다. 예를 들어 syndicated 콘텐츠(다른 사이트에 재게시된 글)에서 원본 URL을 canonical로 지정할 수 있습니다. 하지만 Google은 교차 도메인 canonical을 "약한 힌트"로 취급하므로 반드시 따르지 않을 수 있습니다. 가장 확실한 방법은 301 리다이렉트입니다.