- Question Bank 120문항(사전판정 ◯5/△35/✕80) + OpenAI·Perplexity API 실측: 브랜드 언급 97~100%, 논브랜드 GPT 11%/PPLX 3%, 시술 정보 52문항 0건 - 러너 run_question_bank_openai.py(재개 가능)·merge_qb_results.py·export_qb_excel.py, 결과 MD 3종 + xlsx 5시트 + raw JSONL - AEO_GEO_RUBRIC.md v1.1 과제 5건: 서브도메인 실측, D3 표면 범위 확대, 엔진별 판정, 브랜드/논브랜드 축, 점수 표기 정합성 - 점수 교정: scoreDiscovery 계산값 50/C(44.1/89, 검증 32/36)로 진단 리포트 덱·POC 제안서 일괄 교정(구판 48, 커밋 메시지 49는 착오) - 진단 리포트 덱 13→14장: Validation 슬라이드 추가, A5·B4·C6 재채점 반영, 연락처 o2oteam@o2o.kr 교정 - POC 제안서 10→14장: 부록 4장(QB 설계·실측 KPI·브랜드vs논브랜드·블로그 인용 증거), 랜딩 스크린샷 50점 화면 재캡처 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155BJMHJyhqqAPGYjGKYhPS
8.6 KiB
AI Discovery · Build 2 Handover (자동 채점 파이프라인)
2026-08-31 랜딩(/discovery) 프로덕션 배포까지 끝난 상태에서, 다음 세션이 이어받을 빌드 범위를 담는다.
직전 인수인계는 docs/AI_DISCOVERY_FRONTEND_HANDOVER.md(랜딩 구현, 완료됨).
0. 다음 세션 실행 프롬프트 (복붙용)
docs/AI_DISCOVERY_BUILD2_HANDOVER.md 를 읽고 AI Discovery 자동 채점기를 구현해줘.
- P0: scripts/audit_aeo_geo.py — 병원 URL 입력 → 기준표 auto 22항목(55점) 자동 채점
→ src/data/discovery_<id>.ts 초안 생성 (semi/manual은 'unverified' + 수집된 증거 메모)
- 참조 구현: ~/Claude/Agentic Marketing/ADO2/009. AEO-GEO/06_skill-snapshot/scripts/crawler_audit.py
- 검증: 뷰성형외과를 재채점해 auto 항목 판정이 discovery_viewclinic.ts 기존 실측과 일치해야 한다
- 완료 기준: 새 업체 URL 1개를 30분 안에 /discovery/:id 리포트로 올릴 수 있다
끝나면 git push + vercel --prod 까지.
1. 현재 상태 (2026-08-31)
| 항목 | 상태 |
|---|---|
랜딩 /discovery |
프로덕션 배포 완료 (https://infinith-demo.vercel.app/discovery) |
리포트 /discovery/:id |
viewclinic 48점/C, taeha 68점/B |
| 데이터 파생 | 랜딩·리포트의 모든 수치는 scoreDiscovery 계산값. nextGradeTarget·scorePctColor 헬퍼 포함 |
| lint | npm run lint(tsc) 0 에러. 단, 실제 검사는 AEO-GEO-Audit 워크트리에서만 가능 (main 워크트리는 node_modules에 tsc 없음) |
| 영업 자료 | POC 제안서 docs/reports/Viewclinic_POC_Proposal.pptx/.pdf (10장) |
2. 확정 결정 (2026-08-31 haewon)
- 태하 케이스는 랜딩 샘플로 노출하지 않는다. 랜딩 샘플은 뷰성형외과 단일 유지.
/discovery/taeha라우트와 데이터는 삭제하지 않고 유지한다 (영업 시 직접 링크로만 사용). - 리포트 PDF는 항상 PPTX 덱을 만든 뒤 soffice 변환으로 뽑는다 (HTML 인쇄 방식 금지, 기존 결정 유지).
3. 빌드 우선순위
P0 · 자동 채점기 scripts/audit_aeo_geo.py
지금 병목은 진단 1건당 수작업 실측이다. 기준표 36항목의 자동화 가능성은 이미 rubric에 태깅되어 있다:
| method | 항목 수 | 배점 합 | 처리 방식 |
|---|---|---|---|
| auto | 22 | 55점 | 스크립트가 판정까지 |
| semi | 5 | 17점 | 스크립트가 증거 수집, 판정은 사람 (C1 정의문·C4 수치·C7 E-E-A-T·D3 오픈웹·D5 플레이스) |
| manual | 9 | 28점 | 'unverified' 유지 (A6·C8·D1·D2·D4·E1~E4) |
- 입력: 메인 URL + 대표 시술/서비스 페이지 URL 1개 (뷰성형외과 실측과 동일 조건: JS 미실행 HTML 기준)
- 항목별 체크 로직은
src/data/aeoGeoRubric.ts의howToCheck필드에 이미 구현 스펙으로 적혀 있다 - 출력:
src/data/discovery_<id>.ts초안.evidence는 실측 문자열로 채운다 (판정 근거 없는 항목을 0점 처리하지 말 것, 분모 제외 규칙 유지) - 운영 플로우: 스크립트 초안 → 사람이 semi/manual 보정 →
discoveryResults.ts에 1줄 추가 → 리포트 페이지 자동 생성 - 형태는 로컬 Python 스크립트로 시작한다. Edge Function(
discover-aeo-geo)化는 셀프서브 전환이 결정된 뒤에 한다. - 업체 선정 방법(기존 확정): 분야 키워드로 네이버 검색 → 파워링크 1위 광고주. 광고 리다이렉트는 직접 못 따라가므로 상호로 재검색해 도메인 확인.
P1 · 계약 후 미검증 해소 runbook
뷰성형외과(또는 첫 계약 업체) 계약 시 실행할 체크리스트를 문서화한다: E1 서버로그 AI 봇 추출, E2 GA4 AI 채널그룹, E3 GSC, A6 Bing Webmaster, D6 Wikidata 조회. 미검증 5개가 해소되면 분모가 88 → 100으로 바뀌므로 총점이 변한다는 사실을 리포트에 명시한다.
P1 · 덱 스크린샷 자동 갱신
랜딩 변경 → 캡처 → 크롭(히어로 0~1384px, 리포트 밴드는 #F4F6FB 행 범위 감지) → build_viewclinic_poc_deck.py 리빌드를 스크립트 하나로 묶는다.
P2 · 기준선 스팟체크 러너 (E4)
질의 10개 × 5회 반복, 언급률 + 신뢰구간으로만 기록한다. 답변엔진 소비자 UI 자동 조회는 약관 위반이므로 금지 (API 또는 수동 기록).
4. 오너 결정 대기 (빌드 전 haewon 확인)
- 카테고리 가중치 확정 (현행 A20/B20/C25/D20/E10/F5)
- 랜딩 CTA 형태: 현행 mailto(o2oteam@o2o.kr) 유지 vs 신청 폼(Supabase 테이블) 전환. 계약 기반 영업 모델(PART III 피봇)과의 정합을 보고 결정한다.
- 다음 진단 대상 업종·키워드
5. P0 자동 채점기 — 구현 완료 (2026-08-31)
scripts/audit_aeo_geo.py 구현·검증 완료. 표준 라이브러리만 사용(의존성 없음), fetch는 curl 백엔드(macOS 인증서 문제 회피).
사용법
python3 scripts/audit_aeo_geo.py <메인URL> <대표시술페이지URL> \
--id <라우트id> --name <상호> --industry "<업종 (지역)>"
# 옵션: --out <경로> --json <경로> --skip-ts --force
→ src/data/discovery_<id>.ts 초안 생성. auto 22항목은 판정까지, semi 5항목(C1·C4·C7·D3·D5)은
'unverified' + 수집 증거 메모, manual 9항목은 'unverified' + 확인 방법 메모.
판정 근거를 못 얻은 auto 항목(예: meta generator 없음)은 0점이 아니라 unverified로 남긴다 (분모 제외 규칙 준수).
검증 결과 (뷰성형외과 재채점, 2026-08-31)
auto 22항목 중 18항목 기존 실측(2026-08-28)과 일치. 불일치 4건은 전부 스크립트가 아니라 기존 수작업의 한계였다:
| 항목 | 기존 | 스크립트 | 원인 |
|---|---|---|---|
| A5 | 2 | 3 | 기존 실측은 post-sitemap만 봄(lastmod 2024-05). page/portfolio-sitemap에는 진짜 per-page 갱신일(2026-08) 존재 |
| B4 | 2 | 1 | 시술 페이지에 세 번째 주소 표기("서울시 강남구 봉은사로 107, 뷰성형외과빌딩(논현동…") 실재 — 기존 실측 누락 |
| C6 | 1 | 3 | 시술 페이지에 article:modified_time·dateModified(2026-04-17) 실재 — 기존 실측은 메인만 확인 |
| D6 | unverified | 0 | Wikidata API 조회 자동화됨 (기존은 미실시) |
2026-08-31 haewon 결정으로 위 4건을 discovery_viewclinic.ts에 반영했다: 48점/C (42.1/88, 검증 31/36)
→ 49점/C (44.0/89, 검증 32/36). 등급·목표(C→B) 변화 없음. keyFindings의 "15개월간 갱신 신호 없음"은
"갱신 신호는 살아 있다(단 블로그는 2024-05 정지)"로 정정.
새 업체 30분 온보딩 플로우
- 업체 선정(네이버 파워링크 1위 광고주 → 상호 재검색으로 도메인 확인) — 5분
audit_aeo_geo.py실행 → 초안 생성 — 3분- semi 5항목 판정 확정(초안의 증거 메모 참고) + manual 중 공개 페이지 실측 가능한 D1·D2·D4 확인 — 15분
- keyFindings 3~5개 + actions P0~P2 작성,
discoveryResults.ts에 1줄 추가 — 5분 npm run lint(AEO-GEO-Audit 워크트리) → git push →vercel --prod— 2분
6. 하지 않을 것 (정직성 규약, 변경 없음)
- llms.txt 제작·판매
- "스키마 넣으면 인용된다" 약속, 순위·노출 보장 문구
- 단발 조회 보고
- 답변엔진 소비자 UI 자동 조회
- 네이버 블로그 증량 (AI 크롤러 차단 확인, 글로벌 AEO 기여 0)
추가 (2026-09-01) · Question Bank 120문항 2엔진 실측
- 산출물:
docs/reports/Viewclinic_AI_Discovery_Question_Bank.md(120문항+사전판정+검증),Viewclinic_QB_Results_Combined.md(질문별 상위 병원 통합표),Viewclinic_QB_Results.xlsx(5시트), rawscripts/out/qb_{openai,perplexity}_results.jsonl - 러너:
scripts/run_question_bank_openai.py(OpenAI Responses API + web_search 서울 고정 / Perplexity sonar, JSONL 재개 가능, UI 자동조회 금지 원칙 준수). 통합표scripts/merge_qb_results.py, 엑셀scripts/export_qb_excel.py. POC 후 재측정 시 JSONL 삭제 후 동일 명령 재실행. - 결과: 브랜드 질문 뷰 언급 GPT 97% · PPLX 100%, 논브랜드 GPT 11%(10/84) · PPLX 3%(3/84). 시술 정보 52문항은 두 엔진 모두 0건.
- 점수 정합성 교정: scoreDiscovery 계산값 50/C(44.1/89, 검증 32/36)로 덱 2종(진단 리포트·POC 제안서)과 문서를 일괄 교정. 재채점 커밋 메시지의 49는 반올림 착오였음. 랜딩 스크린샷(shots/land_hero·land_report)도 프로덕션 50점 화면으로 재캡처(구판은 *_48pt_backup.png).
- 기준표 v1.1 과제 5건:
docs/AEO_GEO_RUBRIC.md맨 아래 절 참조 (서브도메인 실측, D3 표면 범위 확대, 엔진별 판정, 브랜드/논브랜드 축, 점수 표기 정합성).