robots.txt Disallow와 noindex 차이 — 차단해도 검색에 뜨는 이유

검색 결과에서 빼려고 robots.txt에 Disallow 를 넣었는데, 며칠이 지나도 그 주소가 검색에 그대로 보이는 경우가 있습니다. 설정이 잘못된 게 아니라, Disallow 가 원래 그 일을 하지 않기 때문입니다.
robots.txt는 로봇이 페이지를 읽어가는 것(크롤링)을 통제하는 파일이고, 검색 결과에 올릴지 말지(색인)를 정하는 건 noindex 입니다. 층이 다른 두 설정이라 하나로 다른 하나를 대신할 수 없습니다.
요약 ①
Disallow는 크롤링 금지 신호입니다. 구글 문서는 robots.txt로 막힌 페이지도 다른 사이트에서 링크되면 색인될 수 있다고 명시합니다. ② 이때 검색 결과에는 설명이 없는 상태로 주소만 노출됩니다. ③ 검색에서 빼려면noindex를 써야 하는데, robots.txt로 막아 두면 로봇이 그noindex를 볼 수 없습니다. 둘을 같이 걸면 안 됩니다.
차단했는데 왜 검색에 뜰까
구글 검색 센터 문서의 표현 그대로 옮기면, robots.txt에서 disallow된 페이지도 다른 사이트에서 링크되면 색인될 수 있습니다. 그리고 그렇게 색인된 결과에는 설명이 붙지 않습니다.
이유는 단순합니다. 로봇은 페이지 본문을 읽지 못했을 뿐, "그런 주소가 존재한다"는 사실과 그 주소를 가리키는 외부 링크의 앵커 텍스트는 robots.txt와 무관하게 알 수 있습니다.
그래서 차단은 정상적으로 지켜지고 있는데도 주소는 검색에 남습니다. 구글 서치 콘솔의 페이지 색인 생성 보고서에서는 이 상태가 Indexed, though blocked by robots.txt(robots.txt로 차단됐지만 색인됨) 경고로 표시됩니다.
즉 "차단했는데 왜 뜨지"는 오작동이 아니라 역할을 잘못 고른 결과입니다.
크롤링과 색인은 층이 다릅니다
두 설정이 어디에 놓이고 무엇을 막는지 비교하면 차이가 분명해집니다.
robots.txt의 Disallow | noindex | |
|---|---|---|
| 막는 대상 | 크롤링(로봇이 페이지를 읽는 것) | 색인(검색 결과에 등재되는 것) |
| 적는 위치 | 사이트 최상위의 /robots.txt 파일 | 페이지의 meta 태그 또는 HTTP 응답 헤더 |
| 로봇이 규칙을 보려면 | robots.txt 파일만 읽으면 됨 | 그 페이지를 크롤링할 수 있어야 함 |
| 이미 색인된 주소 | 그대로 남을 수 있음 | 다시 크롤링된 뒤 빠짐 |
표의 세 번째 줄이 이 글의 핵심입니다. noindex 는 페이지 안에 적는 신호라서, 로봇이 그 페이지를 열어봐야만 읽을 수 있습니다.
그래서 같은 주소에 Disallow 와 noindex 를 동시에 걸면 오히려 색인이 유지됩니다. 구글 문서도 "noindex 규칙이 작동하려면 그 페이지가 robots.txt로 차단되어 있으면 안 된다"고 못 박고 있습니다.
목적별로 무엇을 써야 하나
원하는 결과에 따라 골라야 할 수단이 갈립니다.
| 원하는 것 | 써야 할 것 |
|---|---|
| 크롤링 트래픽을 줄이고 싶다 | robots.txt의 Disallow |
| 검색 결과에서 빼고 싶다 | noindex (크롤링은 열어 둔 채로) |
| 아무에게도 안 보이게 하고 싶다 | 비밀번호 보호 또는 페이지 삭제 |
구글이 검색에 노출되지 않게 하려면 권장하는 방법은 세 가지입니다. 파일에 비밀번호를 걸거나, noindex 메타 태그 또는 응답 헤더를 쓰거나, 페이지를 아예 삭제하는 것입니다. robots.txt 차단은 이 목록에 들어 있지 않습니다.
한 가지 더 짚을 점이 있습니다. robots.txt는 어디까지나 로봇에게 보내는 요청이고, 파일 자체는 누구나 열어볼 수 있습니다. 민감한 경로를 Disallow 에 적어 두면 오히려 그 경로 목록을 공개하는 셈이 됩니다.
도구 없이 직접 확인하고 작성하는 방법
지금 상태부터 확인합니다
브라우저 주소창에 도메인 뒤에 /robots.txt 를 붙여 열면 현재 적용 중인 파일이 그대로 보입니다. 이 파일은 사이트 최상위 경로에 소문자 robots.txt 라는 이름으로 있어야 하며(RFC 9309), 하위 폴더에 두면 인식되지 않습니다.
페이지의 noindex 여부는 브라우저에서 페이지 소스 보기를 열어 <meta name="robots" content="noindex"> 가 있는지 찾으면 됩니다. HTML이 아닌 파일(PDF 등)은 응답 헤더로 지정하므로 curl -I 주소 로 X-Robots-Tag 를 확인합니다.
robots.txt 문법은 네 줄이면 끝납니다
구글이 지원하는 필드는 user-agent, allow, disallow, sitemap 네 가지입니다. 한 그룹은 User-agent 로 시작하고, 그 아래 규칙들이 그 로봇에 적용됩니다.
User-agent: *
Allow: /admin/help/
Disallow: /admin/
Disallow: /search
Sitemap: https://example.com/sitemap.xml
Disallow:뒤를 비워 두면 아무것도 막지 않는다는 뜻입니다(RFC의 빈 패턴). 전체 허용은 이렇게 표현합니다.- 전체 차단은
Disallow: /입니다. 슬래시 하나 차이로 정반대가 됩니다. - 규칙이 겹치면 가장 구체적인 것, 즉 경로가 가장 긴 규칙이 이깁니다. 길이까지 같으면
Allow가 우선합니다. - 경로는 대소문자를 구분합니다.
/Admin/과/admin/은 다른 경로입니다. - 크롤러는
*(0글자 이상 아무 문자)와$(경로 끝)를 지원해야 합니다.Disallow: /*.pdf$처럼 씁니다. #뒤는 주석입니다.
위 예시에서 /admin/help/ 는 Disallow: /admin/ 보다 경로가 길어 더 구체적이므로, 관리자 폴더를 막으면서 도움말만 열어 두는 결과가 됩니다.
저장 위치와 반영 시점
파일은 호스트·프로토콜·포트 단위로 적용됩니다. blog.example.com 과 example.com 은 각각 자기 robots.txt가 필요합니다.
반영도 즉시가 아닙니다. 구글은 robots.txt를 보통 최대 24시간까지 캐시하며, RFC 9309도 크롤러가 캐시된 파일을 24시간 넘게 쓰지 않도록 권고합니다. 또한 구글은 500 KiB를 넘는 부분을 무시합니다.
저희 도구로 만들기. 그룹을 여러 개 쓰다 보면 그룹 사이 빈 줄, 경로 앞 슬래시, 필드 이름 철자에서 실수가 납니다. 도구는 User-agent 와 Disallow·Allow 경로(한 줄에 하나), Sitemap 주소를 채우면 규격에 맞는 파일을 그 자리에서 조립해 보여 줍니다. 전체 허용·전체 차단 프리셋, User-agent 그룹 추가, 복사와 파일 다운로드 버튼이 있습니다.
도구에는 Crawl-delay 칸도 있는데 선택 항목입니다. 구글은 지원 필드 목록에 crawl-delay 를 넣지 않았으므로, 다른 검색엔진 때문에 필요한 경우가 아니면 비워 두면 됩니다.
설치·회원가입 없이 브라우저 안에서 바로 조립되며, 입력한 경로는 서버로 전송되지 않습니다.

자주 막히는 지점
이미 색인된 주소를 빼려면 순서가 중요합니다. Disallow 를 먼저 풀어야 로봇이 들어와 noindex 를 읽고 색인에서 뺄 수 있습니다. 차단을 유지한 채 noindex 만 넣으면 아무 일도 일어나지 않습니다.
| 상황 | 어떻게 되나 |
|---|---|
robots.txt에 Noindex: 줄을 적음 | 구글이 지원하지 않는 필드라 무시됩니다 |
Disallow + noindex 동시 적용 | noindex 가 읽히지 않아 색인이 남습니다 |
Crawl-delay 지정 | 구글은 지원하지 않습니다 |
| CSS·JS 폴더를 차단 | 페이지 렌더링에 필요한 파일까지 막혀 평가가 달라질 수 있습니다 |
민감 정보 경로를 Disallow 에 나열 | 파일이 공개되므로 경로가 그대로 노출됩니다 |
Crawl-delay 는 RFC 9309에 정의된 필드가 아니고 구글도 지원 필드 목록에 넣지 않았습니다. 다만 다른 검색엔진에서 해석하는 경우가 있어, 필요하면 해당 검색엔진의 웹마스터 문서에서 지원 여부를 확인하는 것이 정확합니다.
급하게 결과를 내려야 할 때는 서치 콘솔의 삭제 도구를 쓸 수 있지만, 이건 임시 조치입니다. 구글 문서는 요청이 약 6개월 정도만 유지된다고 안내하므로, 그 사이에 noindex 나 삭제 같은 영구적인 처리를 해 두어야 합니다.
정리
- robots.txt의
Disallow는 크롤링 금지이지 검색 결과 제외가 아닙니다. - 막힌 주소도 외부 링크가 있으면 색인될 수 있고, 그때는 설명 없이 주소만 노출됩니다.
- 검색에서 빼려면
noindex메타 태그나X-Robots-Tag응답 헤더를 쓰고, 그 페이지의 크롤링은 열어 둡니다. - 둘을 같이 걸면
noindex가 읽히지 않아 반대 결과가 납니다. 이미 막아 뒀다면 차단부터 해제합니다. - 완전히 감춰야 하는 내용은 비밀번호 보호나 삭제로 처리합니다. robots.txt는 공개 파일입니다.
- 파일은 최상위 경로에 소문자
robots.txt로 두고, 규칙은 가장 긴 경로가 우선하며 대소문자를 구분합니다.
설치·회원가입 없이 브라우저 안에서 바로 조립되며, 입력한 경로는 서버로 전송되지 않습니다.
자주 묻는 질문
robots.txt에 noindex를 적으면 되지 않나요?
구글은 robots.txt 파일에 noindex 를 지정하는 방식을 지원하지 않는다고 명시하고 있습니다. 지원 필드는 user-agent, allow, disallow, sitemap 네 가지뿐이라 그 밖의 줄은 무시됩니다. noindex 는 페이지의 meta 태그나 HTTP 응답 헤더에 넣어야 합니다.
이미 검색에 뜬 주소를 빼려면 어떤 순서로 해야 하나요?
먼저 robots.txt에서 그 경로의 Disallow 를 풀어 로봇이 페이지에 접근할 수 있게 합니다. 그다음 페이지에 noindex 를 넣고, 다시 크롤링되기를 기다립니다. 급하다면 서치 콘솔의 삭제 도구로 임시 조치를 할 수 있으나 약 6개월짜리이므로, 그 사이 noindex 나 페이지 삭제로 마무리해야 합니다.
Crawl-delay를 넣었는데 크롤링 속도가 그대로입니다
구글이 지원하는 필드에 crawl-delay 가 없기 때문입니다. RFC 9309에도 정의돼 있지 않은 비표준 필드라, 해석 여부는 검색엔진마다 다릅니다. 사용하는 검색엔진의 웹마스터 도구 문서에서 지원 여부를 확인하고, 지원하지 않는다면 서버 쪽 설정이나 각 도구가 제공하는 크롤링 속도 설정을 확인하는 편이 확실합니다.
서브도메인이나 http·https도 파일을 따로 만들어야 하나요?
네. robots.txt는 호스트·프로토콜·포트 단위로 적용됩니다. https://example.com/robots.txt 의 규칙은 https://blog.example.com 에 적용되지 않으며, 각 호스트가 자기 최상위 경로에 파일을 갖고 있어야 합니다. 포트가 다른 주소도 마찬가지로 별개입니다.
