# INFINITH AI Discovery PRD · 분석 → 진단 → 빌드 → 측정 - 버전: v0.2 (2026.08.28) · 상태: Draft for Engineering Review - 작성: INFINITH Product · 대상: 프론트엔드 · 백엔드 · 인프라 · 콘텐츠 운영 - 목표 릴리스: v1.0 · 10주 · 2026.11.06 - 관련 코드: `AEO-GEO-Audit` 브랜치 (`src/data/aeoGeoRubric.ts`, `src/types/discovery.ts`, `src/lib/discoveryScore.ts`, `src/pages/DiscoveryReportPage.tsx`, `docs/AEO_GEO_RUBRIC.md`) · `Productize` 브랜치 (랜딩 프리렌더 커밋) - 덱 버전: `INFINITH_AI-Discovery_PRD_20260828_v02.pptx` --- ## 1. 제품 흐름 병원 URL 하나를 넣으면 채널 분석과 AEO · GEO 진단이 나오고, 진단 항목이 그대로 빌드 요구사항과 측정 지표가 되는 제품. | 단계 | 내용 | 상태 | |---|---|---| | 1 분석 | 채널 발견 · 6채널 데이터 수집 · 마케팅 리포트 | 구현 완료 · `discover-channels` → `collect-channel-data` → `generate-report` | | 2 진단 | 36항목 AEO · GEO 스코어카드 · 등급 · 액션 플랜 | 프로토타입 동작 · 수동 채점 → 자동화 대상 | | 3 빌드 | 진단 P0 · P1을 사이트 수정 또는 표준 사이트로 실행 | 신규 · 진단 항목이 곧 요구사항 | | 4 측정 | 크롤러 로그 · GA4 AI 채널 · 재진단으로 점수 변화 증명 | 신규 · 루브릭 E 카테고리를 채운다 | 뷰성형외과는 1 · 2단계를 거쳐 P0 3건이 나왔다. 3 · 4단계가 없어 여기서 멈춘다. 그 공백이 이 PRD의 범위다. ## 2. 배경 AI 답변엔진은 JS를 실행하지 않는다. GPTBot, ClaudeBot, PerplexityBot은 서버가 내려준 HTML만 읽는다. 진단은 이 사실에서 출발한다. - **실측 · 뷰성형외과: 읽히지만 라벨뿐.** AI 봇 12종 전부 200, JS 없이 본문 10,757자. 그런데 H1 5개가 전부 영문 라벨(VIEW SELFIE / VIEW EVENT …)이고 JSON-LD는 문법 오류(ItemList 블록 쉼표 누락)로 무효. - **시장 · 네이버 자산은 AI에 차단됨.** 블로그 · 플레이스 · 카페는 robots.txt로 AI 크롤러를 차단한다. 인용되려면 오픈웹 소유 자산이 필요하다. - **실측 · INFINITH 랜딩: 4단어.** 크롤러 UA 요청 결과 title 4단어 외 본문 0. 1.5 MB JS를 실행해야 본문이 나왔다. 프리렌더 후 810단어. **문제 정의.** 진단은 나오는데 다음이 없다. 진단 결과를 받은 병원이 무엇을 고쳐야 하는지, 고친 뒤 점수가 올랐는지 증명할 수단이 제품 안에 없다. ## 3. 케이스 · 뷰성형외과 (2026.08.28) 카테고리 점수는 검증 항목 기준 정규화. 미검증(A6 · D6 · E1~E3)은 분모 제외. | 카테고리 | 배점 | 획득 | 점수 | 핵심 발견 | → 빌드 · 측정 요구사항 | |---|---|---|---|---|---| | A 크롤러 접근성 | 20 | 15.7 / 17 | 92% | robots · SSR · HTTPS 정상. sitemap lastmod 15개월 전 | FR-B05 sitemap 자동 갱신 | | B 엔티티 구조화 | 20 | 6.0 / 20 | 30% | JSON-LD 깨짐 · MedicalClinic 없음 · Physician 없음 | FR-B03 스키마 단일 소스 | | C 인용 가능 콘텐츠 | 25 | 5.0 / 25 | 20% | 정의문 · FAQ · 서술형 H1 없음. 수치 부족 | FR-B02 질문 템플릿 · FR-B06 검사 | | D 인용 표면 | 20 | 13.7 / 19 | 72% | 강남언니 19,316건 강함. GBP 전화 없음 · NAP 3종 | FR-B08 NAP 통일 체크리스트 | | E 측정 인프라 | 10 | 0 / 2 | 0% | 로그 · GA4 · GSC 오너 접근 필요. 기준선 없음 | FR-M01 ~ M03 | | F 기술 위생 | 5 | 1.7 / 5 | 33% | WordPress 5.5.3 · alt 누락 · 페이지 무게 | NFR-04 · FR-B09 CMS 업그레이드 | 종합 48점 · C등급. P0 3건: JSON-LD 수정 + MedicalClinic 삽입, GBP 전화 등록 + NAP 통일, 측정 인프라 설치. > 점수 확인 필요: 현재 `discovery_viewclinic.ts` 레벨 데이터로 재계산한 값이 48점. 리포트 페이지 표시값과 대조할 것. ## 4. 목표와 지표 출시 10주 후 기준. 모든 지표는 제품 안에서 자동 측정된다. | 단계 | 지표 | 현재 | v1.0 목표 | 측정 방법 | |---|---|---|---|---| | 진단 | 자동 채점 항목 비율 | 0% (36항목 수동) | 24 / 36 자동 (67%) | `discover-aeo-geo` 실행 로그 | | 진단 | URL 입력 → 리포트 소요 시간 | 약 4시간 (수동) | 10분 이내 | `analysis_runs` 타임스탬프 | | 진단 | 재진단 재현성 | 미검증 | 동일 URL 2회 점수 편차 3점 이내 | 회귀 테스트 | | 빌드 | P0 액션 완료 → 재진단 점수 상승 | 측정 불가 | 뷰성형외과 48 → 65+ (B) | 재진단 비교 | | 빌드 | 질문 페이지 발행 (표준 사이트) | 0 | 8주 내 40개 | CMS 발행 로그 | | 측정 | AI 크롤러 · AI 유입 계측 병원 | 0 | 파일럿 100% | 로그 파서 · GA4 | 답변엔진 언급률은 지표에서 제외한다. 소비자 UI 자동 조회는 약관 위반이고 단발 조회는 무효다. ## 5. 범위 **In scope (v1.0)** - 진단 Edge Function `discover-aeo-geo` (자동 채점 1 · 2 · 3단계) - 수동 항목 입력 슬롯 (A6 · D1 · D2 · D4 · E1~E4)과 미검증 처리 - 진단 리포트 DB 저장 · `/discovery/:id` 실데이터 연결 · PDF - 빌드 A: 기존 사이트 수정 패키지 (스키마 · NAP · CMS · FAQ 삽입) - 빌드 B: 병원용 워드프레스 표준 사이트 (템플릿 4종 · 검사) - 측정: 크롤러 로그 파서 · GA4 AI 채널 · 재진단 비교 뷰 - INFINITH 랜딩 파일럿: FAQ 섹션 · FAQPage 스키마 **Out of scope (v1.0)** - 분석 파이프라인 변경 (`discover` · `collect` · `generate-report`) - Q&A 콘텐츠 작성 (운영팀 · 병원 담당, 별도 가이드) - 네이버 블로그 · 플레이스 운영 (AI 크롤러 차단 자산) - 답변엔진 UI 자동 조회 · 언급률 리포트 (약관 위반) - llms.txt 납품 (Google 효과 0 · 채택률 0.13%) - 헤드리스(WordPress + Astro) 전환 (v2.0 후보) 빌드 A와 B를 나눈 이유: 뷰성형외과처럼 사이트가 있는 병원은 수정이고, 없는 병원은 표준 사이트다. ## 6. 사용자 | 구분 | 사용자 | 성공 기준 | |---|---|---| | Primary | 병원 마케팅 담당자 | URL을 넣고 10분 안에 스코어카드와 P0를 본다. 수정 후 재진단으로 점수 변화를 확인한다. 표준 사이트면 질문 페이지를 직접 추가한다 | | Secondary | INFINITH 운영팀 | 수동 항목(GBP · 강남언니 · 로그)을 입력하고 여러 병원의 점수 · 크롤 수 · 오류를 한 화면에서 본다. 병원 온보딩 1일 | | System | AI 크롤러 · 검색엔진 | GPTBot · ClaudeBot · PerplexityBot · Googlebot · Yeti. 진단은 이들의 UA로 실제 요청해 채점한다. 빌드 결과도 같은 방법으로 검증한다 | 설계 원칙: 확인 못 한 것은 감점하지 않는다(미검증은 분모 제외). 근거 없는 것은 팔지 않는다. 담당자의 실수는 시스템이 발행 전에 막는다. ## 7. 기능 요구사항 ### 7.1 진단 (FR-D) AEO-GEO-Audit 브랜치의 루브릭 · 타입 · 집계 로직을 그대로 쓰고, 채점 데이터만 수동에서 자동으로 바꾼다. | ID | 요구사항 | 상세 | 루브릭 | 우선순위 | |---|---|---|---|---| | FR-D01 | 자동 채점 1단계 | robots 파싱 · 12개 AI 봇 UA GET · HTML 파서 (`crawler_audit.py` 이식) | A1~A5 · A7 · B1 · B4 · B6 · B7 · C2 · C3 · C5 · C6 · F1~F4 | P0 | | FR-D02 | 자동 채점 2단계 | 본문 텍스트를 Perplexity 또는 Claude에 투입해 구조화 판정 | B2 · B3 · C1 · C4 · C7 · C8 | P0 | | FR-D03 | 자동 채점 3단계 | 검색 그라운딩 도메인 집계 · Wikidata API | D3 · D6 | P1 | | FR-D04 | 수동 입력 슬롯 | 운영팀이 근거 · 레벨 입력. 미입력은 `unverified`로 분모 제외 | A6 · D1 · D2 · D4 · E1~E4 | P0 | | FR-D05 | 결과 저장 · 리포트 | `DiscoveryResult`를 DB 저장. `/discovery/:id`가 mock 대신 DB를 읽음 | 전체 | P0 | | FR-D06 | 액션 플랜 생성 | level 0 · 1 항목에서 P0 · P1 · P2 액션 자동 생성. 빌드 FR과 연결 | 전체 | P1 | | FR-D07 | 재진단 비교 | 같은 URL의 이전 결과와 항목별 diff · 점수 변화 표시 | 전체 | P1 | 1단계만으로 36항목 중 17개가 자동이다. 2단계까지 23개. 나머지는 오너 계정 접근이 필요해 수동이 맞다. ### 7.2 빌드 A · 기존 사이트 수정 (FR-B, P0) 뷰성형외과 액션 플랜에서 역산했다. 병원 개발사나 INFINITH가 붙여 넣을 수 있는 산출물이어야 한다. | ID | 요구사항 | 상세 | 루브릭 | 우선순위 | |---|---|---|---|---| | FR-B01 | 서버 렌더링 검증 · 처방 | A3 실패 시 프리렌더 · SSR 처방 (INFINITH 랜딩 방식 문서) | A3 | P0 | | FR-B03 | 스키마 패키지 생성 | 진단 데이터로 MedicalClinic · Physician JSON-LD 생성. 기존 스키마 차단 안내 | B1 · B2 · B3 · B5 | P0 | | FR-B08 | NAP 통일 체크리스트 | 홈페이지 · 강남언니 · GBP · 플레이스 표기를 나열하고 정본 지정 | B4 · D2 · D4 | P0 | | FR-B04 | 메타 패키지 | title · description · canonical · OG · hreflang 코드 생성 | B6 · B7 | P1 | | FR-B05 | robots · sitemap 처방 | AI 봇 허용 robots.txt · lastmod 갱신 규칙 | A1 · A5 | P1 | | FR-B07 | FAQ 삽입 패키지 | 시술별 질문 · 요약 답변 초안 + FAQPage 스키마 코드 | C1 · C2 · C4 | P1 | | FR-B09 | CMS 위생 처방 | WordPress 버전 · alt 누락 목록 · 페이지 무게 리포트 | F1 · F2 · F3 | P1 | 빌드 A의 산출물은 코드 조각과 체크리스트다. 병원 사이트를 INFINITH가 직접 호스팅하지 않는다. ### 7.3 빌드 B · 표준 사이트 (FR-B, P1) 루브릭 A · B · C · F를 처음부터 통과하는 워드프레스 사이트. 담당자가 질문 페이지를 직접 늘린다. | ID | 요구사항 | 상세 | 루브릭 | 우선순위 | |---|---|---|---|---| | FR-B10 | 표준 스택 프리셋 | 경량 테마 · Rank Math · WP Rocket · ACF · 관리형 호스팅. 1회 명령 복제 | A · F 전체 | P1 | | FR-B02 | 질문 페이지 템플릿 | 질문(h1) · 요약 답변(p, 60자) · 상세 · 관련 시술 · 의료진. 필드 입력만으로 생성 | C1 · C2 · C3 · C8 | P1 | | FR-B11 | 시술 · 의료진 템플릿 | MedicalProcedure · Physician 스키마 포함. 가격대 · 시간 · 회복 필드 | B3 · C4 · C7 | P1 | | FR-B12 | 스키마 단일 소스 | 페이지 유형별 JSON-LD 1개 자동 출력. 테마 · 타 플러그인 출력 차단 | B1 · B2 · B3 | P1 | | FR-B06 | 발행 전 검사 | 스키마 중복 · h1 2개 · alt 누락 · 요약 답변 누락 시 발행 차단 | B1 · C3 · F1 | P1 | | FR-B13 | sitemap · robots 자동 | 발행 시 lastmod 갱신 · AI 봇 9종 허용 | A1 · A5 · C6 | P1 | 빌드 B는 P1이다. 뷰성형외과처럼 사이트가 있는 병원이 먼저이므로 빌드 A가 P0다. ### 7.4 측정 (FR-M) 인용 여부를 직접 볼 수 없으므로 소유한 신호를 계측한다. 재진단이 개선의 증거다. | ID | 요구사항 | 상세 | 루브릭 | 우선순위 | |---|---|---|---|---| | FR-M01 | AI 크롤러 로그 파서 | 액세스 로그 또는 Cloudflare Logpush에서 GPTBot · ClaudeBot · PerplexityBot 히트를 IP 검증 후 일 집계 | E1 | P0 | | FR-M02 | GA4 AI 채널 | chatgpt.com · perplexity.ai · gemini.google.com 리퍼러를 커스텀 채널로 분리 · 설정 가이드 | E2 | P0 | | FR-M03 | 기준선 스팟체크 기록 | 분기 반복 측정 프로토콜과 입력 슬롯 (수동) | E4 | P1 | | FR-M04 | 재진단 스케줄 | 월 1회 자동 재진단 · 점수 변화 알림 | 전체 | P1 | | FR-M05 | 운영 대시보드 | 병원별 점수 · 크롤 수 · AI 세션 · 스키마 오류 · LCP 주간 표시 | E 전체 | P1 | FR-M01 · M02는 뷰성형외과 P0 3번(측정 인프라 설치)이다. 빌드보다 먼저 깔아야 전후 비교가 된다. ## 8. 비기능 요구사항 | ID | 영역 | 요구사항 | 예산 · 기준 | |---|---|---|---| | NFR-01 | 진단 | 재현성 | 동일 URL 2회 실행 점수 편차 3점 이내 · LLM 판정 항목은 temperature 0 | | NFR-02 | 진단 | 소요 시간 · 비용 | URL당 10분 이내 · API 비용 2,000원 이내 | | NFR-03 | 진단 | 대상 사이트 부하 | UA 테스트 요청 30회 이내 · 1초 간격 · 429 시 중단 | | NFR-04 | 빌드 B | 성능 | 모바일 LCP p75 2.5초 · CLS 0.1 · 플러그인 10개 이하 · HTML 80 KB 이하 | | NFR-05 | 빌드 B | HTML 품질 · 보안 | h1 1개 · div 중첩 6단계 이하 · 관리형 호스팅 · 자동 업데이트 · 일 백업 | | NFR-06 | 측정 | 로그 보존 · 정확도 | 90일 보존 · 봇 IP 역DNS 검증 (위장 UA 제외) | | NFR-07 | 공통 | 정직성 규약 | 리포트에 "하지 않을 것" 섹션 고정 · 근거 등급(실측 · 학술 · 벤더 · 추정) 표기 | Elementor · Divi 같은 페이지빌더는 NFR-04 · 05를 통과하지 못하므로 빌드 B에서 금지다. ## 9. 아키텍처 Supabase Edge Functions 체인. 분석 3개 함수는 그대로, 신규 4개를 추가한다. | 단계 | 함수 · 컴포넌트 | 비고 | |---|---|---| | 1 분석 | `discover-channels` → `collect-channel-data` → `generate-report` | 기존 · `marketing_reports` · `clinic_registry` | | 2 진단 | `discover-aeo-geo`: UA 테스트 · HTML 파서 · LLM 판정 · 집계 | 신규 · 루브릭 · 집계는 AEO-GEO-Audit 코드 이식 | | 3 빌드 | `build-package`: 스키마 · 메타 · NAP · FAQ 코드 생성 / WP 커스텀 플러그인 | 신규 · 빌드 A는 함수, B는 플러그인 | | 4 측정 | `log-ingest` (Logpush → Supabase) · GA4 커넥터 · 재진단 cron | 신규 · `discovery_results` 시계열 | 신규 테이블 2개: `discovery_results` (결과 · 버전) · `crawler_hits` (봇 · IP · 경로 · 일자). ## 10. 루브릭 → 빌드 매핑 (FR-D06 규칙표) | 루브릭 항목 | level 0 · 1이면 | 빌드 산출물 | FR | |---|---|---|---| | A3 서버 렌더링 본문 | 본문이 JS에만 있음 | 프리렌더 · SSR 처방 문서 + 검증 스크립트 | FR-B01 | | B1 · B2 · B3 스키마 | JSON-LD 깨짐 · 엔티티 없음 | MedicalClinic · Physician JSON-LD 코드 + 차단 안내 | FR-B03 · B12 | | B4 · D2 · D4 NAP | 표면 간 표기 불일치 | 정본 NAP 체크리스트 · GBP 수정 항목 | FR-B08 | | C1 · C2 · C4 콘텐츠 | 정의문 · FAQ · 수치 없음 | 시술별 질문 · 요약 답변 초안 + FAQPage 코드 | FR-B07 · B02 | | C3 제목 계층 | H1 없음 · 이미지 텍스트 | H1 재설계안 · 이미지 정보 텍스트화 목록 | FR-B07 | | C6 신선도 | dateModified 없음 | dateModified 활성화 · 갱신 주기 규칙 | FR-B13 | | E1 · E2 측정 | 미설치 | 로그 파서 · GA4 채널 설정 | FR-M01 · M02 | | F2 CMS | 구버전 | 업그레이드 절차 · 백업 체크리스트 | FR-B09 | ## 11. 스키마 스펙 빌드 A는 코드 조각으로, 빌드 B는 Rank Math 훅으로 같은 스펙을 출력한다. 테마 내장 스키마는 끈다. | 페이지 | @type | 필수 속성 | 데이터 소스 | |---|---|---|---| | 홈 | MedicalClinic + WebSite | name · address · telephone · openingHours · sameAs | 분석 1단계 `clinics` · 병원 정보 ACF | | 시술 | MedicalProcedure | name · procedureType · bodyLocation · howPerformed · preparation | 시술 ACF | | 의료진 | Physician | name · medicalSpecialty · memberOf · image · alumniOf | 의료진 ACF · 강남언니 의료진 | | 질문 | FAQPage (+ Article) | mainEntity[Question · acceptedAnswer] · author · dateModified | 질문 템플릿 필드 | | 공통 | BreadcrumbList | itemListElement | 자동 | 수용 기준: Rich Results Test 오류 0. 응답에 ld+json 블록 정확히 1개 (Breadcrumb 포함 시 @graph 병합). 루브릭 B1 · B2 · B3 level 3. ## 12. 질문 페이지 템플릿 루브릭 C1 · C2 · C3 · C4 · C8을 동시에 통과하는 구조. | 필드 | HTML 출력 | 제약 | 예시 | 루브릭 | |---|---|---|---|---| | 질문 | h1 | 물음표로 끝남 · 40자 이내 | 코 재수술은 언제 가능한가요? | C3 | | 요약 답변 | p (h1 직후) | 60자 이내 · 숫자 · 기간 포함 권장 | 1차 수술 후 최소 6개월, 보통 1년 뒤 가능합니다. | C1 · C8 | | 상세 답변 | h2 + p 반복 | h2는 하위 질문형 · 단락 3문장 이내 | 왜 6개월을 기다려야 하나요? | C3 · C8 | | 가격 · 시간 · 회복 | 표 | 숫자 범위 필수 | 300~500만원 · 2시간 · 회복 2주 | C4 · C5 | | 관련 시술 · 의료진 | 링크 + Physician | 각 1개 이상 | 코 재수술 · 김OO 원장 | C7 | | 갱신일 | dateModified | 자동 | 2026-08-28 | C6 | 요약 답변 60자는 AI 답변엔진이 한 단락으로 인용하는 길이다. 이 필드가 비면 발행이 막힌다(FR-B06). ## 13. 수용 테스트 | ID | 단계 | 테스트 | 통과 기준 | |---|---|---|---| | AT-01 | 진단 | viewclinic.com 자동 진단 실행 | 수동 채점 대비 자동 항목 일치율 90% · 소요 10분 이내 | | AT-02 | 진단 | infinith-demo.vercel.app 진단 | A3 level 3 · B1 level 3 · 재실행 편차 3점 이내 | | AT-03 | 진단 | 미검증 처리 | 수동 슬롯 비운 채 실행 시 해당 항목 분모 제외 · 점수 계산 일치 | | AT-04 | 빌드 A | 스키마 패키지 적용 후 Rich Results Test | 오류 0 · 블록 1개 | | AT-05 | 빌드 B | `curl -A GPTBot` 5종 UA 본문 단어 수 | 300단어 이상 · 5개 UA 동일 · 429 · 403 0건 | | AT-06 | 빌드 B | 발행 검사 | 요약 답변 비운 채 발행 시 차단 + 안내 | | AT-07 | 측정 | 로그 파서 위장 UA 테스트 | 역DNS 실패 히트 제외 · 일 집계 정확 | | AT-08 | 루프 | 빌드 후 재진단 | 변경 항목 level 상승이 diff에 표시 · 점수 상승 | AT-02 · 05는 2026.08.28 INFINITH 랜딩 점검 스크립트를 그대로 쓴다. ## 14. 마일스톤 (10주) 2주 단위. 각 단계 끝에 수용 테스트를 통과해야 다음 단계로 간다. | 주차 | 단계 | 내용 | 완료 기준 | |---|---|---|---| | W1-2 | 진단 1단계 | `discover-aeo-geo` · UA 테스트 · 파서 · DB · 리포트 연결 | FR-D01 · D04 · D05 · AT-01~03 | | W3-4 | 측정 · 진단 2단계 | 로그 파서 · GA4 · LLM 판정 · 재진단 diff | FR-M01 · M02 · D02 · D07 · AT-07 | | W5-6 | 빌드 A | 스키마 · NAP · FAQ · CMS 패키지 생성 | FR-B01 · B03 · B04 · B07 · B08 · AT-04 | | W7-8 | 빌드 B | 표준 스택 · 템플릿 3종 · 검사 · 플러그인 | FR-B02 · B06 · B10~B13 · AT-05 · 06 | | W9-10 | 파일럿 · 릴리스 | 뷰성형외과 빌드 A 적용 · 재진단 · 표준 사이트 1곳 | AT-08 · 48 → 65+ · v1.0 | 측정(W3-4)을 빌드보다 앞에 둔 이유: 전후 비교의 기준선이 빌드 전에 있어야 한다. ## 15. 리스크 | 리스크 | 영향 | 가능성 | 대응 | |---|---|---|---| | LLM 판정 항목(2단계)의 채점 불일치 | 높음 | 중간 | temperature 0 · 근거 인용 강제 · 수동 채점과 90% 일치 회귀 테스트 | | 대상 사이트가 진단 요청을 차단 | 중간 | 중간 | 요청 30회 · 1초 간격 · 429 시 중단 후 unverified 처리 | | 병원이 빌드 A 패키지를 적용하지 않음 | 높음 | 높음 | 적용 대행 옵션 · 재진단 알림 · P0만 먼저 | | 담당자가 질문 페이지를 추가하지 않음 | 높음 | 높음 | 분석 리포트의 질문 목록을 초안으로 제공 · 주간 발행 목표 | | AI 크롤러 UA · 정책 변경 | 중간 | 높음 | 봇 목록 중앙 관리 · 분기 점검 · 루브릭 버전 관리 | | 스키마 플러그인 업데이트로 출력 변경 | 중간 | 중간 | AT-04 매 배포 실행 · 버전 고정 | ## 16. 오픈 이슈 (리뷰 미팅 결정) | # | 질문 | 선택지 | 기본안 · 근거 | |---|---|---|---| | 1 | 2단계 LLM 판정 모델 | Perplexity · Claude · 둘 다 | Claude. 판정 일관성 · 근거 인용. Perplexity는 D3 그라운딩에만 | | 2 | 로그 수집 방식 | 호스팅 로그 API · Cloudflare Logpush · WP 플러그인 | Cloudflare Logpush → Supabase. 호스팅 무관 | | 3 | 빌드 A 적용 주체 | 병원 개발사 · INFINITH 대행 · 둘 다 | 둘 다. 패키지는 개발사용, 대행은 유료 옵션 | | 4 | 빌드 B 호스팅 · 스키마 플러그인 | Kinsta · WP Engine · Cafe24 / Rank Math · Yoast | Kinsta + Rank Math. Cloudflare 통합 · 의료 타입 · 훅 | | 5 | 헤드리스 전환 시점 | 병원 5곳 · 10곳 · 미정 | 병원 5곳 시 v2.0 검토. 콘텐츠는 WP DB에 남아 이전 비용 낮음 | 결정되지 않은 항목은 기본안으로 W1을 시작하고, 리뷰에서 뒤집히면 W2에 반영한다. ## 부록 · 실측 (2026.08.28) | 대상 | 항목 | 결과 | 방법 | |---|---|---|---| | 뷰성형외과 | 종합 · 등급 | 48점 · C (검증 31 / 36항목) | `crawler_audit.py` + curl + HTML 파서 · 수동 채점 | | 뷰성형외과 | 카테고리 | A 92 · B 30 · C 20 · D 72 · E 0 · F 33 | 루브릭 v1.0 · unverified 분모 제외 | | 뷰성형외과 | P0 | JSON-LD 수정 + MedicalClinic · GBP 전화 + NAP 통일 · 측정 인프라 | 액션 플랜 | | INFINITH 랜딩 | 크롤러 5종 본문 단어 | 4 → 810 | `vite build --ssr` + `renderToString` 프리렌더 | | INFINITH 랜딩 | JSON-LD · lang · 메타 | 0 → 3 · en → ko · description · OG 추가 | `index.html` 정적 삽입 | | INFINITH 랜딩 | robots · sitemap · llms.txt | HTML 반환 → text/plain · xml 정상 | `public/` 정적 파일 | 재현: ```bash curl -sS -A "Mozilla/5.0 (compatible; GPTBot/1.0)" https://infinith-demo.vercel.app/ \ | sed -e 's/]*>.*<\/script>//g' -e 's/<[^>]*>//g' | tr -s ' \n' | wc -w # 뷰성형외과 리포트: /discovery/viewclinic (AEO-GEO-Audit 브랜치) ```