LLM 클로킹은 사람과 검색엔진에는 전체 콘텐츠를 보여 주되, ChatGPT·Claude·Perplexity 같은 AI 크롤러에는 다른 형태의 콘텐츠를 제공하거나 일부 차별화 요소를 숨기는 전략이다. 전통적 검색 클로킹은 Google 가이드라인 위반이지만, AI 크롤러는 렌더링 능력과 정책 체계가 다르기 때문에 geo 관점에서 별도 전략으로 논의되고 있다.
왜 다시 클로킹이 거론되는가
AI 크롤러는 대체로 자바스크립트를 실행하지 않는다. GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, PerplexityBot, Bytespider, CCBot 등은 초기 HTML을 가져간 뒤 렌더링 없이 종료하는 경우가 많다. 반면 Googlebot과 Bingbot은 렌더링을 수행한다.
이 차이는 두 가지 상반된 전략을 만든다.
- 보호: 독자에게 보여 줄 독자적 데이터·벤치마크·프레임워크를 클라이언트 사이드 JS로만 렌더링해 AI 크롤러가 가져가지 못하게 한다.
- 노출: AI 응답에 인용되고 싶은 본문은 HTML 대신 가벼운 Markdown으로 제공해 크롤러 타임아웃과 파싱 비용을 줄인다.
즉 모든 AI 트래픽을 차단하는 문제가 아니라, 어떤 콘텐츠를 먹이고 어떤 콘텐츠를 보호할지 나누는 문제다.
Cloudflare Workers 기반 패턴
1. LLM user agent 감지
대표 user agent 목록을 유지한다.
const LLM_USER_AGENTS = [
"GPTBot",
"ChatGPT-User",
"OAI-SearchBot",
"ClaudeBot",
"PerplexityBot",
"CCBot",
"Bytespider",
"Meta-ExternalAgent",
"Applebot-Extended",
"Google-Extended",
];주의할 점은 Googlebot, Bingbot, 일반 Applebot을 AI 크롤러와 섞지 않는 것이다. 검색 색인과 AI 학습·검색용 봇은 분리해서 다뤄야 한다.
2. 보호할 JS 차단
원본 HTML에는 빈 컨테이너만 두고, 차별화 콘텐츠는 /js/protected-content.js 같은 파일이 브라우저에서 채우게 한다. LLM user agent가 이 JS를 요청하면 Worker가 404 또는 빈 응답을 돌려준다. 실제 사용자와 렌더링 검색봇은 콘텐츠를 보지만, 비렌더링 AI 크롤러는 빈 컨테이너만 본다.
3. 공개할 본문은 Markdown으로 제공
AI 크롤러에게 보여도 되는 콘텐츠는 미리 생성한 .md 버전으로 제공한다. Markdown은 HTML보다 토큰 수와 파싱 비용이 작고, 느린 페이지에서 발생하는 AI 크롤러 타임아웃 리스크를 줄인다. Cloudflare의 Markdown for Agents와 같은 방향이다.
언제 유용한가
| 상황 | 추천 접근 |
|---|---|
| 독자적 데이터·설문·벤치마크가 핵심 자산 | JS 보호 블록으로 AI 크롤러 노출 제한 |
| 브랜드·제품 설명처럼 AI 답변에 인용되고 싶은 페이지 | Markdown 버전 제공 |
| 일반 검색 트래픽이 중요한 페이지 | Googlebot/Bingbot은 차단하지 않음 |
| 법무·정책 리스크가 큰 조직 | robots.txt, 약관, 크롤러 로그와 함께 보수적으로 설계 |
한계와 리스크
LLM 클로킹은 기술적으로 가능하지만 무조건 좋은 전략은 아니다. AI 검색에 인용될 기회를 잃을 수 있고, user agent spoofing에는 취약하다. 또한 검색엔진 정책과 AI 플랫폼 정책은 계속 변한다. 실무에서는 전체 차단보다 “보호할 고유 자산”과 “노출할 요약·인용 가능 콘텐츠”를 나누는 편이 낫다.
관련 문서
- geo — AI 검색 엔진에서 브랜드 가시성을 최적화하는 생성형 엔진 최적화 전략
- geo-tips-keyword-to-prompt — 기존 키워드 데이터를 AI 추적 프롬프트로 전환하는 방법
참고 자료
- Quick Tip: The Case for Cloaking for Large Language Models — iPullRank (2026-05-14)