o2o-infinith-demo/src/data/discovery_viewclinic.ts
Haewon Kam ef4d8218e9 feat: AI Discovery AEO/GEO 채점 기준표 v1.0 + /discovery/:id 리포트 (뷰성형외과 44점)
- 채점 기준표: 6 카테고리 36 항목 100점, 항목별 근거등급/통제/채점방식/howToCheck
- 집계: 미검증 항목 분모 제외, llms.txt 항목 제외
- 뷰성형외과 실측 결과 + 핵심 발견 5 + 액션 7 + 하지 않을 것 5
- DiscoveryReportPage: INFINITH 디자인 토큰, 본문 +2pt, 판정 배지/우선순위 +4pt 볼드, keep-all
- SeverityBadge className prop 추가
- Badge.tsx 복원 (PricingPage import 누락으로 빌드 깨져 있던 것)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-28 10:26:29 +09:00

160 lines
13 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 뷰성형외과 (viewclinic.com) AEO/GEO 진단 결과
* 실측일: 2026-08-28 · 도구: crawler_audit.py + curl + HTML 파서
* 미검증 항목은 'unverified'. 오너 접근(GA4·GSC·Bing) 또는 수동 확인이 필요하다.
*/
import type { DiscoveryResult } from '../types/discovery';
export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
id: 'viewclinic',
clinicName: '뷰성형외과',
url: 'https://www.viewclinic.com',
industry: '성형외과 (강남 신논현)',
auditedAt: '2026-08-28',
rubricVersion: '1.0',
conditions: [
'실측 대상: 메인 페이지 + /breast/main/ (가슴성형) 2개 URL, JS 미실행 HTML 기준',
'크롤러 접근성: robots.txt 파싱 + 12개 AI 봇 UA 실제 GET 요청',
'외부 표면(강남언니·GBP·NAP 대조)과 측정 인프라(GA4·GSC)는 오너 접근 없이 확인 불가 → 미검증 처리, 분모 제외',
'답변엔진 언급률은 측정하지 않았다 (단발 조회는 무효, 반복 측정은 별도 기준선 단계에서 수행)',
],
results: [
// A. 접근성
{ criterionId: 'A1', level: 3, evidence: '12개 AI 봇 전부 허용. OAI-SearchBot·PerplexityBot·GPTBot UA로 GET → 전부 200', source: 'robots.txt: User-agent: * / Disallow: /wp-admin/' },
{ criterionId: 'A2', level: 3, evidence: 'Server: nginx 직접 응답, Cloudflare 헤더 없음, AI UA 챌린지 없음' },
{ criterionId: 'A3', level: 3, evidence: 'WordPress 서버 렌더링. JS 미실행 HTML에서 본문 텍스트 10,757자 추출' },
{ criterionId: 'A4', level: 3, evidence: 'http://viewclinic.com → 301 → https://www.viewclinic.com/ 정본 수렴' },
{ criterionId: 'A5', level: 2, evidence: 'robots.txt에 sitemap 선언, 200 응답, AIOSEO 3.7.1 동적 생성. 페이지 249개 + kboard 11개. 단 post lastmod 최신이 2024-05-31' },
{ criterionId: 'A6', level: 'unverified', evidence: 'Bing Webmaster Tools 등록 여부는 오너 계정 접근 필요' },
{ criterionId: 'A7', level: 2, evidence: 'TTFB 0.135s (양호) / 초기 HTML 838KB (비대). 시술 페이지 862KB' },
// B. 엔티티
{ criterionId: 'B1', level: 1, evidence: 'JSON-LD 2블록 중 ItemList 블록이 문법 오류(쉼표 누락, line 11)로 파싱 실패 → 시술 목록 구조화 데이터 전체 무효', source: 'Expecting \',\' delimiter: line 11 column 7' },
{ criterionId: 'B2', level: 1, evidence: 'Organization + WebSite + WebPage만 존재. MedicalClinic/LocalBusiness 없음 → 주소·전화·진료시간이 구조화되어 있지 않음' },
{ criterionId: 'B3', level: 0, evidence: 'Physician 스키마 없음. 의료진 정보는 HTML 텍스트·이미지로만 존재' },
{ criterionId: 'B4', level: 2, evidence: '주소 2가지 표기 혼재: "서울 강남구 봉은사로 107 뷰성형외과 빌딩" / "서울특별시 강남구 봉은사로 107, 뷰성형외과빌딩". 전화 02-539-1177 + 휴대폰 2개 혼재' },
{ criterionId: 'B5', level: 0, evidence: 'Organization.sameAs: [] (빈 배열). 푸터에 YouTube·Instagram·Facebook·네이버블로그 링크가 있으나 스키마에 미연결' },
{ criterionId: 'B6', level: 2, evidence: 'rel=canonical self-referencing 존재' },
{ criterionId: 'B7', level: 1, evidence: 'hreflang 없음, lang=ko-KR 단일 언어. 외국인 환자 대상 언어 페이지 미확인' },
// C. 콘텐츠
{ criterionId: 'C1', level: 0, evidence: '메인 첫 화면은 슬라이더·"VIEW SELFIE" 등 라벨. "뷰성형외과는 …에 있는 … 병원입니다" 형태의 정의문 없음. 시술 페이지 첫 텍스트는 오시는길·상담폼' },
{ criterionId: 'C2', level: 0, evidence: 'FAQ·자주 묻는 질문·Q&A 섹션 탐지 안 됨 (메인·가슴성형 페이지)' },
{ criterionId: 'C3', level: 0, evidence: 'H1 5개: "VIEW SELFIE / VIEW EVENT / VIEW SHORTS / VIEW FILM / VIEW SPECIALITY". 전부 영문 라벨. H2는 같은 문구가 2회씩 중복(모바일/PC 분기). 시술 페이지 H1 없음' },
{ criterionId: 'C4', level: 1, evidence: '메타 설명에 "가슴보형물사용량1위" 등 주장형 문구. 가슴성형 페이지에 가격/비용 단어 8회이나 표기된 가격대·수술시간·회복기간 표 없음' },
{ criterionId: 'C5', level: 0, evidence: 'HTML <table> 없음. 비교 정보는 이미지로 추정' },
{ criterionId: 'C6', level: 1, evidence: 'article:modified_time·dateModified 없음. post-sitemap 최신 lastmod 2024-05-31 (15개월 전). 단 H3 콘텐츠(유튜브 제목)는 최근 갱신 흔적' },
{ criterionId: 'C7', level: 2, evidence: '원장·전문의·의료진 언급 17회, 모티바 글로벌 KOL·보건복지부장관표창·갈더마 방문 등 권위 신호 존재. 단 구조화 안 됨' },
{ criterionId: 'C8', level: 1, evidence: 'H2 "철저한 정밀 검진 / ONE_STOP 시스템 / 1:1 전담 마취시스템". 단독으로 떼면 어느 병원의 무엇인지 알 수 없음' },
// D. 표면
{ criterionId: 'D1', level: 'unverified', evidence: '강남언니 프로필 존재·시술 수·후기 수는 수동 확인 필요 (P0 확인 항목)' },
{ criterionId: 'D2', level: 'unverified', evidence: 'Google 비즈니스 프로필 소유 여부 수동 확인 필요' },
{ criterionId: 'D3', level: 2, evidence: '자체 YouTube 채널 활발(VIEW SHORTS/FILM, 최신 영상 제목 다수). 티스토리·언론 언급은 미집계' },
{ criterionId: 'D4', level: 'unverified', evidence: '외부 표면 NAP 대조표 미작성' },
{ criterionId: 'D5', level: 2, evidence: '네이버 플레이스 존재(리뷰 776건, 2026-04 INFINITH 리포트 기준). 홈페이지 링크 연결 여부 미확인 → 보수적으로 2' },
{ criterionId: 'D6', level: 'unverified', evidence: 'Wikidata 조회 미실시' },
// E. 측정
{ criterionId: 'E1', level: 'unverified', evidence: '서버 로그 접근 필요 (nginx 직접 호스팅, Cloudflare AI Crawl Control 미사용)' },
{ criterionId: 'E2', level: 'unverified', evidence: 'GA4 접근 필요' },
{ criterionId: 'E3', level: 'unverified', evidence: 'GSC 접근 필요' },
{ criterionId: 'E4', level: 0, evidence: '기준선 스팟체크 미실시' },
// F. 위생
{ criterionId: 'F1', level: 1, evidence: '이미지 302개 중 111개(37%) alt 누락 또는 빈 값' },
{ criterionId: 'F2', level: 0, evidence: 'meta generator: WordPress 5.5.3 (2020-10 출시, 6년 전) + WPBakery. 보안 패치 미적용 위험' },
{ criterionId: 'F3', level: 1, evidence: '초기 HTML 838KB (기준 300KB의 2.8배)' },
{ criterionId: 'F4', level: 2, evidence: 'viewport meta 존재, 반응형. CWV 미측정' },
],
keyFindings: [
{
title: '크롤러 접근은 정상이다. AI가 사이트를 읽을 수 있다',
detail: 'robots.txt가 AI 검색봇 12종을 모두 허용하고, Cloudflare 차단도 없으며, WordPress가 본문을 서버에서 렌더링한다. 접근성 카테고리는 상위권. "AI에 안 나오는" 원인은 차단이 아니라 내용에 있다.',
severity: 'good',
},
{
title: '읽어도 "누구인지" 확정할 수 없다',
detail: 'MedicalClinic 스키마가 없고 Organization.sameAs가 비어 있으며, 시술 목록 JSON-LD는 쉼표 하나가 빠져 통째로 무효다. 주소 표기도 사이트 안에서 2가지. AI는 "뷰성형외과"라는 이름과 흩어진 사실을 하나의 엔티티로 묶을 근거를 얻지 못한다.',
severity: 'critical',
},
{
title: '인용할 문장이 없다',
detail: 'H1이 "VIEW SELFIE / VIEW EVENT / VIEW SHORTS…" 5개, FAQ 0개, HTML 표 0개, 정의문 0개. 가슴성형 페이지의 첫 텍스트는 상담 폼이다. 답변엔진이 패시지 단위로 잘라 가져갈 자기완결적 단락이 존재하지 않는다. 권위 신호(KOL·표창)는 있으나 이미지와 슬로건 안에만 있어 텍스트로 읽히지 않는다.',
severity: 'critical',
},
{
title: '15개월간 갱신 신호 없음',
detail: 'post-sitemap의 최신 lastmod가 2024-05-31이고 dateModified 마크업이 없다. 유튜브는 활발하지만 그 신선도가 사이트로 전달되지 않는다. 오래된 사이트는 brand 질의에서 "영업 중인가?" 오정보 위험을 만든다.',
severity: 'warning',
},
{
title: '병의원 AI 인용의 핵심 표면(강남언니·GBP)은 아직 미확인',
detail: '2026-08 실측에서 병의원 AI 인용은 강남언니·닥터나우 등 버티컬이 100% 장악했다. 이 표면의 상태가 실제 노출을 좌우하므로 수동 확인이 P0다. 확인 전까지 분모에서 제외해 점수를 부풀리지 않았다.',
severity: 'warning',
},
],
actions: [
{
priority: 'P0',
title: '깨진 JSON-LD 수정 + MedicalClinic 스키마 삽입',
detail: 'ItemList 블록 쉼표 누락 수정(1시간). Organization → MedicalClinic으로 승격하고 address·telephone·openingHoursSpecification·medicalSpecialty·geo 추가. sameAs에 YouTube·Instagram·Facebook·강남언니·네이버플레이스·GBP URL 연결.',
criterionIds: ['B1', 'B2', 'B5'],
effort: '1일',
},
{
priority: 'P0',
title: '강남언니·Google 비즈니스 프로필 실사',
detail: '프로필 존재·시술 등록 수·후기·가격 갱신일 확인. GBP 소유권 미확인이면 즉시 클레임. 홈페이지·강남언니·GBP·플레이스 4개 표면 NAP 대조표 작성 후 "서울특별시 강남구 봉은사로 107 뷰성형외과빌딩 / 02-539-1177"로 통일.',
criterionIds: ['D1', 'D2', 'D4', 'B4'],
effort: '1주',
},
{
priority: 'P0',
title: '측정 인프라 설치 (개선 증명의 전제)',
detail: 'GA4 커스텀 채널그룹(chatgpt.com·perplexity.ai·gemini.google.com·copilot·claude.ai) 생성. nginx access.log에서 AI 봇 히트 추출 + IP 검증 파이프라인. GSC·Bing Webmaster 등록 확인 + IndexNow. 질의 10개 × 5회 기준선 스팟체크.',
criterionIds: ['E1', 'E2', 'E3', 'E4', 'A6'],
effort: '1주',
},
{
priority: 'P1',
title: '메인·시술 페이지에 정의문 + FAQ 도입',
detail: '각 핵심 페이지 첫 단락에 "뷰성형외과는 서울 강남 신논현역 1분 거리의 가슴성형·안면윤곽 전문 성형외과로, 마취과 전문의가 상주한다"형 정의문. 시술별 FAQ 5~8개(가격대·수술시간·회복기간·보형물 종류·재수술)를 H3 질문형으로 작성 + FAQPage 스키마.',
criterionIds: ['C1', 'C2', 'C4', 'C8'],
effort: '2~4주',
},
{
priority: 'P1',
title: 'H1 재설계 + 이미지 속 정보의 텍스트화',
detail: '페이지당 H1 1개 서술형("뷰성형외과 UIU 가슴성형: 보형물 선택과 안전 시스템"). 모바일/PC 중복 H2 제거. 보형물 비교·시술 비교를 HTML <table>로. 의료진 페이지에 전문의 자격·경력·학회를 텍스트 + Physician 스키마로.',
criterionIds: ['C3', 'C5', 'C7', 'B3'],
effort: '2~4주',
},
{
priority: 'P1',
title: 'WordPress 5.5.3 → 최신 업그레이드',
detail: '6년 된 코어는 보안 위험이자 스팸 주입 시 AI 오인용 위험. 업그레이드 후 alt 누락 111개 보완, HTML 무게 절감(WPBakery 인라인 CSS 정리).',
criterionIds: ['F2', 'F1', 'F3'],
effort: '1주',
},
{
priority: 'P2',
title: '신선도 신호 + 오픈웹 시딩',
detail: 'dateModified 마크업 활성화, 유튜브 영상을 사이트 글로 전사(트랜스크립트 요약)해 매월 갱신. 티스토리·언론 기고로 naver.com 외 언급 도메인 확보. 네이버 블로그는 AI에 안 보이므로 글로벌 AEO 용도로는 쓰지 않는다.',
criterionIds: ['C6', 'D3'],
effort: '지속',
},
],
notDoing: [
{ item: 'llms.txt 제작', reason: 'Google 공식(2026-06) 효과 0, 채택률 0.13%, 서버 로그에 요청 자체가 없음. 위약이다.' },
{ item: '"스키마 넣으면 AI가 인용합니다" 약속', reason: '인과 증거 없음. 스키마는 엔티티 식별을 돕는 위생 조치로만 설명한다.' },
{ item: '단발 조회로 순위·노출 보고', reason: 'LLM 답변 분산 10~34%. 반복 측정 + 신뢰구간으로만 보고한다.' },
{ item: '답변엔진 UI 자동 조회', reason: 'OpenAI·Perplexity 약관 위반. 주력 측정은 오너가 소유한 신호(로그·GA4)로 한다.' },
{ item: '네이버 블로그 증량', reason: 'blog.naver.com robots.txt가 AI 크롤링을 전면 금지. 글로벌 AI 답변 기여도 0. 네이버 AI 브리핑은 별도 트랙.' },
],
};
export const DISCOVERY_RESULTS: Record<string, DiscoveryResult> = {
viewclinic: DISCOVERY_VIEWCLINIC,
};