ChatGPT Search·Perplexity·Google AI Overviews가 제품·서비스 쿼리에 답변을 생성할 때 리뷰 텍스트를 직접 인용하는 사례가 늘고 있다. 이는 RAG(Retrieval-Augmented Generation) 파이프라인의 특성에서 비롯된다. "실제 사용 경험" 관련 쿼리에서 구체적 수치·비교·기간을 포함한 사용자 후기 청크는 일반 제품 설명 텍스트보다 코사인 유사도 점수가 높게 나오는 경향이 있다. 그러나 대다수 리뷰 페이지는 세 가지 문제를 동시에 안고 있다. JSON-LD Review 스키마 미적용, JavaScript 클라이언트 렌더링으로 인한 정적 HTML 부재, robots.txt에서 AI 크롤러를 묵시적으로 차단하는 것이다. 리뷰를 AI 인용 자산으로 전환하려면 이 세 계층을 함께 다루어야 한다.
AI 크롤러가 리뷰 콘텐츠를 처리하는 방식
GPTBot(OpenAI)·PerplexityBot·Google-Extended는 HTML을 크롤링한 뒤 텍스트를 청크 단위로 분할해 벡터 임베딩한다.
- 청크 경계 결정: 크롤러는 HTML 블록 요소(
article,section,div)를 청크 분리 기준으로 활용한다. 개별 리뷰를 단일 블록 요소로 감싸지 않으면 여러 리뷰가 하나의 청크로 병합되어 LLM이 특정 후기를 독립 인용할 수 없다. 각 리뷰를<article itemscope itemtype="https://schema.org/Review">로 감싸는 것이 경계 힌트를 명시하는 최소 조치다. - 정보 밀도 필터링: "좋아요", "추천합니다" 수준의 1~2문장 리뷰는 RAG 벡터 검색 상위 N개 청크에 포함될 확률이 낮다. 구체적 수치(절감율·사용 기간·비교 수량), 문제-해결 서술, 시간 경과 정보가 포함된 리뷰가 인용 우선순위를 얻는다.
- 메타데이터 연결:
datePublished·author·ratingValue가 파싱 가능한 형태로 존재하면 LLM이 인용 시 출처 속성("2026년 5월 사용자 후기에 따르면")을 부여할 수 있다. 이미지로만 렌더링된 별점은 이 신호가 누락된다.
JSON-LD Review 스키마 구현
Schema.org Review 타입을 Product·LocalBusiness·Service 엔티티와 연결하면 AI 크롤러가 페이지를 "특정 엔티티에 대한 사용자 평가 집합"으로 분류한다. JSON-LD는 <script type="application/ld+json">으로 HTML에 삽입하며, 반드시 서버 사이드 렌더링으로 정적 소스에 포함되어야 한다.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "전기절감 컨설팅 서비스",
"url": "https://example.com/service/energy-consulting",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "328",
"bestRating": "5",
"worstRating": "1"
},
"review": [
{
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5"
},
"author": {
"@type": "Person",
"name": "김민수"
},
"datePublished": "2026-05-10",
"name": "설치 후 3개월, 전기료 18% 감소 실증",
"reviewBody": "설치 후 3개월간 청구서를 비교한 결과 평균 18% 절감을 확인했습니다. 에너지 진단 보고서에 항목별 절감 근거가 명시되어 현장 엔지니어와 즉시 활용 가능했으며, A/S 요청 후 24시간 내 방문이 완료됐습니다."
},
{
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "4",
"bestRating": "5"
},
"author": {
"@type": "Person",
"name": "박지영"
},
"datePublished": "2026-04-22",
"name": "중소 제조업 3개 라인 도입 — 피크 수요 14% 저감",
"reviewBody": "공장 3개 라인에 도입 후 피크 시간대 전력 수요를 14% 낮췄습니다. 초기 설치에 이틀이 걸렸고 운영 중단 없이 완료됐습니다."
}
]
}
name 필드는 리뷰 제목 역할을 해서 LLM이 청크를 검색할 때 추가 색인 신호로 기능한다. reviewBody는 100자 이상, 수치·맥락·결과를 포함한 텍스트로 채워야 인용 자산으로서의 가치를 갖는다.
SEO·AEO·GEO 관점에서 리뷰 활용 비교
| 항목 | SEO (전통 검색) | AEO (답변엔진최적화) | GEO (생성형엔진최적화) |
|---|---|---|---|
| 주요 크롤러 | Googlebot | GPTBot, OAI-SearchBot, PerplexityBot | Google-Extended, Applebot |
| 리뷰 활용 방식 | 별점 리치 스니펫(SERP 표시) | reviewBody 텍스트 직접 인용 | 집계 요약 + 대표 인용문 삽입 |
| 핵심 신호 | AggregateRating 구조화 데이터 | Review 텍스트 정보 밀도 | datePublished 신선도 + 엔티티 연결 |
| robots.txt 설정 | Googlebot 허용(기본) | GPTBot·PerplexityBot 명시 허용 | Google-Extended 명시 허용 |
| 측정 지표 | Search Console CTR, position | AI 답변 내 인용 URL 수동 추적 | Brand mention share |
크롤러 접근성 설정과 인용 측정
robots.txt 설정
리뷰 페이지가 잘 구조화되어 있어도 AI 크롤러가 차단되어 있으면 인덱스 대상에서 제외된다. User-agent: *에 Disallow: /reviews/가 걸려 있는 경우가 가장 흔한 차단 패턴이다.
# robots.txt — AI 크롤러에 리뷰·제품 경로 명시 허용
User-agent: *
Disallow: /admin/
Disallow: /user/settings/
# OpenAI — ChatGPT Search 인덱싱
User-agent: GPTBot
Allow: /reviews/
Allow: /product/
Allow: /service/
# Perplexity
User-agent: PerplexityBot
Allow: /reviews/
Allow: /product/
Allow: /service/
# Google AI Overviews 학습 크롤러
User-agent: Google-Extended
Allow: /reviews/
Allow: /product/
Allow: /service/
인용 측정
- 스키마 유효성 검증: Google Rich Results Test로 JSON-LD 파싱 오류를 확인한다. 오류가 있으면 리치 스니펫과 AI 크롤러 구조 인식 모두 실패한다.
- 크롤링 여부 확인: 서버 액세스 로그에서
GPTBot·PerplexityBotUser-Agent를 필터링해 실제 방문 여부와 크롤링 간격을 파악한다. - AI 인용 추적: ChatGPT·Perplexity에서 "브랜드명 + 실제 후기" 쿼리를 주 1회 수동 조회해 자사 리뷰 페이지가 인용 URL로 등장하는지 확인한다. Perplexity는 인용 URL을 응답에 직접 표시하므로 식별이 용이하다.
흔한 오해: AggregateRating JSON-LD만으로 AI 인용이 완성된다
AggregateRating 스키마는 Google SERP의 별점 리치 스니펫 생성에는 충분하지만, ChatGPT·Perplexity가 리뷰 내용을 직접 인용하려면 개별 Review 엔티티의 reviewBody 텍스트가 별도로 필요하다. AggregateRating만 있는 페이지에서 AI 크롤러는 "4.7점, 328개 리뷰"라는 수치는 인식하지만, "설치 후 3개월 후 18% 절감"과 같은 구체적 인용문은 생성할 수 없다.
올바른 처리: aggregateRating과 함께 최소 3~5개의 대표 Review 엔티티를 JSON-LD에 포함하고, 각 reviewBody를 100자 이상 구체적 텍스트로 채운다. 주의할 점은 JSON-LD에 포함된 리뷰가 실제 HTML에도 시각적으로 렌더링되어야 한다는 것이다. Google은 구조화 데이터와 페이지 콘텐츠의 일치 여부를 검증하며, JSON-LD에만 존재하고 화면에 없는 리뷰는 스팸성 마크업으로 처리될 수 있다(Google Search Central Structured Data 정책 기준).
Q. 네이버 스마트블록이나 카카오 AI 검색에도 동일한 JSON-LD 스키마가 적용되나요?
네이버 스마트블록은 Schema.org Review를 일부 파싱하지만, 네이버 자체 쇼핑·플레이스 데이터와의 연동을 우선한다. 외부 사이트 리뷰의 경우 JSON-LD보다 Microdata(itemprop) 방식과 네이버 서치어드바이저 사이트맵 등록 병행이 실효성이 높다. 카카오 AI 검색 크롤러의 구조화 데이터 처리 사양은 공개 문서가 없어 구체적 구현 가이드를 제시하기 어렵다(추정 제외).
Q. 리뷰 페이지가 React·Vue 클라이언트 사이드 렌더링(CSR) 구조인 경우 AI 크롤러가 콘텐츠를 읽을 수 있나요?
GPTBot과 PerplexityBot은 JavaScript를 실행하지 않고 정적 HTML 소스만 크롤링하는 것으로 알려져 있다(공식 크롤러 사양이 완전히 공개되지 않아 추정). CSR로 렌더링된 리뷰 목록은 HTML 소스에 텍스트가 없어 인덱스 대상에서 제외될 가능성이 높다. 대응 방법은 두 가지다. 첫째, Next.js의 getServerSideProps 또는 getStaticProps로 리뷰 HTML을 서버에서 렌더링한다. 둘째, <script type="application/ld+json"> JSON-LD를 서버 사이드에서 <head>에 삽입해 정적 소스에서 구조 데이터를 제공한다. Google Googlebot은 JavaScript 렌더링 큐를 운영하지만, AI 크롤러는 이 큐를 거치지 않는다고 판단하는 것이 안전하다.
참고 자료
이 글의 권고는 아래 공식 문서·연구를 근거로 합니다.