본문 바로가기
← 목록으로

AI 어시스턴트가 JavaScript를 실제로 렌더링하는가? 실험으로 검증하다

searchengineworld.com조회수 06일 전

핵심

AI 어시스턴트가 사용자의 URL 링크를 요약할 때, 실제로 JavaScript를 실행해서 동적 콘텐츠를 읽는지 테스트한 결과 국가별로 극명한 차이가 나타났다. 미국의 주요 어시스턴트 6개는 원시 HTML만 읽고, 중국 어시스턴트 4개와 Mistral은 JavaScript를 실행한다.

테스트를 시작한 이유

React, Vue, Angular 같은 클라이언트 사이드 프레임워크로 구축된 웹페이지가 증가하고 있다. 이 페이지들은 서버에서 보내는 HTML이 거의 빈 껍데기에 불과하며, 브라우저가 JavaScript를 다운로드하고 실행한 후에야 실제 콘텐츠가 화면에 나타난다.

어시스턴트 제공사들의 주장이나 챗봇 자체의 설명만으로는 답을 알 수 없었다. 실제로 어시스턴트들이 주장하는 동작과 서버 로그에 기록된 실제 행동이 일치하지 않을 수 있기 때문이다.

실험 설계

기본 개념: 페이지가 로봇에게 "거짓말"할 수 있는 방식

클라이언트 사이드 렌더링(client-side rendering)에서는 서버가 보내는 HTML에 플레이스홀더(임시값)만 있고, JavaScript가 이를 실제 콘텐츠로 바꾼다.

이 특성을 이용한 테스트:

따라서 어시스턴트가 보고한 값으로 그 행동을 판단할 수 있다:

테스트 세부 사항

테스트 환경:

로깅 항목:

  1. 페이지 요청 여부
  2. JavaScript 파일 요청 여부
  3. 실행 전용 엔드포인트(follow-up call) 여부

신뢰성 검증:

결과

명확한 지역 분할: 미국은 HTML만, 중국과 Mistral은 JavaScript 렌더링

| AI 어시스턴트 | 지역 | JavaScript 렌더링 | 보고한 값 | |---|---|---|---| | ChatGPT | US | No | 가짜값 (원시 HTML) | | Claude | US | No | 가짜값 (원시 HTML) | | Gemini | US | No | 가짜값 (원시 HTML) | | Perplexity | US | No | 가짜값 (원시 HTML); "페이지에 접근할 수 없다"고도 주장 | | Meta AI | US | No | 가짜값 (원시 HTML) | | Microsoft Copilot | US | No | 가짜값 (원시 HTML); 스크립트는 다운로드했으나 실행하지 않음 | | Grok (xAI) | US | 부분 실행 | 가짜값 (원시 HTML); 한 노드에서 실행했으나 결과 무시 | | DeepSeek | China | Yes | 실제 값 | | ERNIE (Baidu) | China | Yes | 실제 값 | | Qwen (Alibaba) | China | Yes | 실제 값 | | Kimi (Moonshot) | China | Yes | 실제 값 | | Mistral | Europe | Yes | 실제 값 |

가장 많이 사용되는 미국 어시스턴트 6개(ChatGPT, Claude, Gemini, Perplexity, Meta AI, Microsoft Copilot)는 모두 가짜 값을 보고했다. 대부분은 페이지 요청만 하고 더 이상 진행하지 않았다. 반면 DeepSeek, ERNIE, Qwen, Kimi, Mistral은 실제 값을 보고했고, 서버 로그에서는 HTML → 스크립트 → 실행 전용 엔드포인트 호출의 전체 체인이 기록되었다.

상세 분석: 시스템마다 다른 깊이의 페칭

대부분의 미국 시스템: HTML만 요청하고 스크립트 파일도 가져오지 않음

회색 영역에 있는 시스템:

진짜 읽기 vs 환각: Canary의 증명

모든 실제로 가져온 페이지는 고유한 비밀 문자열을 반환했다. 따라서 이들은 진짜 읽기이지, 어시스턴트가 지어낸 답변이 아니다. 가짜 값을 보고한 경우, 어시스턴트는 추측하는 것이 아니라 실제로 받은 원시 HTML에서 충실하게 인용한 것이다.

핵심 교훈: 어시스턴트의 자기 보고는 신뢰할 수 없다

자체 설명과 서버 로그의 불일치

측정 없이는 확실한 답이 없다

추측과 자신감 있는 주장은 쓸모없다. 실제로 가져온 데이터(서버 로그)만이 진실을 말한다. 테스트 전 두 가지 확실한 예측이 모두 틀렸다:

오직 측정(서버 로그 검토)만이 실제 상황을 밝혔다.

AI 어시스턴트에 의해 발견되고 인용되기 원한다면

현실: JavaScript로 주입되는 중요한 콘텐츠(클라이언트 사이드 프레임워크, 지연 로딩 섹션, 탭 뒤의 콘텐츠 등)는 ChatGPT, Gemini, Claude, Perplexity, Copilot에서 사실상 존재하지 않는다. 이들은 원시 HTML만 요약하고 인용한다. JavaScript 콘텐츠를 볼 수 있는 어시스턴트(중국 어시스턴트들과 Mistral)는 대부분의 서양 사용자가 실제로 사용하지 않는 시스템이다. 도달할 수 없는 렌더링 능력은 능력이 아니다.

권장사항:

  1. 중요한 콘텐츠를 서버에서 렌더링하거나 사전 렌더링하라. 서버가 보내는 HTML에 없으면, 주요 어시스턴트들이 놓칠 가능성이 크다.
  2. 핵심 사실, 주장, 숫자를 원시 HTML에 넣되, 페이지 상단에 배치하라. 로드 시 실행되는 스크립트 뒤에 숨기지 말 것.
  3. 진정한 페칭이 일어났음을 증명해야 할 때는 canary를 사용하라.
  4. 서버 로그를 신뢰하고, 챗봇의 자기 설명은 신뢰하지 말라.

범위와 한계

이는 단일 통과(single-pass) 라이브 페칭 테스트이다: 어시스턴트당 1개 프롬프트, 시간의 한 지점에서 포착. 시간 경과에 따른 이후 단계나 그래프 작성은 의도적으로 하지 않았다. 핵심 질문이 이진적이기 때문이다("사용자가 URL을 전달할 때 JavaScript를 실행하는가, 안 하는가?"). 단일의 깔끔한 통과가 이에 답한다. 시간 경과에 따른 행동 변화(longitudinal study)는 의미 있는 후속 조사지만, 이는 다른 실험이다. 또한 배경 인덱싱 크롤러(GPTBot, ClaudeBot 등)는 사용자 대면 경로와 다르게 행동할 수 있으며, 이는 별도의 질문이다.