남의 사이트는 AI 크롤러를 어떻게 대하고 있을까요. 안내 글에서 읽은 모습과 실제로 서비스되고 있는 파일이 같은지 궁금해서, 이번에는 글이 아니라 파일을 직접 열어 봤어요.
결론부터 적을게요. 목록에서 기계적으로 잘라 낸 도메인 700곳에 /robots.txt 와 /llms.txt 와 /ai.txt 를 각각 요청했어요. robots.txt 를 HTTP 200 으로 내려준 곳은 435곳인데, 그중 실제로 robots.txt 문법으로 읽힌 것은 382곳이었어요. llms.txt 가 진짜 파일로 돌아온 곳은 61곳, ai.txt 가 진짜 파일로 돌아온 곳은 알바천국 한 곳이었고요.
분모를 먼저 갈라 둘게요. 요청을 보낸 도메인은 700곳이에요. llms.txt 의 61곳과 ai.txt 의 1곳은 이 700을 분모로 센 값이에요. 반면 robots.txt 의 382곳은 700 가운데 200으로 답한 435곳을 한 번 더 걸러 낸 값이에요. 세 숫자가 같은 700에서 나란히 나온 게 아니라, robots.txt 쪽만 700에서 435로, 435에서 다시 382로 두 번 좁혀졌다는 뜻이에요.
각도도 한 줄 갈라 둘게요. robots.txt 에 무엇을 어떤 순서로 적는지, 그러니까 직접 쓰는 쪽은 AI 크롤러 차단하는 법에 이미 정리해 뒀어요. 그 글은 회사 문서를 근거로 삼은 처방이고, 이 글은 남들이 지금 서비스하고 있는 파일 382곳을 열어 센 관측이에요.
미리 선도 하나 그을게요. robots.txt 는 강제 장치가 아니라 공개된 요청이에요. 이 조사는 파일에 무엇이 적혀 있는지만 쟀고, 크롤러가 그 요청을 실제로 지켰는지는 재지 않았어요.

무엇을 어떻게 셌는지부터 적을게요
숫자보다 표본이 먼저예요. 도메인은 손으로 고르지 않았어요. 공개된 순위 목록을 받아 기계적으로 잘랐어요.
| 항목 | 값 |
|---|
| 목록 | Tranco 일간 상위 100만 목록 |
| 내려받은 크기 | 9,720,186바이트 |
| 서버가 밝힌 갱신 시각 | 2026년 9월 14일 22시 23분 12초 GMT |
| 목록 행 수 | 1,000,000행 |
| 프레임 A | 목록 상위 500개, 순위 1위부터 500위까지 |
| 프레임 B | 목록 전체에서 .kr 로 끝나는 도메인 상위 200개, 순위 1,160위부터 75,035위까지 |
| 합계 | 두 프레임이 한 건도 겹치지 않아 700개 |
| 요청 횟수 | 700개 도메인 곱하기 3개 경로, 모두 2,100회 |
| 요청 시각 | 2026년 9월 15일 오전 10시 58분 7초부터 11시 0분 17초까지, 한국 시각 |
요청 헤더에는 일반 브라우저 User-Agent 를 붙였어요. 헤더 없이 부르면 403 을 주는 곳이 있어서예요. 리다이렉트는 다섯 번까지 따라갔고요.
여기서 목록의 성질을 하나 짚어 둘게요. 프레임 A 1위부터 5위는 google.com, cloudflare.com, facebook.com, gstatic.com, googleapis.com 이에요. 보시면 알 수 있듯 웹사이트가 아니라 CDN 이나 정적 자원 도메인이 섞여 있어요. 그래서 연결 자체가 안 되는 곳이 나오는데, 이건 오류가 아니라 이 목록이 원래 그렇게 생겼기 때문이에요.
HTTP 200 이 곧 robots.txt 는 아니에요
이 절이 이 글의 분모를 정해요. 700곳의 응답을 사다리로 펼치면 이래요.
| 결과 | 곳 |
|---|
| HTTP 200 | 435 |
| 그중 robots.txt 문법으로 읽힌 것 | 382 |
| 그중 200 인데 HTML 등 다른 것이 온 것 | 53 |
| HTTP 404 | 53 |
| HTTP 403 | 24 |
| 연결 실패 | 177 |
| 그 밖의 응답 | 11 |
| 합계 | 700 |
200을 받았다고 robots.txt 가 온 게 아니에요. instagram.com 과 linkedin.com 이 그런 경우인데, 둘 다 200을 주지만 내려온 내용은 HTML 이에요. linkedin.com 이 준 것은 구글 동의 화면 HTML 이었고요. 그래서 이 글이 쓰는 분모는 435가 아니라 382예요.
연결 실패 177곳도 오해하기 쉬운 자리예요. 이건 막았다는 뜻이 아니라 그 도메인에 웹서버가 응답하지 않았다는 뜻이에요. 바로 위에서 적은 CDN 도메인들이 여기 들어가요.
프레임별로 나누면 이렇게 돼요.
| 프레임 | 요청 | robots 읽힘 | AI 봇을 이름으로 적은 곳 |
|---|
| A, 상위 500 | 500 | 246 | 90 |
B, .kr 상위 200 | 200 | 136 | 50 |
| 합계 | 700 | 382 | 140 |
이 표를 보고 두 프레임의 비율을 견주고 싶어지실 텐데, 그건 안 돼요. 프레임 A 는 1위부터 500위까지이고 프레임 B 는 1,160위부터 75,035위까지라 순위대가 아예 달라요. 한쪽이 더 한다 덜 한다로 읽으면 순위 차이를 국가 차이로 바꿔치기하게 돼요.
AI 크롤러 정책 파일은 실제로 얼마나 적혀 있나요
세 파일을 한자리에 모으면 이래요. 읽힌 robots.txt 382곳 가운데 AI 크롤러를 이름으로 한 번이라도 적어 둔 곳은 140곳이에요. llms.txt 는 700곳 중 61곳, ai.txt 는 700곳 중 1곳이고요.
| 파일 | 진짜 파일로 판정 | 200 인데 HTML 이었던 곳 | 404 |
|---|
/robots.txt | 382 | 53 | 53 |
/llms.txt | 61 | 116 | 291 |
/ai.txt | 1 | 121 | 343 |
llms.txt 61곳은 프레임 A 가 52곳, 프레임 B 가 9곳이에요. 프레임 B 의 9곳은 mk.co.kr, koreatimes.co.kr, news1.kr, asiae.co.kr, lge.co.kr, uriweb.kr, filmmakers.co.kr, alba.co.kr, netinsight.co.kr 이에요. 세 파일을 다 갖고 있는 곳은 alba.co.kr 한 곳이었어요.
여기서 응답을 열어 보는 일이 왜 필요한지도 드러나요. llms.txt 는 200을 받은 곳이 177곳인데 그중 116곳이 HTML 이었어요. 코드만 보고 세면 세 배 가까이 부풀어요.
어떤 봇 이름이 실제로 적혀 있나요
이름을 적었다는 건 User-agent: 줄에 그 토큰이 있었다는 뜻이에요. 규격대로 대소문자는 무시하고 맞췄어요. 분모는 382곳이에요.
| 봇 이름 | 이름 지목 | 전면 차단 | 일부 경로만 차단 | 전면 허용 |
|---|
| GPTBot | 102 | 71 | 21 | 10 |
| ClaudeBot | 90 | 62 | 20 | 8 |
| Google-Extended | 85 | 53 | 22 | 10 |
| CCBot | 83 | 71 | 7 | 5 |
| Bytespider | 83 | 76 | 6 | 1 |
| PerplexityBot | 79 | 38 | 29 | 12 |
| meta-externalagent | 70 | 55 | 15 | 0 |
| ChatGPT-User | 69 | 32 | 27 | 10 |
| Applebot-Extended | 65 | 51 | 9 | 5 |
| OAI-SearchBot | 65 | 23 | 30 | 12 |
| anthropic-ai | 53 | 41 | 8 | 4 |
| Claude-User | 47 | 17 | 20 | 10 |
| Claude-SearchBot | 47 | 15 | 23 | 9 |
| Perplexity-User | 39 | 16 | 14 | 9 |
표에서 눈에 먼저 들어오는 줄은 PerplexityBot 과 OAI-SearchBot 이에요. 이름 지목 수는 다른 봇과 비슷한데 전면 차단보다 일부 경로만 차단이 더 많아요. 검색과 인용 쪽 봇에는 문을 조금 열어 두는 곳이 있다는 뜻으로 읽히는데, 그 판단이 맞는지는 다음 절의 원문에서 확인할 수 있어요.
한 사이트가 적은 봇 이름 개수는 1개부터 28개까지 갈려요. 1개만 적은 곳이 16곳이고, 가장 많이 적은 곳은 msn.com 으로 28개였어요.
이름이 없다는 건 허용한다는 뜻이 아니에요
여기가 이 글에서 제일 자주 잘못 읽히는 자리예요. robots.txt 규격에서 이름이 따로 적히지 않은 봇은 허용이 아니라 별표 그룹을 물려받아요. 그래서 GPTBot 만 막아 둔 곳에서 OAI-SearchBot 이 어떻게 되는지는 별표 그룹까지 읽어야 정해져요. 아래 표의 수치는 전부 그 물려받기를 반영해 계산한 값이에요.
먼저 GPTBot 을 이름으로 적어 전면 차단한 71곳의 속사정이에요.
| 같은 계열 봇 | 함께 전면 차단 | 이름은 적었으나 전면 차단이 아님 | 이름이 없어 별표 그룹을 물려받음 | 합 |
|---|
| OAI-SearchBot | 22 | 10 | 39 | 71 |
| ChatGPT-User | 30 | 7 | 34 | 71 |
ClaudeBot 을 이름으로 적어 전면 차단한 62곳도 모양이 비슷해요.
| 같은 계열 봇 | 함께 전면 차단 | 이름은 적었으나 전면 차단이 아님 | 이름이 없어 별표 그룹을 물려받음 | 합 |
|---|
| Claude-SearchBot | 16 | 10 | 36 | 62 |
| Claude-User | 17 | 8 | 37 | 62 |
가운데 칸이 이 글의 발견이에요. GPTBot 을 막은 71곳 중 10곳은 OAI-SearchBot 의 이름을 적어 두고도 전면 차단으로 두지 않았어요. 실수로 빠뜨린 게 아니라 일부러 갈라 둔 자리라는 뜻이에요.

파일 안에 이유를 적어 둔 곳들
그 갈림이 의도라는 증거는 파일 안 주석에 있어요. sciencedirect.com 은 순위 218위인데, 자기 파일에 이렇게 적어 뒀어요.
# AI SEARCH / RETRIEVAL CRAWLERS
# Bots that fetch content to generate AI-powered search answers or respond to
# user queries. OAI-SearchBot and Claude-User are explicitly allowed to enable AI search
# citations. All others remain blocked pending review.
AI 검색 답변을 만들려고 가져가는 봇 중에서 OAI-SearchBot 과 Claude-User 만 인용을 위해 허용하고, 나머지는 검토가 끝날 때까지 막아 둔다는 이야기예요. 같은 파일의 실제 줄은 이렇게 생겼어요.
User-agent: GPTBot
Disallow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: ChatGPT-User
Disallow: /
forbes.com 은 순위 215위인데 같은 모양이에요. GPTBot 과 PerplexityBot 은 전면 차단이고, OAI-SearchBot 과 Claude-User 와 Claude-SearchBot 은 전면 허용이에요. 한 파일 안에 차단과 허용이 회사가 아니라 하는 일을 기준으로 갈려 있어요.
reuters.com 은 순위 286위인데 반대 방향으로 같은 일을 해요. 별표 그룹을 통째로 막고, 허용할 봇만 이름을 적는 방식이에요.
# Block all other bots
User-agent: *
Allow: /plus/
Disallow: /
그 앞쪽 허용 명단에 ChatGPT-User 와 OAI-SearchBot 이 Bingbot, Applebot 과 나란히 들어 있어요. 그런데 GPTBot 은 그 명단에 없어요. 그래서 GPTBot 은 별표 그룹을 물려받아 막히게 돼요. 바로 앞 절에서 말한 물려받기가 실제로 작동하는 모습이에요. 같은 파일에는 Applebot-Extended 를 따로 전면 차단하는 줄도 들어 있고요.
한국 사이트는 주석을 한국어로 갈라 적었어요
kmib.co.kr 은 순위 49,147위예요. 이 파일은 EUC-KR 로 인코딩돼 있어서 UTF-8 로 그냥 읽으면 글자가 깨져요. 디코딩해서 읽은 원문은 이래요.
# OpenAI 모델 학습
User-agent: GPTBot
Disallow: /
# Anthropic Claude 모델 학습
User-agent: ClaudeBot
Disallow: /
User-agent: anthropic-ai
Disallow: /
# Google Gemini/Vertex 학습
User-agent: Google-Extended
Disallow: /
같은 파일 뒷부분은 방향이 반대예요.
# OpenAI ChatGPT 검색 색인
User-agent: OAI-SearchBot
Allow: /
# Perplexity 검색·인용 색인
User-agent: PerplexityBot
Allow: /
# Anthropic Claude 검색·인용 색인
User-agent: Claude-SearchBot
Allow: /
학습 쪽은 막고 검색과 인용 쪽은 여는 구분을, 주석에 한국어로 그대로 적어 둔 셈이에요. mk.co.kr 은 순위 9,641위인데 같은 구분을 세 덩어리로 적었어요. AI 학습과 대량 수집 크롤러는 차단한다는 줄, 검색엔진 최적화와 경쟁정보 수집 크롤러도 차단한다는 줄, 검색과 SNS 를 포함한 그 밖의 크롤러는 허용한다는 줄이에요. 그리고 파일 끝에 자기 llms.txt 주소를 가리키는 주석 줄까지 붙여 뒀어요. robots.txt 가 llms.txt 를 안내하는 구조라서, 두 파일을 함께 운영하는 곳이 실제로 있다는 걸 보여 주는 자리예요.
brunch.co.kr 은 순위 19,817위인데 영어 주석으로 같은 구분을 해요. 마지막 갱신 날짜를 2026년 4월 22일로 적어 두고, AI 학습 크롤러 덩어리와 다른 검색엔진 및 AI 검색 도우미 덩어리를 나눠 놨어요.
수치로 정리하면 robots.txt 안에 한글 주석이 있는 곳은 21곳이고, pixabay.com 한 곳만 빼면 전부 .kr 이에요. UTF-8 로 못 읽는 robots.txt 는 3곳으로 edaily.co.kr, tworld.co.kr, kmib.co.kr 이었어요.
robots.txt 에 새로 생긴 줄, Content-Signal
Allow 도 Disallow 도 아닌 새 줄이 눈에 띄었어요. 382곳 중 15곳의 robots.txt 에 Content-Signal: 이라는 줄이 들어 있었어요.
cgv.co.kr 파일 맨 위에 그 줄이 무슨 뜻인지 설명이 붙어 있어요.
# As a condition of accessing this website, you agree to abide by the following
# content signals:
# (a) If a Content-Signal = yes, you may collect content for the corresponding use.
# (b) If a Content-Signal = no, you may not collect content for the corresponding use.
# search: building a search index and providing search results ... Search does not
# include providing AI-generated search summaries.
# ai-input: inputting content into one or more AI models ...
# ai-train: training or fine-tuning AI models.
신호가 yes 면 그 용도로 수집해도 되고 no 면 안 된다는 이야기예요. 눈여겨볼 대목은 search 의 정의예요. 검색 색인을 만들고 검색 결과를 주는 것은 search 인데, AI 가 만들어 주는 검색 요약은 거기 들어가지 않는다고 못 박아 뒀어요. 같은 주석에는 이 신호로 표현된 제한이 유럽연합 디지털 단일시장 저작권 지침 2019/790 제4조에 따른 권리 유보라는 문장도 들어 있어요.
줄 원문을 전부 모으면 91줄이고 분포는 이래요.
| 줄 원문 | 줄 수 |
|---|
ai-train=no, search=yes | 56 |
search=yes, ai-input=yes, ai-train=yes | 16 |
search=yes, ai-input=yes, ai-train=no | 7 |
search=yes,ai-train=no,use=reference | 5 |
ai-train=yes, search=yes, ai-input=yes | 3 |
search=no, ai-input=no, ai-train=no | 2 |
search=yes, ai-input=yes | 1 |
ai-train=no, search=yes, ai-input=no | 1 |
가장 많은 조합은 학습은 안 되고 검색은 된다는 줄로 56줄이에요. 앞 절에서 본 학습과 검색의 구분이 여기서도 같은 모양으로 나와요.
그런데 15곳 중 5곳이 특이했어요. keisanki.kr, fomos.kr, todayhumor.co.kr, cgv.co.kr, boardlife.co.kr 다섯 곳이 글자 한 칸까지 똑같은 줄을 쓰고 있었거든요. 이유도 파일 안에 적혀 있어요. 다섯 파일 전부가 클라우드플레어 관리 블록임을 표시하는 시작과 끝 주석을 갖고 있었어요. 사람이 각자 적은 게 아니라 같은 CDN 이 자동으로 넣어 준 블록이라는 뜻이에요.
다섯 곳이 전부 .kr 이라는 건 이 목록 안에서 그렇다는 사실일 뿐이에요. 한국에서 더 많이 쓴다는 뜻으로 옮기면 안 돼요. 애초에 이 조사는 CDN 설정이 어느 나라에 얼마나 깔려 있는지를 재지 않았어요.
한 파일 안에 반대 지시가 같이 적혀 있는 곳
cgv.co.kr 은 순위 56,732위인데, 한 파일 안에 GPTBot 이 두 번 나와요. 앞쪽은 CDN 이 넣은 블록 안이에요.
# BEGIN Cloudflare Managed content
User-agent: GPTBot
Disallow: /
# END Cloudflare Managed Content
뒤쪽은 사이트가 직접 적은 구역이고요.
User-agent: GPTBot
Crawl-delay: 5
Allow: /
이렇게 한 봇 이름이 두 개 이상의 그룹에 나오면서 그룹별 판정이 서로 갈리는 사례가 16건이었어요. 그중 11건은 별표 그룹이고, AI 봇 이름으로 갈린 것은 5건이에요. cgv.co.kr 의 GPTBot, ClaudeBot, Google-Extended, Applebot-Extended 네 건과 avast.com 의 PerplexityBot 한 건이에요.
여기서 한 발 더 나가고 싶어지는데, 멈출게요. 어느 쪽이 이기는지는 이 조사가 정하지 않았어요. 어떤 크롤러가 이런 파일을 어떻게 해석하는지를 재지 않았거든요. 확인한 것은 한 파일에 반대 지시가 같이 적혀 있다는 사실까지예요. 내 파일이 이런 상태라면 해석을 추측하기보다 중복된 그룹을 하나로 합치는 편이 확실해요.

llms.txt 61곳과 ai.txt 한 곳을 열어 봤어요
llms.txt 는 마크다운으로 사이트를 소개하는 문서로 알려져 있는데, 실제로 열어 보니 그렇지 않은 것도 있었어요. uriweb.kr 의 llms.txt 는 74바이트짜리인데 내용이 robots 문법이에요.
User-agent: *
Allow: /
Commercial-use: allowed
Research-use: allowed
같은 사이트의 robots.txt 는 내용이 달라요. 그쪽에는 특정 경로를 막는 줄이 들어 있거든요. 그러니 서버가 아무 텍스트 파일에나 같은 것을 돌려준 게 아니라 따로 올려 둔 파일이 맞아요.
ai.txt 가 실제 파일로 온 유일한 곳은 alba.co.kr 이었어요. 1,302바이트짜리인데 머리 부분에 이런 줄이 있어요.
# ai.txt — General AI and Agent Access Policy
# Applies to: https://www.alba.co.kr
# Version: v1.0
# Last-Updated: 2026-08-05
# Purpose:
# Describe how responsible AI systems may use public content
# from {{website_url}}.
# Note: robots.txt always takes precedence for crawling rules.
세 가지를 짚어 둘게요. 첫째, 이 파일은 스스로 크롤링 규칙은 robots.txt 가 언제나 우선한다고 적어요. ai.txt 가 robots.txt 를 대체하는 파일이 아니라는 이야기예요. 둘째, 파일을 어떻게 만들었는지가 그대로 드러나요. 위 인용에서 중괄호 두 겹으로 감싸인 자리가 보이실 텐데, 템플릿 변수가 치환되지 않은 채 그대로 남은 거예요. 이건 관찰이지 흠잡기가 아니에요. 셋째, 같은 사이트의 robots.txt 와 ai.txt 의 허용 목록은 사실상 같아요. 파일이 스스로 robots.txt 와 같은 구조를 따랐다고 적은 그대로예요.
정리하면 ai.txt 는 아직 파일 한 개를 열어 볼 수 있는 단계예요. 표준이 어떻고를 논하기 전에, 그 이름으로 서비스되는 파일을 찾는 것부터가 700곳에서 한 번 성공했다는 뜻이거든요. 내 사이트에 뭘 올릴지 정하기 전에 이 순서를 먼저 아셔야 헛수고를 안 해요. 참고로 내 도메인이 아니라 남의 플랫폼에 올린 게시물 쪽 경계는 SNS 사진 AI 학습 거부, 끌 수 있는 것과 못 끄는 것에서 따로 다뤘어요. 이 글은 도메인 소유자가 서버에 올려 둔 파일만 봤어요.
이 조사가 재지 않은 것을 적어 둘게요
숫자를 쓰시려면 사정권도 같이 아셔야 해요.
첫째, 분모는 인터넷 전체가 아니에요. Tranco 상위 500곳과 그 목록의 .kr 상위 200곳을 합친 700곳이에요. 표본을 뽑아 추정한 것도 아니고 그 700곳을 전부 요청한 값이에요.
둘째, 두 프레임은 순위대가 달라요. 프레임 A 는 1위부터 500위까지, 프레임 B 는 1,160위부터 75,035위까지예요. 두 쪽을 견줘 어느 나라가 더 한다는 식으로 읽으면 안 돼요.
셋째, 크롤러가 지켰는지는 재지 않았어요. robots.txt 는 공개된 요청이지 강제 장치가 아니에요. 잰 것은 파일에 무엇이 적혀 있는지까지예요. 실제로 어떤 봇이 내 사이트에 왔는지는 서버 쪽 기록을 봐야 알 수 있고, 그 절차는 AI 검색에 내 사이트가 인용되는지 확인하는 법에 따로 정리해 뒀어요.
넷째, 이름이 없는 것을 허용으로 세지 않았어요. 별표 그룹을 물려받는 것으로 계산했어요. 앞의 두 표에서 물려받은 곳이 39곳과 34곳, 36곳과 37곳으로 꽤 큰 자리를 차지해요.
다섯째, 반대 지시의 승자를 정하지 않았어요. 16건은 그런 파일이 있다는 관측이지 해석 결과가 아니에요.
여섯째, 이 값은 요청 시각의 상태예요. 2026년 9월 15일 오전의 2분 10초 사이에 받은 파일이에요. robots.txt 는 누구나 언제든 고칠 수 있으니 다음 달에 같은 조사를 하면 숫자가 달라질 수 있어요.
일곱째, 연결 실패 177곳의 내막은 안 봤어요. 응답이 없었다는 것까지만 확인했고, 왜 없었는지는 도메인마다 다를 거예요.
정리
세 줄로 줄이면 이래요.
첫째, 세 파일의 보급 속도가 많이 달라요. 700곳에 요청했더니 robots.txt 는 382곳이 문법으로 읽혔고, llms.txt 는 61곳, ai.txt 는 1곳이었어요. AI 이용 정책을 적어 두는 자리는 아직 대부분 robots.txt 안이에요.
둘째, 차단은 회사가 아니라 하는 일을 기준으로 갈리고 있어요. GPTBot 을 전면 차단한 71곳 중 10곳이 OAI-SearchBot 은 이름을 적고도 전면 차단으로 두지 않았어요. 파일 안 주석에 그 이유를 직접 적어 둔 곳도 있었고요.
셋째, 이름이 없다는 건 허용이 아니에요. 별표 그룹을 물려받아요. 같은 71곳 중 39곳이 OAI-SearchBot 의 이름 없이 별표 그룹을 물려받는 상태였어요.
그래서 내 사이트 파일을 점검하실 때 볼 자리는 두 곳이에요. 이름을 적은 봇의 줄만 보지 마시고 별표 그룹이 무엇을 말하고 있는지를 같이 보세요. 그리고 CDN 이나 호스팅이 자동으로 넣어 준 블록이 있는지 확인해 보세요. 클라우드플레어 관리 블록처럼 내가 적지 않은 줄이 이미 들어 있을 수 있고, 그게 내가 뒤에 적은 줄과 반대 방향일 수도 있거든요.