티스토리 블로그를 운영하다 보면 구글 서치 콘솔이나 성능 검사 도구에서 “유효한 canonical 없음” 혹은 “도메인 루트 URL” 지정 오류 같은 알림을 보게 될 때가 있어요. SEO에 신경 쓰는 분들이라면 이런 메시지가 떴을 때 내 블로그 점수가 깎이지는 않을까 걱정되실 텐데요. 오늘은 이 오류가 왜 발생하는지 원인을 살펴보고, 개발자 도구를 통한 확인 방법부터 스크립트를 활용해 카테고리 페이지를 깔끔하게 최적화하는 방법까지 차근차근 알려드릴게요.
Canonical 오류, 도대체 왜 생기는 걸까요?
검색 엔진 최적화(SEO)를 공부하다 보면 ‘구조화된 데이터’라는 말을 한 번쯤 들어보셨을 거예요. 쉽게 말해 구글 같은 검색 엔진에게 우리 사이트의 내용을 더 정확하게 이해시켜 주는 이름표 같은 역할을 하죠. 이 이름표가 잘 붙어 있어야 검색 결과에도 더 잘 노출될 수 있거든요.
하지만 이 설정이 꼬이게 되면 오류 메시지가 뜨곤 합니다. 특히 블로그 카테고리 페이지에서 자주 보이는 “문서에 유효한 rel=canonical 없음”이나 “도메인의 루트 URL을 가리킴” 오류는 구글이 자주 지적하는 문제 중 하나예요.
이 문제를 해결하려면 먼저 내 블로그의 상태를 정확히 알아야 해요. 실제로 오류가 발생한 카테고리 페이지에 들어가서 확인해 보면, canonical 태그가 해당 페이지의 주소가 아니라 엉뚱하게도 블로그 메인 주소(루트 도메인)를 가리키고 있는 경우가 많습니다. 이렇게 되면 구글은 “어? 이 페이지는 메인 페이지의 복사본인가?”라고 오해해서 중복 콘텐츠로 판단할 수 있어요.
내 블로그도 그럴까? 원인 분석하기
카테고리 페이지에서 “문서에 유효한 rel=canonical 없음” 오류가 뜨는 주된 이유는 canonical 태그가 올바르게 설정되지 않았기 때문이에요.
만약 카테고리 페이지의 canonical 태그가 https://example.tistory.com 처럼 메인 주소로 되어 있다면, 구글 입장에서는 페이지의 고유성을 인정하기 어렵게 됩니다. 주요 문제점을 요약하면 다음과 같아요.
- canonical 태그가 아예 없거나 잘못 지정된 경우
- 페이지 고유 주소가 아닌 도메인 루트 URL을 가리켜서 중복 문서로 인식되는 경우
이런 상태가 지속되면 검색 로봇이 블로그 구조를 제대로 파악하지 못하게 되고, 결국 블로그 지수에 안 좋은 영향을 줄 수 있으니 꼭 수정해 주는 것이 좋아요.
개발자 도구로 직접 확인해 보는 방법
내 블로그에도 이런 문제가 있는지 궁금하다면 개발자 도구를 켜서 바로 확인해 볼 수 있어요. 방법은 아주 간단해요.
- 먼저 확인하고 싶은 카테고리 페이지(예:
https://example.tistory.com/category/)에 접속하세요. - F12 키를 눌러 개발자 도구를 엽니다.
- HTML 코드의 head 부분에서 canonical 태그를 찾아보세요. 만약
https://example.tistory.com(루트 도메인)으로 되어 있다면 수정이 필요한 상태입니다.
이렇게 확인했을 때 카테고리 페이지와 메인 페이지가 서로 같은 canonical 주소를 쓰고 있다면, 크롤러는 이 두 페이지를 같은 페이지로 착각하거나 카테고리 페이지를 단순 복사본으로 취급할 위험이 커져요.

카테고리 URL 제대로 설정해서 오류 잡기
가장 좋은 해결책은 각 페이지마다 올바른 canonical 태그를 달아주는 거예요. “이 페이지의 진짜 주소는 여기입니다”라고 검색 엔진에게 정확히 알려주는 거죠. 이렇게 하면 canonical 오류도 사라지고 검색 엔진이 내 글을 더 잘 이해하게 됩니다.
Canonical 태그, 어떻게 설정하면 좋을까요?
먼저 각 카테고리나 태그 페이지의 고유 URL을 확인하고, 그 주소를 canonical 태그에 적용해야 해요. 하지만 HTML 코드를 일일이 수정하는 건 번거롭기도 하고, 티스토리처럼 동적으로 생성되는 페이지에서는 직접 코드를 넣는 게 쉽지 않죠.
그래서 자바스크립트를 사용해 자동으로 canonical 태그를 생성하거나 수정하는 방법이 훨씬 효율적이에요. 만약 카테고리 페이지를 굳이 검색 결과에 노출하고 싶지 않다면, canonical 설정을 아예 생략하거나 Noindex 태그를 사용하는 것도 하나의 방법이 될 수 있어요.
올바른 설정의 예시는 다음과 같아요:
<link rel="canonical" href="https://example.tistory.com/category/카테고리제목">
이렇게 각 페이지에 맞는 주소를 지정해 주면 구글 성능 검사에서도 더 이상 오류 메시지가 뜨지 않게 됩니다.
주의할 점: 동적 페이지와 이중 설정
동적 페이지를 다룰 때는 HTML에 코드를 무작정 넣으면 안 돼요. 기존에 자동으로 생성되는 canonical 태그와 내가 넣은 코드가 겹치면서 이중으로 설정될 수 있거든요. 이렇게 되면 오히려 더 큰 혼란을 줄 수 있으니 조심해야 해요.
그리고 카테고리 페이지를 색인하는 게 정말 유리한지도 고민해 볼 필요가 있어요. 자칫하면 중복 페이지로 간주될 수 있어서, 상황에 따라서는 카테고리 페이지가 검색에 안 나오게 막는 게 SEO에 더 도움이 될 수도 있거든요. 아마 기존 설정이 루트 도메인으로 되어 있었던 것도 이런 중복 문제를 피하려는 의도였을 가능성이 높아요.
스크립트로 한 번에 해결하기 (추천)
아래 코드는 카테고리 페이지의 canonical 주소를 강제로 카테고리 기본 주소로 통일시켜 주는 자바스크립트 예제예요. 이 코드를 사용하면 복잡한 설정 없이도 canonical 주소를 깔끔하게 정리할 수 있어요.
코드를 복사해서 블로그 스킨 편집의 <head> 부분에 넣어주시면 됩니다. 단, 코드 안에 있는 “https://도메인주소/category” 부분은 본인의 블로그 주소에 맞게 꼭 수정해서 넣어주세요.
document.addEventListener("DOMContentLoaded", function() {
var restrictedUrl = "https://도메인주소/category";
if (window.location.href.startsWith(restrictedUrl)) {
var canonicalTag = document.querySelector('link[rel="canonical"]');
if (canonicalTag) {
canonicalTag.href = restrictedUrl;
} else {
canonicalTag = document.createElement('link');
canonicalTag.rel = 'canonical';
canonicalTag.href = restrictedUrl;
document.head.appendChild(canonicalTag);
}
}
});
이렇게 설정해 두면 검색 엔진이 지적하던 문제를 개선할 수 있고, 색인 과정에서 발생하던 꼬임 현상도 많이 줄어들 거예요.
자주 묻는 질문 (FAQ)
Q. 블로그 카테고리 페이지에서 왜 이런 오류가 뜨나요?
카테고리 페이지의 canonical 태그가 해당 페이지의 고유 주소가 아닌, 블로그의 메인 주소(루트 도메인)로 잘못 설정되어 있기 때문이에요. 이 때문에 구글은 페이지를 제대로 구별하지 못하고 중복된 콘텐츠나 오류로 인식하게 됩니다.
Q. 오류인지 아닌지 어떻게 확실히 알 수 있나요?
PC에서 F12를 눌러 개발자 도구를 연 뒤, head 태그 안에 있는 link rel="canonical" 부분을 확인해 보세요. 만약 href 속성이 현재 보고 있는 페이지 주소가 아니라 메인 도메인 주소로 되어 있다면 오류가 있는 상태입니다.
Q. 해결하려면 꼭 코드를 써야 하나요?
각 카테고리마다 고유한 URL을 정확히 가리키도록 수정해야 하는데, 일일이 수동으로 하기엔 한계가 있어요. 위에서 알려드린 스크립트처럼 자바스크립트를 활용해 동적으로 주소를 잡아주는 게 가장 편하고 확실한 방법이에요. 만약 카테고리 페이지 노출이 중요하지 않다면 색인 제외(Noindex) 처리를 하는 것도 고려해 볼 수 있습니다.
