fix: 뷰성형외과 재채점 4건 반영 (A5·B4·C6·D6) — 48/C → 49/C

- audit_aeo_geo.py 재채점에서 확인된 기존 수작업 실측의 샘플링 누락 보정
- A5 2→3 (page/portfolio-sitemap lastmod 최신 2026-08-31), B4 2→1 (시술 페이지 세 번째 주소 표기),
  C6 1→3 (article:modified_time·dateModified 2026-04-17 실재), D6 unverified→0 (Wikidata 검색 결과 없음)
- keyFindings '15개월간 갱신 신호 없음' → '갱신 신호는 살아 있다(블로그만 2024-05 정지)'로 정정
- 검증 분모 88→89 (검증 32/36), 등급·목표(C→B) 변화 없음

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WgWoJZAvvzMxTpWeenZSia
This commit is contained in:
Haewon Kam 2026-08-31 16:46:29 +09:00
parent 06a29fdf7c
commit f50426eaed
2 changed files with 17 additions and 13 deletions

View File

@ -104,8 +104,9 @@ auto 22항목 중 **18항목 기존 실측(2026-08-28)과 일치**. 불일치 4
| C6 | 1 | 3 | 시술 페이지에 article:modified_time·dateModified(2026-04-17) 실재 — 기존 실측은 메인만 확인 | | C6 | 1 | 3 | 시술 페이지에 article:modified_time·dateModified(2026-04-17) 실재 — 기존 실측은 메인만 확인 |
| D6 | unverified | 0 | Wikidata API 조회 자동화됨 (기존은 미실시) | | D6 | unverified | 0 | Wikidata API 조회 자동화됨 (기존은 미실시) |
주의: `discovery_viewclinic.ts`는 2026-08-28 실측 기록으로 그대로 두었다. 위 4건을 반영해 뷰성형외과 점수를 2026-08-31 haewon 결정으로 위 4건을 `discovery_viewclinic.ts`에 반영했다: 48점/C (42.1/88, 검증 31/36)
갱신할지(48/C가 소폭 오름)는 오너 결정 사항. 갱신하려면 스크립트 재실행 후 semi/manual만 기존 값 이식하면 된다. → **49점/C (44.0/89, 검증 32/36)**. 등급·목표(C→B) 변화 없음. keyFindings의 "15개월간 갱신 신호 없음"은
"갱신 신호는 살아 있다(단 블로그는 2024-05 정지)"로 정정.
### 새 업체 30분 온보딩 플로우 ### 새 업체 30분 온보딩 플로우

View File

@ -1,6 +1,8 @@
/** /**
* 뷰성형외과 (viewclinic.com) AEO/GEO 진단 결과 * 뷰성형외과 (viewclinic.com) AEO/GEO 진단 결과
* 실측일: 2026-08-28 · 도구: crawler_audit.py + curl + HTML 파서 * 실측일: 2026-08-28 · 도구: crawler_audit.py + curl + HTML 파서
* 2026-08-31 audit_aeo_geo.py 재채점 반영: A5(2→3)·B4(2→1)·C6(1→3)·D6(unverified→0)
* — 기존 수작업 실측의 샘플링 누락 보정 (post-sitemap만 확인, 시술 페이지 meta 미확인 등)
* 미검증 항목은 'unverified'. 오너 접근(GA4·GSC·Bing) 또는 수동 확인이 필요하다. * 미검증 항목은 'unverified'. 오너 접근(GA4·GSC·Bing) 또는 수동 확인이 필요하다.
*/ */
import type { DiscoveryResult } from '../types/discovery'; import type { DiscoveryResult } from '../types/discovery';
@ -10,13 +12,14 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
clinicName: '뷰성형외과', clinicName: '뷰성형외과',
url: 'https://www.viewclinic.com', url: 'https://www.viewclinic.com',
industry: '성형외과 (강남 신논현)', industry: '성형외과 (강남 신논현)',
auditedAt: '2026-08-28', auditedAt: '2026-08-31',
rubricVersion: '1.0', rubricVersion: '1.0',
conditions: [ conditions: [
'실측 대상: 메인 페이지 + /breast/main/ (가슴성형) 2개 URL, JS 미실행 HTML 기준', '실측 대상: 메인 페이지 + /breast/main/ (가슴성형) 2개 URL, JS 미실행 HTML 기준',
'크롤러 접근성: robots.txt 파싱 + 12개 AI 봇 UA 실제 GET 요청', '크롤러 접근성: robots.txt 파싱 + 12개 AI 봇 UA 실제 GET 요청',
'강남언니·Google 비즈니스 프로필은 공개 페이지를 실측(2026-08-28). GBP 소유권 클레임 여부·인사이트와 측정 인프라(GA4·GSC·Bing·서버로그)는 오너 접근 필요 → 미검증 처리, 분모 제외', '강남언니·Google 비즈니스 프로필은 공개 페이지를 실측(2026-08-28). GBP 소유권 클레임 여부·인사이트와 측정 인프라(GA4·GSC·Bing·서버로그)는 오너 접근 필요 → 미검증 처리, 분모 제외',
'답변엔진 언급률은 측정하지 않았다 (단발 조회는 무효, 반복 측정은 별도 기준선 단계에서 수행)', '답변엔진 언급률은 측정하지 않았다 (단발 조회는 무효, 반복 측정은 별도 기준선 단계에서 수행)',
'2026-08-31 자동 채점기(audit_aeo_geo.py) 재채점으로 A5·B4·C6·D6 4항목 보정 (전체 sitemap·시술 페이지 meta·Wikidata까지 실측 범위 확장)',
], ],
results: [ results: [
// A. 접근성 // A. 접근성
@ -24,7 +27,7 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
{ criterionId: 'A2', level: 3, evidence: 'Server: nginx 직접 응답, Cloudflare 헤더 없음, AI UA 챌린지 없음' }, { criterionId: 'A2', level: 3, evidence: 'Server: nginx 직접 응답, Cloudflare 헤더 없음, AI UA 챌린지 없음' },
{ criterionId: 'A3', level: 3, evidence: 'WordPress 서버 렌더링. JS 미실행 HTML에서 본문 텍스트 10,757자 추출' }, { criterionId: 'A3', level: 3, evidence: 'WordPress 서버 렌더링. JS 미실행 HTML에서 본문 텍스트 10,757자 추출' },
{ criterionId: 'A4', level: 3, evidence: 'http://viewclinic.com → 301 → https://www.viewclinic.com/ 정본 수렴' }, { 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: 'A5', level: 3, evidence: 'robots.txt에 sitemap 선언, 200 응답, AIOSEO 3.7.1 동적 생성, URL 3,636개. page/portfolio-sitemap lastmod 최신 2026-08-31 (단 post-sitemap은 2024-05-31에 멈춤)' },
{ criterionId: 'A6', level: 'unverified', evidence: 'Bing Webmaster Tools 등록 여부는 오너 계정 접근 필요' }, { criterionId: 'A6', level: 'unverified', evidence: 'Bing Webmaster Tools 등록 여부는 오너 계정 접근 필요' },
{ criterionId: 'A7', level: 2, evidence: 'TTFB 0.135s (양호) / 초기 HTML 838KB (비대). 시술 페이지 862KB' }, { criterionId: 'A7', level: 2, evidence: 'TTFB 0.135s (양호) / 초기 HTML 838KB (비대). 시술 페이지 862KB' },
@ -32,7 +35,7 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
{ criterionId: 'B1', level: 1, evidence: 'JSON-LD 2블록 중 ItemList 블록이 문법 오류(쉼표 누락, line 11)로 파싱 실패 → 시술 목록 구조화 데이터 전체 무효', source: 'Expecting \',\' delimiter: line 11 column 7' }, { 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: 'B2', level: 1, evidence: 'Organization + WebSite + WebPage만 존재. MedicalClinic/LocalBusiness 없음 → 주소·전화·진료시간이 구조화되어 있지 않음' },
{ criterionId: 'B3', level: 0, evidence: 'Physician 스키마 없음. 의료진 정보는 HTML 텍스트·이미지로만 존재' }, { criterionId: 'B3', level: 0, evidence: 'Physician 스키마 없음. 의료진 정보는 HTML 텍스트·이미지로만 존재' },
{ criterionId: 'B4', level: 2, evidence: '주소 2가지 표기 혼재: "서울 강남구 봉은사로 107 뷰성형외과 빌딩" / "서울특별시 강남구 봉은사로 107, 뷰성형외과빌딩". 전화 02-539-1177 + 휴대폰 2개 혼재' }, { criterionId: 'B4', level: 1, evidence: '주소 3가지 표기 혼재: "서울 강남구 봉은사로 107 뷰성형외과 빌딩" / "서울특별시 강남구 봉은사로 107, 뷰성형외과빌딩" / 시술 페이지 "서울시 강남구 봉은사로 107, 뷰성형외과빌딩(논현동…". 전화 02-539-1177·02-539-1132 + 휴대폰 혼재' },
{ criterionId: 'B5', level: 0, evidence: 'Organization.sameAs: [] (빈 배열). 푸터에 YouTube·Instagram·Facebook·네이버블로그 링크가 있으나 스키마에 미연결' }, { criterionId: 'B5', level: 0, evidence: 'Organization.sameAs: [] (빈 배열). 푸터에 YouTube·Instagram·Facebook·네이버블로그 링크가 있으나 스키마에 미연결' },
{ criterionId: 'B6', level: 2, evidence: 'rel=canonical self-referencing 존재' }, { criterionId: 'B6', level: 2, evidence: 'rel=canonical self-referencing 존재' },
{ criterionId: 'B7', level: 0, evidence: '영문 사이트가 별도 도메인(viewplasticsurgery.com, en-US)으로 존재하나 두 사이트 어디에도 hreflang 없음. 다국어 페이지가 있는데 미연결' }, { criterionId: 'B7', level: 0, evidence: '영문 사이트가 별도 도메인(viewplasticsurgery.com, en-US)으로 존재하나 두 사이트 어디에도 hreflang 없음. 다국어 페이지가 있는데 미연결' },
@ -43,7 +46,7 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
{ criterionId: 'C3', level: 0, evidence: 'H1 5개: "VIEW SELFIE / VIEW EVENT / VIEW SHORTS / VIEW FILM / VIEW SPECIALITY". 전부 영문 라벨. H2는 같은 문구가 2회씩 중복(모바일/PC 분기). 시술 페이지 H1 없음' }, { 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: 'C4', level: 1, evidence: '메타 설명에 "가슴보형물사용량1위" 등 주장형 문구. 가슴성형 페이지에 가격/비용 단어 8회이나 표기된 가격대·수술시간·회복기간 표 없음' },
{ criterionId: 'C5', level: 0, evidence: 'HTML <table> 없음. 비교 정보는 이미지로 추정' }, { 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: 'C6', level: 3, evidence: '시술 페이지에 article:modified_time·dateModified 2026-04-17 존재, page/portfolio-sitemap lastmod 최신 2026-08-31. 단 블로그 포스트(post-sitemap)는 2024-05-31에 멈춤' },
{ criterionId: 'C7', level: 2, evidence: '원장·전문의·의료진 언급 17회, 모티바 글로벌 KOL·보건복지부장관표창·갈더마 방문 등 권위 신호 존재. 단 구조화 안 됨' }, { criterionId: 'C7', level: 2, evidence: '원장·전문의·의료진 언급 17회, 모티바 글로벌 KOL·보건복지부장관표창·갈더마 방문 등 권위 신호 존재. 단 구조화 안 됨' },
{ criterionId: 'C8', level: 1, evidence: 'H2 "철저한 정밀 검진 / ONE_STOP 시스템 / 1:1 전담 마취시스템". 단독으로 떼면 어느 병원의 무엇인지 알 수 없음' }, { criterionId: 'C8', level: 1, evidence: 'H2 "철저한 정밀 검진 / ONE_STOP 시스템 / 1:1 전담 마취시스템". 단독으로 떼면 어느 병원의 무엇인지 알 수 없음' },
@ -53,7 +56,7 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
{ criterionId: 'D3', level: 2, evidence: '자체 YouTube 채널 활발(VIEW SHORTS/FILM, 최신 영상 제목 다수). 티스토리·언론 언급은 미집계' }, { criterionId: 'D3', level: 2, evidence: '자체 YouTube 채널 활발(VIEW SHORTS/FILM, 최신 영상 제목 다수). 티스토리·언론 언급은 미집계' },
{ criterionId: 'D4', level: 1, evidence: '주소 표기 3종 혼재: 홈페이지 "서울 강남구 봉은사로 107 뷰성형외과 빌딩" / 강남언니 "서울 강남구 봉은사로 107 (논현동)" / GBP "서울특별시 강남구 봉은사로 107". GBP 전화 누락, 웹사이트 도메인 불일치' }, { criterionId: 'D4', level: 1, evidence: '주소 표기 3종 혼재: 홈페이지 "서울 강남구 봉은사로 107 뷰성형외과 빌딩" / 강남언니 "서울 강남구 봉은사로 107 (논현동)" / GBP "서울특별시 강남구 봉은사로 107". GBP 전화 누락, 웹사이트 도메인 불일치' },
{ criterionId: 'D5', level: 2, evidence: '네이버 플레이스 존재(리뷰 776건, 2026-04 INFINITH 리포트 기준). 홈페이지 링크 연결 여부 미확인 → 보수적으로 2' }, { criterionId: 'D5', level: 2, evidence: '네이버 플레이스 존재(리뷰 776건, 2026-04 INFINITH 리포트 기준). 홈페이지 링크 연결 여부 미확인 → 보수적으로 2' },
{ criterionId: 'D6', level: 'unverified', evidence: 'Wikidata 조회 미실시' }, { criterionId: 'D6', level: 0, evidence: 'Wikidata에서 "뷰성형외과" 검색 결과 없음 (wbsearchentities ko, 2026-08-31)' },
// E. 측정 // E. 측정
{ criterionId: 'E1', level: 'unverified', evidence: '서버 로그 접근 필요 (nginx 직접 호스팅, Cloudflare AI Crawl Control 미사용)' }, { criterionId: 'E1', level: 'unverified', evidence: '서버 로그 접근 필요 (nginx 직접 호스팅, Cloudflare AI Crawl Control 미사용)' },
@ -75,7 +78,7 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
}, },
{ {
title: '읽어도 "누구인지" 확정할 수 없다', title: '읽어도 "누구인지" 확정할 수 없다',
detail: 'MedicalClinic 스키마가 없고 Organization.sameAs가 비어 있으며, 시술 목록 JSON-LD는 쉼표 하나가 빠져 통째로 무효다. 주소 표기도 사이트 안에서 2가지. AI는 "뷰성형외과"라는 이름과 흩어진 사실을 하나의 엔티티로 묶을 근거를 얻지 못한다.', detail: 'MedicalClinic 스키마가 없고 Organization.sameAs가 비어 있으며, 시술 목록 JSON-LD는 쉼표 하나가 빠져 통째로 무효다. 주소 표기도 사이트 안에서 3가지(메인 2종 + 시술 페이지 1종). AI는 "뷰성형외과"라는 이름과 흩어진 사실을 하나의 엔티티로 묶을 근거를 얻지 못한다.',
severity: 'critical', severity: 'critical',
}, },
{ {
@ -84,9 +87,9 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
severity: 'critical', severity: 'critical',
}, },
{ {
title: '15개월간 갱신 신호 없음', title: '갱신 신호는 살아 있다. 단 블로그 포스트는 2024-05에 멈췄다',
detail: 'post-sitemap의 최신 lastmod가 2024-05-31이고 dateModified 마크업이 없다. 유튜브는 활발하지만 그 신선도가 사이트로 전달되지 않는다. 오래된 사이트는 brand 질의에서 "영업 중인가?" 오정보 위험을 만든다.', detail: '재채점에서 시술 페이지의 article:modified_time(2026-04-17)과 page/portfolio-sitemap의 최신 lastmod(2026-08-31)를 확인했다. 사이트 자체는 계속 갱신되고 있어 "영업 중인가?" 오정보 위험은 낮다. 다만 블로그 포스트(post-sitemap)는 2024-05-31 이후 멈춰 있어, 신규 텍스트 콘텐츠 공급이 유튜브에 치우쳐 있다.',
severity: 'warning', severity: 'good',
}, },
{ {
title: '강남언니는 강하다. GBP는 전화번호가 없고 웹사이트가 다르다', title: '강남언니는 강하다. GBP는 전화번호가 없고 웹사이트가 다르다',
@ -139,8 +142,8 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
}, },
{ {
priority: 'P2', priority: 'P2',
title: '신선도 신호 + 오픈웹 시딩', title: '블로그 재가동 + 오픈웹 시딩',
detail: 'dateModified 마크업 활성화, 유튜브 영상을 사이트 글로 전사(트랜스크립트 요약)해 매월 갱신. 티스토리·언론 기고로 naver.com 외 언급 도메인 확보. 네이버 블로그는 AI에 안 보이므로 글로벌 AEO 용도로는 쓰지 않는다.', detail: '2024-05에 멈춘 블로그(post-sitemap)를 재가동해 유튜브 영상을 사이트 글로 전사(트랜스크립트 요약)하고 매월 갱신. 티스토리·언론 기고로 naver.com 외 언급 도메인 확보. 네이버 블로그는 AI에 안 보이므로 글로벌 AEO 용도로는 쓰지 않는다.',
criterionIds: ['C6', 'D3'], criterionIds: ['C6', 'D3'],
effort: '지속', effort: '지속',
}, },