Google AI Overviews·Perplexity·ChatGPT Browse는 "가성비 런닝화 추천", "방수 기능 있는 트레킹화 종류" 같은 상품 쿼리에서 직접 답변을 합성하며 특정 상품 페이지를 출처로 인용한다. 인용 후보 선정 기준은 기존 SEO의 PageRank 중심 모델과 다르다. 구조화 데이터의 파싱 가능성, 가격·재고 정보의 최신성, 리뷰 신호의 신뢰도가 핵심 변수다. 이커머스 사이트는 동시에 패싯 탐색이 만드는 URL 폭발로 크롤 예산이 핵심 상품 페이지에서 이탈하는 구조적 문제를 안고 있다. AI 인용 최적화는 이 두 문제를 동시에 해결하는 방향으로 설계해야 한다.
AI 검색이 이커머스 상품 페이지를 처리하는 구조
Googlebot·Perplexitybot·GPTBot이 상품 페이지를 크롤한 뒤, 각 플랫폼은 독립적인 색인·랭킹 파이프라인을 거쳐 AI 합성 단계에서 인용 후보를 선정한다. 세 가지 판단 기준이 공통으로 작동한다.
- 구조화 데이터 파싱 가능성 — 왜: LLM은 비정형 HTML에서 가격·재고를 직접 추출하는 대신 JSON-LD를 우선 참조해 신뢰도를 높이기 때문이다. 어떻게: Product + Offer + AggregateRating JSON-LD를
<script type="application/ld+json">으로 삽입하고 Google Rich Results Test로 파싱 성공 여부를 검증한다. - 콘텐츠 최신성 — 왜: 가격·재고 정보가 실제와 다를 경우 AI 인용이 사용자 신뢰를 훼손하므로 freshness가 인용 가중치에 반영된다(추정). 어떻게: Offer 스키마의
priceValidUntil·availability를 서버 렌더링 시점에 실시간 주입하고, HTTP 응답에Last-Modified·ETag헤더를 포함시킨다. - 리뷰·신뢰도 신호 — 왜: AggregateRating이 없는 상품 페이지는 E-E-A-T 평가에서 불리하며 AI 인용 후보에서 탈락 확률이 높아진다(사례에 따라 다름). 어떻게:
ratingValue·reviewCount·bestRating을 AggregateRating 스키마에 정확히 매핑한다.
Product JSON-LD 구현: 최소 유효 구조
아래는 이커머스 상품 페이지의 실제 동작하는 최소 JSON-LD다. availability와 priceValidUntil은 반드시 서버 사이드에서 동적으로 주입해야 한다. 정적 HTML에 하드코딩하면 재고 소진 후에도 "InStock"이 유지되어 정보 신뢰성 평가가 하락할 수 있다.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "워커 레더 첼시 부츠 블랙 260",
"sku": "WB-2024-BK-260",
"brand": { "@type": "Brand", "name": "BrandName" },
"image": [
"https://example.com/images/chelsea-boot-front.webp",
"https://example.com/images/chelsea-boot-side.webp"
],
"description": "풀그레인 소가죽 갑피, 굿이어 웰트 제법. 밑창 교체 가능, 발 너비 C 기준.",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "312",
"bestRating": "5"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/products/chelsea-boot-bk-260",
"priceCurrency": "KRW",
"price": "189000",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"seller": { "@type": "Organization", "name": "Example Store" }
}
}
</script>
패싯 탐색과 크롤 예산 통제
이커머스 AI 검색 최적화를 저해하는 가장 큰 구조적 문제는 패싯 탐색이 생성하는 URL 폭발이다. /products?color=black&size=260&sort=price_asc 같은 조합이 수십만 URL을 만들어 핵심 상품 페이지의 크롤 예산을 잠식한다.
- robots.txt 파라미터 차단 — 왜: 정렬·필터 파라미터 URL은 색인 가치가 없고 크롤 예산만 소모하기 때문이다. 어떻게: Googlebot·GPTBot·Perplexitybot 각각에
Disallow: /*?sort=,Disallow: /*?filter=규칙을 적용한다. - canonical 태그 집중 — 왜: 같은 상품이 여러 패싯 URL에서 노출될 때 링크 신호가 분산되기 때문이다. 어떻게: 모든 패싯 변형 URL에서
<link rel="canonical" href="/products/{slug}">로 정식 상품 URL을 지정한다. - Sitemap에 핵심 URL만 포함 — 왜: Sitemap은 크롤러에게 우선순위를 시그널하는 수단이므로, 패싯 URL 수천 개를 포함하면 신호가 희석된다. 어떻게: 상품 상세 페이지와 카테고리 페이지만 등록하고
<lastmod>를 실제 수정 시각으로 유지한다.
대화형 쿼리 최적화와 GEO 신호 설계
AI 검색은 "방수 되는 트레킹화 알려줘" 같은 대화형 쿼리를 처리한다. 이런 쿼리에서 인용되려면 상품 페이지가 단순 스펙 나열을 넘어 구매 결정 맥락을 직접 텍스트로 포함해야 한다.
- 판단 근거 문장 포함 — 왜: LLM은 "왜 이 상품인가"를 설명하는 단락이 있을 때 해당 페이지를 인용 후보로 선택할 확률이 높아진다(사례에 따라 다름). 어떻게: "굿이어 웰트 제법은 밑창 교체가 가능해 장기 착용에 유리하다" 같은 판단 근거 문장을 상품 설명 본문에 포함한다.
- FAQPage 스키마와 FAQ 텍스트 병행 — 왜: "이 부츠 방수 되나요", "사이즈 크게 나오나요" 같은 롱테일 쿼리에 직접 답하는 텍스트가 있으면 AI가 해당 페이지를 인용 가능한 원천으로 분류한다. 어떻게: 상품 페이지 하단에 FAQ HTML 섹션과 FAQPage JSON-LD를 함께 마크업한다.
- llms.txt 등록 — 왜: Perplexity 등 일부 AI 에이전트는 사이트 루트의
/llms.txt를 참조해 인용 허용 범위와 우선 콘텐츠를 파악한다. 어떻게: 루트에/llms.txt를 생성하고 핵심 카테고리 URL과 상품 피드 엔드포인트를 나열한다.
흔한 오해: "상품 페이지 URL을 최대한 많이 색인하면 AI 인용 기회가 늘어난다"
패싯 URL까지 전부 색인에 포함시키면 크롤 예산이 분산되고 중복 콘텐츠 신호로 인해 핵심 상품 페이지의 신뢰도가 오히려 낮아진다. 올바른 처리는 색인 대상을 상품 상세 페이지와 의미 있는 카테고리 페이지로 제한하고, 패싯 변형 URL은 canonical + robots.txt Disallow로 처리하는 것이다. URL 수를 줄이는 대신 각 핵심 페이지의 구조화 데이터 품질과 freshness를 높이는 방향이 AI 인용 확률에 유리하다.
측정 방법과 신호 비교
| 구분 | 핵심 신호 | 이커머스 구현 포인트 | 측정 방법 |
|---|---|---|---|
| SEO | 백링크, Core Web Vitals, E-E-A-T | LCP < 2.5s, 내부 링크 구조, Product 스키마 | Google Search Console 유기 클릭·노출 |
| AEO | FAQPage, HowTo, 구조화 데이터 완성도 | FAQPage + Product JSON-LD 병행 마크업 | Rich Results Test 파싱 성공, Featured Snippet 점유율 |
| GEO | 인용 가능성, freshness, 신뢰도 | priceValidUntil 실시간 갱신, llms.txt, Last-Modified 헤더 | GSC "AI Overviews 있음" 필터 CTR 변화, Perplexity 수동 샘플링 |
AI Overviews 인용 횟수는 현재 공식 API로 직접 측정이 불가능하다. 실무에서는 Google Search Console에서 AI Overviews 필터를 적용한 뒤 쿼리별 CTR 변화를 추적하거나, 주요 상품 카테고리 쿼리를 Perplexity·ChatGPT에 직접 입력해 인용 빈도를 수동 샘플링하는 방법을 병행한다.
FAQ 1: Product JSON-LD를 삽입했는데 Google Rich Results Test에서 파싱 오류가 발생한다. 원인은?
가장 흔한 원인 세 가지는 다음과 같다. 첫째, JavaScript 렌더링 이후에 JSON-LD가 DOM에 삽입되는 경우다. Googlebot은 JavaScript를 실행하지만 렌더링 대기 시간이 있어 파싱이 누락될 수 있다. 서버 사이드 렌더링(SSR) 또는 정적 생성(SSG) 단계에서 JSON-LD를 HTML에 직접 포함시켜야 한다. 둘째, availability 값을 "InStock" 문자열로만 입력한 경우다. Schema.org 명세는 "https://schema.org/InStock"처럼 완전한 URL을 요구한다. 셋째, price 필드에 "189,000원"처럼 통화 기호와 쉼표가 포함된 경우다. priceCurrency는 ISO 4217 코드("KRW"), price는 숫자 문자열("189000")로 분리해야 한다.
FAQ 2: Perplexitybot이 robots.txt의 Disallow 설정을 무시하는 것 같다. 어떻게 대응하나?
Perplexitybot은 공식적으로 robots.txt를 준수한다고 명시하고 있으나, 실제 크롤 동작에서 일시적으로 규칙을 무시하는 사례가 보고된 바 있다. 단기 대응으로는 HTTP 응답 헤더에 X-Robots-Tag: noindex, nofollow를 추가하는 방법이 있다. HTTP 헤더 수준 지시는 robots.txt보다 더 직접적으로 크롤러에 전달된다. 장기적으로는 Cloudflare WAF 또는 Nginx에서 User-Agent 문자열로 접근 자체를 제한하거나, /llms.txt에 인용 허용 범위를 명확히 명시해 의도하지 않은 크롤을 줄이는 방법을 병행한다. robots.txt 단독 차단만으로 완전한 통제는 보장되지 않는다.
참고 자료
이 글의 권고는 아래 공식 문서·연구를 근거로 합니다.