
# robots.txt에서 AI 봇을 허용하거나 차단하는 법

대부분의 사이트는 이걸 한 번, 그것도 잘못 정해놓고 다시 들여다보지 않습니다. 학습이 무서워 전부 막아버리면서 고객을 데려오는 트래픽까지 같이 끊거나, 아무것도 설정하지 않은 채 크롤러가 알아서 가정하는 대로 두거나 둘 중 하나입니다.

말이 되는 입장은 세 가지입니다. 각각의 파일과, 그 입장을 무너뜨리는 실수들을 정리했습니다.

## 먼저, 모든 걸 가르는 구분

AI 회사들이 굴리는 에이전트는 두 종류이고, 서로 바꿔 쓸 수 없습니다.

**크롤러**는 자기 일정대로 페이지를 대량으로 수집합니다. 보통 학습이나 색인이 목적입니다: `GPTBot`, `ClaudeBot`, `PerplexityBot`, `CCBot`, `Bytespider`, `Google-Extended`, `Applebot-Extended`.

**요청 시 가져오는 페처**는 방금 누군가 그 페이지에 대해 물었기 때문에 한 장을 가지러 옵니다: `ChatGPT-User`, `Claude-User`, `Perplexity-User`. 그 요청으로 학습하는 사람은 없습니다. 당신에 대한 답을 기다리는 사람이 있을 뿐입니다.

앞쪽을 막는 건 내 콘텐츠를 두고 내리는 사업적 판단입니다. 뒤쪽을 막는 건 주소를 직접 입력하고 들어온 방문자를 돌려보내는 쪽에 가깝습니다. 흔히 보이는 "AI는 전부 차단하라"는 조언은 둘을 구분하지 않습니다.

## 경우 1 — 들여보내기

찾아지길 바라는 모든 것에 맞는 기본값입니다. 문서, 출처로 이름이 나오길 바라는 매체, 추천받고 싶은 사업.

```
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /cart/
Disallow: /*?session=

Content-Signal: search=yes, ai-input=yes, ai-train=no

Sitemap: https://example.kr/sitemap.xml
```

무슨 말인지 그대로 읽으면 됩니다. 들어와라, 색인해라, 답변에 써라, 학습에는 쓰지 마라. 이 입장은 robots.txt만으로는 표현할 수 없습니다. 아래 Content-Signal 절을 보세요.

## 경우 2 — 답변은 되고, 학습은 안 되고

대부분의 기업이 실제로 원하는 입장이자, 제대로 설정한 곳이 거의 없는 입장입니다.

```
User-agent: GPTBot
Disallow: /

User-agent: ClaudeBot
Disallow: /

User-agent: CCBot
Disallow: /

User-agent: Bytespider
Disallow: /

User-agent: Google-Extended
Disallow: /

User-agent: Applebot-Extended
Disallow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: Claude-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: ChatGPT-User
Allow: /

User-agent: Claude-User
Allow: /

User-agent: Perplexity-User
Allow: /

User-agent: *
Allow: /

Content-Signal: search=yes, ai-input=yes, ai-train=no

Sitemap: https://example.kr/sitemap.xml
```

이 파일에서 알아둘 게 두 가지입니다. `Google-Extended`가 관장하는 건 Gemini 학습이지 Google 검색이 **아닙니다**. 막아도 검색 순위에는 영향이 없습니다. `Applebot-Extended`도 같은 방식으로 Apple Intelligence를 담당하며, Siri와 Spotlight를 돌리는 `Applebot`과는 별개입니다.

## 경우 3 — AI를 완전히 막기

유료 아카이브, 라이선스가 걸린 자료, 접근 자체를 파는 것이라면 정당한 선택입니다.

```
User-agent: GPTBot
User-agent: OAI-SearchBot
User-agent: ChatGPT-User
User-agent: ClaudeBot
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: PerplexityBot
User-agent: Perplexity-User
User-agent: CCBot
User-agent: Bytespider
User-agent: Google-Extended
User-agent: Applebot-Extended
User-agent: Amazonbot
User-agent: meta-externalagent
Disallow: /

User-agent: *
Allow: /

Content-Signal: search=no, ai-input=no, ai-train=no

Sitemap: https://example.kr/sitemap.xml
```

`User-agent` 줄을 여러 개 쌓으면 그 아래 규칙을 함께 씁니다. 규격에 맞는 문법이고, 블록 열네 개를 따로 관리하는 것보다 훨씬 편합니다.

고르기 전에 대가를 알아두세요. AI의 답변에서 당신은 사라집니다. 누군가 어시스턴트에게 당신 업계를 물으면 이름이 불리는 쪽은 경쟁사고, 당신은 아닙니다.

## 실수들

**적용되는 건 가장 구체적인 그룹 하나뿐입니다.** 자기 이름을 찾은 크롤러는 `User-agent: *`를 통째로 무시합니다. 그래서 아래는 보이는 것과 다르게 동작합니다.

```
User-agent: *
Disallow: /private/

User-agent: GPTBot
Disallow: /
```

`GPTBot`은 전부 막히지만, 나머지 봇은 `*` 그룹만 읽습니다. 게다가 나중에 `GPTBot` 아래에 `Allow`를 하나 넣으면 `/private/`은 그 봇에 대해 보호가 풀립니다. 그 그룹은 `/private/`을 언급한 적이 없으니까요.

**빈 줄이 그룹을 나눕니다.** 그룹 한가운데의 빈 줄은 거기서 그룹을 끝냅니다. 그 뒤의 줄들은 다음 `User-agent`가 나올 때까지 아무에게도 속하지 않습니다.

**`Disallow:` 뒤에 아무것도 없으면 전부 허용입니다.** `Disallow: /`가 전부 차단입니다. 열린 문과 닫힌 문 사이가 한 글자입니다.

**robots.txt는 접근 제어가 아닙니다.** 예의 바른 크롤러가 지켜주는 부탁입니다. 무시하는 스크레이퍼는 앞으로도 무시합니다. 읽히면 안 되는 것에는 지시문이 아니라 인증이 필요합니다.

**`Crawl-delay`는 AI 크롤러 대부분이 무시합니다.** 부하가 문제라면 엣지에서 속도를 제한하세요.

## Content-Signal: 되는지가 아니라 무엇에 쓸지를 말하기

robots.txt가 답하는 질문은 하나뿐입니다. 이걸 가져가도 되는가. "색인은 해도 되지만 학습은 하지 마라"고 말할 방법은 없습니다. 정작 대부분의 사이트가 가진 입장이 그건데도요.

`Content-Signal`은 독립적인 신호 세 개로 그 층을 더합니다.

```
Content-Signal: search=yes, ai-input=yes, ai-train=no
```

- `search` — 검색 색인에 실려도 되는지
- `ai-input` — 출처를 밝히고 답변의 재료로 써도 되는지
- `ai-train` — 모델 학습에 써도 되는지

위처럼 robots.txt에 넣을 수도 있고, 모든 응답에 HTTP 헤더로 실어 보낼 수도 있습니다. 우리는 그렇게 합니다. 누가 지킬 의무가 있는 표준이 아니라 아직 어린 관행입니다. 그래도 한 줄이면 되고, 기계가 읽으며, `Disallow`로는 말할 수 없는 의도를 말합니다.

## 당신 것이 실제로 나가는지 확인하기

파일을 쓰는 것과 그 파일을 서빙하는 것은 다른 일입니다.

```bash
curl -s https://example.kr/robots.txt
curl -sI https://example.kr/robots.txt | grep -i "server\|cf-cache-status"
```

두 번째 명령이 보기보다 중요합니다. 자기 robots.txt 없이 CDN 뒤에 있으면, CDN이 당신 대신 당신이 쓴 적 없는 파일로 응답할 수 있습니다. 그럴듯한 `200`인데 당신의 규칙은 한 줄도 없고 sitemap도 없습니다. 우리 것이 정확히 그랬습니다. 원본 서버가 `404`를 내주는 동안 몇 달째 그러고 있었습니다.

[robots.txt 생성하기](/ko/tools/robots-txt-generator) · [지금 서빙 중인 것 확인하기](/ko/tools/robots-txt-checker) · [봇이 허용돼 있나](/ko/tools/ai-crawlers-checker)
