사람은 브라우저가 완성한 화면을 보지만, ChatGPT·Claude·Perplexity 같은 AI 서비스의 크롤러는 대부분 서버가 처음 보낸 HTML 원본만 읽습니다. 화면을 자바스크립트로 그리는 사이트는 이 원본이 거의 비어 있어, 사람에게 보이는 회사 소개와 JSON-LD(구조화 데이터)가 AI 크롤러에게는 전달되지 않을 수 있습니다. 서버 렌더링이나 미리 렌더링처럼 완성된 HTML을 처음부터 보내는 방식을 쓰면 AI 크롤러도 본문과 JSON-LD를 읽을 수 있습니다.
같은 주소, 서로 다른 내용
아래는 가상의 빵집 사이트를 예로 든 비교입니다. 두 사이트는 사람에게 똑같은 화면을 표시하지만, AI 크롤러가 받는 HTML 원본은 다릅니다. 원본에서 AI가 읽을 수 있는 내용은 노란색으로 표시했습니다.
가. 자바스크립트로 화면을 그리는 사이트
React·Vue 등으로 만든 사이트를 별도 설정 없이 배포하면 이 형태가 됩니다. 서버는 빈 틀과 스크립트 파일만 보내고, 화면은 방문자의 브라우저가 스크립트를 실행해 완성합니다.
대표 메뉴: 우리밀 식빵, 단팥빵
<!DOCTYPE html>
<html lang="ko">
<head>
<title>가나다 베이커리</title>
<script src="/assets/app.js"></script>
</head>
<body>
<div id="root"></div>
<!-- 본문과 JSON-LD는 app.js가 실행된 뒤에 만들어집니다 -->
</body>
</html>
AI 크롤러는 스크립트를 실행하지 않으므로 빈 <div id="root">만 읽습니다. 화면을 그린 뒤 스크립트로 추가한 JSON-LD도 원본에는 없습니다.
나. 완성된 HTML을 보내는 사이트
서버 렌더링이나 미리 렌더링을 적용한 사이트입니다. 같은 React 사이트라도 서버가 본문과 JSON-LD를 채운 HTML을 보내고, 스크립트는 그 뒤에 버튼·메뉴 같은 동작만 추가합니다.
대표 메뉴: 우리밀 식빵, 단팥빵
<!DOCTYPE html>
<html lang="ko">
<head>
<title>가나다 베이커리 | 매일 굽는 우리밀 빵</title>
<script type="application/ld+json">
{"@type": "Bakery",
"name": "가나다 베이커리",
"openingHours": "Mo-Sa 08:00-20:00",
"telephone": "02-000-0000"}
</script>
</head>
<body>
<h1>매일 굽는 우리밀 빵</h1>
<p>영업시간 월~토 08:00~20:00</p>
<script src="/assets/app.js"></script>
</body>
</html>
원본에 회사 이름·영업시간·연락처가 글자와 JSON-LD로 들어 있어, 스크립트를 실행하지 않는 AI 크롤러도 공식 정보를 읽을 수 있습니다.
차이가 생기는 이유
웹 페이지는 두 단계로 완성됩니다. 서버가 HTML 원본을 보내고, 브라우저가 그 안의 자바스크립트를 실행해 화면을 마무리합니다. Vercel이 2024년 12월에 공개한 조사에 따르면 OpenAI·Anthropic 등 주요 AI 서비스의 크롤러는 자바스크립트 파일을 내려받기는 하지만 실행하지 않습니다. 따라서 두 번째 단계에서 만들어지는 내용은 AI 크롤러에게 전달되지 않습니다.
구글 검색 크롤러는 자바스크립트를 실행해 페이지를 렌더링하지만, 렌더링은 원본을 수집한 뒤 별도 단계로 처리됩니다. 검색 노출과 AI 답변 노출을 함께 고려하면 중요한 정보는 원본 HTML에 처음부터 넣는 편이 안전합니다.
JSON-LD를 넣는 다섯 가지 방법
JSON-LD를 어느 단계에서 넣는지에 따라 AI 크롤러가 읽을 수 있는지가 달라집니다.
| 방법 | 작동 방식 | AI 크롤러 |
|---|---|---|
| ① 브라우저에서 삽입 | 화면을 그린 뒤 스크립트(GTM·화면 코드)가 <head>에 추가합니다. | 읽지 못할 수 있음 |
| ② 서버 렌더링 | 요청이 올 때마다 서버가 본문과 JSON-LD를 채운 HTML을 만들어 보냅니다(Next.js 등). | 읽음 |
| ③ 미리 렌더링 | 빌드할 때 페이지마다 완성된 HTML 파일을 만들어 둡니다(정적 렌더링). | 읽음 |
| ④ 웹 서버·CDN에서 삽입 | 웹 서버나 CDN이 HTML을 보내기 직전에 페이지별 JSON-LD를 <head>에 넣습니다. 모든 방문자가 같은 HTML을 받습니다. | 읽음 |
| ⑤ 동적 렌더링 | 방문자가 크롤러이면 따로 렌더링한 HTML을 보내고, 사람에게는 기존 화면을 보냅니다. | 읽음. 다만 구글은 임시방편으로 분류합니다 |
⑤ 동적 렌더링은 사람과 크롤러에게 서로 다른 HTML을 보내므로, 두 버전의 내용이 어긋나면 크롤러에게만 다른 내용을 보이는 것으로 판단될 수 있습니다. 구글 검색 센터는 동적 렌더링을 장기적인 해결책이 아닌 임시방편으로 안내하고 서버 렌더링·정적 렌더링을 권장합니다.
내 사이트에서 확인하는 방법
- 원본 열기: 크롬 주소창에서 사이트 주소 앞에
view-source:를 입력해 엽니다. 개발자 도구의 요소 탭은 스크립트가 실행된 뒤의 결과라서 확인용으로 맞지 않습니다. - 회사 정보 찾기: 원본에서 회사 이름, 대표 제품명, 연락처를 검색합니다. 화면에는 보이는데 원본에서 찾을 수 없다면 AI 크롤러도 읽지 못할 가능성이 높습니다.
- JSON-LD 찾기: 원본에서
application/ld+json을 검색합니다. 원본에 없고 개발자 도구에만 있다면 ① 브라우저 삽입 방식입니다.
GEOcare.ai를 이용 중이라면 JSON-LD 센터에서 페이지별 적용 상태를 확인할 수 있습니다.
GEOcare.ai의 적용 방식
GEOcare.ai는 JSON-LD를 페이지 HTML에 직접 삽입하는 방식을 기본으로 합니다. 이렇게 넣은 구조화 데이터는 서버가 보내는 원본에 처음부터 포함되므로 자바스크립트를 실행하지 않는 AI 크롤러도 읽을 수 있고, 사람과 크롤러가 같은 HTML을 받습니다. 사이트 구조에 따라 웹 서버나 CDN 단계에서 넣는 방법도 함께 검토합니다.
출처: Vercel 블로그, The rise of the AI crawler(2024-12-17) · Google 검색 센터: 자바스크립트 SEO 기본사항 · Google 검색 센터: 동적 렌더링. 예시의 빵집은 설명을 위한 가상의 회사입니다.
AI 크롤러가 귀사 사이트를 어떻게 읽는지 진단하십시오
도메인을 등록하면 7일 무료 체험 기간에 페이지별 구조화 데이터 상태와 4개 AI의 답변을 확인할 수 있습니다.