티스토리 블로그를 운영하다 보면 어느 순간 구글 서치 콘솔에서 중복된 페이지(중복 URL)라는 경고를 마주하게 됩니다. 바로 카테고리 파라미터(?category=)가 붙은 URL 때문인데요. 오늘은 자바스크립트(JavaScript)를 활용해 이 골치 아픈 URL에 noindex 메타 태그를 동적으로 삽입하고, 블로그의 SEO 점수 하락을 막는 방법입니다.
왜 카테고리 포함 중복 URL 이 블로그 성장을 방해할까?
블로그에 글이 많아질수록 중복 색인과 중복 노출 문제는 피할 수 없는 숙제가 됩니다. 특히 Google이나 Bing 같은 검색 엔진은 category가 포함된 주소를 원본 글과는 아예 다른 페이지로 착각하고 크롤링을 시도하곤 합니다.
문제는 검색 엔진이 티스토리의 모든 경로를 훑으려 한다는 점입니다. 이때 생기는 파라미터 URL들은 중복 콘텐츠 문제를 일으키고, 검색 엔진으로부터 ‘낮은 품질의 페이지’라는 박한 평가를 받게 만듭니다. 결국 정성껏 쓴 포스팅이 검색 결과에서 뒤로 밀리거나 아예 사라지는 SEO 지수 하락의 주범이 되는 것이죠.
중복 URL이 만들어지는 과정과 검색 엔진의 시선
글은 하나인데 주소가 여러 개로 쪼개지는 현상을 먼저 이해해야 합니다. 보통 아래와 같은 주소들이 생성됩니다.
- 정상적인 포스팅 주소:
https://blog.tistory.com/100(우리가 노출시키고 싶은 원본) - 파라미터가 붙은 주소:
https://blog.tistory.com/100?category=123(중복 페이지의 주범) - 카테고리 목록 주소:
https://blog.tistory.com/category/주제(글들이 나열된 페이지)
사실상 똑같은 내용을 보여주는데도 검색 엔진은 이를 각각 수집하려고 고집을 부립니다. 이 과정에서 귀한 크롤링 예산(Crawl Budget)이 낭비되고, 원본 글의 힘이 분산되어 경쟁력이 떨어집니다. 특히 카테고리 페이지가 원본보다 먼저 검색에 걸리면 클릭률이 떨어지는 등 손해가 막심합니다.
| 관리 항목 | 상세 영향 | SEO 위험도 |
|---|---|---|
| 콘텐츠 가치 분산 | 백링크와 사용자 반응 점수가 여러 주소로 쪼개져 상위 노출이 힘들어짐 | 높음 |
| 낮은 품질 평가 | 주소만 다른 동일 내용이 많아져 검색 엔진이 ‘스팸성’ 사이트로 오해함 | 매우 높음 |
| 클릭률(CTR) 저하 | 검색 결과에 복잡하고 지저분한 주소가 노출되어 사용자 신뢰도가 떨어짐 | 중간 |
| 색인 생성 오류 | 서치 콘솔에 ‘사용자가 선언한 캐노니컬 없음’ 오류가 산더미처럼 쌓임 | 매우 높음 |
자바스크립트를 이용한 동적 Meta Robots 제어 코드
티스토리는 우리가 서버 설정 파일인 robots.txt를 마음대로 고칠 수 없는 구조입니다. 그래서 대안으로 사용하는 것이 바로 자바스크립트입니다. 브라우저가 페이지를 읽는 순간 meta name=”robots” 태그를 끼워 넣어 검색 엔진에게 “이 페이지는 수집하지 마!”라고 신호를 보내는 방식이죠.
아래 코드를 복사해서 티스토리 스킨 편집 창의 <head> 태그 바로 아랫부분에 넣어주세요.
<script>
document.addEventListener("DOMContentLoaded", function () {
const currentUrl = window.location.href;
// 주소에 category라는 단어가 들어있는지 꼼꼼히 체크합니다
if (currentUrl.includes("category")) {
let existingMeta = document.querySelector('meta[name="robots"]');
if (existingMeta) {
// 이미 로봇 메타 태그가 있다면 내용을 noindex로 바꿔치기합니다
existingMeta.setAttribute("content", "noindex, nofollow");
} else {
// 태그가 없다면 새로 만들어서 head 부분에 쏙 넣어줍니다
let metaTag = document.createElement("meta");
metaTag.name = "robots";
metaTag.content = "noindex, nofollow";
document.head.appendChild(metaTag);
}
}
});
</script>- noindex: 검색 엔진에게 “이 페이지는 네 저장소에 담지 마”라고 직접적으로 명령합니다.
- nofollow: 이 페이지에 있는 링크들을 따라가지 않게 하여 검색 로봇의 헛수고를 줄여줍니다.
- 조건부 실행: 정상적인 포스팅 주소(/100)에서는 가만히 있다가, 문제가 되는 카테고리 URL에서만 똑똑하게 작동합니다.
실제 적용 방법과 제대로 반영되었는지 확인하기
코드를 적용했다면 이제 구글 서치 콘솔이나 브라우저의 ‘페이지 소스 보기’를 통해 noindex가 잘 들어갔는지 눈으로 확인해볼 차례입니다. 아래 이미지들을 참고해서 단계별로 따라 해보세요.

자주 묻는 질문들(FAQ)
이 코드를 넣으면 예전에 등록된 카테고리 페이지들이 검색에서 사라지나요?
맞습니다. 검색 로봇이 다시 방문했을 때 noindex를 발견하면 서서히 검색 결과에서 제외합니다. 이건 블로그가 깨끗해지는 과정이니 걱정하지 마세요.
카테고리 페이지가 검색 안 되면 방문자가 줄어들지 않을까요?
아니요, 오히려 반대입니다! 카테고리 페이지는 글 목록일 뿐입니다. 진짜 소중한 개별 포스팅들은 여전히 노출되며, 중복 문제가 해결되면 원본 글의 순위가 더 올라가서 유입에 훨씬 유리해집니다.
서치 콘솔에 이미 ‘색인 생성됨’이라고 뜬 것들은 어쩌죠?
코드를 적용하고 기다리면 구글이 알아서 지워주기도 하지만, 마음이 급하시다면 서치 콘솔의 ‘삭제’ 메뉴에서 해당 URL 패턴을 직접 제거 요청하셔도 됩니다.
블로그 덩치가 커질수록 데이터를 깔끔하게 관리하는 능력이 무엇보다 중요해집니다. 아무리 알찬 글을 써도 검색 엔진이 ‘중복된 쓰레기 데이터’로 오해한다면 그만큼 억울한 일도 없겠죠. 나중에 주소가 꼬여서 고생하기보다는 지금 바로 조치하시는 것이 현명한 선택입니다.