Field guide / robots-txt
robots.txt 작성법과 흔한 실수
크롤러 접근 제어 파일의 문법과 User-agent 그룹, Allow와 Disallow 우선순위 규칙, 사이트를 통째로 막아버리는 실수와 noindex와의 차이를 다룹니다.
- 작성
- 수정
- 작성자
- 검토
- 애드브랜치 편집팀
robots.txt란 무엇인가
robots.txt란 사이트 루트에 두는 텍스트 파일로, 크롤러가 어떤 경로를 요청해도 되는지 알려 주는 접근 제어 파일입니다. 위치는 반드시 https://example.com/robots.txt처럼 도메인 루트여야 하고, 하위 디렉터리에 두면 무시됩니다. 여기서 크롤러란 웹 페이지를 자동으로 수집하는 프로그램을 말합니다. 중요한 전제가 하나 있습니다. robots.txt는 강제 차단 장치가 아니라 협조적인 크롤러가 따르는 규약입니다.
잘못 쓰면 생기는 일
가장 큰 사고는 사이트 전체가 검색에서 사라지는 것입니다. 개발 서버에서 쓰던 두 줄이 운영에 그대로 배포되는 경우가 대표적입니다.
User-agent: *
Disallow: /
이 두 줄이 배포되면 협조적 크롤러는 사이트의 모든 경로를 요청하지 않습니다. 애드브랜치 검사기의 robots-txt-path-allowed가 치명적으로 표시하는 상황입니다. 복구해도 검색결과가 정상으로 돌아오기까지 시간이 걸립니다.
두 번째 사고는 반대 방향입니다. 비공개로 두고 싶은 페이지를 Disallow로 막으면 크롤링은 막히지만 URL 자체는 다른 사이트의 링크를 통해 검색결과에 남을 수 있습니다. 크롤링을 막았기 때문에 그 페이지의 noindex도 읽지 못합니다. 결국 아무 설명 없는 URL이 검색결과에 남습니다.
기본 문법
파일은 UTF-8 평문이고, 한 줄에 하나의 지시문을 씁니다. #으로 시작하는 줄은 주석입니다.
| 지시문 | 의미 |
|---|---|
User-agent | 아래 규칙이 적용될 크롤러 이름. *는 다른 그룹에 해당하지 않는 모든 크롤러 |
Disallow | 요청하지 않아야 할 경로 접두사 |
Allow | Disallow 안에서 예외로 허용할 경로 |
Sitemap | 사이트맵의 절대 URL. 그룹과 무관하게 파일 어디에나 쓸 수 있음 |
Disallow의 값이 비어 있으면 아무것도 막지 않는다는 뜻입니다. Disallow: /는 전부 막는다는 뜻입니다. 이 한 글자 차이가 사고의 원인이 됩니다.
바로 쓸 수 있는 예제
일반적인 콘텐츠 사이트라면 이 정도로 충분합니다.
# 모든 크롤러 공통 규칙
User-agent: *
Disallow: /admin/
Disallow: /cart
Disallow: /search
Allow: /search/guides
Disallow: /*?sessionid=
# 사이트맵은 그룹 밖에서 절대 URL로 선언합니다
Sitemap: https://example.com/sitemap.xml
User-agent 그룹은 하나만 적용된다
크롤러는 자기 이름과 가장 구체적으로 일치하는 그룹 하나만 따릅니다. 여러 그룹의 규칙을 합치지 않습니다. 아래 파일에서 Googlebot은 첫 번째 그룹만 보고, * 그룹의 Disallow: /private/는 적용하지 않습니다.
User-agent: Googlebot
Disallow: /tmp/
User-agent: *
Disallow: /private/
Disallow: /tmp/
Googlebot에게도 /private/를 막고 싶다면 Googlebot 그룹 안에 직접 써야 합니다. 같은 이름의 User-agent 줄이 연속으로 나오면 그 아래 규칙을 공유하는 하나의 그룹이 됩니다.
Allow와 Disallow 우선순위: 가장 긴 매칭이 이긴다
같은 그룹 안에서 한 URL이 Allow와 Disallow 모두에 걸리면, 경로 패턴이 더 긴 쪽이 이깁니다. 길이가 같으면 덜 제한적인 쪽, 즉 Allow가 적용됩니다. 순서는 상관없습니다.
| 규칙 | 검사 URL | 결과 |
|---|---|---|
Disallow: /guides/ 와 Allow: /guides/public/ | /guides/public/a | 허용 (긴 매칭이 Allow) |
Disallow: /guides/ 와 Allow: /guides/public/ | /guides/secret/a | 차단 |
Disallow: /p 와 Allow: /p | /page | 허용 (길이 동일) |
Disallow: /*.pdf$ | /files/report.pdf | 차단 |
와일드카드는 두 가지를 씁니다. *는 임의의 문자열, $는 URL의 끝을 뜻합니다. Disallow: /*?는 물음표가 들어간 모든 URL을, Disallow: /*.pdf$는 .pdf로 끝나는 URL을 막습니다.
잘못된 예와 수정된 예
1. 특정 폴더만 막으려다 전체를 막은 경우
잘못된 예입니다.
User-agent: *
Disallow: /
Disallow: /admin/
첫 번째 줄이 이미 전부를 막았습니다. 두 번째 줄은 의미가 없습니다.
수정된 예입니다.
User-agent: *
Disallow: /admin/
2. 상대 경로 사이트맵과 그룹 안 선언
잘못된 예입니다.
User-agent: *
Disallow: /admin/
Sitemap: /sitemap.xml
Sitemap은 절대 URL이어야 합니다. 상대 경로는 처리되지 않아 sitemap-discovery가 개선 권장으로 나옵니다.
수정된 예입니다.
User-agent: *
Disallow: /admin/
Sitemap: https://example.com/sitemap.xml
3. robots.txt로 검색결과에서 빼려는 시도
잘못된 예입니다.
User-agent: *
Disallow: /old-event-page
크롤링을 막았기 때문에 그 페이지의 noindex를 읽을 수 없고, 외부 링크가 있으면 URL만 검색결과에 남을 수 있습니다.
수정된 예입니다. robots.txt에서는 경로를 열어 두고, 페이지 자체에 색인 제외 지시를 둡니다.
User-agent: *
Disallow: /admin/
<meta name="robots" content="noindex, follow" />
robots.txt와 noindex의 차이
| 구분 | robots.txt Disallow | noindex |
|---|---|---|
| 위치 | 도메인 루트의 텍스트 파일 | 페이지의 meta 태그 또는 X-Robots-Tag 헤더 |
| 지시 대상 | 요청하지 말 것(크롤링) | 검색결과에 넣지 말 것(색인) |
| URL이 결과에 남는가 | 남을 수 있음 | 제거됨 |
| 함께 쓰면 | 크롤링이 막혀 noindex를 읽지 못함 | 단독으로 써야 효과 |
핵심은 두 개를 같이 쓰면 안 된다는 점입니다. 색인에서 빼는 것이 목적이라면 크롤링은 허용해야 합니다.
애드브랜치 검사기와의 연결
이 가이드는 robots-txt-path-allowed(현재 경로가 차단되었는지), sitemap-discovery(robots.txt의 Sitemap 선언), ai-crawler-directive(GPTBot 등 AI 크롤러 그룹의 경로 허용), 그리고 페이지 쪽 지시인 meta-robots-indexability, x-robots-tag-indexability, meta-robots-directive-quality와 연결됩니다. 검사 결과에서 robots.txt 항목이 확인 불가로 나온다면 파일 요청 실패나 파싱 오류일 가능성이 큽니다.
주의점과 흔한 오해
robots.txt는 보안 장치가 아닙니다. 파일 자체가 공개되어 있어 누구나 읽을 수 있고, 규칙을 무시하는 수집기도 존재합니다. 민감한 경로는 인증으로 보호해야 합니다. 오히려 Disallow: /internal-admin-2024/처럼 쓰면 숨기고 싶은 경로를 광고하는 셈이 됩니다.
또 하나, 파일이 아예 없어도 문제는 아닙니다. robots.txt가 없으면 크롤러는 제한이 없다고 간주합니다. 404 응답 자체는 오류가 아닙니다. 다만 5xx 응답이 계속되면 크롤러가 사이트 전체를 임시로 크롤링하지 않을 수 있으니, 파일을 두려면 안정적으로 200을 반환하게 해야 합니다.
자주 묻는 질문
robots.txt를 수정하면 언제 반영되나요?
크롤러가 파일을 다시 가져간 시점부터입니다. 즉시 반영되지 않습니다. Google Search Console의 robots.txt 보고서에서 마지막으로 읽은 버전과 파싱 결과를 확인할 수 있습니다.
하위 도메인마다 따로 필요한가요?
필요합니다. blog.example.com은 example.com의 robots.txt를 따르지 않고 blog.example.com/robots.txt를 봅니다. 프로토콜과 포트도 별도로 취급됩니다.
AI 크롤러만 막을 수 있나요?
이름을 지정한 그룹을 추가하면 됩니다. 예를 들어 User-agent: GPTBot과 Disallow: / 조합을 쓸 수 있습니다. 다만 이는 협조적 크롤러의 접근 지시일 뿐이고, 실제 수집이나 학습 여부는 각 사업자의 정책과 시점에 따라 달라질 수 있습니다. AI 크롤러 접근 설정 가이드에서 학습·검색·사용자 요청형 UA의 차이와 제공사별 robots.txt 적용 방식을 확인하세요.
대소문자를 구분하나요?
User-agent 이름은 대소문자를 구분하지 않지만, 경로 값은 구분합니다. Disallow: /Guides/는 /guides/를 막지 않습니다. 지시문 이름 자체의 표기(Disallow, disallow)는 문제가 되지 않습니다.
관련 가이드
Next reading
관련 가이드
SEO 기본 점검 체크리스트
페이지 하나를 검색엔진에 제대로 노출하기 위해 확인할 항목을 우선순위 순서로 정리하고, 항목마다 확인 방법과 고치는 코드까지 함께 다룹니다.
가이드 읽기
SEO와 GEO는 무엇이 다른가
검색엔진 최적화와 AI 검색 최적화의 목표, 평가 방식, 실제 작업 항목이 어떻게 다르고 어디까지 겹치는지 HTML 예제와 비교표로 정리합니다.
가이드 읽기
GEO 점검 체크리스트
AI 검색이 페이지의 주제와 답변을 이해하기 쉽게 만드는 구조를 두괄식 작성, 정의문, Q&A, 출처 표기 순서로 항목별 점검합니다.
가이드 읽기
Check the evidence
이 페이지를 지금 검사해보기
읽고 있는 페이지나 운영 중인 URL을 넣으면 이 가이드와 연결된 SEO·GEO 항목을 바로 확인할 수 있습니다.