ChatGPT는 실제로 어떻게 출처를 선택하나 — 네트워크 트래픽 분석을 통한 발견
핵심
저자가 ChatGPT의 브라우저 네트워크 트래픽을 읽어 내부 라벨(result_source, turn_use_case 등)을 추출해, 플랫폼이 실제로 어떤 출처를 어떻게 사용하는지 기록했다. 광범위한 프롬프트 실험이 아닌 내부 신호 분석이므로 구조적 발견은 신뢰할 수 있지만, 수치와 백분율은 소수의 SaaS·기술 쿼리에서 나온 방향성 지표일 뿐이다.
분석 방법론: 종래 연구와의 차이
기존 대규모 가시성 연구
- 수천 개의 프롬프트를 발화한 뒤 최종 답변에서 브랜드 언급 추적 → 시장점유율 리포트 생성
- 큰 표본, 하지만 블랙박스: 완성된 답변만 보이므로 내부 메커니즘을 추론해야 함
이 연구의 접근
- 엔진이 브라우저로 보낸 JSON 네트워크 트래픽을 직접 읽음
- 엔진의 내부 라벨 추출: result_source, turn_use_case(쿼리 분류), 벤더명, 엔진이 작성한 검색 쿼리, 실행 모델
- 모집단에서 빈도를 측정하는 것이 아니라, 머신이 어떤 메커니즘을 가졌는지, 그것을 뭐라고 부르는지 문서화
- 신뢰도 구분: 구조적 사실(high confidence) vs. 빈도 관찰(방향성만 신뢰)
기술 상세: 패킷 캡처의 한계
암호화로 인한 제약
- TLS 암호화로 인해 실제 메시지 페이로드는 읽을 수 없음
- 메타데이터만 노출: 대상 호스트명, IP, ChatGPT 앱이 QUIC(HTTP/3) 사용
- Wireshark는 암호화되지 않은 서버명(ClientHello)만 읽을 수 있음
실제 수집 방법
- DevTools의 Network 탭 활용 (HTTP 검사, 패킷 스니핑 아님)
- 복호화 후 브라우저 레벨에서 요청/응답 본문이 JSON으로 나타남
- 반자동화 시도 실패: Cloudflare가 자동 브라우저 요청을 차단; 실제 세션(Pro 계정)에서 수집
모든 출처를 라벨링하는 필드: result_source
4가지 값
- serp (SERP): 공개 웹 기준선, 주로 뉴스(Yahoo, StreetInsider)
- labrador: 기존 출판사 허용 목록. Reuters, The Guardian, WSJ, FT, Wikipedia, arXiv 등
- 라이선스 계층으로 보임; 다수가 OpenAI와 콘텐츠 계약 보유
- 스니펫 길이 ~1,080자 (거의 전체 기사 수준)
- bright: Bright Data 상용 웹 스크래퍼. 쇼핑·금융·날씨·로컬 중심
- oxylabs: Oxylabs 경쟁사 스크래퍼. 지역·로컬 언론, 일부 공개 웹
출처 분포 패턴 (SaaS·기술 쿼리 기준)
- bright: 상업, 쇼핑, 금융, 날씨에 주로 사용 (대량 취득)
- oxylabs: 지역·로컬 지향 (예: Khaleej Times, Gulf News)
- labrador: 뉴스·참고자료 (Reuters, WSJ, Wikipedia, TechRadar)
- serp: 주로 뉴스
사례: 날씨 쿼리에서 Met Office, AccuWeather, timeanddate.com은 bright로, khaleejtimes.com, gulfnews.com, whatson.ae는 oxylabs로 가져옴
AI SEO/GEO 실무 팁
- 대부분 스크래핑 계층에서 경쟁 → 스크래핑 가능하도록 설계
- 사실과 수치를 평문 HTML에 배치 (스크립트, PDF, 이미지 뒤에 숨기지 말 것)
- 라이선스 계층은 거의 폐쇄적 → 제3자 보도, PR, 브랜드 언급, 링크, Reddit로 스크래퍼가 도달하는 페이지에 올라가기
웹 검색을 건너뛰는 쿼리들
turn_use_case 분류
ChatGPT는 질문을 받으면 먼저 turn_use_case라는 필드에 분류한다 (6가지):
- instant (즉시): 기본 검색
- shopping (쇼핑): 상품 비교
- text (텍스트): 검색 없음, 훈련 말뭉치에서만 답변
- local (로컬): 지역 검색
- thinking (사고): 추론 모델 실행
- image (이미지): 이미지 생성
검색이 일어나지 않는 경우: text
- "타이어 교체 방법", "두 정렬 리스트를 병합하는 Python 함수 작성", "이를 4개 언어로 번역" → 훈련 말뭉치에서 즉시 답변, 네트워크 탭 공백
- 주의: "제2형 당뇨병 최신 치료 지침" 같은 최신, 고위험 질문도 text로 분류되어 검색 없음 (EEAT 부재)
- 의도적 현재성 질문 10개 중 3개가 검색 없이 처리됨
단어 선택이 분류를 결정
- "best coffee near me" → local, "best 4K TVs to buy" → shopping, "best 4K TVs with reviews" → 일반 검색
- 수학 문제 → thinking으로 점프, "Tesla stock price this week" → instant 유지
AI SEO/GEO 실무 팁
- 페이지 작성 전에 질문이 실제로 검색하는지 확인
- "how-to"나 정의성 질문 → 훈련 데이터에서 답변 (어떤 페이지도 진입 불가)
- 그런 쿼리에 언급되려면 브랜드 권위 구축 후 향후 훈련 데이터 포함 기다림 (Common Crawl 같은 크롤러가 사이트 보게 하기)
한 질문이 수십 개 쿼리로 확장되는 방식: 팬아웃
모델 내부 검색 노출
- ChatGPT는 실행하는 검색 목록을 API 대화 역사에 노출 시킴
- 빠른 모델: 최소한 (재표현 1회, 속도 최적화)
- thinking 모델: 1개 질문당 약 15~40개 서브쿼리 (질문 복잡도에 따라 변동)
사례: 제품 비교 쿼리
"Profound AI search visibility pricing AI engines tracked 2026"
"AthenaHQ pricing AI search visibility tool"
"site:peec.ai/pricing Peec AI Starter Pro Advanced 50 prompts 150 prompts"
"Peec AI pricing $95 $245 $495 official" (추측값 후 확인 검색)
"Scrunch AI pricing" (프롬프트에 없음, 중간 조사에서 발견)
...약 40개 쿼리
주목할 특징
- site: 프로브 실행: 벤더 가격 페이지 직접 겨냥
- 가격 추측 후 검색: 자신이 추측한 수치 검색으로 확인
- 범위 확대: 명시되지 않은 도구 발견, 연쇄 탐사
- 페이지 읽기 정밀함: 검색만 아니라 find for "$", "€", "99", "Agency" 실행, 브라우저 도구의 open·click 명령으로 서버 측 결과 해석
사용자 사이트의 경우: "keyword insights pricing" 쿼리 → site:keywordinsights.ai/pricing 프로브 실행 → "Starter $58, Pro $145, Advanced $299" 추측 → 페이지 열어서 HTML 통화 기호 확인
AI SEO/GEO 실무 팁
- 핵심 수치·데이터를 평문 HTML 배치 (이미지 절대 금지) — 모델이 "$"·"€" grep 불가능하게 함
- site:yourdomain.com/pricing 프로브 생존: 정제된 쿼리(사람이 입력한 엉망 문구 아님)에 맞게 작성
- 자바스크립트 기반 토글·동적 로드 피하기
가져온 것, 인용된 것, 언급된 것의 차이
3가지 별개 결과
- Fetched (가져옴): 모델이 페이지를 컨텍스트로 끌어들임 (result_source 객체) → 독자 미인식
- Cited (인용됨): 페이지를 특정 문장의 출처로 붙임 (클릭 가능한 각주) → 독자 인식
- Mentioned (언급됨): 브랜드명이 답변에 나타남 (사이트로 연결되는 칩, 보통) → 주장의 출처 아님
실제 격차: Reddit vs YouTube
저자의 표본에서:
- 가져온 빈도: Reddit 278회, YouTube 201회
- 인용 빈도: Reddit 11회, YouTube 0회
기계적 이유: 인용은 모델이 가져온 텍스트에 바인딩되어야 함
- Reddit: 페이지 전체가 텍스트 → 인용 가능
- YouTube: 검색 시 메타데이터만 취득, 실제 비디오 트랜스크립트 없음 → 인용 불가능
광범위 데이터: Ahrefs (140만 ChatGPT 프롬프트)는 Reddit 1.93% vs YouTube 0.51%, Profound도 동일 격차 확인
인용 상위 도메인 (표본: 상업·추천 쿼리)
- Reddit: 최상위, 근소한 차이
- 이후: 리뷰 허브(rtings, TechRadar), 벤더 페이지에 광범위 분산
벤더 페이지도 인용됨: 자체 사실(가격·스펙) 기준 인용 (Zoho, Semrush, VPN)
- 단, 어느 것이 최고인가는 제3자 출처에서 인용
기계적 메커니즘
- 인용은 특정 문장에 바인딩: 주제 관련성만으로 부족, 정확한 주장 최고 지지자여야 함
- 도메인별 중복 제거: 사이트의 20개 얇은 페이지 → 1개로 축약
- 결론: 주장당 1개 강한 페이지 > 약한 페이지 더미
AI SEO/GEO 실무 팁
- 자기 인용 불가: 자신에 대한 주장은 다른 곳의 출처 사용 → 리뷰 사이트·Reddit에서 제3자 보도 확보
- 텍스트 > 동영상: 평문이 인용됨, 비디오 메타데이터는 미인식
- 도메인당 1개 강한 페이지: 주장 하나마다 강력한 단일 자산, 수천 개의 저품질·얇은 페이지로 팬아웃 쿼리 대응하지 말 것
모델이 자신의 전략을 설명함: 사고 연쇄(Chain of Thought)
숨겨진 랭킹 점수는 없음
- 도메인 권위 수치, 신뢰 가중치, 공식 수식 → 브라우저에 도달하지 않음 (OpenAI 서버에만 남음)
- 주의: "ChatGPT의 랭킹 요소 판매" = 사기
사고 모델의 추론 분석
생성된 대화에 저장된 chain of thought를 읽으면 출처 선택 이유가 명문으로 나타남.
사례 1: Ahrefs 가격
- 공식 페이지를 먼저 읽음, "Lite $129, Standard $249, Advanced $449 표시" 확인
- "가격 페이지가 더 현재 정보인 것 같으니 인용해야 함" → 신뢰하고 최신 출처 원함
사례 2: Profound, Peec 가격
- "가격이 검색 결과에 직접 나타나지 않음, 아마 자바스크립트로 로드됨" (Profound)
- 동일하게 Peec에서 "가격이 직접 나타나지 않음, 자바스크립트로 숨겨짐"
- 포기 후 대체: "공식 페이지가 파싱 어렵고 가격 표시 안 되니 제3자 출처 인용, G2에서 인용하는 것 적절"
핵심: 모델이 원한 출처(Profound, Peec) = 페이지 파싱 실패 → G2 인용 = 자신의 사실이 타사 페이지에
AI SEO/GEO 실무 팁
- 평문 HTML에 자신의 사실 소유: 가격·스펙 수치는 크롤 가능한 텍스트 배치
- 자바스크립트·이미지 금지: 모델이 페이지를 직접 읽고, 파싱 실패 시 포기
- 자바스크립트 가격표 = 저랭킹뿐 아니라 수치를 G2로 넘기는 것
- 의견은 별도로 확보: 리뷰, Reddit, 정직한 비교 콘텐츠로 추천 인용 출처 확보
- 청결한 가격 페이지(제3자 보도 없음): 자신의 사실은 읽히고, 추천은 타사 페이지로 갈림
관찰할 수 없었던 것들
보이지 않는 것
- 구체적 랭킹 로직: 한 출처가 다른 것보다 나은 이유 (모델 자체 설명 제외) = 서버 측 유지
- 개인화 존재하고 선별적: 저자의 업무와 겹친 쿼리 → 과거 대화 포함, 출처 = personal_sources: ["convo_search", "gmail", "files"]
- 사용자 개인 데이터 기반 일부 답변 → 최적화 불가능 영역
- 이것이 2명의 답변이 다른 이유, 가시성 점수 진동 원인
정량 한계
- 로컬 캡: config 값 local_results_limit = 2
- 근처 최고 커피 → 2곳만 반환, 상위 10개 아님
- 로컬 SEO: 상위 2 또는 없음
- 쇼핑 불확실: 저자의 쇼핑 분석 = 1개 쇼핑 쿼리 기반, Mark의 1개 쿼리와 모순
- 쇼핑 믹스 미정, 대규모 배치 필요
자체 실행: 도구와 방법
수동 분석
-
DevTools로 result_source 확인
- ChatGPT 열기 → Cmd+Option+I (DevTools) → Network 탭 → Preserve log 체크 → 쿼리 실행 → Cmd+Option+F → "result_source" 검색
- 각 링크 뒤 파이프라인 노출
-
Console에서 JSON 파싱 (웹 검색 대화 필요)
const t = (await (await fetch('/api/auth/session')).json()).accessToken; const c = await (await fetch('/backend-api/conversation/' + location.pathname.split('/c/')[1], {headers: {Authorization: 'Bearer ' + t}})).json(); const rows = []; JSON.stringify(c, (k, v) => { if (v && v.result_source) { const d = (v.attribution || v.url || '?').toString(); rows.push({source: d.replace('https://', '').replace('www.', '').split('/')[0], pipeline: v.result_source}); } return v; }); console.table(rows);- 자신의 세션만 읽음, 기계 밖으로 나가지 않음
- 검색·인용·추론 데이터도 루프 변경으로 추출 가능
자동 도구: Chrome 확장
Olivier de Segonzac이 무료 Chrome 확장 개발 (이 연구 기반 확장):
- turn_use_case 버킷: 각 턴의 의도 라벨 (shopping, local, text 진행 전 감지)
- 참고자료 타입 믹스: 인용의 상품 vs 검색결과·뉴스·이미지 비율
- result_source 파이프라인: 인용된 결과마다 스크래퍼 (Bright Data, Oxylabs, Labrador, SERP) 차트
- 자신의 세션에서 로컬 실행, Excel 직접 내보내기
- Chrome Web Store에서 다운로드, Olivier 업데이트 설명 참고
결론: 통상적 조언은 타당한가
대체로 맞음
- Reddit: 인용 획득, 인용 상위 도메인 상단
- listicle·리뷰 사이트: 나머지 대부분
- 좋은 콘텐츠: 여전히 중요, 하지만 모델이 실제로 읽을 수 있는 절반만
핵심 교훈: ChatGPT는 검색엔진이 아니다 → 검색엔진으로 최적화하지 말 것
- 자신의 페이지: 사실 읽기 (파싱 가능하면)
- 타인 페이지: 의견 읽기
- 쿼리가 검색할 가치 있을 때만
후속 연구 계획
- 이 분석 중 발견한 추가 요소: 봇 차단 벽, 숨겨진 쇼핑 엔진, 계정에서 실행 중인 573개 라이브 실험 (별도 발행 예정)
- Perplexity, Gemini 등 유사 분석 진행 예정 (뉴스레터 구독 권장)