"파이썬 독학 추천 강좌", "데이터 분석 자격증 온라인 비교" 같은 탐색형 쿼리를 Google AI Overviews나 Perplexity에 입력하면 특정 이러닝 플랫폼의 강좌 페이지가 답변 출처로 직접 인용된다. 이 인용 후보 선정은 기존 SEO의 PageRank·백링크 중심 모델과 다르게 작동한다. 핵심 축은 세 가지다: (1) 구조화 데이터로 파싱 가능한 과정 메타데이터, (2) 자연어 대화형 쿼리와 의미적으로 정렬되는 FAQ 패턴, (3) AI 크롤러에 대한 명시적 접근 허용. 이 구조를 구현하지 않으면 광고 예산 없이 AI 검색 답변에 강좌를 노출시킬 기회를 전부 놓친다.
AI 검색이 강좌 페이지를 인용 후보로 선택하는 조건
Google AIO와 Perplexity는 교육 관련 쿼리에 답변을 합성할 때 다음 신호를 우선 파싱한다.
- Course 스키마 파싱 가능 여부 — 크롤러가 JSON-LD
@type: "Course"를 감지하면 과정명·수강료·강사·이수 기준을 정형 필드로 추출한다. 마크업이 없으면 비정형 본문에서 추론하는데, 이 경우 인용 시 데이터 정확도가 낮아지거나 인용 자체가 누락된다. - FAQ·Q&A 블록의 존재 — "온라인 강좌 총 몇 시간?", "수료증 발급되나?" 같은 대화형 쿼리는 페이지 내 질문-답변 쌍을 직접 발췌 인용한다.
FAQPage스키마나 시맨틱 HTML로 구조화된 블록이 없으면 인용 확률이 실질적으로 낮다. - AI 크롤러 허용 상태 — GPTBot(ChatGPT Search), PerplexityBot, Google-Extended가
robots.txt에서 차단되어 있으면 인덱싱 자체가 불가능하다. 기존 SEO 목적으로 Googlebot만 허용하고 나머지를 기본 차단한 설정이 남아있는 사례가 많다. - 강사 E-E-A-T 신호 — 강사 이력(전 직장, 자격증, 저서)이
Person스키마에 구체적으로 포함되면 AI 모델의 신뢰도 판단에 양성 신호로 작용한다. "강사"·"전문가" 같은 추상 직함은 신호 강도가 낮다.
| 구분 | SEO (전통) | AEO (답변 엔진 최적화) | GEO (생성형 엔진 최적화) |
|---|---|---|---|
| 주요 랭킹 신호 | 백링크·PageRank·Core Web Vitals | FAQ 스키마·명확한 정의문 | Course JSON-LD·E-E-A-T·인용 가능성 |
| 교육 콘텐츠 적용 포인트 | 강좌 랜딩 페이지 기술 최적화 | 커리큘럼 Q&A·수강 대상 명시 | Course + Person + FAQPage 스키마 결합 |
| AI 크롤러 대응 | 없음 (Googlebot 중심) | 부분 (Featured Snippet 대응) | GPTBot·PerplexityBot·Google-Extended 허용 |
| 측정 지표 | SERP 순위·클릭률(CTR) | Featured Snippet 점유율 | AI 답변 인용 횟수·출처 등장 빈도 |
Course JSON-LD 구현
강좌 페이지마다 아래 스키마를 <head> 내 <script type="application/ld+json">으로 삽입한다. 핵심 필드를 누락하면 Google Rich Results Test에서 경고가 발생하고, AI 인용 시 수강료·수강 시간 같은 수치가 부정확하게 노출된다.
{
"@context": "https://schema.org",
"@type": "Course",
"name": "파이썬 데이터 분석 완성 과정",
"description": "pandas, NumPy, matplotlib을 활용한 실전 데이터 분석. 총 42강 24시간. 수료 후 포트폴리오 2종 제공.",
"url": "https://example-elearning.kr/courses/python-data-analysis",
"provider": {
"@type": "Organization",
"name": "ExampleLearn",
"sameAs": "https://example-elearning.kr"
},
"instructor": {
"@type": "Person",
"name": "이수진",
"jobTitle": "전 카카오 데이터 엔지니어",
"sameAs": "https://example-elearning.kr/instructors/soojin-lee"
},
"teaches": ["pandas", "NumPy", "matplotlib", "데이터 시각화", "EDA"],
"coursePrerequisites": "Python 기초 문법 이해",
"educationalLevel": "중급",
"inLanguage": "ko",
"offers": {
"@type": "Offer",
"price": "89000",
"priceCurrency": "KRW",
"availability": "https://schema.org/InStock",
"validFrom": "2026-01-01"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "312",
"bestRating": "5"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "online",
"duration": "PT24H",
"startDate": "2026-01-01",
"endDate": "2027-12-31"
}
}
teaches배열 — 스킬 키워드를 배열로 나열하면 AI가 "pandas 배우는 강좌 추천" 쿼리에서 이 필드를 직접 매칭한다. 본문 문단에만 묻어두면 파싱 누락 가능성이 있다.instructor.jobTitle— "전 카카오 데이터 엔지니어"처럼 구체적 이력이 포함되면 E-E-A-T 신호로 작용한다. "강사"·"전문가" 같은 추상 직함은 신호 강도가 낮다.hasCourseInstance.duration— ISO 8601 형식(PT24H). "몇 시간짜리 파이썬 강좌가 있어?" 쿼리에 직접 인용되는 필드이므로 반드시 정확하게 기입한다.aggregateRating.reviewCount— 실제 수강 리뷰 수를 기입한다. 허위 수치는 Google의 리뷰 스팸 정책 위반이며 페널티 대상이다.
FAQ 마크업과 대화형 쿼리 최적화
AI 검색의 교육 관련 쿼리 대다수는 비교·탐색형이다("~가 뭐야", "~하려면 어떤 강좌?", "~와 ~중 뭐가 나아?"). 강좌 페이지에 FAQPage 스키마를 추가하면 이런 대화형 쿼리에서 Q&A 블록이 답변에 직접 발췌된다.
- 실제 수강 전 고민을 Q&A로 작성한다 — 수강 대상, 선수 지식, 환불 정책, 수료증 여부를 강좌 페이지 하단에 배치한다. AI가 "수료증 주는 파이썬 강좌" 같은 긴꼬리 쿼리를 처리할 때 이 블록을 발췌 인용하기 때문이다.
- 질문은 자연어 문장형으로 작성한다 — "수료증이 발급되나요?" 형태로 작성한다. 키워드 나열형("수료증 발급")은 대화형 쿼리와 의미 유사도가 낮아 인용 확률이 떨어진다.
FAQPage스키마와 실제 HTML을 일치시킨다 — 구조화 데이터와 본문이 불일치하면 Google이 스팸으로 처리할 수 있다. JSON-LD 내 질문·답변 텍스트와 페이지 본문이 동일해야 한다.
흔한 오해: 상세한 강좌 설명이 AI 인용을 보장한다
비구조화 본문이 아무리 길고 상세해도 AI 크롤러가 관련 쿼리에 정확히 매핑하기 어렵다. 수강 시간, 수강료, 수강 대상 레벨이 본문 문단 중간에 묻혀 있으면 파싱 오류가 발생한다. 올바른 처리는 핵심 수치를 JSON-LD 필드에 명시적으로 선언하고, 본문은 FAQ와 커리큘럼 상세 설명에 집중하는 방식이다. 배포 전에 반드시 Google Rich Results Test로 스키마 파싱 성공 여부를 검증한다.
검증과 측정
구현 후 AI 인용 여부를 측정하는 실무적 방법:
- robots.txt AI 크롤러 허용 확인 — 아래 세 User-agent가 모두 Disallow 없이 허용되어 있어야 한다:
GPTBot(ChatGPT Search),PerplexityBot,Google-Extended. 기존 보안 정책으로 알 수 없는 봇을 일괄 차단한 설정이 있으면 이 항목을 먼저 해제한다. - Google Search Console → 검색 결과 유형 — "AI 개요(AI Overviews)"가 발생한 쿼리와 인상(impression) 수를 확인한다. 인상이 0이면 Google-Extended 차단 여부를 먼저 점검한다.
- Perplexity·ChatGPT 직접 쿼리 샘플링 — 핵심 강좌 쿼리 10~20개를 주 1회 직접 입력하고 인용 출처 URL을 기록한다. 자동화가 필요하면 Perplexity API를 사용해 응답 내
citations배열에서 자사 도메인 등장 여부를 파싱한다. - llms.txt 배치 (선택, 추정) — 도메인 루트에
/llms.txt파일을 두어 AI 에이전트가 사이트 구조와 인용 가능한 콘텐츠 범위를 파악하도록 안내할 수 있다. 현재 주요 AI 시스템이 이 파일을 얼마나 적극적으로 참조하는지는 사례에 따라 다르므로 효과를 단정할 수 없다.
Course JSON-LD의 aggregateRating을 추가하면 실제로 AI 인용 확률이 높아지나?
직접적인 인과 관계를 수치로 확인한 공개 연구는 없으나, Google의 공식 문서는 aggregateRating이 있는 강좌 페이지에 별점 Rich Snippet이 생성된다고 명시한다. AI Overviews는 Rich Snippet 생성 대상 페이지를 우선 파싱하는 경향이 있으므로 간접적으로 인용 후보 편입에 유리하게 작용한다고 볼 수 있다. 단, reviewCount에 허위 수치를 넣으면 Google 리뷰 스팸 정책 위반으로 Rich Snippet 자격이 박탈된다.
강좌가 수백 개인 대형 플랫폼에서 모든 강좌 페이지에 Course JSON-LD를 삽입하려면 어떻게 해야 하나?
강좌 상세 페이지 렌더링 템플릿(Next.js라면 app/courses/[slug]/page.tsx, Django라면 강좌 detail view)에서 DB 필드를 JSON-LD 객체로 매핑하는 함수를 한 곳에 두고 <script type="application/ld+json">으로 주입한다. 핵심은 teaches·instructor.jobTitle·duration 같은 AI 인용에 중요한 필드가 DB에 실제로 저장되어 있는지 먼저 확인하는 것이다. 해당 컬럼이 없으면 템플릿 수정 전에 DB 스키마 확장과 어드민 입력 UI를 선행해야 한다. 배포 후 대표 강좌 5~10개를 Google Rich Results Test와 Search Console 인덱싱 도구로 샘플 검증한다.
참고 자료
이 글의 권고는 아래 공식 문서·연구를 근거로 합니다.