
HTML은 완벽합니다. CDN이 여전히 봇을 차단합니다.
요약
HTML과 robots.txt 설정이 완벽하더라도 CDN의 WAF 규칙이나 AI 봇 차단 설정으로 인해 AI 크롤러가 콘텐츠에 접근하지 못할 수 있습니다. 브라우저에서는 정상적으로 보이지만 실제로는 에지(edge) 단계에서 403/429 오류로 거부되는 현상을 설명하며, 이를 확인하기 위해서는 서버 로그를 점검해야 한다고 강조합니다.
핵심 포인트
- robots.txt 설정과 관계없이 CDN/WAF 수준에서 AI 봇이 차단될 수 있음
- 관리형 WAF 규칙이나 'AI 봇 차단' 토글이 의도치 않은 차단을 유발함
- 브라우저 테스트로는 차단 여부를 확인할 수 없으므로 서버 로그 확인이 필수적임
- GPTBot, CCBot, ClaudeBot 등이 주요 차단 대상인 경우가 많음
이 글은 Wren Calloway가 제 이전 게시물에 남긴 댓글에서 시작되었습니다. 충분히 날카로웠기 때문에 단순한 답글 이상의 가치가 있다고 생각하여 전체 버전을 공유합니다.
작업은 하셨습니다. 페이지는 서버 렌더링(server-rendered)됩니다. JSON-LD는 원본 응답(raw response)에 포함되어 있습니다. curl을 사용하면 헤드라인과 모든 내용을 갖춘 전체 기사를 반환받을 수 있습니다. URL을 가져오는 크롤러는 필요한 모든 것을 얻습니다.
하지만 크롤러는 절대 귀하의 URL을 가져오지 못합니다. 대신 CDN에 요청하고, CDN은 403 응답을 보냅니다.
귀하의 콘텐츠는 완벽하지만 도달할 수 없습니다. 이것은 모두가 이야기하는 것 아래층에 있는 레이어이며, 일반적으로 사용하는 모든 도구에서는 눈에 보이지 않습니다.
두 가지 종류의 '거절'
robots.txt는 문에 붙인 메모입니다.
다시 읽어보세요. AI 크롤러 요청 중 15개 중 하나 이상이 콘텐츠에 도달하기도 전에 에지(edge)에서 능동적으로 거부되고 있습니다 — 403 또는 429 상태 코드와 함께요. 우선순위가 낮아지는 것이 아닙니다. 거부되는 것입니다.
그리고 그 대부분은 결정이 아닙니다. 기본값입니다 — 관리형 WAF 규칙 세트(managed WAF ruleset)를 사용하거나, 2024년에 'AI 봇 차단' 토글을 켜거나, 너무 높게 설정된 봇 방어 점수 때문입니다. 같은 대시보드의 robots.txt 추적기는 GPTBot, CCBot, ClaudeBot이 상위 도메인 전반에 걸쳐 가장 많이 거부되는 크롤러로 보여줍니다 — 이 중 상당 부분은 직접 작성한 것이 아니라 물려받은 것입니다.

상위 도메인 전반에 걸쳐 가장 많이 거부되는 AI 사용자 에이전트(user agents). 출처: Cloudflare Radar, AI Insights, 2026년 7월 18일 기준.
스스로는 절대 알아차릴 수 없는 이유
사이트를 열어보세요. 로드됩니다. 당연하죠 — 사용자의 브라우저는 차단 목록에 없습니다. 주거용 IP(Residential IP), Chrome 사용자 에이전트(User-Agent)로 모든 검사를 통과합니다.
robots.txt를 열어보세요. Allow: /. 완벽하게 환영하는 것처럼 보입니다.
소스 코드를 확인해 보세요. 깨끗한 HTML, 구조화된 데이터(structured data), 모든 것이 갖춰져 있습니다. (이 부분은 이미 고치셨겠죠.)
사용하려는 모든 도구는 괜찮다고 확인시켜 줍니다 — 왜냐하면 그 모든 것은 GPTBot에서 오는 것이 아니라 당신에게서 오기 때문입니다. 차단은 당신이 절대 될 수 없는 방문자 계층을 겨냥하고 있습니다.
유일하게 보이는 곳: 서버 로그
브라우저는 거짓말을 합니다. 왜냐하면 브라우저는 사용자 자신이기 때문입니다. robots.txt는 조언적(advisory)이기 때문에 거짓말할 수 있습니다. 접근 로그(access log)는 거짓말하지 않습니다. 실제 요청 건수만큼의 행이 있으며, 방문자의 User-Agent와 반환된 정확한 상태 코드를 포함합니다. GPTBot이 실제로 무엇을 받았는지에 대한 유일한 기록입니다.
중요한 것들을 검색하고 상태 코드를 세어보세요:
grep -E
저는 이 이야기를 여러 번 읽었습니다. 몇 달 동안의 콘텐츠가 있었지만, ChatGPT나 Perplexity에서는 인용된 바가 전혀 없었고, 감사(audit)를 통해 마침내 Cloudflare가 GPTBot에게 계속해서 403 오류를 주고 있었다는 사실이 밝혀졌습니다.
## 수정 안에 숨겨진 함정
`User-Agent`에 `GPTBot`을 포함하는 모든 것을 허용한다는 명백한 해결책은 잘못되었습니다. 왜냐하면 User-Agent는 누구나 입력할 수 있는 문자열이기 때문입니다. 가격 스크래퍼(price scraper)가 스스로를 `GPTBot`으로 레이블링하고 여러분의 관대한 새 규칙 사이로 거닐 수 있습니다.
Cloudflare 자체 투명성 추적 기능이 이 점을 지적합니다. 어떤 운영자가 검증될 수 있는지 플래그를 지정하기 때문입니다. 2026년 중반 기준으로, **ByteDance는 미검증(unverified) 상태**로 표시되어 있습니다. 이것이 바로 User-Agent만으로는 신뢰할 수 없는 이유입니다.
[](https://radar.cloudflare.com/ai-insights#ai-bot-crawler-traffic)
_AI 봇 투명성 추적. 출처: Cloudflare Radar, AI Insights, 2026년 7월 18일 기준._
따라서 진정한 검증은 이름이 아닙니다. 기원(origin)입니다. 두 가지 방법이 있습니다:
**1. 게시된 IP 범위로 검증.** OpenAI, Anthropic 등 다른 회사들도 크롤러 IP를 공개합니다 — `openai.com/gptbot.json`, `openai.com/searchbot.json`, `openai.com/chatgpt-user.json` 및 그에 상응하는 파일들입니다. 요청한 IP에 대해 역방향 DNS(Reverse-DNS)를 수행하여 호스트 이름이 해당 공급업체에 속하는지 확인하고, 그런 다음 이를 동일한 IP로 순방향 해석(forward-resolve)합니다. 이 단계 중 어느 하나라도 실패하면, 그것은 이름을 도용하는 스푸퍼(spoofer)입니다.
**2. 암호화 서명으로 검증.** 이것이 나아갈 방향입니다. **Web Bot Auth**—Cloudflare가 주도한 IETF 초안(`draft-meunier-web-bot-auth-architecture`, RFC 9421 기반)—는 크롤러들이 각 요청에 Ed25519 키로 서명하도록 하여, 주장하는 것이 아니라 신원을 증명하게 합니다. 이는 Cloudflare의 Verified Bots 프로그램에 통합되어 전용 Signed Agents 디렉터리를 가지고 있으며, ChatGPT 에이전트는 2025년 최초의 서명된 코호트(signed cohort)에 속했습니다. 또한 Cloudflare만의 이야기도 아닙니다 — AWS WAF는 2025년 후반에 Web Bot Auth 지원을 추가하여 검증된 에이전트를 자동으로 허용하게 했습니다.
Web Bot Auth의 현황을 솔직하게 파악하세요: 이는 승인된 표준이 아닌 **활성 IETF 초안**입니다. 하지만 Cloudflare, OpenAI, Anthropic, AWS가 같은 방향으로 움직이고 있기 때문에 이미 사실상의(de-facto) 방향이 되었습니다.
여러분에게 중요한 점은 다음과 같습니다: '나쁜 봇을 차단하는 것'과 'AI를 허용하는 것'은 동일한 문제입니다. 그리고 User-Agent는 어느 쪽도 해결하지 못합니다. 출처(origin) 또는 서명(signature)으로 검증하세요. 그렇지 않으면 원하는 크롤러를 차단하고 원치 않는 것을 허용하게 됩니다.
## 실제로 해야 할 일
**브라우저가 아닌 로그를 확인하세요.** 지난주간의 접근 로그를 가져와 AI User-Agent로 필터링하고 상태 코드(status codes)를 살펴보세요. 이것이 전체 감사 과정이며, 프로젝트가 아니라 오후에 끝낼 수 있는 작업입니다.
**403/429 오류가 보이면 규칙을 찾으세요.** 그것은 거의 항상 관리형 규칙 세트(managed ruleset), 'AI 봇 차단' 설정, 또는 지나치게 적극적인 봇 방어 점수(bot-fight score) 때문이며, 여러분이 직접 작성한 코드가 아닙니다. 원하는 크롤러는 검증된 IP나 Web Bot Auth를 통해 화이트리스트에 추가하고, 절대 User-Agent만으로 판단하지 마세요.
## 제가 얻은 교훈
여러분의 HTML은 요청 경로의 마지막 부분이 아니라 가장 마지막 부분입니다. 봇이 그 내용을 단 한 바이트도 읽기 전에, 요청은 DNS, CDN, WAF, 속도 제한기(rate limiter), 봇 관리 점수 등을 모두 통과해야 합니다. 이 중 어느 하나라도 여러분이 결코 볼 수 없는 상태 코드로 요청을 종료시킬 수 있으며, 이는 사용자에게는 완벽하게 보이는 페이지에서 발생합니다.
'내 브라우저에서는 작동한다'는 주장은 항상 약한 주장입니다. 크롤러의 경우 심지어 올바른 질문조차 아닙니다. 올바른 질문은 다음과 같습니다: **봇이 어떤 상태 코드를 받았는가?** 그리고 유일하게 솔직한 대답은 로그에 있습니다.
관련 읽을거리:
- [Google에서 1위를 차지하고 ChatGPT에게 보이지 않는 방법](https://seo7.es/en/blog/ai-seo-blog/ranks-1-on-google-invisible-to-chatgpt)
- [전체 사례: Django SSR 재구축, 0개에서 116개 인덱싱 페이지까지](https://seo7.es/en/proyecto/yoga-praktika)
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기