OneWebDesk

robots.txt 작성법: 문법·예제·흔한 실수

robots.txt의 규칙 문법과 사이트 유형별 예제, 색인을 망치는 흔한 실수를 정리했습니다.

robots.txt는 검색엔진 크롤러에게 “이 경로는 가져가지 마라”고 알려주는 평문 텍스트 파일이다. 문법 자체는 몇 줄이면 끝나지만, 실무에서는 세 가지에서 사고가 난다. (1) 파일을 엉뚱한 위치에 두거나, (2) 최장 일치·와일드카드 규칙을 오해해서 의도와 다른 URL이 차단되거나, (3) “robots.txt로 막으면 검색결과에서 사라진다”는 잘못된 믿음으로 색인 제거에 쓰다가 오히려 URL만 남은 반쪽짜리 검색결과를 만든다.

이 가이드는 robots.txt의 정확한 문법(User-agent 그룹, Disallow/Allow, *$, 최장 일치 규칙)을 정리하고, 사이트 유형별로 바로 복사해 쓸 수 있는 예제와 함께 실제 규칙 4줄을 URL 4개에 대입해 어떤 게 차단되는지 한 줄씩 따라간다. 직접 손으로 쓰기 번거로우면 robots.txt 생성기로 만들고, 배포 후에는 robots.txt 검사기로 특정 URL이 실제로 허용/차단되는지 검증하면 된다.

파일 위치: 호스트당 하나, 반드시 루트에

robots.txt는 호스트(도메인+프로토콜+포트)마다 정확히 하나이고, 반드시 루트 경로에 있어야 한다. 크롤러는 오직 https://example.com/robots.txt만 확인하며, /seo/robots.txt처럼 하위 폴더에 둔 파일은 존재하지 않는 것과 같다.

  • https://example.com/robots.txtexample.com에만 적용
  • https://blog.example.com/robots.txt — 서브도메인은 별도 파일이 필요하다. 본 도메인의 파일이 상속되지 않는다.
  • http://https://도 원칙적으로 별개 호스트다. https로 통합 리다이렉트를 걸었다면 https 쪽 파일만 관리하면 된다.
  • 파일은 UTF-8 평문이어야 하고, 구글은 500KiB까지만 읽는다(넘치는 부분은 무시).

응답 코드도 중요하다. robots.txt가 404면 “제한 없음”으로 간주해 전부 크롤링하지만, 5xx가 지속되면 구글은 사이트 전체 크롤링을 보수적으로 줄일 수 있다. 파일이 없더라도 200으로 빈 파일을 주거나 깔끔한 404를 반환하는지 확인하자.

문법: User-agent 그룹, Disallow/Allow, 와일드카드

robots.txt는 그룹 단위로 읽는다. 하나 이상의 User-agent 줄이 그룹을 시작하고, 그 아래 Disallow/Allow 줄이 그 그룹의 규칙이 된다. 크롤러는 자신과 가장 구체적으로 일치하는 그룹 하나만 따른다 — 예를 들어 User-agent: Googlebot 그룹이 있으면 Googlebot은 User-agent: * 그룹을 완전히 무시한다.

User-agent: *
Disallow: /admin/

User-agent: Googlebot
Disallow: /beta/

위 파일에서 Googlebot에게 적용되는 규칙은 Disallow: /beta/ 하나뿐이다. /admin/은 Googlebot에게 열려 있다 — 두 그룹이 합쳐질 거라 기대하면 안 된다. Googlebot도 막고 싶으면 Googlebot 그룹에 Disallow: /admin/을 한 줄 더 써야 한다.

  • Disallow: 값으로 시작하는 경로를 크롤링 금지. Disallow:처럼 값이 비면 “아무것도 막지 않음”.
  • Allow: Disallow의 예외를 뚫는 용도. 구글·빙이 지원한다.
  • *: 0개 이상의 아무 문자와 일치. Disallow: /*.pdf는 경로 어딘가에 .pdf가 들어가는 모든 URL과 일치한다.
  • $: 경로의 끝을 고정. Disallow: /*.pdf$.pdf끝나는 URL만 막는다(/file.pdf?v=2는 쿼리까지 포함해 매칭하므로 주의).
  • 최장 일치(longest match) 규칙: Allow와 Disallow가 동시에 걸리면 일치한 경로 문자열이 더 긴 규칙이 이긴다. 길이가 같으면 구글은 덜 제한적인 쪽(Allow)을 택한다. 규칙을 쓴 순서는 무관하다.

최장 일치가 핵심이다. Disallow: /admin/(7자)과 Allow: /admin/help/(12자)가 함께 있으면, /admin/help/faq는 더 긴 Allow가 이겨서 크롤링이 허용된다. 이 계산을 머릿속으로 하기 어려우면 robots.txt 검사기에 규칙과 URL을 넣고 판정 결과를 바로 확인하는 편이 안전하다.

바로 쓰는 예제 모음 + Sitemap 지시어

상황robots.txt 내용
전체 허용(기본값 명시)User-agent: *
Disallow:
전체 차단User-agent: *
Disallow: /
관리자·API만 차단User-agent: *
Disallow: /admin/
Disallow: /api/
WordPress 표준형User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Sitemap: https://example.com/sitemap.xml
스테이징 서버(전부 차단)User-agent: *
Disallow: /
+ 가능하면 HTTP 인증까지 걸 것

Sitemap: 지시어는 그룹과 무관하게 파일 어디에 두어도 되고, 여러 줄 써도 된다. 값은 반드시 절대 URL이어야 하며(Sitemap: /sitemap.xml처럼 상대 경로 금지), robots.txt는 크롤러가 가장 먼저 읽는 파일이므로 사이트맵을 알리는 가장 확실한 통로다. 등록한 사이트맵이 실제로 유효한 XML인지, URL이 전부 200을 반환하는지는 사이트맵 검사기로 확인하자.

실전 예시: 규칙 4줄을 URL 4개에 대입해 보기

다음 규칙이 배포돼 있다고 하자.

User-agent: *
Disallow: /admin/
Allow: /admin/help/
Disallow: /*.pdf$
Disallow: /search
요청 URL걸리는 규칙판정이유
/admin/settingsDisallow: /admin/차단접두사 일치. Allow 규칙은 /admin/help/로 시작하지 않으므로 미적용
/admin/help/faqAllow: /admin/help/(12자) vs Disallow: /admin/(7자)허용둘 다 일치하지만 더 긴 쪽(Allow)이 승리 — 최장 일치 규칙
/files/report.pdfDisallow: /*.pdf$차단*/files/report에 매칭되고 $가 끝을 고정
/search-resultsDisallow: /search차단끝에 슬래시가 없으면 접두사로 동작 — /search-results, /searching까지 전부 걸린다

마지막 행이 가장 흔한 실수다. /search 페이지 하나만 막을 생각이었다면 Disallow: /search$(정확히 그 경로) 또는 Disallow: /search/(하위 디렉터리만)로 써야 한다.

치명적 오해: robots.txt는 색인을 지우지 못한다

robots.txt는 크롤링(가져오기)을 막을 뿐, 색인(검색결과 등록)을 막지 않는다.다른 사이트가 그 URL로 링크를 걸면 구글은 페이지 내용을 읽지 못한 채로 URL만 색인할 수 있다. 그 결과 검색결과에 제목도 설명도 없는 “이 페이지에 대한 정보가 없습니다” 형태의 항목이 남는다.

  1. 검색결과에서 빼고 싶다면: 페이지에 <meta name="robots" content="noindex">(또는 X-Robots-Tag 헤더)를 달고, robots.txt에서는 그 페이지를 차단하지 말아야 한다. 차단하면 크롤러가 noindex 태그 자체를 못 읽는다.
  2. 긴급 제거: Search Console의 URL 삭제 도구를 병행한다.
  3. robots.txt가 맞는 용도: 크롤링 예산 절약(무한 필터·정렬 파라미터, 내부 검색 결과), 서버 부하가 큰 엔드포인트 보호. 비밀 보호 용도가 아니다 — robots.txt는 누구나 열람할 수 있어서 오히려 숨기고 싶은 경로의 목록표가 된다.

그 밖의 함정 두 가지. 첫째, 경로는 대소문자를 구분한다 — Disallow: /Admin//admin/을 막지 못한다. 둘째, 위에서 본 대로 슬래시 유무로 의미가 달라진다(/admin은 접두사, /admin/은 디렉터리). 규칙을 고친 뒤에는 robots.txt 검사기로 대표 URL 몇 개를 넣어 판정을 확인하고, 처음부터 안전한 템플릿이 필요하면 robots.txt 생성기에서 옵션만 골라 내려받는 것이 실수를 줄이는 지름길이다.

자주 묻는 질문

robots.txt로 차단하면 검색결과에서 사라지나요?
아니요. robots.txt는 크롤링만 막고 색인은 막지 못합니다. 외부 링크가 있으면 내용 없이 URL만 색인될 수 있습니다. 검색결과에서 제거하려면 robots.txt 차단을 풀고 페이지에 noindex 메타 태그(또는 X-Robots-Tag 헤더)를 적용해야 하며, 급하면 Search Console의 URL 삭제 도구를 함께 사용하세요.
서브도메인에도 같은 robots.txt가 적용되나요?
아니요. robots.txt는 호스트 단위입니다. blog.example.com은 example.com의 파일을 상속하지 않으므로 서브도메인마다 각각의 루트에 robots.txt를 따로 올려야 합니다.
Allow와 Disallow가 동시에 일치하면 어느 쪽이 이기나요?
일치한 경로 문자열이 더 긴 규칙이 이깁니다(최장 일치). 예를 들어 Disallow: /admin/ 과 Allow: /admin/help/ 가 함께 있으면 /admin/help/faq 는 더 긴 Allow가 적용되어 크롤링이 허용됩니다. 길이가 같으면 구글은 덜 제한적인 Allow를 택합니다.
Disallow: /search 와 Disallow: /search/ 는 뭐가 다른가요?
슬래시가 없는 /search 는 접두사 일치라서 /search-results, /searching 같은 URL까지 전부 차단합니다. /search/ 는 그 디렉터리 하위만 차단하고, 정확히 한 경로만 막으려면 /search$ 처럼 $ 로 끝을 고정하면 됩니다.
Sitemap 지시어는 꼭 robots.txt에 넣어야 하나요?
필수는 아니지만 강력히 권장합니다. 크롤러가 가장 먼저 읽는 파일이 robots.txt이므로 사이트맵 위치를 알리는 가장 확실한 방법입니다. 값은 절대 URL이어야 하고 여러 줄 선언해도 됩니다. 등록 전에 사이트맵 XML이 유효한지 검사 도구로 확인하세요.
robots.txt 파일이 아예 없으면 어떻게 되나요?
404를 반환하면 크롤러는 제한이 없다고 보고 모든 공개 페이지를 크롤링합니다. 문제가 되는 것은 5xx 오류가 지속되는 경우로, 구글이 사이트 전체 크롤링을 줄일 수 있습니다. 파일이 필요 없다면 깔끔한 404나 빈 200 응답을 유지하세요.

이 가이드와 함께 쓰면 좋은 도구

관련 가이드