WWikiAP
분류: 기술

AI 크롤러는 자바스크립트를 실행하는가, CSR/SPA 콘텐츠 인용 누락 점검과 수정 방법

GPTBot, ClaudeBot, PerplexityBot은 자바스크립트를 실행하지 않는다. CSR/SPA 콘텐츠가 AI 검색 인용에서 통째로 빠지는 이유와, curl 점검부터 SSR 전환까지의 수정 절차를 공식 문서 기준으로 정리한다.

Technical GEO 에디터발행

AI 크롤러는 자바스크립트를 실행하는가, CSR/SPA 콘텐츠 인용 누락 점검과 수정 방법

"AI 크롤러는 자바스크립트를 실행하는가." 답은 짧다, 대부분 실행하지 않는다. Vercel과 MERJ가 nextjs.org를 포함한 자사 네트워크의 크롤러 요청 로그를 분석한 결과 OpenAI, Anthropic, Perplexity, Meta, ByteDance의 크롤러 중 자바스크립트를 렌더링하는 봇은 하나도 없었다[1]. 그런데 많은 팀이 이 사실을 모른 채 구글 서치 콘솔의 초록색 색인 상태만 보고 "우리 페이지는 문제없다"고 판단한다. 구글은 렌더링을 해주기 때문이다. 이 글은 그 비대칭이 어디서 생기고, 우리 사이트가 사각지대인지 어떻게 3분 만에 확인하고, 무엇을 어떤 순서로 고치는지를 한 페이지에서 끝낸다.

30초 정의

  • 클라이언트 사이드 렌더링(CSR) 은 브라우저에서 자바스크립트를 실행해 화면 내용을 만드는 방식이다.
  • 서버 사이드 렌더링(SSR) 은 서버가 요청 시점에 HTML을 완성해 보내는 방식이다.
  • 정적 렌더링(SSG) 은 빌드 시점에 HTML을 미리 완성해 파일로 두는 방식이다.
  • 하이드레이션(hydration) 은 서버가 보낸 완성 HTML 위에 브라우저가 자바스크립트 동작만 덧붙이는 방식이다.
  • 렌더링 사각지대 는 브라우저에는 보이지만 원본 HTML에는 없어서 자바스크립트를 실행하지 않는 크롤러가 수집하지 못하는 콘텐츠 영역이다.
같은 URL, 갈라지는 두 경로 URL 요청 원본 HTML 수신 자바스크립트 실행 Googlebot, Applebot, Bingbot 본문, 표, JSON-LD가 색인 대상에 포함 자바스크립트 미실행 GPTBot, ClaudeBot, PerplexityBot 빈 컨테이너만 수집, 인용 후보에서 탈락
같은 URL이라도 자바스크립트 실행 여부에 따라 크롤러가 확보하는 내용이 갈린다. 아래쪽 경로가 렌더링 사각지대다.

크롤러별 자바스크립트 실행 여부

크롤러운영 주체자바스크립트 실행근거실무 함의
GPTBot, OAI-SearchBot, ChatGPT-UserOpenAI미실행Vercel, MERJ 로그 분석 (2024)ChatGPT 검색 인용은 원본 HTML에 있는 내용만 대상
ClaudeBotAnthropic미실행Vercel, MERJ 로그 분석 (2024)CSR 본문은 Claude 답변 근거로 쓰이지 않음
PerplexityBotPerplexity미실행Vercel, MERJ 로그 분석 (2024)실시간 검색이어도 렌더링은 하지 않음
Meta-ExternalAgentMeta미실행Vercel, MERJ 로그 분석 (2024)동일
BytespiderByteDance미실행Vercel, MERJ 로그 분석 (2024)동일
GooglebotGoogle실행 (에버그린 Chromium)Google 공식 문서 (2026)AI Overviews, AI Mode 노출 자격의 기준
ApplebotApple렌더링 가능 (브라우저)Apple 공식 문서 (2026)"브라우저 안에서 렌더링할 수 있다"는 표현, JS, CSS 차단 시 렌더링 실패
BingbotMicrosoft부분 실행Bing 공식 블로그 (2018)전 페이지 대규모 처리는 어렵다고 명시

여덟 줄 중 다섯 줄이 미실행이다. 본문을 클라이언트 렌더링에 맡긴 사이트라면, 이 다섯 개 크롤러에게는 해당 페이지의 내용이 하나도 전달되지 않는다.

근거, 숫자로 확인한 것

Vercel과 MERJ는 nextjs.org와 자사 네트워크에 들어온 크롤러 요청을 콘텐츠 타입별로 갈라 분석했다. 아래 비중은 nextjs.org 기준 수치이고, ChatGPT 계열은 GPTBot, OAI-SearchBot, ChatGPT-User를 합산한 값이다. 결론은 두 가지다. 첫째, 주요 AI 크롤러는 자바스크립트를 렌더링하지 않는다. 둘째, 그럼에도 자바스크립트 파일 자체는 상당한 비율로 내려받는다[1]. 파일을 가져가되 실행하지 않으니, 서버 로그에 JS 요청이 찍혔다는 사실만으로 "봇이 우리 앱을 렌더링했다"고 해석하면 오독이다.

크롤러별 JS 파일 요청 비중(nextjs.org 기준) ClaudeBot 23.84% Googlebot 15.25% ChatGPT 계열 11.50% 출처: (Vercel, MERJ, 2024)
크롤러별 JS 파일 요청 비중(nextjs.org 기준), 출처: (Vercel, MERJ, 2024)
항목JS 파일 요청 비중(%)자바스크립트 실행 여부출처
ClaudeBot23.84%미실행(Vercel, MERJ, 2024)
Googlebot15.25%실행 (에버그린 Chromium)(Vercel, MERJ, 2024), (Google Search Central, 2026)
ChatGPT 계열11.50%미실행(Vercel, MERJ, 2024)

규모도 참고할 만하다. 같은 분석 기간 한 달 동안 GPTBot은 5억 6,900만 건, Claude 계열은 3억 7,000만 건을 요청했고 Googlebot은 45억 건이었다(Vercel, MERJ, 2024)[1]. AI 크롤러 트래픽은 이미 무시할 규모가 아니고, 그 전량이 원본 HTML만 읽고 지나간다.

반대편 근거도 공식 문서에 있다. 구글은 자바스크립트 앱을 크롤링, 렌더링, 색인의 3단계로 처리하며 렌더링에는 에버그린 버전의 Chromium을 쓴다고 밝히고 있다(Google Search Central, 2026)[2]. Applebot도 "웹사이트 콘텐츠를 브라우저 안에서 렌더링할 수 있다"고 명시하고, JS와 CSS가 robots.txt로 차단되면 제대로 렌더링하지 못한다고 경고한다(Apple, 2026)[7]. Bingbot은 "일반적으로 자바스크립트를 렌더링할 수 있지만 모든 사이트의 모든 페이지에서 대규모로 처리하기는 어렵다"고 스스로 적었다(Bing Webmaster Blog, 2018)[8]. OpenAI 문서는 GPTBot(모델 학습), OAI-SearchBot(ChatGPT 검색 노출), ChatGPT-User(사용자 트리거 방문)의 역할을 구분해 설명하지만 렌더링에 대한 언급은 없다(OpenAI 크롤러 문서, 2026년 9월 확인)[6].

왜 구글에서는 멀쩡한데 AI 답변에서는 사라지는가

원인은 처리 단계 수의 차이다. Googlebot은 HTTP 200을 받은 페이지를 렌더링 대기열에 넣고, 순서가 오면 헤드리스 Chromium이 자바스크립트를 실행한 뒤 그 결과 HTML로 색인한다[2]. 대기 시간이 몇 초에서 그보다 길어질 수 있다는 단서가 붙지만, 어쨌든 실행은 된다.

로그 분석에서 렌더링이 확인되지 않은 AI 크롤러에는 그 두 번째 단계가 없다(Vercel, MERJ, 2024)[1]. 요청, 응답, 파싱까지가 전부다. 그래서 다음과 같은 비대칭이 생긴다. 구글 검색에서는 상위에 노출되는 페이지가, ChatGPT나 Perplexity 답변에서는 근거 문서 목록에 아예 등장하지 않는다. 이 현상을 두고 콘텐츠 품질이나 프롬프트 탓을 하다가 몇 달을 보내는 팀이 많다. 실제 원인은 HTML 한 줄이다.

영향은 구글 쪽으로도 번진다. 구글은 AI Overviews와 AI Mode의 지원 링크로 노출되려면 "페이지가 색인되어 있고 스니펫과 함께 구글 검색에 표시될 자격이 있어야 한다"고 규정한다(Google Search Central, 2025)[5]. 렌더링이 실패하거나 지연되면 색인 자체가 늦어지고, 색인이 늦으면 AI 표면 노출 자격도 늦게 생긴다.

구조화 데이터는 특히 함정이다. 구글은 자바스크립트로 생성한 구조화 데이터도 렌더링 후 DOM에서 읽어들이며, 태그 매니저로 JSON-LD를 주입하는 방식도 지원한다(Google Search Central, 2025)[4]. 그래서 리치 결과 테스트는 통과한다. 그러나 자바스크립트를 실행하지 않는 크롤러에게 그 JSON-LD는 존재하지 않는다. AEO를 위한 구조화 데이터 스키마에서 다루는 마크업 설계도, 주입 위치가 클라이언트면 AI 인용 관점에서는 무효다.

사각지대에 자주 빠지는 요소

요소흔한 구현원본 HTML 존재 여부수정 방향
본문, 상세 설명API 응답을 받아 클라이언트에서 렌더없음SSR 또는 SSG로 전환
가격, 재고, 스펙별도 API 호출 후 주입없음서버에서 초기 값 주입 후 클라이언트 갱신
FAQ 아코디언클릭 시점에 답변 생성대개 없음답변 텍스트를 초기 HTML에 두고 CSS로 접기
리뷰, 평점서드파티 위젯 iframe 또는 스크립트없음요약 텍스트와 평점을 서버 렌더로 병행 노출
JSON-LD 구조화 데이터태그 매니저 주입없음서버 응답 HTML에 직접 삽입
내비게이션, 내부 링크onClick 라우팅, 무한 스크롤앵커 태그 부재실제 href를 가진 앵커와 페이지네이션 병행
탭, 더보기 콘텐츠선택 시 지연 로딩없음초기 HTML 포함 후 표시만 제어

실행, 점검에서 수정까지

1단계, 원본 HTML 점검 (3분)

브라우저 개발자 도구의 Elements 탭은 이미 렌더링이 끝난 DOM이다. 사각지대 점검에는 쓸 수 없다. 서버가 처음 내려준 HTML을 직접 봐야 한다.

# 1. 본문 핵심 문장이 원본 HTML에 있는지
curl -sL "https://example.com/product/123" | grep -c "핵심 문구"

# 2. JSON-LD가 원본 HTML에 있는지
curl -sL "https://example.com/product/123" | grep -o "application/ld+json" | wc -l

# 3. 내부 링크가 실제 앵커로 존재하는지
curl -sL "https://example.com/category/shoes" | grep -o '<a [^>]*href="[^"]*"' | wc -l

# 4. 크롤러 UA로 다른 응답을 주는지 (정확한 UA 문자열은 각 사 공식 문서 확인)
curl -sL -A "GPTBot" "https://example.com/product/123" | wc -c

1번과 2번의 결과가 0이면 그 페이지는 ChatGPT, Claude, Perplexity에게 빈 페이지다. 브라우저에서 잘 보인다는 사실은 반증이 되지 않는다.

2단계, 진단 항목 정리

점검방법통과 기준
본문 존재curl 결과에서 본문 첫 문단 검색검색됨
구조화 데이터 존재curl 결과에서 ld+json 검색1건 이상
링크 발견 가능성curl 결과의 href 앵커 수주요 하위 페이지가 앵커로 노출
구글 렌더링 결과서치 콘솔 URL 검사의 렌더링된 HTML본문과 마크업 포함
리소스 차단robots.txt에서 JS, CSS 경로차단 없음
크롤러 접근robots.txt의 봇별 규칙인용용 봇 허용

4번과 5번은 구글 문서가 안내하는 URL 검사 도구와 리치 결과 테스트로 확인한다[2]. 6번은 AI 크롤러 관리 가이드에서 봇별 허용 정책과 함께 다룬다.

3단계, 수정 우선순위

수정의 방향은 구글 문서가 명확히 정해두었다. 동적 렌더링은 "우회책이며 권장 해법이 아니고, 복잡도와 리소스 요구가 추가된다"고 못 박고, 대신 서버 사이드 렌더링, 정적 렌더링, 하이드레이션을 제시한다(Google Search Central, 2025)[3]. 프리렌더 서비스를 붙여 급한 불을 끌 수는 있지만, 그것을 최종 아키텍처로 삼으면 유지 비용과 원본 불일치 위험이 남는다.

순위대상조치기대 효과
1인용될 본문 페이지SSG 또는 SSR로 전환미실행 크롤러가 본문 확보
2JSON-LD서버 응답 HTML에 직접 삽입엔티티, FAQ 마크업이 AI 크롤러에 노출
3제목, 설명, 메타서버에서 생성요약, 스니펫 근거 확보
4내부 링크href 앵커로 노출크롤 경로 확보
5보조 인터랙션클라이언트 렌더 유지성능과 UX 유지

기준은 단순하다. 인용될 수 있는 내용은 서버가 내려주고, 인용될 일이 없는 인터랙션만 브라우저에 맡긴다. Vercel과 MERJ도 같은 결론을 냈다, 본문, 상품 정보, 문서, 메타 정보, 내비게이션은 서버 렌더링하고 비핵심 동적 요소에만 클라이언트 렌더링을 쓰라는 것이다[1].

원본 HTML 점검을 도구로 대신하려면 GEO 무료 진단 도구 비교에서 무료로 확인되는 범위와 유료 구간의 경계를 먼저 본다. 수정 후에는 실제로 인용이 늘었는지를 따로 추적해야 한다. 원본 HTML 점검은 "읽힐 수 있는가"까지만 답하고, "인용되는가"는 답하지 않기 때문이다. 엔진별 인용 추적은 Profound, Peec AI, 국내에서는 BOIDA, 넥스트티, 리드젠랩 같은 AI 가시성 모니터링 도구를 쓰거나, 각 엔진에서 직접 질의해 근거 링크를 수집하는 방식으로 한다. 렌더링을 고쳤는데도 인용이 없다면 원인은 콘텐츠 구조 쪽이며, 퍼플렉시티가 우리 콘텐츠를 인용하지 않는 이유기술 GEO와 콘텐츠 GEO 프레임워크에서 다음 단계를 잇는다. 개념 정리가 먼저 필요하면 GEO란 무엇인가를 참고한다.

정리

AI 크롤러 대부분은 자바스크립트를 실행하지 않는다. GPTBot, ClaudeBot, PerplexityBot, Meta-ExternalAgent, Bytespider가 모두 여기 해당하고, 이들은 JS 파일을 내려받기는 해도 실행하지 않는다(Vercel, MERJ, 2024). 렌더링 단계를 문서로 밝힌 쪽은 Googlebot이고, Applebot은 브라우저 렌더링이 가능하다고 밝혔으며, Bingbot은 대규모 처리에 한계가 있다고 적었다. 그래서 CSR로 만든 페이지는 구글 검색에서는 살아남고 AI 답변에서는 사라지는 이중 상태에 놓인다. 확인은 브라우저가 아니라 curl로, 수정은 동적 렌더링이 아니라 서버 사이드 렌더링과 정적 렌더링으로 한다. 인용될 내용은 서버가 내려주고, 나머지만 브라우저에 맡기는 것, 이 한 줄이 사각지대를 없애는 기준선이다.

관련 회사

자주 묻는 질문

Q.AI 크롤러는 자바스크립트를 실행하나요?
대부분 실행하지 않습니다. Vercel과 MERJ의 서버 로그 분석에 따르면 OpenAI(GPTBot, OAI-SearchBot, ChatGPT-User), Anthropic(ClaudeBot), Perplexity(PerplexityBot), Meta(Meta-ExternalAgent), ByteDance(Bytespider) 모두 자바스크립트를 렌더링하지 않았습니다(2024). 예외는 렌더링 단계를 공식 문서로 밝힌 Googlebot(Google Search Central, 2026)과, 브라우저 안에서 렌더링할 수 있다고 밝힌 Applebot입니다(Apple, 2026).
Q.구글에서는 색인이 잘 되는데 왜 ChatGPT는 우리 페이지를 인용하지 않나요?
Googlebot은 크롤링, 렌더링, 색인의 3단계를 거치며 에버그린 Chromium으로 자바스크립트를 실행합니다. 반면 AI 크롤러는 원본 HTML만 읽고 끝냅니다. 브라우저에서만 채워지는 본문은 구글에는 보이고 AI 크롤러에는 빈 컨테이너로 보입니다.
Q.우리 사이트가 사각지대인지 어떻게 확인하나요?
브라우저 개발자 도구의 Elements 탭이 아니라 원본 HTML을 봐야 합니다. curl로 페이지를 받아 본문 문장, 가격, FAQ 답변, JSON-LD 스크립트가 들어 있는지 grep으로 세어보세요. 브라우저에서는 보이는데 curl 결과에 없다면 그 콘텐츠는 AI 크롤러에게 존재하지 않습니다.
Q.동적 렌더링(prerender)으로 해결하면 되나요?
임시 대응은 되지만 권장 해법은 아닙니다. 구글은 동적 렌더링을 우회책이라고 명시하고, 복잡도와 리소스 부담 때문에 장기 해법이 아니라고 밝혔습니다. 서버 사이드 렌더링, 정적 렌더링, 하이드레이션을 권장합니다.
Q.구조화 데이터를 태그 매니저로 넣고 있는데 문제가 되나요?
구글은 자바스크립트로 생성한 구조화 데이터를 렌더링 후 DOM에서 읽습니다. 하지만 자바스크립트를 실행하지 않는 AI 크롤러는 그 JSON-LD를 아예 보지 못합니다. AI 인용이 목표라면 JSON-LD는 서버가 내려주는 원본 HTML에 넣어야 합니다.
Q.전부 SSR로 바꿔야 하나요?
아닙니다. 기준은 본문성입니다. 제목, 본문, 가격, 스펙, FAQ 답변, 내비게이션, 메타 정보처럼 인용될 수 있는 내용은 서버 렌더링으로 원본 HTML에 넣고, 필터, 캐러셀, 애니메이션 같은 보조 인터랙션은 클라이언트 렌더링으로 남겨도 됩니다.

출처 및 참고 자료

  1. [1] ↑The rise of the AI crawlerVercel, MERJ
  2. [2] ↑JavaScript SEO 기본사항 이해하기Google Search Central
  3. [3] ↑Dynamic rendering as a workaroundGoogle Search Central
  4. [4] ↑Generate structured data with JavaScriptGoogle Search Central
  5. [5] ↑AI features and your websiteGoogle Search Central
  6. [6] ↑OpenAI's Web CrawlersOpenAI
  7. [7] ↑About ApplebotApple
  8. [8] ↑bingbot Series: JavaScript, Dynamic Rendering, and Cloaking. Oh My!Bing Webmaster Blog

이 문서는 2026년 09월 10일에 마지막으로 편집되었습니다. WikiAP의 콘텐츠는 공개된 출처를 근거로 작성되며, 정확성을 위해 지속적으로 갱신됩니다.