사용 가이드게시일 읽는 시간 약 8분

robots.txt의 Allow와 Disallow 우선순위|*와 $의 의미

robots.txt에서 같은 URL에 Allow와 Disallow가 둘 다 해당될 때 어느 쪽이 쓰일까요? '위에 쓴 쪽이 우선'이라고 생각하기 쉽지만 Google의 해석은 다릅니다. 이 글에서는 Google이 채택한 '가장 길게 일치한 규칙이 이긴다'는 방식, 와일드카드 '*'와 끝의 '$'의 의미, '/fish'와 '/fish/'의 차이, 대소문자와 비ASCII URL의 처리를 예시로 설명합니다.

기본 규칙: 가장 길게 일치한 규칙이 이긴다

Google은 URL 경로에 일치하는 Allow와 Disallow를 모두 모은 뒤, 그중 패턴의 글자 수가 가장 긴 규칙을 씁니다. 긴 패턴일수록 '구체적인 지시'로 보는 사고방식입니다. 쓴 순서는 상관없습니다. 이 해석 방식은 robots.txt의 표준 사양(RFC 9309)에도 적혀 있습니다.

robots.txtURL결과이유
Disallow: /blog/ / Allow: /blog/public//blog/public/a.html허용Allow(13자)가 Disallow(6자)보다 길다
Disallow: /blog/ / Allow: /blog/public//blog/secret.html차단일치하는 것은 Disallow: /blog/뿐
Allow: /blog/ / Disallow: /blog/private//blog/private/x차단Disallow 쪽이 길다. 위에 Allow가 있어도 상관없다
Disallow: / / Allow: /$/허용/$는 /보다 길다($도 1자로 센다)
Disallow: / / Allow: /$/about차단/$는 홈페이지에만 일치

참고로 Bing도 대체로 같은 방식으로 해석하지만, 오래된 크롤러나 일부 도구 중에는 '위에서부터 읽어 처음 일치한 규칙을 쓰는' 것도 있습니다. 어떤 크롤러에서도 같은 결과가 나오게 하고 싶다면 Allow를 Disallow보다 위에 써 두는 것이 안전합니다.

경로는 전방 일치: '/fish'와 '/fish/'의 차이

Allow·Disallow에 쓴 경로는 URL의 앞부분부터 일치하는지(전방 일치)로 비교합니다. 그래서 끝에 슬래시가 있느냐 없느냐에 따라 차단되는 범위가 크게 달라집니다.

패턴일치하는 예일치하지 않는 예
/fish/fish, /fish.html, /fish/salmon.html, /fishheads/Fish.asp, /catfish, /?id=fish
/fish//fish/, /fish/salmon.html, /fish/?id=1/fish, /fish.html, /Fish/Salmon.asp
/사이트의 모든 URL—
(빈칸)아무것에도 일치하지 않음(Disallow:만 쓰면 전부 허용)—

'Disallow: /admin'이라고 쓰면 /admin/ 외에 /administrator나 /admin-guide.html까지 차단됩니다. 폴더 안만 차단하고 싶다면 'Disallow: /admin/'처럼 끝에 슬래시를 붙입니다. WordPress 기본값인 'Disallow: /wp-admin/'이 /wp-admin-guide/를 차단하지 않는 것도 이 차이 때문입니다.

'*'와 '$'의 의미와 사용법

Google과 Bing은 패턴 안의 2가지 기호를 특별하게 취급합니다. '*'는 0자 이상의 어떤 문자열에도 일치하고, '$'는 패턴의 마지막에 두었을 때만 'URL의 끝'을 뜻합니다.

패턴의미일치함일치하지 않음
/*.php중간에 .php를 포함/index.php, /a.php?x=1, /a.php5/windows.PHP
/*.php$.php로 끝남/index.php, /dir/a.php/a.php?x=1, /a.php5
/*.pdf$.pdf로 끝남/files/manual.pdf/files/manual.pdf?download=1
/*?쿼리(?)가 붙음/?a=1, /items?color=red/items
/*?*sort=쿼리 안에 sort=를 포함/items?color=red&sort=price/items?color=red
/fish*/fish와 같음(끝의 *는 의미 없음)/fish, /fishheads/catfish
  • '$'는 마지막에 두었을 때만 특별한 의미가 됩니다. '/a$b'처럼 중간에 둔 $는 그냥 문자로 취급됩니다.
  • '**'는 '*' 하나와 같습니다.
  • '*bot'처럼 User-agent 이름에 와일드카드는 쓸 수 없습니다. '*'를 쓸 수 있는 것은 'User-agent: *' 형태뿐입니다.
  • 패턴은 '/'나 '*'로 시작합니다. 'Disallow: private/'처럼 /를 빠뜨리면 어떤 URL에도 일치하지 않습니다.

검색 결과·파라미터가 붙은 URL을 크롤링에서 빼는 예

사이트 내 검색 결과나 정렬·필터 파라미터가 붙은 URL은 조합에 따라 거의 무한히 늘어납니다. 크롤링 낭비를 줄이기 위해 robots.txt에서 빼는 경우가 많습니다.

  1. 1

    Disallow: /search

    /search와 /search?q=신발을 차단합니다. 전방 일치이므로 /search-tips 같은 URL도 차단된다는 점에 주의합니다.

  2. 2

    Disallow: /*?s=

    WordPress의 사이트 내 검색(/?s=키워드, /blog/?s=…)을 차단합니다.

  3. 3

    Disallow: /*?*sort=

    쿼리 어딘가에 sort=를 포함한 URL을 차단합니다. /items?color=red는 차단하지 않고, /items?color=red&sort=price는 차단합니다.

  4. 4

    Allow: /search/help

    /search 차단 안에서 도움말 페이지만 허용합니다. Allow 쪽이 길기 때문에 쓰는 순서와 상관없이 허용이 됩니다.

파라미터 순서가 바뀌면 일치하지 않게 되는 작성법도 있으므로, '/*?sort='보다 '/*?*sort='처럼 사이에 *를 넣어 두면 누락을 줄일 수 있습니다. 실제 URL을 몇 종류 나열해 테스터로 결과를 확인한 뒤 공개하세요.

대소문자와 비ASCII URL의 처리

  • 경로는 대소문자를 구별합니다. 'Disallow: /Admin/'은 /admin/을 차단하지 않습니다. URL에 대문자가 섞이는 CMS에서는 둘 다 쓰거나 실제 URL에 맞춥니다.
  • User-agent 이름은 대소문자를 구별하지 않습니다. 'googlebot'이든 'Googlebot'이든 같습니다.
  • 한글 같은 비ASCII 경로는 'Disallow: /카테고리/'처럼 그대로 써도, 'Disallow: /%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC/'처럼 %인코딩해도 Google은 같은 것으로 취급합니다. 파일은 UTF-8로 저장합니다.
  • %인코딩의 영문자(%EC와 %ec)는 대소문자를 구별하지 않습니다.

robots.txt 테스터도 Google과 마찬가지로 비ASCII 경로와 %인코딩을 같은 URL로 비교합니다. 어느 작성법이든 결과가 바뀌지 않는지 실제 URL로 시험해 두면 안심입니다. 그룹이 선택되는 방식은 User-agent 작성법과 그룹이 선택되는 방식을, 써 두었는데 효과가 없을 때의 원인은 robots.txt 확인 방법도 참고하세요.

자주 묻는 질문

robots.txt는 위에 쓴 규칙이 우선되나요?
Google에서는 쓴 순서는 상관없습니다. 일치한 규칙 중 패턴이 가장 긴 것을 쓰고, 길이가 같으면 Allow를 씁니다. 위에서부터 차례로 읽는 크롤러에도 대응하고 싶다면 Allow를 먼저 써 두는 것이 안전합니다.
robots.txt의 $는 무슨 뜻인가요?
패턴의 마지막에 둔 '$'는 'URL의 끝'을 뜻합니다. 'Disallow: /*.pdf$'는 .pdf로 끝나는 URL만 차단하고, /a.pdf?download=1처럼 쿼리가 이어지는 URL은 차단하지 않습니다.
Disallow: /admin과 Disallow: /admin/은 다른가요?
다릅니다. '/admin'은 전방 일치이므로 /administrator나 /admin.html도 차단합니다. '/admin/'은 폴더 안만 차단하고, /admin(슬래시 없음)은 차단하지 않습니다.
Allow: /와 Disallow: /를 둘 다 쓰면 어떻게 되나요?
둘 다 패턴 길이가 1자로 같으므로 Google은 Allow를 쓰고, 전부 허용이 됩니다. 사이트 전체를 차단하고 싶다면 Allow: /를 지우세요.

이 글에서 소개한 도구

함께 읽으면 좋은 글

사용 가이드약 8분

robots.txt 확인 방법: 테스터가 없어진 뒤 차단을 알아보는 순서

Google Search Console에 있던 robots.txt 테스터는 2023년 12월에 제공이 끝나 지금은 ‘robots.txt 보고서’로 바뀌었습니다. 보고서에서는 ‘URL을 넣고 차단되는지 시험하기’를 할 수 없어서 ‘어디서 확인해야 하지?’ 하고 헤매는 사람이 늘었습니다. 이 글에서는 robots.txt를 두는 곳과 여는 법, Search Console 보고서와 URL 검사 도구로 알 수 있는 것·알 수 없는 것, 테스터로 URL별 판정을 확인하는 순서, 수정한 뒤 반영되기까지의 흐름을 정리합니다.

글 읽기 →
사용 가이드약 7분

robots.txt의 User-agent 작성법: *와 Googlebot을 둘 다 쓰면

robots.txt에 ‘User-agent: *’ 그룹과 ‘User-agent: Googlebot’ 그룹을 둘 다 쓰면 Googlebot은 ‘*’의 규칙을 쓰지 않게 됩니다. 이것을 모르고 Googlebot용 그룹을 추가했다가 막아 두었던 페이지가 크롤링되기 시작하는 문제가 흔합니다. 이 글에서는 크롤러가 어느 그룹을 쓰는지 정해지는 방식, Googlebot-Image나 AdsBot-Google 같은 특별한 경우, 그룹 묶는 법과 잘못 쓰기 쉬운 점을 설명합니다.

글 읽기 →
사용 가이드약 8분

robots.txt로 AI 크롤러 차단하기: GPTBot·ClaudeBot

내 사이트의 글이나 이미지가 AI 학습에 쓰이는 것을 원하지 않는 운영자가 늘고 있습니다. robots.txt에 AI 크롤러의 이름을 적으면 각 회사의 크롤러에 수집을 멈춰 달라고 알릴 수 있습니다. 다만 AI 크롤러에는 ‘학습용’, ‘AI 검색용’, ‘사용자 요청으로 여는 것’이 있어서 어느 것을 막느냐에 따라 영향이 크게 달라집니다. 이 글에서는 주요 AI 크롤러의 이름과 역할, 목적별 robots.txt 작성법, 차단할 때의 주의점을 정리합니다.

글 읽기 →