"제주도 가족 펜션 추천"이나 "오사카 료칸 비교"처럼 여행 의도가 담긴 탐색 쿼리를 Perplexity·ChatGPT Search·Google AI Overviews에 입력하면, 특정 숙박 시설 페이지가 AI 합성 답변의 출처로 직접 인용된다. 이 인용 선정 기준은 OTA 리스팅 순위나 백링크 수와 무관하며, 페이지가 LLM 추론 시 참조 가능한 형태로 속성을 제공하느냐에 달려 있다. 자사 직접 예약 페이지에 구조화 데이터를 구현하지 않으면 AI는 Booking.com·Expedia 집계 페이지만 인용하고 자사는 배제된다. 이 글은 여행·숙박업 자사 사이트가 AI 추천 후보로 진입하기 위한 기술적 요건을 단계별로 다룬다.
AI 여행 쿼리의 의도 파싱과 속성 매칭 메커니즘
Perplexity·ChatGPT Search가 여행 쿼리를 처리할 때 수행하는 작업은 의도 분해(intent decomposition)다. "제주 해안가 커플 숙소 주차 가능"이라는 쿼리는 내부적으로 아래 속성으로 분해된다.
- 위치: 제주 + 해안가 — 왜: geo 좌표·주소 파싱에 직접 매핑; 어떻게:
LodgingBusiness.address와GeoCoordinates로 위도·경도를 명시 - 투숙객 유형: 커플 — 왜: amenityFeature에 "더블룸"·"커플 패키지" 명시 여부로 판단; 어떻게:
amenityFeature배열에 명시적 값 추가 - 시설 조건: 주차 가능 — 왜: boolean 속성이 없으면 AI가 인용 후보에서 탈락시킨다; 어떻게:
{"name":"무료 주차","value":true}형태로 명시
GPTBot·PerplexityBot·Googlebot은 페이지 수집 후 LLM 인덱스에 올릴 때 비정형 텍스트보다 JSON-LD 구조화 데이터를 우선 파싱한다. 속성이 문장에만 묻혀 있으면 추출 신뢰도가 낮아 인용에서 누락될 가능성이 높다.
SEO·AEO·GEO 비교: 여행업 적용 기준
| 항목 | 전통 SEO | AEO (답변엔진최적화) | GEO (생성형엔진최적화) |
|---|---|---|---|
| 목표 시스템 | Google 파란 링크 | Google Featured Snippet | Perplexity·ChatGPT·AI Overviews |
| 핵심 랭킹 신호 | 백링크, E-E-A-T | FAQPage 스키마, 직접 답변 문장 | LodgingBusiness 속성 완전성, 비교 콘텐츠 |
| 여행업 주요 콘텐츠 | 목적지 가이드, OTA 리뷰 유입 | 체크인 정책, 취소 규정 FAQ | 시설 속성 명세, 랜드마크 거리 정보 |
| 스키마 역할 | 리치 결과 (부수적) | FAQPage 스키마 | Hotel·LodgingBusiness 스키마 (필수) |
| 측정 지표 | Search Console CTR·순위 | Featured Snippet 점유율 | AI 답변 내 인용 횟수 (수동·도구 모니터링) |
LodgingBusiness JSON-LD 구현
Schema.org의 Hotel 타입(LodgingBusiness 하위 타입)은 AI 크롤러가 숙박 속성을 파싱하는 1순위 소스다. 아래 예시는 Google Rich Results Test와 Schema Markup Validator(validator.schema.org)를 통과하는 형태다.
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "한라 스테이",
"description": "제주 서귀포 해안가 위치, 조식 포함, 무료 주차, 반려동물 불가, 체크인 15:00",
"url": "https://hallastay.co.kr",
"telephone": "+82-64-123-4567",
"address": {
"@type": "PostalAddress",
"streetAddress": "서귀포시 칠십리로 123",
"addressLocality": "서귀포시",
"addressRegion": "제주특별자치도",
"postalCode": "63595",
"addressCountry": "KR"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 33.2541,
"longitude": 126.5602
},
"starRating": {
"@type": "Rating",
"ratingValue": "4"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "312"
},
"amenityFeature": [
{"@type": "LocationFeatureSpecification", "name": "무료 주차장", "value": true},
{"@type": "LocationFeatureSpecification", "name": "조식 제공", "value": true},
{"@type": "LocationFeatureSpecification", "name": "야외 수영장", "value": true},
{"@type": "LocationFeatureSpecification", "name": "반려동물 동반", "value": false},
{"@type": "LocationFeatureSpecification", "name": "Wi-Fi", "value": true}
],
"checkinTime": "15:00",
"checkoutTime": "11:00",
"priceRange": "₩150,000 ~ ₩350,000",
"paymentAccepted": "신용카드, 현금"
}
- description 필드에 핵심 속성 압축: 위치·시설·정책 키워드를 140자 이내 문장으로 — 왜: 크롤러가 JSON-LD 파싱에 실패할 경우 description을 fallback으로 사용; 어떻게: "위치, 조식 포함, 주차, 반려동물 불가, 체크인 시간"을 쉼표 열거 형태로 집약
- value: false 명시: 반려동물 불가·흡연 불가처럼 부정 조건도 boolean으로 선언 — 왜: 명시하지 않으면 AI가 "가능"으로 추론하거나 불확실 처리해 오답을 생성할 위험; 어떻게:
"value": false로 명시적 boolean 선언 - checkinTime·checkoutTime: "15:00" 또는 ISO 8601
T15:00형식 모두 허용 — 왜: "체크인 몇 시예요?" 류 직접 질문에 AI가 이 필드를 인용; 어떻게: 실제 운영 정책 시간으로 정확하게 입력
AI 인용 후보가 되는 콘텐츠 구조
JSON-LD 스키마만으로는 부족하다. Perplexity·ChatGPT Search는 페이지 본문 텍스트도 색인하며, 합성 답변 생성 시 두 소스를 병합한다.
- 속성 명세 테이블: 체크인·체크아웃 시간, 조식 포함 여부, 주차 요금, 취소 정책을 HTML
<table>로 구조화 — 왜: LLM은 테이블 셀을 키-값 쌍으로 파싱하므로 비정형 문장보다 추출 정확도가 높다; 어떻게: 각 행을 "항목 | 세부 내용" 2열로 구성 - 위치 맥락 문장 삽입: "제주국제공항에서 차로 40분, 성산일출봉에서 10분 거리" — 왜: "성산일출봉 근처 숙소" 쿼리에서 거리 정보가 없는 페이지보다 있는 페이지가 인용 후보로 우선 선정; 어떻게: 주요 랜드마크 3~5개까지 이동 시간을 본문에 명시
- FAQPage 스키마 + 본문 병치: "체크인 전 짐 맡길 수 있나요?", "반려동물 동반 가능한가요?" — 왜: Google AI Overviews는 FAQPage 스키마를 직접 인용하는 경향이 관측된다; 어떻게:
FAQPageJSON-LD와 동일 Q&A를 본문에도 배치해 두 소스를 일치시킨다 - 비교 콘텐츠 페이지: "A 펜션 vs B 리조트 차이점" 형태 — 왜: AI 비교 쿼리("제주 숙소 비교")에서 비교형 페이지가 인용 후보에 진입하는 경향이 사례에 따라 확인된다; 어떻게: 경쟁 시설 대비 자사 강점을 속성별 표로 명시
흔한 오해: OTA 리스팅 완성도 = AI 인용 최적화
Booking.com·Expedia의 숙박 정보를 아무리 풍부하게 채워도 자사 직접 예약 페이지의 AI 인용 가능성은 올라가지 않는다. AI 크롤러는 OTA 집계 페이지(예: booking.com/hotel/kr/...)를 인용할 뿐, 그 데이터가 자사 도메인에 귀속되지 않는다. 올바른 처리법은 자사 예약 페이지에 LodgingBusiness JSON-LD를 직접 선언하고, 서버 로그에서 GPTBot·PerplexityBot의 실제 방문 기록을 확인한 뒤 robots.txt에 명시적 허용 블록을 추가하는 것이다. OTA 채널 관리와 자사 직접 예약 채널 GEO 최적화는 별개의 작업 스택으로 병렬 운영해야 한다.
크롤러 접근 제어와 측정
- robots.txt 명시적 허용: GPTBot·PerplexityBot·ClaudeBot에
Allow: /선언 — 왜: 일부 호스팅 플랫폼이 알 수 없는 크롤러를 기본 차단하는 경우가 있어 명시적 허용이 안전하다; 어떻게:User-agent: GPTBot블록과User-agent: PerplexityBot블록을 각각 추가하고Allow: /선언 - 인용 모니터링: 대표 쿼리 10~20개를 주 1회 Perplexity·ChatGPT Search에 직접 입력해 인용 URL 기록 — 왜: 현재 Google Search Console은 AI Overviews 인용을 별도로 분리 집계하지 않아 수동 확인이 불가피하다; 어떻게: 자사 도메인이 인용 출처에 포함되었는지를 스프레드시트에 날짜별 기록
- UTM 보조 마킹: AI 클릭 추적을 위해 랜딩 URL에
?utm_source=perplexity&utm_medium=ai_referral추가 — 왜: AI Overviews·Perplexity 클릭이 GA4에서(not set)또는organic으로 혼입되어 기여 분석이 불가능해진다; 어떻게: GA4 이벤트로 직접 예약 전환까지 연결해 AI 채널 기여를 정량화
GPTBot·PerplexityBot을 허용했는데도 인용이 안 됩니다. 왜 그런가요?
robots.txt 허용은 인용의 필요조건이지 충분조건이 아닙니다. 크롤러가 페이지를 수집했더라도 LodgingBusiness JSON-LD가 없거나 amenityFeature가 비어 있으면 AI가 해당 페이지를 관련 쿼리의 인용 후보로 선정하지 않습니다. 또한 페이지 응답 속도가 3초를 초과하거나 도메인 신뢰도가 낮으면 크롤 우선순위에서 밀려 실제 색인이 지연됩니다. 우선 validator.schema.org로 구조화 데이터를 검증하고, 서버 액세스 로그에서 GPTBot의 실제 방문 기록(User-Agent: GPTBot)을 직접 확인하십시오.
자사 사이트에 리뷰가 100개 미만인데 AI 인용에 불리한가요?
aggregateRating의 reviewCount가 적으면 신뢰 신호 면에서 불리할 수 있지만 결정적 요인은 아닙니다. Perplexity·ChatGPT Search는 리뷰 수보다 속성 정보 완전성을 우선하는 경향이 사례에 따라 관측됩니다(추정). 리뷰 수가 적다면 amenityFeature 항목 수를 경쟁 OTA 페이지와 동등하게 갖추는 작업을 먼저 진행하고, 구글 비즈니스 프로필(GBP)에 자사 정보를 정확히 등록해 GBP 리뷰 신호를 Google AI Overviews에 간접 제공하는 방식을 병행하십시오.
참고 자료
이 글의 권고는 아래 공식 문서·연구를 근거로 합니다.