- 병원 URL 2개 입력 → 기준표 v1.0 auto 22항목 자동 채점 → discovery_<id>.ts 초안 생성 - semi/manual 항목은 unverified + 수집 증거 메모 (분모 제외 규칙 준수) - 뷰성형외과 재채점 검증: auto 22항목 중 18항목 기존 실측 일치, 불일치 4건(A5·B4·C6·D6)은 전부 기존 수작업 실측의 샘플링 누락 (핸드오버 문서에 기록) - stdlib만 사용, curl 백엔드 (macOS 인증서 회피, crawler_audit.py 계승) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WgWoJZAvvzMxTpWeenZSia
125 lines
7.3 KiB
Markdown
125 lines
7.3 KiB
Markdown
# 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)
|
||
|
||
1. **태하 케이스는 랜딩 샘플로 노출하지 않는다.** 랜딩 샘플은 뷰성형외과 단일 유지.
|
||
`/discovery/taeha` 라우트와 데이터는 삭제하지 않고 유지한다 (영업 시 직접 링크로만 사용).
|
||
2. 리포트 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 인증서 문제 회피).
|
||
|
||
### 사용법
|
||
|
||
```bash
|
||
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 조회 자동화됨 (기존은 미실시) |
|
||
|
||
주의: `discovery_viewclinic.ts`는 2026-08-28 실측 기록으로 그대로 두었다. 위 4건을 반영해 뷰성형외과 점수를
|
||
갱신할지(48/C가 소폭 오름)는 오너 결정 사항. 갱신하려면 스크립트 재실행 후 semi/manual만 기존 값 이식하면 된다.
|
||
|
||
### 새 업체 30분 온보딩 플로우
|
||
|
||
1. 업체 선정(네이버 파워링크 1위 광고주 → 상호 재검색으로 도메인 확인) — 5분
|
||
2. `audit_aeo_geo.py` 실행 → 초안 생성 — 3분
|
||
3. semi 5항목 판정 확정(초안의 증거 메모 참고) + manual 중 공개 페이지 실측 가능한 D1·D2·D4 확인 — 15분
|
||
4. keyFindings 3~5개 + actions P0~P2 작성, `discoveryResults.ts`에 1줄 추가 — 5분
|
||
5. `npm run lint`(AEO-GEO-Audit 워크트리) → git push → `vercel --prod` — 2분
|
||
|
||
## 6. 하지 않을 것 (정직성 규약, 변경 없음)
|
||
|
||
- llms.txt 제작·판매
|
||
- "스키마 넣으면 인용된다" 약속, 순위·노출 보장 문구
|
||
- 단발 조회 보고
|
||
- 답변엔진 소비자 UI 자동 조회
|
||
- 네이버 블로그 증량 (AI 크롤러 차단 확인, 글로벌 AEO 기여 0)
|