Google AI Overviews·Perplexity·ChatGPT Search는 텍스트 외에 이미지와 동영상을 인용 후보로 처리하기 시작했다. 이 파이프라인은 전통적 이미지 SEO(파일명·alt 텍스트)와 다르게 작동한다. AI 답변엔진은 비전 모델로 이미지 내용을 직접 파싱하되, 최종 인용 결정에는 구조화 데이터(JSON-LD ImageObject/VideoObject)·alt 텍스트·트랜스크립트가 기계가 신뢰할 수 있는 시그널로 우선된다. 파일 최적화(WebP·AVIF)는 크롤 효율을 높이고, robots.txt 설정 미비는 AI 봇 자체를 차단한다. 각 레이어별 작동 원리와 구현 방법을 정리한다.
AI 크롤러의 이미지·동영상 처리 파이프라인
전통적 Googlebot-Image는 이미지 파일을 바이너리로 가져와 EXIF·파일명·주변 텍스트를 파싱한다. 반면 Google의 AI 인덱싱 파이프라인(Gemini 기반 비전 모델)은 이미지 내 텍스트·객체·장면을 추론해 임베딩을 생성하고, 이를 페이지 컨텍스트 임베딩과 함께 RAG 후보 풀에 적재한다.
- 이미지 임베딩 생성: 비전 모델이 이미지를 고차원 벡터로 변환 — 왜: 이미지 내 시각 정보가 텍스트 쿼리와 의미 유사도 비교에 사용됨; 어떻게: 렌더링 후 크롤러가
<img src>를 별도 HTTP 요청으로 수집하므로 CDN이 robots.txt로 차단되지 않았는지 먼저 확인. - 텍스트 시그널 우선 병합: alt 텍스트·ImageObject schema·caption이 이미지 임베딩과 함께 인용 메타데이터로 저장 — 왜: 비전 추론은 확률적이므로 명확한 텍스트 시그널이 인용 신뢰도를 높임; 어떻게: alt 속성이 비어 있으면 비전 추론만으로 처리되어 인용 정확도가 저하됨.
- 동영상 트랜스크립트 청크화: VideoObject의
transcript필드 또는 YouTube 자막이 텍스트로 추출되어 RAG 청크로 분할 — 왜: 동영상 자체는 AI가 실시간으로 재생하지 않으므로 텍스트 대리 표현이 필수; 어떻게: 자동 자막보다 수동 트랜스크립트가 오류율 낮아 인용 정확도 상승.
이미지 구조화 데이터 — ImageObject JSON-LD
Google AI Overviews가 이미지를 인용할 때, 해당 이미지의 주제·저작권·사용 맥락을 기계가 명확히 파악할 수 있어야 한다. ImageObject 스키마는 이 정보를 구조화한다.
핵심 필드
- contentUrl: 이미지 파일의 실제 URL — 왜: 크롤러가 파일을 직접 수집하는 주소; 어떻게: CDN 도메인이 별도 robots.txt에서 차단되지 않았는지 확인.
- description: 이미지 내용의 서술적 설명 (alt 텍스트보다 길게 가능) — 왜: RAG 청크로 직접 인용될 수 있는 텍스트; 어떻게: 50~150자 범위에서 이미지의 핵심 정보를 서술.
- license: 저작권 URL — 왜: AI 인용 시 라이선스 준수 표명; 어떻게: CC BY 4.0이면
"license": "https://creativecommons.org/licenses/by/4.0/"명시. - inLanguage: 이미지 내 텍스트 언어 — 왜: 다국어 AI 답변에서 적절한 언어 버전 선택에 사용; 어떻게:
"inLanguage": "ko"로 명시.
{
"@context": "https://schema.org",
"@type": "ImageObject",
"contentUrl": "https://example.com/images/aeo-funnel.webp",
"name": "AEO 퍼널 다이어그램",
"description": "검색 쿼리부터 AI 답변 인용까지 5단계 퍼널을 시각화한 다이어그램. 각 단계에서의 이탈률과 구조화 데이터의 역할을 표시.",
"thumbnailUrl": "https://example.com/images/aeo-funnel-thumb.webp",
"license": "https://creativecommons.org/licenses/by/4.0/",
"creator": {
"@type": "Organization",
"name": "Citeon"
},
"inLanguage": "ko",
"encodingFormat": "image/webp",
"width": 1200,
"height": 630
}
동영상 최적화 — VideoObject 스키마와 트랜스크립트
자체 호스팅 동영상은 YouTube처럼 별도 색인 파이프라인이 없으므로, VideoObject 스키마와 동영상 sitemap을 병행해야 AI 크롤러가 콘텐츠를 파악할 수 있다.
- transcript 필드: 전체 스크립트 텍스트를 문자열로 직접 포함 — 왜: 동영상 파일 자체를 AI가 재생하지 않으므로 텍스트 대리 표현이 유일한 RAG 소스; 어떻게: 3,000자를 초과하면 별도 페이지(
/transcripts/video-slug)에 게시 후hasPart로 참조. - duration (ISO 8601):
"duration": "PT12M30S"형식 — 왜: AI Overviews가 "짧은 설명 영상" vs "심화 튜토리얼" 구분에 사용; 어떻게: ffprobe로 정확한 초 단위 측정 후 PT 포맷 변환. - hasPart + Clip: 챕터 단위 타임스탬프를
Clip타입으로 구조화 — 왜: AI가 관련 챕터만 발췌 인용할 수 있게 함; 어떻게: YouTube 챕터 설명과 동기화하면 rich result에도 동시 반영. - embedUrl vs contentUrl 구분:
embedUrl은 iframe 삽입 URL,contentUrl은 직접 재생 URL — 왜: Google이 두 필드를 구별해 rich result 표시 방식을 결정; 어떻게: 자체 호스팅이면 두 필드 모두 채우고, YouTube 임베드만 있으면 embedUrl 단독 사용.
robots.txt와 크롤 접근성 설정
# 이미지/동영상 AI 크롤 허용 설정 예시
User-agent: Googlebot-Image
Allow: /images/
Allow: /videos/
Disallow: /admin/
# ChatGPT Search는 Bingbot 경로 사용 (GPTBot과 별개)
User-agent: Bingbot
Allow: /images/
Allow: /videos/
# Perplexity
User-agent: PerplexityBot
Allow: /images/
Allow: /videos/
# OpenAI LLM 학습 크롤 (검색 인용과 무관 — 선택적 차단 가능)
User-agent: GPTBot
Disallow: /
Sitemap: https://example.com/video-sitemap.xml
신호 유형별 최적화 우선순위 비교
| 신호 유형 | 전통 이미지 SEO | AEO (답변엔진) | GEO (생성형엔진) |
|---|---|---|---|
| alt 텍스트 | 파일명 보완, 접근성 | 인용 메타 1순위 시그널 | 생성 응답 내 캡션 소스 |
| ImageObject JSON-LD | rich result 트리거 | 인용 신뢰도 향상 | multimodal RAG 메타 |
| VideoObject + transcript | 동영상 rich result | 질의응답 직접 인용 소스 | RAG 청크 주요 소스 |
| 파일 형식 (WebP/AVIF) | Core Web Vitals 지표 | 크롤 성공률 간접 영향 | 동일 |
| robots.txt AI 봇 허용 | 해당 없음 | 인덱싱 전제 조건 | 인덱싱 전제 조건 |
흔한 함정 — GPTBot 차단이 ChatGPT Search 인용을 막는다는 오해
많은 실무자가 User-agent: GPTBot / Disallow: /를 설정하면 ChatGPT Search에서 자신의 이미지·동영상이 인용되지 않는다고 생각한다. 이는 잘못된 이해다. ChatGPT Search는 Bing 검색 색인을 기반으로 하며, Bingbot이 해당 크롤러다. GPTBot은 OpenAI의 LLM 학습 전용 크롤러로, ChatGPT Search 인용 경로와 무관하다. GPTBot을 차단해도 Bingbot이 허용되면 ChatGPT Search는 계속 해당 콘텐츠를 인용한다. 반대로, 이미지가 ChatGPT Search에 노출되지 않게 하려면 User-agent: Bingbot에 Disallow를 적용해야 한다. 두 봇의 역할을 구분해 robots.txt를 작성해야 의도한 결과를 얻을 수 있다.
VideoObject의 transcript 필드가 너무 길면 구조화 데이터 검사를 통과하지 못하나요?
Google 리치 결과 테스트는 transcript 문자열 길이 제한을 명시하지 않는다. 다만 수만 자를 인라인으로 삽입하면 페이지 파싱 비용이 증가하고, RAG 청크 분할 기준이 흐려질 수 있다. 실무 권장: 영상 전체 트랜스크립트가 3,000자를 초과하면 별도 페이지(예: /transcripts/video-slug)에 게시 후 VideoObject의 hasPart로 참조하는 구조가 청크 밀도 관리에 유리하다.
WebP 이미지를 Googlebot-Image가 정상적으로 크롤하나요?
Googlebot-Image는 WebP와 AVIF를 완전히 지원한다. Accept 헤더에 image/webp,image/avif를 포함해 요청한다. 일부 구버전 서드파티 AI 크롤러는 WebP Accept 헤더를 포함하지 않을 수 있다. CDN에서 Accept 헤더 기반 콘텐츠 협상(content negotiation)을 구현하면 크롤러 호환성과 사용자 최적화를 동시에 달성할 수 있다. Cloudflare의 경우 Polish 기능이 이를 자동 처리하고, Nginx에서는 $http_accept 변수로 포맷별 분기 서빙이 가능하다.
참고 자료
이 글의 권고는 아래 공식 문서·연구를 근거로 합니다.