robots.txt와 noindex 차이를 모르면 차단 설정이 반대로 작동한다

robots.txt를 적용했는데 구글 검색에 페이지가 뜨거나, noindex를 달아놨는데 색인이 빠지지 않는다는 얘기가 생각보다 자주 나온다. 두 도구를 "검색에 안 보이게 하는 수단" 정도로 비슷하게 취급해서 생기는 문제다. 먼저 "지금 무엇을 막고 싶은가"를 정하면 어떤 도구를 쓸지 자연스럽게 결론이 난다.
지금 막고 싶은 게 크롤링인가, 색인인가
이 질문이 출발점이다. 둘은 일어나는 시점과 효과가 다르기 때문에, 같은 목적으로 쓸 수 없다.
크롤링만 막고 싶을 때 → robots.txt에 Disallow 규칙을 추가한다. 관리자 경로처럼 크롤러가 방문할 필요 자체가 없는 곳, 서버 부하를 줄여야 하는 대용량 경로에 적합하다. 단, 이 경우에도 색인이 막히는 게 아니다. 외부에서 해당 URL로 링크가 걸려 있으면 구글은 페이지 내용을 모른 채로도 URL 자체를 색인에 포함시킬 수 있다. Google Search Central 공식 문서는 robots.txt를 "웹페이지를 구글에서 숨기는 메커니즘이 아니다"라고 명시하고, 공식 문서의 표현대로라면 "설명 없이 URL만 검색 결과에 나타날 수 있다."
검색 결과에서 빼고 싶을 때(색인 차단) → noindex를 쓴다. 크롤러가 페이지를 방문한 뒤 HTML <head> 안에서 이 태그를 발견하면 검색 결과에 등록하지 않는다. 방문은 허용하되 색인에는 넣지 말라는 명령이다. 크롤러가 페이지를 방문해서 태그를 읽어야 효과가 생기므로, 크롤링은 허용된 상태여야 한다. 태그 페이지, 카테고리 아카이브, 페이지네이션(/page/2, /page/3), 검색 결과 페이지처럼 내용은 있지만 검색 결과에 나올 필요가 없는 곳에 맞는 선택이다.
크롤링도 막고 색인도 막고 싶을 때 → 이게 가장 많이 틀리는 지점이다. robots.txt로 크롤링을 막고 noindex를 함께 달면 완벽히 차단된다고 생각하기 쉬운데, 실제로는 작동하지 않는다.
robots.txt로 막으면 noindex가 아예 읽히지 않는다
robots.txt로 접근을 차단하면 크롤러는 그 페이지에 방문하지 않는다. 방문하지 않으니 HTML을 읽지 않는다. HTML을 읽지 않으니 noindex 태그도 눈에 들어오지 않는다. noindex가 달려 있어도 구글이 그 명령을 인식하지 못하는 상황이 된다.
Google Search Central 문서는 이를 명확하게 정리하고 있다. "noindex 규칙이 효과를 발휘하려면 해당 페이지가 robots.txt로 차단되지 않아야 하고, 크롤러가 접근 가능한 상태여야 한다. 페이지가 robots.txt로 차단돼 있거나 크롤러가 접근하지 못하면, 크롤러는 noindex 규칙을 절대 보지 못하고, 다른 페이지에서 링크가 걸려 있을 경우 검색 결과에 여전히 나타날 수 있다."
크롤링과 색인 차단을 동시에 원한다면 방법은 하나밖에 없어요. 크롤링을 허용한 채로 noindex만 달거나, 비밀번호로 페이지를 보호하는 것. robots.txt로 크롤링을 막으면 색인도 덩달아 막힌다는 생각은 틀렸다.
한 가지 더. robots.txt는 어디까지나 권고 사항이다. 구글봇이나 네이버봇 같은 주요 크롤러는 이 규칙을 따르지만, 악성 봇이나 스크래퍼는 무시하고 들어오거든요. 민감한 정보를 숨기는 보안 목적으로 robots.txt를 쓰면 안 되고, 그런 용도라면 서버 인증이나 접근 제어로 막아야 한다.
블로그 페이지 유형별 판단 흐름
"이 페이지, 지금 어떻게 해야 하지?" 싶을 때 조건을 따라가면 된다.
본문 글(검색에 노출돼야 하는) — 건드릴 게 없다. robots.txt Disallow 없음, noindex 없음이 기본값(index, follow)이다.
관리자·로그인 페이지 같은 내부 경로 — robots.txt로 크롤링 차단. 외부 링크가 없다면 URL이 색인에 들어갈 가능성도 낮다. 다만 민감한 데이터가 있다면 robots.txt만으로는 부족하고, 서버 레벨 접근 제어가 필요하다.
태그 페이지, 카테고리 아카이브, 페이지네이션 — 크롤링 허용 + noindex. 이 페이지들은 검색 결과에서 순위를 차지할 가치가 낮고, 본문 글에 집중돼야 할 크롤 예산을 소모한다. robots.txt로 이 경로를 차단하면 noindex도 읽히지 않는 문제가 생기므로 noindex 단독 사용이 맞다.
임시 랜딩, A/B 테스트 페이지 — noindex. robots.txt를 건드리지 않고 해당 페이지에만 적용할 수 있어서 관리가 편하다.
비공개 전환한 글이나 초안 상태 페이지 — 외부에서 URL이 이미 공유됐거나 링크가 걸려 있다면 noindex를 달아두는 게 안전하다. robots.txt로만 막으면 링크를 통해 URL이 색인에 들어갈 수 있다.
noindex는 HTML meta 태그나 HTTP 헤더로 달아야 한다
예전에는 robots.txt 파일 안에 noindex 지시어를 직접 넣는 사례도 있었다. 구글은 2019년 9월부로 robots.txt 내부의 noindex 지시어 지원을 공식 종료했다. 그 이후로는 robots.txt 파일에 noindex를 적어도 구글에서 효과가 없다.
색인 차단은 반드시 HTML의 meta 태그나 HTTP 응답 헤더인 X-Robots-Tag를 통해야 한다. meta 태그 방식은 HTML <head> 안에 <meta name="robots" content="noindex">를 넣는 것이다. 특정 크롤러만 지정하고 싶다면 <meta name="googlebot" content="noindex">처럼 이름을 바꿀 수 있다. X-Robots-Tag는 HTML을 수정할 수 없는 PDF나 이미지 같은 비HTML 리소스에 대해 HTTP 응답 헤더로 동일한 명령을 전달하는 방법이다.
설정을 바꾼 뒤에는 구글 서치 콘솔의 URL 검사 도구로 실제 적용 상태를 확인하는 게 좋다. 막았다고 생각한 경로가 여전히 열려 있거나, 허용한 경로가 엉뚱하게 차단돼 있는 경우가 생각보다 자주 나오더라고요. robots.txt 테스터도 서치 콘솔 안에 있으니 변경 직후 바로 확인할 수 있다.
robots.txt는 "오지 마"이고, noindex는 "와도 되는데 검색 결과엔 넣지 마"다. 둘 다 쓰고 싶다면 robots.txt를 먼저 치우거나, 크롤링을 허용한 상태에서 noindex만 다는 게 맞는 순서다.🔎
참고자료
이 글이 도움이 됐나요?
여러분의 반응이 다음 글의 방향이 돼요


