fix: 뷰성형외과 AI Answer Readiness 리포트 v1.1 — 2026-09-07 재검증 정정 3건 + 병원 요청 슬라이드
정정 (원본 HTML 5개 URL 재파싱): - 블로그 정지(2024-05) → 오판. www post-sitemap만 본 결과. blog.viewclinic.com은 09-07까지 발행, robots가 AI 봇 14종 명시 허용 - FAQ 0개 → 프리저베 페이지 FAQ 7문항 + 유효 FAQPage 스키마. C2 0→2 - 수술시간·회복 표기 없음 → 프리저베·코·윤곽 페이지에 텍스트 존재(가격대 없음). C4 1→2 - 총점 50 → 54 (C 유지), C 카테고리 28% → 44%. 그 외 판정(H1 5개, ItemList 파싱 실패, sameAs 빈 값, 표 0, 진료시간 이미지, WP 5.5.3)은 재확인 산출물: - src/data/discovery_viewclinic.ts: 레벨·근거·keyFindings·actions 정정, auditedAt 2026-09-07 (/discovery/viewclinic 반영) - 덱 v1.1 (16장): Corrections 슬라이드 + "뷰성형외과에 부탁드리는 것"(정보·확인·액션 3열) 추가. haewon 편집 원본 v1.0은 보존 - 20in 원본 + 표준캔버스 축소본, PDF 각 1부 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
659f22b987
commit
90ad27ee73
BIN
docs/reports/Viewclinic_AI_Answer_Readiness_Report_v1.1.pdf
Normal file
BIN
docs/reports/Viewclinic_AI_Answer_Readiness_Report_v1.1.pdf
Normal file
Binary file not shown.
BIN
docs/reports/Viewclinic_AI_Answer_Readiness_Report_v1.1.pptx
Normal file
BIN
docs/reports/Viewclinic_AI_Answer_Readiness_Report_v1.1.pptx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
283
docs/reports/build_viewclinic_deck_v1_1.py
Normal file
283
docs/reports/build_viewclinic_deck_v1_1.py
Normal file
@ -0,0 +1,283 @@
|
||||
"""
|
||||
Viewclinic AI Answer Readiness Report v1.1 덱 빌드 (INFINITH Deck 규격)
|
||||
|
||||
v1.0(2026-09-01)을 2026-09-07 재검증으로 정정한 판. 원본 v1.0 파일은 haewon이 폰트를 직접 손본 정본이라
|
||||
덮어쓰지 않고 v1.1 파일로 새로 저장한다.
|
||||
|
||||
정정 3건: 블로그 정지(오판) · FAQ 0개(프리저베 페이지 FAQ 7문항) · 수술시간·회복 표기 없음(프리저베·코·윤곽 페이지에 있음)
|
||||
점수: 50 → 54 (C 유지). C 카테고리 28% → 44%.
|
||||
추가 2장: 재검증 정정 내역 · 뷰성형외과에 드리는 요청(서포터즈 강화).
|
||||
|
||||
폰트: haewon 확정 기준(본문 20 / 리드 24 / 카드 제목 28). ifd 분량 검사(폰트 축소 금지) 안에서 카피를 줄였다.
|
||||
|
||||
python3 docs/reports/build_viewclinic_deck_v1_1.py docs/reports/Viewclinic_AI_Answer_Readiness_Report_v1.1.pptx
|
||||
"""
|
||||
import sys
|
||||
sys.path.insert(0, "/Users/haewonkam/.claude/skills/infinith-deck/scripts")
|
||||
from ifd import Deck
|
||||
|
||||
OUT = sys.argv[1] if len(sys.argv) > 1 else "Viewclinic_AI_Answer_Readiness_Report_v1.1.pptx"
|
||||
BODY, HEAD = 20.0, 28.0
|
||||
d = Deck()
|
||||
|
||||
# 01 Cover
|
||||
d.cover(
|
||||
eyebrow="AI DISCOVERY · AEO / GEO AUDIT v1.1",
|
||||
title_lines=["AI Answer", "Readiness Report."],
|
||||
subtitle="뷰성형외과 · viewclinic.com · 실측 2026. 08. 28 · 재채점 09. 01 · 재검증 정정 09. 07",
|
||||
meta_right="AI Discovery Report · 2026",
|
||||
)
|
||||
|
||||
# 02 Executive summary
|
||||
s = d.slide(eyebrow="Executive Summary",
|
||||
title="읽을 수는 있지만, ", title_accent="인용할 근거가 부족하다",
|
||||
lede=["36개 항목 중 32개를 실측했고, 오너 계정이 필요한 4개는 분모에서 제외했습니다.",
|
||||
"접근성(A) 98%와 표면(D) 68%는 양호. 엔티티(B) 25%와 콘텐츠(C) 44%가 총점을 끌어내립니다."],
|
||||
section="Summary")
|
||||
k1, k2, k3, k4 = s.cards4(y=s.band_y, h=3.4)
|
||||
k1.kpi("54 / 100", "AI ANSWER READINESS", "등급 C · 48.0 / 89점 · v1.0 50점 정정")
|
||||
k2.kpi("98%", "A · 크롤러 접근성", "AI 검색봇 12종 전부 허용")
|
||||
k3.kpi("44%", "C · 인용 가능 콘텐츠", "정의문 0 · FAQ 1페이지 · 표 0")
|
||||
k4.kpi("4 / 36", "미검증 항목", "GA4 · 서버로그 · GSC · Bing")
|
||||
|
||||
# 03 What AI sees (dark)
|
||||
s = d.slide(eyebrow="What AI Sees · 진단의 결론",
|
||||
title="문제는 차단이 아니라 ", title_accent="내용이다", dark=True, section="Findings")
|
||||
L, R = s.cards2(y=s.band_y)
|
||||
L.chip("정상", "good").rows([
|
||||
("크롤러 접근 정상", "robots.txt가 AI 검색봇 12종을 허용. Cloudflare 차단 없음."),
|
||||
("서버 렌더링 본문", "WordPress가 본문을 서버에서 렌더. JS 없이 10,757자 추출."),
|
||||
("표면이 넓다", "강남언니 후기 19,373건. 유튜브 1,215편. 블로그는 발행 중이고 AI 봇 허용."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
R.chip("치명", "critical").rows([
|
||||
("누구인지 확정 불가", "MedicalClinic 스키마 없음, sameAs 비어 있음. 시술 목록 JSON-LD 무효."),
|
||||
("인용할 문장 부족", "H1 5개가 영문 라벨. HTML 표 0, 병원 정의문 0. FAQ는 프리저베뿐."),
|
||||
("표면 간 NAP 불일치", "GBP 전화번호 없음. 웹사이트가 영문 도메인. 주소 표기 3종."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
|
||||
# 04 Scorecard
|
||||
s = d.slide(eyebrow="Scorecard · 6 Categories",
|
||||
title="카테고리별 점수와 ", title_accent="검증 범위",
|
||||
lede="검증된 항목만으로 정규화했습니다. 09-07 재검증으로 C2·C4를 정정해 C가 28%에서 44%가 됐습니다.",
|
||||
section="Scorecard")
|
||||
W, Rail = s.cards2(y=s.band_y, split=0.66)
|
||||
W.grid(
|
||||
headers=["카테고리", "배점", "획득", "검증", "판정"],
|
||||
col_w=[4.6, 1.3, 2.0, 1.4, 1.6],
|
||||
rows=[
|
||||
["A · AI 크롤러 접근성", "20", "16.7 / 17", "6 / 7", "우수"],
|
||||
["B · 엔티티 식별·구조화", "20", "5.0 / 20", "7 / 7", "미흡"],
|
||||
["C · 답변 인용 가능 콘텐츠", "25", "11.0 / 25", "8 / 8", "미흡"],
|
||||
["D · AI 인용 표면 확보", "20", "13.7 / 20", "6 / 6", "양호"],
|
||||
["E · AI 가시성 측정 인프라", "10", "0 / 2", "1 / 4", "미설치"],
|
||||
["F · 기술 위생", "5", "1.7 / 5", "4 / 4", "미흡"],
|
||||
],
|
||||
tones=[[None, None, None, None, "info"], [None, None, None, None, "warning"],
|
||||
[None, None, None, None, "warning"], [None, None, None, None, "good"],
|
||||
[None, None, None, None, "critical"], [None, None, None, None, "warning"]],
|
||||
row_h=0.62, size=BODY,
|
||||
)
|
||||
Rail.title("읽는 법", size=HEAD).bullets([
|
||||
"분모는 검증 항목의 배점 합. E는 분모가 2점뿐.",
|
||||
"48.0 / 89 = 54점, 등급 C. v1.0 50점은 오판 포함.",
|
||||
"미검증 4개는 계정 접근 후 1일 안에 채운다.",
|
||||
], size=BODY)
|
||||
|
||||
# 05 A 접근성
|
||||
s = d.slide(eyebrow="A · Access & Crawlability · 98%",
|
||||
title="크롤러 접근은 ", title_accent="열려 있다", section="A · Access")
|
||||
L, R = s.cards2(y=s.band_y)
|
||||
L.chip("우수 · 3/3", "info").rows([
|
||||
("A1 검색용 AI 봇 허용", "Disallow는 /wp-admin/ 뿐. 12종 UA로 GET, 전부 200."),
|
||||
("A2 CDN 차단 없음", "nginx 직접 응답. Cloudflare 헤더와 AI UA 챌린지 없음."),
|
||||
("A4 HTTPS 정합", "http → 301 → https://www.viewclinic.com/ 정본 수렴."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
R.chip("보완·미검증", "warning").rows([
|
||||
("A5 sitemap 우수", "page·portfolio lastmod 2026-08-31. 블로그는 별도 서브도메인(정정)."),
|
||||
("A7 응답 속도·무게", "TTFB 0.135s 양호. 초기 HTML 838KB, 기준 300KB의 2.8배."),
|
||||
("A6 Bing 색인 (미검증)", "ChatGPT 검색은 Bing 인덱스 의존. 계정 확인 필요."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
|
||||
# 06 B 엔티티 (dark)
|
||||
s = d.slide(eyebrow="B · Entity & Structured Data · 25%",
|
||||
title="AI가 이 병원을 ", title_accent="하나의 엔티티로 못 묶는다", dark=True, section="B · Entity")
|
||||
L, R = s.cards2(y=s.band_y)
|
||||
L.chip("치명", "critical").rows([
|
||||
("B1 JSON-LD 문법 무효", "ItemList 블록 쉼표 누락. 09-07에도 그대로. 파서가 통째로 버림."),
|
||||
("B2 MedicalClinic 없음", "Organization·WebSite·WebPage만. 주소·전화·진료시간 미구조화."),
|
||||
("B3 Physician 없음", "의료진은 텍스트와 이미지뿐. 누가 수술하는지 기계가 못 읽음."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
R.chip("미흡", "warning").rows([
|
||||
("B5 sameAs 비어 있음", "푸터에 유튜브·인스타·블로그 링크가 있으나 스키마 미연결."),
|
||||
("B4 NAP 표기 3종 혼재", "주소 표기 3종. 전화도 2회선과 휴대폰 혼재."),
|
||||
("B7 영문 사이트 미연결", "viewplasticsurgery.com이 별도. hreflang 없음."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
|
||||
# 07 C 콘텐츠
|
||||
s = d.slide(eyebrow="C · Answer-Ready Content · 44%",
|
||||
title="프리저베 한 페이지만 ", title_accent="인용할 구조를 갖췄다", section="C · Content")
|
||||
L, R = s.cards2(y=s.band_y)
|
||||
L.chip("0점 항목", "critical").rows([
|
||||
("C1 병원 정의문 없음", "메인은 슬라이더와 라벨. 가슴성형 페이지 첫 텍스트는 상담 폼."),
|
||||
("C3 H1 5개, 전부 라벨", "가슴·코·오시는길은 H1 없음. 프리저베만 H1 1개 서술형."),
|
||||
("C5 HTML 표 없음", "5개 페이지 모두 table 0개. 비교 정보는 이미지."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
R.chip("정정·부분 점수", "warning").rows([
|
||||
("C2 FAQ는 프리저베에만 (정정)", "FAQ 7문항과 유효한 FAQPage 스키마. 다른 시술 페이지는 없음."),
|
||||
("C4 수치는 시술 상세에 (정정)", "프리저베 20~40분·회복 1~3일, 코 1~2시간·실밥 7일. 가격대 없음."),
|
||||
("C6 신선도 정상", "시술 페이지 2026-04-17, sitemap 08-31, 블로그 09-07 게시."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
|
||||
# 08 D 표면 / E 측정 (dark)
|
||||
s = d.slide(eyebrow="D · Surfaces / E · Measurement",
|
||||
title="강남언니는 강하고, ", title_accent="GBP는 전화번호가 없다", dark=True, section="D · Surfaces")
|
||||
L, R = s.cards2(y=s.band_y)
|
||||
L.chip("D · 표면 68%", "good").rows([
|
||||
("D1 강남언니 우수", "후기 19,373건, 의료진 26명, 이벤트 52건. 핵심 표면 확보."),
|
||||
("D2 GBP 4.9점 (901)", "게시물 활성. 전화번호 미등록, 웹사이트 영문 도메인(08-28 실측)."),
|
||||
("D3 오픈웹 표면", "유튜브 1,215편, 블로그 발행 중, 언론 1,137건. NAP 불일치로 3점 보류."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
R.chip("E · 측정 0%", "critical").rows([
|
||||
("E1 크롤러 로그", "nginx 직접 호스팅. AI 봇 히트 추출 파이프라인 없음."),
|
||||
("E2 GA4 AI 유입 채널", "chatgpt.com·perplexity.ai 채널그룹 없음. 계정 접근 필요."),
|
||||
("E4 기준선 반복 측정", "120문항 API 실측 1회(09-01). 반복 측정은 미실시."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
|
||||
# 09 Action plan
|
||||
s = d.slide(eyebrow="Action Plan",
|
||||
title="즉시 고칠 것과 ", title_accent="4주 안에 만들 것", section="Action Plan")
|
||||
a, b, c = s.cards3(y=s.band_y)
|
||||
a.chip("P0 · 1일~1주", "critical").title("엔티티·표면·측정", size=HEAD).bullets([
|
||||
"깨진 JSON-LD 수정, MedicalClinic 스키마.",
|
||||
"GBP 전화번호 등록, 웹사이트 교정.",
|
||||
"4개 표면 NAP 통일. hreflang 연결.",
|
||||
"GA4 AI 채널, 서버로그, GSC·Bing.",
|
||||
], size=BODY)
|
||||
b.chip("P1 · 4주 내", "warning").title("콘텐츠 구조", size=HEAD).bullets([
|
||||
"프리저베 구조를 가슴·코·눈·윤곽으로 확산.",
|
||||
"핵심 페이지 첫 단락에 병원 정의문.",
|
||||
"비교표를 HTML 표로. Physician 스키마.",
|
||||
"WordPress 업그레이드, alt 111개 보완.",
|
||||
], size=BODY)
|
||||
c.chip("P2 · 지속", "good").title("연결·시딩", size=HEAD).bullets([
|
||||
"블로그 글과 시술 페이지를 내부 링크로.",
|
||||
"유튜브 영상을 블로그 글로 전사.",
|
||||
"월 1회 갱신, 분기 1회 반복 측정.",
|
||||
], size=BODY)
|
||||
|
||||
# 10 Roadmap (dark)
|
||||
s = d.slide(eyebrow="Roadmap · 8 Weeks",
|
||||
title="8주 안에 ", title_accent="C에서 B로", dark=True, section="Roadmap")
|
||||
s.stats3([
|
||||
("W1–2", "스키마·NAP·측정 인프라 설치.\n기준선 반복 측정 1회."),
|
||||
("W3–6", "정의문·FAQ·H1 재설계·HTML 표.\nWordPress 업그레이드."),
|
||||
("W7–8", "재진단. 미검증 4개 반영해\n총점 재산정."),
|
||||
], y=s.band_y + 0.6)
|
||||
|
||||
# 11 Validation
|
||||
s = d.slide(eyebrow="Validation · 120-Question Live Test",
|
||||
title="진단을 120문항 실측으로 ", title_accent="검증했다",
|
||||
lede="잠재 환자 질문 120개를 OpenAI·Perplexity 정식 API로 질의해 예측력을 채점했습니다 (09-01).",
|
||||
section="Validation")
|
||||
L, R = s.cards2(y=s.band_y)
|
||||
L.chip("예측 적중", "good").rows([
|
||||
("논브랜드 질문에서 부재", "84문항 중 Perplexity 3, ChatGPT 10문항만 언급. 시술 정보 52문항은 0건."),
|
||||
("원인은 콘텐츠(C)", "병원 정의문 0, HTML 표 0, FAQ는 한 페이지. 시술별 인용 단락 부재."),
|
||||
("표면(D)이 브랜드 방어", "병원명을 아는 36문항은 97~100% 답변. 근거는 강남언니·GBP·뉴스."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
R.chip("진단 밖 발견 · 정정 반영", "info").rows([
|
||||
("제3자 표면이 더 넓다", "뉴스·채용공고·바비톡·네이버 예약이 개원연도·주차·휴진을 답함."),
|
||||
("발행 중인 블로그가 인용됨", "ChatGPT 추천 근거가 blog.viewclinic.com. v1.0은 정지로 오판."),
|
||||
("엔진별 오답 편차", "주차 질문에 Perplexity는 정답, ChatGPT는 추측. 구조화 부재의 비용."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
|
||||
# 12 Corrections (dark)
|
||||
s = d.slide(eyebrow="Corrections · 2026-09-07 재검증",
|
||||
title="v1.0에서 틀린 것 ", title_accent="세 가지를 바로잡습니다", dark=True,
|
||||
lede="홈·프리저베·가슴·코·오시는길 5개 URL의 원본 HTML을 다시 받아 파싱하고 점수를 다시 계산했습니다.",
|
||||
section="Corrections")
|
||||
L, R = s.cards2(y=s.band_y)
|
||||
L.chip("정정", "warning").rows([
|
||||
("블로그 정지 → 발행 중", "www post-sitemap만 본 오판. blog.viewclinic.com은 09-07까지 발행, AI 봇 14종 허용."),
|
||||
("FAQ 0개 → 프리저베 7문항", "2개 URL 결과를 전체로 일반화. 프리저베에 FAQ 7문항과 FAQPage 스키마. C2 0→2."),
|
||||
("수치 없음 → 시술 상세에 있음", "프리저베·코·윤곽 페이지에 수술시간·마취·회복 텍스트. 가격대는 없음. C4 1→2."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
R.chip("유지 · 재확인", "info").rows([
|
||||
("그대로 확인된 것", "H1 5개 라벨, ItemList 파싱 실패, sameAs 빈 값, 표 0개, 진료시간 이미지, WP 5.5.3."),
|
||||
("점수", "44.0/89 = 50점 → 48.0/89 = 54점. 등급 C 유지. C 카테고리 28% → 44%."),
|
||||
("재확인 필요", "GBP 전화번호·웹사이트는 08-28 실측값. 병원이 고쳤다면 D2·D4 재채점."),
|
||||
], t_size=HEAD, b_size=BODY)
|
||||
|
||||
# 13 Request to the clinic
|
||||
s = d.slide(eyebrow="Request · 뷰 서포터즈 강화를 위해",
|
||||
title="뷰성형외과에 ", title_accent="부탁드리는 것",
|
||||
lede=["서포터즈 사이트 18편(검토 완료 10편)을 병원의 공식 답으로 완성하려면 병원만 아는 정보가 필요합니다.",
|
||||
"아래 항목은 담당자 한 분이 1~2주 안에 처리하실 수 있는 범위로 추렸습니다."],
|
||||
section="Request")
|
||||
a, b, c = s.cards3(y=s.band_y)
|
||||
a.chip("정보 · 병원만 아는 사실", "info").title("알려 주시면 반영합니다", size=HEAD).bullets([
|
||||
"가슴성형 견적 기본 포함 항목과 결제 방식.",
|
||||
"가슴성형 후 출근 기준과 걷기 시작 시점.",
|
||||
"타원 수술 재수술 상담 가능 여부.",
|
||||
"코·윤곽 재수술 대기 기간, 코 실밥 제거일.",
|
||||
], size=BODY)
|
||||
b.chip("확인 · 검토와 승인", "warning").title("확인해 주시면 켜집니다", size=HEAD).bullets([
|
||||
"검토 대기 5편의 담당 원장 확정과 검토일.",
|
||||
"검토 완료 10편의 기록을 병원 기록과 대조.",
|
||||
"서포터즈 지원 관계 문구 확정.",
|
||||
"작성자 실명·편집 책임자 표기 승인.",
|
||||
], size=BODY)
|
||||
c.chip("액션 · 홈페이지 쪽", "critical").title("병원이 직접 고쳐야 합니다", size=HEAD).bullets([
|
||||
"ItemList JSON-LD 오류 수정, MedicalClinic 추가.",
|
||||
"GBP 전화번호 등록, 웹사이트 교정.",
|
||||
"프리저베 구조를 다른 시술 페이지로 확산.",
|
||||
"서포터즈 정식 도메인 확정과 링크 연결.",
|
||||
], size=BODY)
|
||||
|
||||
# 14 Integrity
|
||||
s = d.slide(eyebrow="What We Don't Sell · 정직성 규약",
|
||||
title="근거 없는 것은 ", title_accent="팔지 않는다", section="Integrity")
|
||||
a, b, c = s.cards3(y=s.band_y)
|
||||
a.icon_square().title("만들지 않는 것", size=HEAD).bullets([
|
||||
"llms.txt. Google 공식 효과 0, 요청 로그 없음.",
|
||||
"네이버 블로그 증량. AI 크롤링 금지 도메인.",
|
||||
], size=BODY)
|
||||
b.icon_square().title("약속하지 않는 것", size=HEAD).bullets([
|
||||
"\"스키마 넣으면 인용됩니다\". 인과 증거 없음.",
|
||||
"순위·노출 보장. 답변은 10~34% 흔들림.",
|
||||
], size=BODY)
|
||||
c.icon_square().title("측정 규율", size=HEAD).bullets([
|
||||
"단발 조회 보고 금지. 반복 측정만.",
|
||||
"답변엔진 UI 자동 조회 금지. 약관 위반.",
|
||||
"틀린 판정은 정정 슬라이드로 남긴다.",
|
||||
], size=BODY)
|
||||
|
||||
# 15 Method
|
||||
s = d.slide(eyebrow="Method · AEO / GEO Rubric v1.0",
|
||||
title="36개 항목, 100점, ", title_accent="근거 등급을 명시", section="Method")
|
||||
a, b, c = s.cards3(y=s.band_y)
|
||||
a.icon_square().title("채점 방식", size=HEAD).bullets([
|
||||
"항목별 0~3 레벨 × 배점. 미검증은 분모 제외.",
|
||||
"A 20 · B 20 · C 25 · D 20 · E 10 · F 5.",
|
||||
"등급 A 81+ · B 61~80 · C 41~60 · D 40 이하.",
|
||||
], size=BODY)
|
||||
b.icon_square().title("배점 근거", size=HEAD).bullets([
|
||||
"차단되면 인용될 수 없다. A·B에 무게.",
|
||||
"콘텐츠 전술 효과는 논쟁 중. C는 원칙만.",
|
||||
"병의원은 강남언니가 장악. D1 배점 6.",
|
||||
], size=BODY)
|
||||
c.icon_square().title("항목마다 붙는 태그", size=HEAD).bullets([
|
||||
"근거 등급: 실측 / 학술 / 벤더 / 추정.",
|
||||
"통제 가능성: 직접 / 영향 / 불가.",
|
||||
"채점 방식: 자동 / 반자동 / 수동.",
|
||||
], size=BODY)
|
||||
|
||||
# 16 Closing
|
||||
d.closing(eyebrow="Next Step",
|
||||
title_lines=["표면은 확보됐습니다.", "홈페이지가 따라가면 됩니다."],
|
||||
lede="P0 세 가지: 스키마, NAP 통일, 측정 인프라. 서포터즈 요청은 담당자 한 분이 처리할 수 있습니다.",
|
||||
cta_primary="P0 착수하기 →", cta_secondary="서포터즈 사이트 보기",
|
||||
contact="o2oteam@o2o.kr")
|
||||
|
||||
d.save(OUT)
|
||||
print("saved", OUT)
|
||||
@ -4,6 +4,8 @@
|
||||
* 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) 또는 수동 확인이 필요하다.
|
||||
* 2026-09-07 재검증(v1.1): 프리저베 페이지에 FAQ 7문항 + FAQPage 스키마와 수술시간·마취·회복 텍스트가 있어 C2(0→2)·C4(1→2) 정정.
|
||||
* blog.viewclinic.com은 2026-09-07까지 발행 중이고 AI 봇 14종을 명시 허용하므로 '블로그 정지' 판정을 철회. 총점 50→54(C).
|
||||
*/
|
||||
import type { DiscoveryResult } from '../types/discovery';
|
||||
|
||||
@ -12,7 +14,7 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
|
||||
clinicName: '뷰성형외과',
|
||||
url: 'https://www.viewclinic.com',
|
||||
industry: '성형외과 (강남 신논현)',
|
||||
auditedAt: '2026-08-31',
|
||||
auditedAt: '2026-09-07',
|
||||
rubricVersion: '1.0',
|
||||
conditions: [
|
||||
'실측 대상: 메인 페이지 + /breast/main/ (가슴성형) 2개 URL, JS 미실행 HTML 기준',
|
||||
@ -20,6 +22,7 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
|
||||
'강남언니·Google 비즈니스 프로필은 공개 페이지를 실측(2026-08-28). GBP 소유권 클레임 여부·인사이트와 측정 인프라(GA4·GSC·Bing·서버로그)는 오너 접근 필요 → 미검증 처리, 분모 제외',
|
||||
'답변엔진 언급률은 측정하지 않았다 (단발 조회는 무효, 반복 측정은 별도 기준선 단계에서 수행)',
|
||||
'2026-08-31 자동 채점기(audit_aeo_geo.py) 재채점으로 A5·B4·C6·D6 4항목 보정 (전체 sitemap·시술 페이지 meta·Wikidata까지 실측 범위 확장)',
|
||||
'2026-09-07 재검증(v1.1): 홈·프리저베·가슴·코·오시는길 5개 URL 원본 HTML 재수집. 프리저베 페이지의 FAQ 7문항(FAQPage 스키마 유효, 모바일 분기로 2문항 중복)과 수술시간 20~40분·마취·회복 1~3일 텍스트를 확인해 C2·C4 정정. blog.viewclinic.com은 2026-09-07 게시까지 활발하고 robots.txt가 AI 봇 14종을 명시 허용. 총점 50→54(C). GBP 항목(D2·D4)은 2026-08-28 실측값 유지, 재확인 필요',
|
||||
],
|
||||
results: [
|
||||
// A. 접근성
|
||||
@ -27,7 +30,7 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
|
||||
{ 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: 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: 'A5', level: 3, evidence: 'robots.txt에 sitemap 선언, 200 응답, AIOSEO 3.7.1 동적 생성, URL 3,636개. page/portfolio-sitemap lastmod 최신 2026-08-31. www의 post-sitemap은 2024-05-31에서 멈췄으나 블로그는 별도 서브도메인 blog.viewclinic.com에서 2026-09-07까지 발행 중 (v1.1 정정)' },
|
||||
{ criterionId: 'A6', level: 'unverified', evidence: 'Bing Webmaster Tools 등록 여부는 오너 계정 접근 필요' },
|
||||
{ criterionId: 'A7', level: 2, evidence: 'TTFB 0.135s (양호) / 초기 HTML 838KB (비대). 시술 페이지 862KB' },
|
||||
|
||||
@ -42,18 +45,18 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
|
||||
|
||||
// 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: 'C2', level: 2, evidence: 'v1.1 정정: 프리저베 페이지(/preserve/)에 FAQ 7문항과 유효한 FAQPage 스키마 존재. 모바일 분기로 2문항이 중복. 메인·가슴성형(/breast/main/)·코성형·오시는길에는 FAQ 없음 → 시술별 확산 전이라 레벨 2', source: 'https://www.viewclinic.com/preserve/ JSON-LD #1 FAQPage (2026-09-07 파싱 성공)' },
|
||||
{ criterionId: 'C3', level: 0, evidence: 'H1 5개: "VIEW SELFIE / VIEW EVENT / VIEW SHORTS / VIEW FILM / VIEW SPECIALITY". 전부 영문 라벨. H2는 같은 문구가 2회씩 중복(모바일/PC 분기). 가슴·코·오시는길 페이지 H1 없음. 프리저베 페이지만 H1 1개 서술형 (2026-09-07 재확인)' },
|
||||
{ criterionId: 'C4', level: 2, evidence: 'v1.1 정정: 프리저베 페이지에 수술시간 20~40분·마취(국소 또는 수면)·회복 1~3일, 코성형 페이지에 수술시간 1~2시간·실밥 7일·일상 5~7일, 안면윤곽 페이지에 1~2시간·전신마취·당일 또는 1일 입원이 텍스트로 있음. 가격대 표기는 없음. 가슴성형 메인(/breast/main/)은 여전히 주장형 문구만' },
|
||||
{ criterionId: 'C5', level: 0, evidence: 'HTML <table> 없음. 비교 정보는 이미지로 추정' },
|
||||
{ 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: 'C6', level: 3, evidence: '시술 페이지에 article:modified_time·dateModified 2026-04-17 존재, page/portfolio-sitemap lastmod 최신 2026-08-31. blog.viewclinic.com은 2026-09-07 게시까지 활발 (v1.1 정정: 이전의 "블로그 2024-05 정지"는 www post-sitemap만 본 오판)' },
|
||||
{ criterionId: 'C7', level: 2, evidence: '원장·전문의·의료진 언급 17회, 모티바 글로벌 KOL·보건복지부장관표창·갈더마 방문 등 권위 신호 존재. 단 구조화 안 됨' },
|
||||
{ criterionId: 'C8', level: 1, evidence: 'H2 "철저한 정밀 검진 / ONE_STOP 시스템 / 1:1 전담 마취시스템". 단독으로 떼면 어느 병원의 무엇인지 알 수 없음' },
|
||||
|
||||
// D. 표면
|
||||
{ criterionId: 'D1', level: 3, evidence: '강남언니 hospitals/189 등록. 후기 19,316건, 이벤트 52건, 의료진 26명(정재현 9.6·후기 3,236 등), 병원정보 10건(CCTV·마취과 상주), 진료시간 표기', source: 'https://www.gangnamunni.com/hospitals/189' },
|
||||
{ criterionId: 'D1', level: 3, evidence: '강남언니 hospitals/189 등록. 후기 19,373건(2026-09-04 재확인, 08-28 19,316건), 이벤트 52건, 의료진 26명(정재현 9.6·후기 3,236 등), 병원정보 10건(CCTV·마취과 상주), 진료시간 표기', source: 'https://www.gangnamunni.com/hospitals/189' },
|
||||
{ criterionId: 'D2', level: 2, evidence: 'GBP 존재. 평점 4.9(리뷰 901), 소유자 제공 게시물 2일 전(소유·활성). 단 전화번호 미등록("장소의 전화번호 추가" 상태), 웹사이트가 국문 홈페이지가 아닌 viewplasticsurgery.com' },
|
||||
{ criterionId: 'D3', level: 2, evidence: '자체 YouTube 채널 활발(VIEW SHORTS/FILM, 최신 영상 제목 다수). 티스토리·언론 언급은 미집계' },
|
||||
{ criterionId: 'D3', level: 2, evidence: '자체 YouTube 채널 활발(영상 1,215편, 2026-09-04). blog.viewclinic.com 활발(AI 봇 14종 명시 허용, 2026-09-07). 언론 보도 1,137건·매체 254곳(2026-09-04 수집). NAP 불일치로 "일관된 언급" 레벨 3은 보류' },
|
||||
{ criterionId: 'D4', level: 1, evidence: '주소 표기 3종 혼재: 홈페이지 "서울 강남구 봉은사로 107 뷰성형외과 빌딩" / 강남언니 "서울 강남구 봉은사로 107 (논현동)" / GBP "서울특별시 강남구 봉은사로 107". GBP 전화 누락, 웹사이트 도메인 불일치' },
|
||||
{ criterionId: 'D5', level: 2, evidence: '네이버 플레이스 존재(리뷰 776건, 2026-04 INFINITH 리포트 기준). 홈페이지 링크 연결 여부 미확인 → 보수적으로 2' },
|
||||
{ criterionId: 'D6', level: 0, evidence: 'Wikidata에서 "뷰성형외과" 검색 결과 없음 (wbsearchentities ko, 2026-08-31)' },
|
||||
@ -82,13 +85,13 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
|
||||
severity: 'critical',
|
||||
},
|
||||
{
|
||||
title: '인용할 문장이 없다',
|
||||
detail: 'H1이 "VIEW SELFIE / VIEW EVENT / VIEW SHORTS…" 5개, FAQ 0개, HTML 표 0개, 정의문 0개. 가슴성형 페이지의 첫 텍스트는 상담 폼이다. 답변엔진이 패시지 단위로 잘라 가져갈 자기완결적 단락이 존재하지 않는다. 권위 신호(KOL·표창)는 있으나 이미지와 슬로건 안에만 있어 텍스트로 읽히지 않는다.',
|
||||
title: '인용할 문장이 부족하다 (v1.1: 프리저베 페이지는 예외)',
|
||||
detail: 'H1이 "VIEW SELFIE / VIEW EVENT / VIEW SHORTS…" 5개, HTML 표 0개, 병원 정의문 0개. 가슴성형 페이지의 첫 텍스트는 상담 폼이다. 프리저베 페이지만 H1 1개·FAQ 7문항·수술시간·회복 텍스트를 갖춰 인용 가능한 구조이며, 이 구조를 다른 시술 페이지로 확산하는 것이 과제다. 답변엔진이 패시지 단위로 잘라 가져갈 자기완결적 단락이 존재하지 않는다. 권위 신호(KOL·표창)는 있으나 이미지와 슬로건 안에만 있어 텍스트로 읽히지 않는다.',
|
||||
severity: 'critical',
|
||||
},
|
||||
{
|
||||
title: '갱신 신호는 살아 있다. 단 블로그 포스트는 2024-05에 멈췄다',
|
||||
detail: '재채점에서 시술 페이지의 article:modified_time(2026-04-17)과 page/portfolio-sitemap의 최신 lastmod(2026-08-31)를 확인했다. 사이트 자체는 계속 갱신되고 있어 "영업 중인가?" 오정보 위험은 낮다. 다만 블로그 포스트(post-sitemap)는 2024-05-31 이후 멈춰 있어, 신규 텍스트 콘텐츠 공급이 유튜브에 치우쳐 있다.',
|
||||
title: '갱신 신호는 살아 있고, 블로그도 발행 중이다 (v1.1 정정)',
|
||||
detail: '시술 페이지의 article:modified_time(2026-04-17)과 sitemap 최신 lastmod(2026-08-31)를 확인했다. 이전 판에서 "블로그 2024-05 정지"로 판정한 것은 www의 post-sitemap만 본 오판이다. 블로그는 별도 서브도메인 blog.viewclinic.com에서 2026-09-07까지 발행 중이고, robots.txt가 OAI-SearchBot·PerplexityBot·GPTBot·ClaudeBot 등 AI 봇 14종을 명시 허용한다. 120문항 실측에서 ChatGPT가 이 블로그를 인용한 것도 이 때문이다. 다만 프리저베를 제외한 시술 페이지에는 FAQ와 수치가 없어 텍스트 근거는 여전히 블로그와 프리저베 한 페이지에 쏠려 있다.',
|
||||
severity: 'good',
|
||||
},
|
||||
{
|
||||
@ -142,8 +145,8 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = {
|
||||
},
|
||||
{
|
||||
priority: 'P2',
|
||||
title: '블로그 재가동 + 오픈웹 시딩',
|
||||
detail: '2024-05에 멈춘 블로그(post-sitemap)를 재가동해 유튜브 영상을 사이트 글로 전사(트랜스크립트 요약)하고 매월 갱신. 티스토리·언론 기고로 naver.com 외 언급 도메인 확보. 네이버 블로그는 AI에 안 보이므로 글로벌 AEO 용도로는 쓰지 않는다.',
|
||||
title: '블로그와 시술 페이지 연결 + 오픈웹 시딩',
|
||||
detail: 'blog.viewclinic.com은 발행 중이고 AI 봇을 허용하므로(v1.1 정정) 재가동이 아니라 연결이 과제다. 블로그 글에서 해당 시술 페이지로, 시술 페이지에서 관련 블로그 글로 내부 링크를 걸고, 유튜브 영상을 블로그 글로 전사해 매월 갱신. 티스토리·언론 기고로 naver.com 외 언급 도메인 확보. 네이버 블로그는 AI에 안 보이므로 글로벌 AEO 용도로는 쓰지 않는다.',
|
||||
criterionIds: ['C6', 'D3'],
|
||||
effort: '지속',
|
||||
},
|
||||
|
||||
Loading…
Reference in New Issue
Block a user