AEO(Answer Engine Optimization)와 GEO(Generative Engine Optimization)는 마케팅 실무에서 자주 동의어로 혼용된다. 두 개념 모두 "AI 시스템이 답변을 출력할 때 내 콘텐츠가 인용되게 한다"는 목표를 공유하지만, 타깃 시스템의 기술 아키텍처가 구조적으로 다르다. AEO는 기존 텍스트를 그대로 추출하는 추출형(extractive) 엔진을, GEO는 LLM이 새 텍스트를 생성하면서 출처를 인용하는 생성형(generative) RAG 파이프라인을 각각 타깃한다. 이 차이를 무시하면 FAQPage 스키마를 달아도 Perplexity 인용률이 전혀 변하지 않는 결과가 반복된다.
AEO — 추출형 답변 엔진의 작동 원리
AEO가 다루는 시스템은 Google Featured Snippet, People Also Ask, 음성 검색(Google Assistant·Siri)이다. 공통 메커니즘은 추출(extraction)이다.
- 색인 조회 — 쿼리와 매칭되는 페이지를 기존 Googlebot 색인에서 소환한다. AEO 시스템은 독립 인덱스 없이 웹 검색 색인을 재사용한다.
- 텍스트 블록 추출 — 페이지 내 특정 단락(보통 40–60단어)을 원문 그대로 복사한다. 생성 모델 없이 규칙 기반 휴리스틱으로 동작하므로 내용을 수정하지 않는다.
- UI 표시 — 추출 블록을 출처 URL과 함께 검색 결과 상단(position 0)에 노출한다.
AEO 핵심 구현 신호:
- 질문형 헤딩 + 단문 직접 답변 — H2/H3에 "~란 무엇인가?" 형태를 두고 바로 아래 40–60단어 이내 정의 단락을 배치한다. 스니펫 추출 알고리즘이 질문-직접답변 패턴 인식률이 높기 때문이다.
- FAQPage JSON-LD —
@type: FAQPage와Question/Answer엔티티를 마크업한다. Googlebot이 구조를 파싱해 People Also Ask 섹션에 직접 반영한다. - HowTo Schema — 단계별 절차를
@type: HowTo로 마크업한다. 음성 검색에서 "~하는 방법" 쿼리의 스텝 바이 스텝 답변 출처로 사용된다.
GEO — 생성형 RAG 파이프라인의 작동 원리
Perplexity, ChatGPT Search, Google AI Overview는 추출이 아닌 생성(generation) 방식이다. 세 단계 파이프라인을 거친다.
- Retrieval — 쿼리를 임베딩 벡터로 변환한 뒤, 벡터 DB 또는 실시간 웹 인덱스에서 코사인 유사도 기준 상위 N개 청크를 소환한다. 전체 페이지가 아닌 300–500토큰 단위 청크가 처리 단위다.
- Reranking — Cross-encoder 또는 BM25 하이브리드로 후보 청크를 재정렬한다. 1차 ANN 검색 결과의 정밀도를 보완하는 단계다.
- Generation — 상위 청크를 context window에 주입하고 LLM이 새 문장을 생성한다. 인용 URL은 LLM이 각 청크의 기여도를 판단해 첨부한다.
GEO 핵심 구현 신호:
- 사실 밀도(fact density) — 단락 내 검증 가능한 수치, 고유명사, 인과 관계가 많을수록 reranker 점수가 높아진다. "일반적으로 효과적이다" 같은 표현을 "A·B 조건에서 X% 효과(출처)"로 재작성하는 방식으로 구현한다.
- 청크 자기완결성 — 300–500토큰 단위로 읽어도 전후 맥락 없이 의미가 성립해야 한다. 단락 앞에 개체·주제를 명시하고 전편·후편 참조 표현을 최소화한다.
- AI 크롤러 robots.txt 허용 — GPTBot, PerplexityBot, ClaudeBot을 차단하면 retrieval 대상 자체에서 제외된다. 아래 구현 섹션 참조.
- 개체명 명시성 — 동음이의어·대명사 의존 없이 전체 개체명을 사용한다. 임베딩 벡터의 쿼리-문서 정렬 정밀도가 개체 레벨 표현에 민감하기 때문이다.
SEO · AEO · GEO 비교
| 항목 | SEO | AEO | GEO |
|---|---|---|---|
| 타깃 시스템 | Google/Bing 검색 결과 페이지 | Featured Snippet, 음성 검색 | ChatGPT Search, Perplexity, AI Overview |
| 핵심 메커니즘 | PageRank + 클릭 신호 | 텍스트 추출(extractive) | 임베딩 retrieval + LLM 생성 |
| 출력 형태 | URL 목록 + 제목/설명 | 원문 텍스트 블록 그대로 | 새로 생성된 문장 + 인용 URL |
| 핵심 구조 신호 | 백링크, Core Web Vitals | FAQPage·HowTo JSON-LD | 사실 밀도, 청크 자기완결성 |
| 크롤러 제어 대상 | Googlebot | Googlebot, Google-Extended | GPTBot, PerplexityBot, ClaudeBot, Bingbot |
| 측정 지표 | Search Console CTR/순위 | Featured Snippet 점유율(GSC 위치 0) | AI 응답 내 인용 빈도(수동 샘플링 또는 API) |
구현 예시 — robots.txt와 FAQPage JSON-LD
AEO와 GEO 모두에서 크롤 허용이 선행 조건이다. AEO는 Googlebot, GEO는 AI 전용 크롤러가 각각 다른 User-agent 문자열을 사용한다.
# AEO + GEO 크롤러 허용 설정 (robots.txt)
# AEO: Google Featured Snippet·AI Overview 크롤
User-agent: Googlebot
Allow: /
# GEO: Google AI Overview 전용 크롤 (Googlebot과 별도 에이전트)
User-agent: Google-Extended
Allow: /
# GEO: ChatGPT 학습·검색 크롤 (실시간 검색은 Bingbot 경유)
User-agent: GPTBot
Allow: /
# GEO: Perplexity 실시간 retrieval 크롤
User-agent: PerplexityBot
Allow: /
# GEO: Claude.ai 검색 기능 크롤
User-agent: ClaudeBot
Allow: /
# GEO: Microsoft Copilot·ChatGPT Search 실시간 인용 크롤
User-agent: Bingbot
Allow: /
Sitemap: https://example.com/sitemap.xml
AEO를 위한 FAQPage JSON-LD 구현 예시:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "AEO와 GEO의 차이는 무엇인가?",
"acceptedAnswer": {
"@type": "Answer",
"text": "AEO는 Google Featured Snippet처럼 기존 텍스트를 추출해 표시하는
시스템을 위한 최적화다. GEO는 Perplexity·ChatGPT Search처럼 LLM이 새 텍스트를
생성하면서 출처를 인용하는 RAG 파이프라인을 위한 최적화다. 크롤러, 인용 메커니즘,
최적화 신호가 모두 다르다."
}
}
]
}
</script>
주의: 위 JSON-LD는 Googlebot이 파싱하는 AEO 신호다. Perplexity·ChatGPT Search의 RAG 파이프라인은 HTML raw text를 청크 단위로 파싱하므로 <script> 내 JSON-LD 자체가 임베딩 계산에 포함되지 않는다. GEO에서 FAQPage 스키마의 기여는 콘텐츠 구조(단문 정의, 개체 명시)를 유도하는 간접 효과에 한정된다.
흔한 오해 — "GEO는 AEO의 새 이름이므로 기존 AEO 작업이 GEO를 커버한다"
이 오해는 두 시스템이 공유하는 표면적 목표에서 비롯된다.
오해가 생기는 이유: FAQPage 스키마를 추가하면 Google AI Overview 인용이 늘어나는 사례가 있다. AI Overview가 Googlebot 색인을 부분적으로 재사용하므로 AEO 신호가 간접 기여하는 것처럼 보인다.
실제 구조: Google AI Overview는 Googlebot과 별도로 Google-Extended 크롤러를 운영한다. Perplexity와 ChatGPT Search는 Googlebot과 완전히 독립된 크롤러(PerplexityBot, GPTBot)를 사용한다. FAQPage JSON-LD는 이들 시스템의 retrieval 단계에 직접 작용하지 않는다.
올바른 처리법: AEO 체크리스트(FAQPage 스키마, 단문 정의 단락, HowTo 마크업)와 GEO 체크리스트(사실 밀도, 청크 자기완결성, AI 크롤러 허용, llms.txt)를 분리해 관리한다. 두 체크리스트를 하나의 콘텐츠로 동시에 충족할 수 있지만, 충족 여부를 같은 지표로 측정할 수는 없다.
검증과 측정
- AEO 측정 — Google Search Console에서 검색 유형을 "웹"으로 설정하고 위치 필터를 "0"(Featured Snippet)으로 조회한다. GSC는 스니펫 점유율을 impression 단위로 집계하므로 주·월 단위 추이 비교가 가능하다.
- GEO 수동 측정 — 대상 키워드 20–30개를 Perplexity·ChatGPT Search·AI Overview에 직접 입력하고, 자사 도메인이 인용 출처(
citations[])에 포함되는지 기록한다. 주 1회 반복해 추이를 추적하는 방식이 현재 가장 신뢰도 높다. - GEO 자동화 대안 — Perplexity API(
llama-3.1-sonar-large-128k-online모델)를 사용해 쿼리 배치를 정기 실행하고 응답 내citations배열을 파싱한다. API 응답에 인용 URL 배열이 구조화되어 있어 자동화가 용이하다. Semrush·BrightEdge의 AI 인용 추적 기능은 2025년 기준 베타 수준이다.
FAQPage JSON-LD가 Perplexity 인용에 직접 효과가 있나?
직접 효과는 없다. Perplexity의 RAG 파이프라인은 HTML raw text를 청크 단위로 파싱해 임베딩 벡터로 변환한다. JSON-LD는 <script type="application/ld+json"> 블록 내 데이터로 일반적으로 청크 텍스트에서 제외된다. 단, FAQPage 스키마가 유도하는 콘텐츠 구조 — 짧은 직접 답변 단락, 개체명 명시 — 는 청크 자기완결성을 높여 retrieval 단계에서 간접 기여한다. AEO 신호와 GEO 신호를 동일 콘텐츠로 동시에 충족할 수 있지만, 작용하는 메커니즘은 다르다.
GPTBot을 robots.txt에서 차단했는데 ChatGPT에서 인용되는 이유는?
ChatGPT Search의 실시간 retrieval은 Bing 검색 API를 경유한다. GPTBot은 GPT-4o 등 모델의 사전 학습 데이터 수집 크롤러로, ChatGPT Search의 실시간 인용과 별개다. GPTBot을 차단해도 Bingbot이 해당 페이지를 색인하고 있다면 ChatGPT Search 인용 대상에서 제외되지 않는다. 반대로 실시간 인용을 막으려면 Bingbot 차단이 필요하지만, 이 경우 Bing 일반 검색 트래픽도 함께 제거된다. 학습 데이터 차단(GPTBot)과 실시간 검색 인용 차단(Bingbot)은 목적이 다른 별도 지시어로 제어해야 한다.
참고 자료
이 글의 권고는 아래 공식 문서·연구를 근거로 합니다.