feat(discovery): 원진성형외과 AI Answer Readiness 리포트 v2.0 — 자동 채점+보정 결과(discovery_wonjin.ts, AEO 15/D·GEO 45/C), 독립 HTML 리포트 빌더 + Chrome PDF, docs/reports/wonjin/01_readiness_report
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
dc0d233b58
commit
388a4a5ea4
@ -0,0 +1,141 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="ko"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<title>원진성형외과 AI Answer Readiness Report v2.0</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com"><link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@600;700&display=swap" rel="stylesheet">
|
||||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css">
|
||||||
|
<style>
|
||||||
|
:root{--ink:#0A1128;--navy:#021341;--violet:#4F1DA1;--accent:#6C5CE7;--light:#F7F8FC;--slate:#4A5268;--muted:#7A8399;--line:#E3E7F2}
|
||||||
|
*{box-sizing:border-box}body{margin:0;font-family:Pretendard,-apple-system,sans-serif;color:var(--ink);background:#fff;word-break:keep-all;line-height:1.62;font-size:14px}
|
||||||
|
.serif{font-family:'Playfair Display',serif}
|
||||||
|
.page{padding:48px 56px;max-width:1080px;margin:0 auto}
|
||||||
|
.dark{background:var(--ink);color:#fff}.dark .sub,.dark .note{color:#B9C0D4}.light{background:var(--light)}
|
||||||
|
.eyebrow{font-size:12px;font-weight:700;letter-spacing:.24em;color:var(--accent);text-transform:uppercase}.dark .eyebrow{color:#C4B5FD}
|
||||||
|
h1{font-size:44px;line-height:1.1;margin:10px 0 6px;letter-spacing:-.02em}h2{font-size:30px;margin:8px 0 12px;line-height:1.2}h3{font-size:17px;margin:0 0 6px}
|
||||||
|
.accent{background:linear-gradient(90deg,#C4B5FD,#93C5FD);-webkit-background-clip:text;background-clip:text;color:transparent}
|
||||||
|
.lede{font-size:16px;color:var(--slate);max-width:760px}.dark .lede{color:#D6DBEA}
|
||||||
|
.sub{font-size:12.5px;color:var(--muted)}.note{font-size:12.5px;color:var(--muted);margin-top:8px}
|
||||||
|
.badge{display:inline-block;border:1px solid;border-radius:999px;padding:3px 12px;font-size:13px;font-weight:700}
|
||||||
|
.pill{display:inline-block;border-radius:999px;padding:2px 9px;font-size:11.5px;font-weight:700}.pill.gray{background:#EEF0F6;color:#6B7280}
|
||||||
|
.grid{display:grid;gap:16px}.g2{grid-template-columns:1fr 1fr}.g3{grid-template-columns:repeat(3,1fr)}
|
||||||
|
.card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:20px 22px;box-shadow:3px 4px 12px rgba(0,0,0,.05)}.dark .card{color:var(--ink)}
|
||||||
|
.rings{display:flex;gap:28px;align-items:flex-start;flex-wrap:wrap}.ring{display:flex;flex-direction:column;align-items:center;gap:8px}
|
||||||
|
.tbl{width:100%;border-collapse:collapse;font-size:13px;background:#fff;border-radius:12px;overflow:hidden;border:1px solid var(--line)}.tbl th{background:#F1F3FA;text-align:left;padding:9px 11px;font-size:12px;color:var(--slate);border-bottom:1px solid var(--line)}.tbl td{padding:9px 11px;border-bottom:1px solid #EEF0F6;vertical-align:top}.tbl tr:last-child td{border-bottom:0}.mono{font-family:ui-monospace,Menlo,monospace;font-size:12px;color:var(--accent);font-weight:700}
|
||||||
|
.lv{display:inline-block;min-width:26px;text-align:center;border-radius:6px;padding:1px 6px;font-weight:700;font-size:12px}.lv3{background:#E9F7EF;color:#2E7D4F}.lv2{background:#EEF3FF;color:#2F4FBF}.lv1{background:#FFF4E5;color:#B26A00}.lv0{background:#FDECEF;color:#B84C5F}.lvu{background:#EEF0F6;color:#6B7280}
|
||||||
|
.find{border-left:5px solid;padding-left:16px}.find .tag{font-size:11.5px;font-weight:700;letter-spacing:.08em}
|
||||||
|
.act .pri{font-family:'Playfair Display',serif;font-size:22px;font-weight:700;color:var(--accent)}.act .eff{float:right}
|
||||||
|
.kpi{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.kpi .k{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);border-radius:14px;padding:14px 16px}.kpi b{font-family:'Playfair Display',serif;font-size:30px;color:#AF90FF;display:block;line-height:1}.kpi span{font-size:12.5px;color:#C7CDE0}
|
||||||
|
a{color:var(--accent)}ul{margin:6px 0 0 18px;padding:0}li{margin:3px 0}
|
||||||
|
footer{padding:28px 56px;font-size:12px;color:var(--muted);border-top:1px solid var(--line)}
|
||||||
|
@media print{@page{size:A4;margin:12mm}body{font-size:12.5px}.page{padding:22px 10px;max-width:none}.pb{page-break-before:always}h1{font-size:34px}h2{font-size:24px}.dark{-webkit-print-color-adjust:exact;print-color-adjust:exact}.card,.tbl,.lv,.badge,.pill,.kpi .k{-webkit-print-color-adjust:exact;print-color-adjust:exact}tr,.card{page-break-inside:avoid}}
|
||||||
|
</style></head><body>
|
||||||
|
|
||||||
|
<section class="dark"><div class="page" style="padding-top:64px;padding-bottom:56px">
|
||||||
|
<div class="eyebrow">INFINITH AI Discovery · AEO / GEO Audit v2.0</div>
|
||||||
|
<h1 class="serif"><span class="accent">AI Answer Readiness</span></h1>
|
||||||
|
<div style="font-size:26px;font-weight:700;margin:4px 0 2px">원진성형외과</div>
|
||||||
|
<div class="sub" style="color:#C4B5FD">성형외과 (강남역) · <a href="https://www.k-wonjin.co.kr" style="color:#C4B5FD">https://www.k-wonjin.co.kr</a></div>
|
||||||
|
<p class="lede" style="margin-top:18px">AI 답변엔진(ChatGPT·Perplexity·Gemini·네이버 AI 브리핑)이 이 병원을 얼마나 읽고, 믿고, 인용할 수 있는지를 실측 신호로 채점한 리포트입니다. 답변 준비도(AEO)와 출처 준비도(GEO)를 각각 100점으로 보고, 확인하지 못한 항목은 점수에서 뺍니다.</p>
|
||||||
|
<div style="display:flex;gap:32px;align-items:center;flex-wrap:wrap;margin-top:26px">
|
||||||
|
<div class="card" style="display:flex;gap:26px;padding:22px 30px"><div class="ring"><svg viewBox="0 0 120 120" width="132" height="132"><circle cx="60" cy="60" r="52" fill="none" stroke="#E8ECF7" stroke-width="10"/><circle cx="60" cy="60" r="52" fill="none" stroke="#6C5CE7" stroke-width="10" stroke-linecap="round" stroke-dasharray="326.7" stroke-dashoffset="277.7" transform="rotate(-90 60 60)"/><text x="60" y="66" text-anchor="middle" font-family="Playfair Display, serif" font-weight="700" font-size="30" fill="#0A1128">15</text><text x="60" y="84" text-anchor="middle" font-size="10" fill="#7A8399">/ 100</text></svg><span class="badge" style="background:#FDECEF;color:#B84C5F;border-color:#F7C3CD">AEO 등급 D</span></div><div class="ring"><svg viewBox="0 0 120 120" width="132" height="132"><circle cx="60" cy="60" r="52" fill="none" stroke="#E8ECF7" stroke-width="10"/><circle cx="60" cy="60" r="52" fill="none" stroke="#6C5CE7" stroke-width="10" stroke-linecap="round" stroke-dasharray="326.7" stroke-dashoffset="179.7" transform="rotate(-90 60 60)"/><text x="60" y="66" text-anchor="middle" font-family="Playfair Display, serif" font-weight="700" font-size="30" fill="#0A1128">45</text><text x="60" y="84" text-anchor="middle" font-size="10" fill="#7A8399">/ 100</text></svg><span class="badge" style="background:#FFF4E5;color:#B26A00;border-color:#FFD9A8">GEO 등급 C</span></div></div>
|
||||||
|
<div class="kpi" style="flex:1;min-width:420px">
|
||||||
|
<div class="k"><b>25</b><span>실측 항목 / 36</span></div>
|
||||||
|
<div class="k"><b>49</b><span>v1.0 종합 (C)</span></div>
|
||||||
|
<div class="k"><b>5</b><span>핵심 발견</span></div>
|
||||||
|
<div class="k"><b>6</b><span>실행 항목</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="note" style="margin-top:22px">실측일 2026-09-08 · 리포트 작성 2026-09-08 · 미검증 11개 항목은 분모에서 제외했습니다. 조건은 마지막 장에 적었습니다.</p>
|
||||||
|
</div></section>
|
||||||
|
|
||||||
|
<section class="light pb"><div class="page">
|
||||||
|
<div class="eyebrow">Findings</div><h2>AI가 지금 원진성형외과를 어떻게 읽는지 정리했습니다</h2>
|
||||||
|
<div class="grid g2" style="margin-top:14px">
|
||||||
|
<div class="card find" style="border-left-color:#9B8AD4"><div class="tag" style="color:#9B8AD4">강점</div><h3>크롤러 접근은 열려 있습니다. 서버 렌더링이라 AI가 본문을 읽습니다</h3><p style="margin:0;color:var(--slate)">robots.txt가 AI 검색봇 12종을 모두 허용하고, IIS가 본문을 서버에서 렌더링해 JS 없이도 14,079자를 읽을 수 있습니다. TTFB 0.09초, 초기 HTML 153KB로 가볍습니다. 다만 www 유무에 따라 최종 URL이 갈라지고(정본 미수렴), sitemap이 robots.txt에 선언돼 있지 않습니다.</p></div><div class="card find" style="border-left-color:#D4889A"><div class="tag" style="color:#D4889A">핵심 과제</div><h3>연결은 됐지만 병원 자체가 스키마로 정의돼 있지 않습니다</h3><p style="margin:0;color:var(--slate)">Organization.sameAs 10개로 SNS·지도·버티컬을 잘 묶었고 주소 표기도 한 가지입니다. 그러나 MedicalClinic·Physician 스키마가 없어 주소·전화·진료시간·의료진 17명이 구조화돼 있지 않고, 전화번호는 6종이 섞여 있습니다. 영문 사이트(wonjinbeauty.com)는 hreflang으로 연결되지 않았습니다.</p></div><div class="card find" style="border-left-color:#D4889A"><div class="tag" style="color:#D4889A">핵심 과제</div><h3>인용할 문장이 부족합니다. H1도 표도 정의문도 없습니다</h3><p style="margin:0;color:var(--slate)">메인·시술 페이지에 H1이 없고 HTML 표가 없으며 병원 정의문도 없습니다. 눈매교정(CFS)·트임 페이지에는 수술 시간·마취·실밥·일상 복귀 수치가 텍스트로 있어 인용 구조의 출발점이 될 수 있지만, 쌍꺼풀·눈매교정 나머지 페이지는 수치가 없습니다. 최신 갱신 신호가 2025-02-18(sitemap)로 18개월 전입니다.</p></div><div class="card find" style="border-left-color:#D4A872"><div class="tag" style="color:#D4A872">보완</div><h3>유튜브는 강합니다. 736편·누적 3,113만 회</h3><p style="margin:0;color:var(--slate)">설명형 롱폼(눈성형 관리법·중년 눈성형 비교·지방흡입 QnA 등)이 있어 글의 근거 영상으로 쓸 수 있습니다. 다만 상위 조회 영상의 다수가 브랜드 필름·연예인·전후 형식이라 인용용 정보형 영상은 10편 안팎입니다. 이 채널이 원진의 가장 큰 오픈웹 자산입니다.</p></div><div class="card find" style="border-left-color:#D4A872"><div class="tag" style="color:#D4A872">보완</div><h3>이미지 alt 62% 누락, 의료진 경력은 텍스트지만 구조화는 안 됨</h3><p style="margin:0;color:var(--slate)">메인 이미지 45개 중 28개가 alt 없이 실려 AI가 이미지 내용을 읽지 못합니다. 의료진 17명의 경력은 텍스트로 있어(원장당 12~23줄) Physician 스키마만 붙이면 바로 엔티티가 됩니다. 강남언니·GBP·네이버 플레이스는 이번 자동 채점 범위 밖이라 수동 실측이 남아 있습니다.</p></div>
|
||||||
|
</div>
|
||||||
|
</div></section>
|
||||||
|
|
||||||
|
<section class="pb"><div class="page">
|
||||||
|
<div class="eyebrow">AEO · Answer Readiness</div><h2>답변 준비도 8개 항목</h2>
|
||||||
|
<p class="lede">질문을 고르고, 답을 먼저 쓰고, 한 단락으로 완결하고, 결정에 필요한 정보와 다음 행동까지 닿게 하는가.</p>
|
||||||
|
|
||||||
|
<table class="tbl"><thead><tr><th style="width:52px">항목</th><th>무엇을 보는가</th><th style="width:70px">점수</th><th style="width:72px">근거</th><th>파생된 실측 항목</th></tr></thead><tbody>
|
||||||
|
<tr><td class="mono">AEO1</td><td><b>질문 수요 충족</b><div class="sub">사람들이 실제로 묻는 질문에 답하는 페이지가 있는가</div></td><td><b>0</b><span class="sub"> / 100</span></td><td>실측 파생</td><td class="sub">C2 L0</td></tr><tr><td class="mono">AEO2</td><td><b>답변의 직접성</b><div class="sub">페이지 첫 단락에 답이 먼저 나오는가</div></td><td><b>0</b><span class="sub"> / 100</span></td><td>실측 파생</td><td class="sub">C1 L0</td></tr><tr><td class="mono">AEO3</td><td><b>답변 단위의 자기완결성</b><div class="sub">한 단락만 떼어내도 누가·어디서·무엇을이 들어 있는가</div></td><td><span class="pill gray">미검증</span></td><td>미검증</td><td class="sub">C8 미검증</td></tr><tr><td class="mono">AEO4</td><td><b>의사결정에 필요한 정보</b><div class="sub">가격대·시간·회복·조건처럼 결정에 쓰는 정보가 텍스트로 있는가</div></td><td><b>40</b><span class="sub"> / 100</span></td><td>실측 파생</td><td class="sub">C4 L2 · C5 L0</td></tr><tr><td class="mono">AEO5</td><td><b>정보 구조와 가독성</b><div class="sub">제목이 주제를 서술하고 계층이 논리적인가</div></td><td><b>0</b><span class="sub"> / 100</span></td><td>실측 파생</td><td class="sub">C3 L0</td></tr><tr><td class="mono">AEO6</td><td><b>다음 행동의 명확성</b><div class="sub">답을 읽은 사람이 무엇을 하면 되는지(예약·전화·방문) 바로 보이는가</div></td><td><span class="pill gray">미검증</span></td><td>미검증</td><td class="sub"></td></tr><tr><td class="mono">AEO7</td><td><b>핵심 답변의 텍스트 추출</b><div class="sub">답이 이미지가 아니라 텍스트로 존재하고 서버가 렌더하는가</div></td><td><b>60</b><span class="sub"> / 100</span></td><td>실측 파생</td><td class="sub">A3 L3 · F1 L0</td></tr><tr><td class="mono">AEO8</td><td><b>사이트 내 답변 발견</b><div class="sub">크롤러가 답이 있는 페이지를 찾아갈 수 있는가</div></td><td><b>47</b><span class="sub"> / 100</span></td><td>실측 파생</td><td class="sub">A5 L1 · B6 L2</td></tr>
|
||||||
|
</tbody></table>
|
||||||
|
|
||||||
|
<div class="eyebrow" style="margin-top:34px">GEO · Source Readiness</div><h2>출처 준비도 8개 항목</h2>
|
||||||
|
<p class="lede">주장에 근거가 붙어 있고, 누가 책임지는지 보이고, 병원 사실이 표면마다 같고, 갱신·정정 기록이 있으며, 기계가 인용 식별자를 읽을 수 있는가.</p>
|
||||||
|
|
||||||
|
<table class="tbl"><thead><tr><th style="width:52px">항목</th><th>무엇을 보는가</th><th style="width:70px">점수</th><th style="width:72px">근거</th><th>파생된 실측 항목</th></tr></thead><tbody>
|
||||||
|
<tr><td class="mono">GEO1</td><td><b>주장과 근거의 일치</b><div class="sub">수치·수상·효과 주장마다 근거(원문·출처·조건)가 붙어 있는가</div></td><td><span class="pill gray">미검증</span></td><td>미검증</td><td class="sub"></td></tr><tr><td class="mono">GEO2</td><td><b>출처의 적합성과 추적성</b><div class="sub">인용된 URL이 정본으로 수렴하고 시간이 지나도 같은 곳을 가리키는가</div></td><td><b>33</b><span class="sub"> / 100</span></td><td>실측 파생</td><td class="sub">A4 L1</td></tr><tr><td class="mono">GEO3</td><td><b>전문성과 책임 주체</b><div class="sub">누가 썼고 누가 의학적으로 책임지는지 텍스트와 스키마로 보이는가</div></td><td><b>40</b><span class="sub"> / 100</span></td><td>실측 파생</td><td class="sub">C7 L2 · B3 L0</td></tr><tr><td class="mono">GEO4</td><td><b>병원 엔티티와 사실의 정합성</b><div class="sub">이 병원이 누구인지 사이트 안과 밖(강남언니·GBP·플레이스)에서 같은 사실로 확정되는가</div></td><td><b>63</b><span class="sub"> / 100</span></td><td>실측 파생</td><td class="sub">B2 L1 · B4 L3 · B5 L3 · D1 미검증 · D2 미검증 · D4 미검증 · D5 미검증 · D6 L0</td></tr><tr><td class="mono">GEO5</td><td><b>사실의 최신성과 정정</b><div class="sub">언제 확인한 사실인지 적혀 있고, 틀린 것을 고친 기록이 있는가</div></td><td><b>33</b><span class="sub"> / 100</span></td><td>실측 파생</td><td class="sub">C6 L1</td></tr><tr><td class="mono">GEO6</td><td><b>원천 대비 추가 가치</b><div class="sub">다른 곳에 있는 문장을 옮긴 것이 아니라 여기서만 얻는 정보(체크리스트·조건 표·실측)가 있는가</div></td><td><span class="pill gray">미검증</span></td><td>미검증</td><td class="sub"></td></tr><tr><td class="mono">GEO7</td><td><b>발행 관계와 투명성</b><div class="sub">누가 운영하고 누구의 지원을 받는지, 광고와 정보가 구분되는지 밝히는가</div></td><td><span class="pill gray">미검증</span></td><td>미검증</td><td class="sub"></td></tr><tr><td class="mono">GEO8</td><td><b>인용 식별자와 메타데이터 정합성</b><div class="sub">기계가 읽는 식별자(JSON-LD·메타)가 유효하고 화면 내용과 같은가</div></td><td><b>67</b><span class="sub"> / 100</span></td><td>실측 파생</td><td class="sub">B1 L2</td></tr>
|
||||||
|
</tbody></table>
|
||||||
|
|
||||||
|
</div></section>
|
||||||
|
|
||||||
|
<section class="pb dark"><div class="page">
|
||||||
|
<div class="eyebrow">Category Detail</div><h2>카테고리별 실측 36개 항목</h2>
|
||||||
|
<div class="grid g3" style="margin-top:12px">
|
||||||
|
<div class="card"><div class="sub">A · Access & Crawlability</div><h3 style="margin-top:2px">AI 크롤러 접근성</h3><div><span class="serif" style="font-size:28px;font-weight:700;color:var(--accent)">80</span><span class="sub"> / 100 · 실측 6/7</span></div></div><div class="card"><div class="sub">B · Entity & Structured Data</div><h3 style="margin-top:2px">엔티티 식별·구조화</h3><div><span class="serif" style="font-size:28px;font-weight:700;color:var(--accent)">50</span><span class="sub"> / 100 · 실측 7/7</span></div></div><div class="card"><div class="sub">C · Answer-Ready Content</div><h3 style="margin-top:2px">답변 인용 가능 콘텐츠</h3><div><span class="serif" style="font-size:28px;font-weight:700;color:var(--accent)">25</span><span class="sub"> / 100 · 실측 7/8</span></div></div><div class="card"><div class="sub">D · Off-site Surfaces</div><h3 style="margin-top:2px">AI 인용 표면 확보</h3><div><span class="serif" style="font-size:28px;font-weight:700;color:var(--accent)">53</span><span class="sub"> / 100 · 실측 2/6</span></div></div><div class="card"><div class="sub">E · Measurement</div><h3 style="margin-top:2px">AI 가시성 측정 인프라</h3><div><span class="serif" style="font-size:28px;font-weight:700;color:var(--accent)">0</span><span class="sub"> / 100 · 실측 0/4</span></div></div><div class="card"><div class="sub">F · Technical Hygiene</div><h3 style="margin-top:2px">기술 위생</h3><div><span class="serif" style="font-size:28px;font-weight:700;color:var(--accent)">42</span><span class="sub"> / 100 · 실측 3/4</span></div></div>
|
||||||
|
</div>
|
||||||
|
</div></section>
|
||||||
|
<section><div class="page">
|
||||||
|
<h3 style="margin-top:22px;font-size:18px">A · AI 크롤러 접근성 <span class="sub">AI 검색엔진이 사이트를 읽을 수 있는가. 크롤러 접근이 막히면 나머지 항목은 전부 무효다.</span></h3>
|
||||||
|
<table class="tbl"><thead><tr><th style="width:44px">ID</th><th style="width:22%">항목</th><th style="width:88px">판정</th><th>실측 근거</th></tr></thead><tbody>
|
||||||
|
<tr><td class="mono">A1</td><td><b>검색용 AI 봇 허용</b><div class="sub">배점 5</div></td><td><span class="lv lv3">L3</span><div class="sub">검색봇 전부 허용 + 200 응답</div></td><td class="sub" style="color:var(--slate)">12개 AI 봇 전부 허용. OAI-SearchBot·PerplexityBot·GPTBot UA로 GET → 전부 200</td></tr><tr><td class="mono">A2</td><td><b>CDN/WAF AI 차단 없음</b><div class="sub">배점 3</div></td><td><span class="lv lv3">L3</span><div class="sub">CDN 차단 없음 확인</div></td><td class="sub" style="color:var(--slate)">Server: Microsoft-IIS/10.0 직접 응답, Cloudflare 헤더 없음, AI UA 챌린지 없음</td></tr><tr><td class="mono">A3</td><td><b>서버 렌더링 본문</b><div class="sub">배점 3</div></td><td><span class="lv lv3">L3</span><div class="sub">80% 이상 (SSR/정적)</div></td><td class="sub" style="color:var(--slate)">서버 렌더링. JS 미실행 HTML에서 본문 텍스트 14,079자 추출</td></tr><tr><td class="mono">A4</td><td><b>HTTPS·리다이렉트 정합</b><div class="sub">배점 2</div></td><td><span class="lv lv1">L1</span><div class="sub">변형 간 200 중복</div></td><td class="sub" style="color:var(--slate)">변형 간 최종 URL 불일치(중복 콘텐츠 위험): ['https://k-wonjin.co.kr', 'https://www.k-wonjin.co.kr']</td></tr><tr><td class="mono">A5</td><td><b>sitemap.xml 제공</b><div class="sub">배점 3</div></td><td><span class="lv lv1">L1</span><div class="sub">있으나 robots 미선언</div></td><td class="sub" style="color:var(--slate)">/sitemap.xml 200이나 robots.txt에 Sitemap 미선언. URL 132개</td></tr><tr><td class="mono">A6</td><td><b>Bing 색인 (ChatGPT 검색 경로)</b><div class="sub">배점 3</div></td><td><span class="lv lvu">미검증</span><div class="sub">미검증</div></td><td class="sub" style="color:var(--slate)">[manual] Bing Webmaster Tools 등록 여부는 오너 계정 접근 필요 (또는 site: 검색 수동 확인)</td></tr><tr><td class="mono">A7</td><td><b>응답 속도·크롤 예산</b><div class="sub">배점 1</div></td><td><span class="lv lv3">L3</span><div class="sub">TTFB < 0.5s, HTML < 300KB</div></td><td class="sub" style="color:var(--slate)">TTFB 0.094s / 초기 HTML 153KB. 시술 페이지 145KB. 모두 기준 이내</td></tr>
|
||||||
|
</tbody></table><h3 style="margin-top:22px;font-size:18px">B · 엔티티 식별·구조화 <span class="sub">AI가 "이 병원이 누구인지"를 기계적으로 확정할 수 있는가. NAP 일관성과 스키마 위생.</span></h3>
|
||||||
|
<table class="tbl"><thead><tr><th style="width:44px">ID</th><th style="width:22%">항목</th><th style="width:88px">판정</th><th>실측 근거</th></tr></thead><tbody>
|
||||||
|
<tr><td class="mono">B1</td><td><b>JSON-LD 문법 유효성</b><div class="sub">배점 3</div></td><td><span class="lv lv2">L2</span><div class="sub">전부 유효</div></td><td class="sub" style="color:var(--slate)">JSON-LD 4블록 전부 유효 (@graph 미사용)</td></tr><tr><td class="mono">B2</td><td><b>업종 엔티티 스키마 (MedicalClinic / LegalService / LocalBusiness)</b><div class="sub">배점 5</div></td><td><span class="lv lv1">L1</span><div class="sub">Organization만</div></td><td class="sub" style="color:var(--slate)">ItemList + Organization만 존재. MedicalClinic/LocalBusiness 없음 → 주소·전화·진료시간이 구조화되어 있지 않음</td></tr><tr><td class="mono">B3</td><td><b>전문가 스키마 (Physician / Attorney)</b><div class="sub">배점 3</div></td><td><span class="lv lv0">L0</span><div class="sub">없음</div></td><td class="sub" style="color:var(--slate)">Physician/Attorney 스키마 없음. 전문가 정보는 HTML 텍스트·이미지로만 존재</td></tr><tr><td class="mono">B4</td><td><b>NAP 사이트 내 일관성</b><div class="sub">배점 3</div></td><td><span class="lv lv3">L3</span><div class="sub">단일 표기</div></td><td class="sub" style="color:var(--slate)">주소 단일 표기: "서울시 서초구 강남대로 419 파고다타워 12". 전화 6종: 02-3477-3300, 023480-3573, 02392-0330</td></tr><tr><td class="mono">B5</td><td><b>sameAs 연결</b><div class="sub">배점 2</div></td><td><span class="lv lv3">L3</span><div class="sub">5개 이상 (SNS + 버티컬 + 지도)</div></td><td class="sub" style="color:var(--slate)">sameAs 10개 (SNS·버티컬·지도 연결)</td></tr><tr><td class="mono">B6</td><td><b>canonical·중복 제거</b><div class="sub">배점 2</div></td><td><span class="lv lv2">L2</span><div class="sub">있음</div></td><td class="sub" style="color:var(--slate)">rel=canonical self-referencing 존재</td></tr><tr><td class="mono">B7</td><td><b>다국어 hreflang</b><div class="sub">배점 2</div></td><td><span class="lv lv0">L0</span><div class="sub">다국어 페이지 있으나 미연결</div></td><td class="sub" style="color:var(--slate)">다국어 페이지 흔적(https://www.wonjinbeauty.com/en/) 있으나 hreflang 없음. 미연결</td></tr>
|
||||||
|
</tbody></table><h3 style="margin-top:22px;font-size:18px">C · 답변 인용 가능 콘텐츠 <span class="sub">패시지 단위로 잘라내도 자기완결적인 사실 덩어리가 있는가. 정의문·FAQ·수치·표·의료진 근거.</span></h3>
|
||||||
|
<table class="tbl"><thead><tr><th style="width:44px">ID</th><th style="width:22%">항목</th><th style="width:88px">판정</th><th>실측 근거</th></tr></thead><tbody>
|
||||||
|
<tr><td class="mono">C1</td><td><b>정의문형 첫 문단</b><div class="sub">배점 4</div></td><td><span class="lv lv0">L0</span><div class="sub">없음 (슬로건·이미지만)</div></td><td class="sub" style="color:var(--slate)">홈 본문 1,999자에 "원진성형외과는 …에 있는 … 병원입니다" 형태의 정의문 없음. 소개 문구(25년 헤리티지·강남역)는 메인 비주얼 이미지 alt 에만 있고, 소개 페이지(/hospitalinfo/about) 첫 단락도 슬로건형</td></tr><tr><td class="mono">C2</td><td><b>FAQ 섹션</b><div class="sub">배점 4</div></td><td><span class="lv lv0">L0</span><div class="sub">없음</div></td><td class="sub" style="color:var(--slate)">FAQ·자주 묻는 질문·Q&A 섹션 탐지 안 됨 (메인·시술 페이지)</td></tr><tr><td class="mono">C3</td><td><b>제목 계층 의미성</b><div class="sub">배점 3</div></td><td><span class="lv lv0">L0</span><div class="sub">H1 없음 또는 5개 이상</div></td><td class="sub" style="color:var(--slate)">메인 H1 0개: 없음. 시술 페이지 H1 없음</td></tr><tr><td class="mono">C4</td><td><b>구체 수치 (가격·시간·회복)</b><div class="sub">배점 4</div></td><td><span class="lv lv2">L2</span><div class="sub">시술별 일부 수치</div></td><td class="sub" style="color:var(--slate)">눈매교정(CFS) 페이지에 수술 시간 2시간·단기 수면 또는 부분 마취·실밥 제거 7일·일상생활 3일 텍스트 존재. 트임(오픈아이) 40분·5~7일. 쌍꺼풀·눈매교정(글램아이·더블유착) 페이지는 수치 없음. 가격 표기 0회(비급여 안내 페이지는 별도)</td></tr><tr><td class="mono">C5</td><td><b>표·비교 구조</b><div class="sub">배점 2</div></td><td><span class="lv lv0">L0</span><div class="sub">없음</div></td><td class="sub" style="color:var(--slate)">HTML <table> 없음. 비교 정보는 이미지로 추정 (이미지 표 여부는 수동 확인)</td></tr><tr><td class="mono">C6</td><td><b>신선도 신호</b><div class="sub">배점 3</div></td><td><span class="lv lv1">L1</span><div class="sub">1년 이상</div></td><td class="sub" style="color:var(--slate)">최신 갱신 신호 2025-02-18 (sitemap lastmod 2025-02-18). 18개월 전. dateModified 마크업 없음</td></tr><tr><td class="mono">C7</td><td><b>전문가 E-E-A-T (의료진 / 변호사)</b><div class="sub">배점 3</div></td><td><span class="lv lv2">L2</span><div class="sub">자격·경력 텍스트</div></td><td class="sub" style="color:var(--slate)">의료진 상세 페이지 17명의 직함·전문의 여부·경력(원장당 12~23줄)이 HTML 텍스트로 존재. 학술 활동 페이지 3,760자. 단 Physician 스키마·저자 표기는 없어 구조화되지 않음</td></tr><tr><td class="mono">C8</td><td><b>패시지 자기완결성</b><div class="sub">배점 2</div></td><td><span class="lv lvu">미검증</span><div class="sub">미검증</div></td><td class="sub" style="color:var(--slate)">[manual] 핵심 페이지 단락 샘플 10개의 상호·시술명 포함 비율 수동 채점 필요</td></tr>
|
||||||
|
</tbody></table><h3 style="margin-top:22px;font-size:18px">D · AI 인용 표면 확보 <span class="sub">실제로 AI가 인용하는 외부 표면(강남언니·GBP·오픈웹)에 존재하는가. 네이버 자산은 글로벌 AI에 기여도 0.</span></h3>
|
||||||
|
<table class="tbl"><thead><tr><th style="width:44px">ID</th><th style="width:22%">항목</th><th style="width:88px">판정</th><th>실측 근거</th></tr></thead><tbody>
|
||||||
|
<tr><td class="mono">D1</td><td><b>업종 버티컬 프로필 (병의원: 강남언니 / 법률: 로톡)</b><div class="sub">배점 6</div></td><td><span class="lv lvu">미검증</span><div class="sub">미검증</div></td><td class="sub" style="color:var(--slate)">강남언니 프로필은 공개 페이지 수동 실측 필요 (후기 수·의료진·이벤트·갱신일). 홈페이지 sameAs 에 버티컬 링크 포함 여부는 확인됨(10개 중)</td></tr><tr><td class="mono">D2</td><td><b>Google 비즈니스 프로필</b><div class="sub">배점 4</div></td><td><span class="lv lvu">미검증</span><div class="sub">미검증</div></td><td class="sub" style="color:var(--slate)">[manual] Google Maps 검색으로 GBP 소유·리뷰·NAP 수동 실측 필요</td></tr><tr><td class="mono">D3</td><td><b>오픈웹 언급 (티스토리·유튜브·언론)</b><div class="sub">배점 4</div></td><td><span class="lv lv2">L2</span><div class="sub">유튜브 + 언론/티스토리</div></td><td class="sub" style="color:var(--slate)">자체 YouTube 채널 @wjwonjin 영상 736편·구독 1.5만·누적 조회 3,113만(2026-09-08 API 집계). 인스타그램 3계정·페이스북·네이버 블로그(popokpop) 존재. 채널 sameAs 10개로 홈페이지와 연결됨. 단 홈페이지 내 외부 링크는 JS 렌더라 HTML에서 미노출</td></tr><tr><td class="mono">D4</td><td><b>표면 간 NAP 완전 일치</b><div class="sub">배점 3</div></td><td><span class="lv lvu">미검증</span><div class="sub">미검증</div></td><td class="sub" style="color:var(--slate)">[manual] 홈페이지·버티컬·GBP·플레이스 NAP 대조표 수동 작성 필요</td></tr><tr><td class="mono">D5</td><td><b>네이버 플레이스 (AI 브리핑 전용)</b><div class="sub">배점 2</div></td><td><span class="lv lvu">미검증</span><div class="sub">미검증</div></td><td class="sub" style="color:var(--slate)">[semi·사람 판정 필요] 사이트에 네이버 플레이스 링크 없음. 플레이스 존재·홈페이지 역연결·리뷰 수 수동 확인</td></tr><tr><td class="mono">D6</td><td><b>위키데이터/위키백과 엔티티</b><div class="sub">배점 1</div></td><td><span class="lv lv0">L0</span><div class="sub">없음</div></td><td class="sub" style="color:var(--slate)">Wikidata에서 "원진성형외과" 검색 결과 없음</td></tr>
|
||||||
|
</tbody></table><h3 style="margin-top:22px;font-size:18px">E · AI 가시성 측정 인프라 <span class="sub">개선을 증명할 수 있는가. 소유 신호(크롤러 로그·GA4 AI 유입) 계측 여부.</span></h3>
|
||||||
|
<table class="tbl"><thead><tr><th style="width:44px">ID</th><th style="width:22%">항목</th><th style="width:88px">판정</th><th>실측 근거</th></tr></thead><tbody>
|
||||||
|
<tr><td class="mono">E1</td><td><b>AI 크롤러 로그 (IP 검증)</b><div class="sub">배점 3</div></td><td><span class="lv lvu">미검증</span><div class="sub">미검증</div></td><td class="sub" style="color:var(--slate)">[manual] 서버 로그 접근 필요 (AI 크롤러 히트 + IP 검증)</td></tr><tr><td class="mono">E2</td><td><b>GA4 AI 유입 채널</b><div class="sub">배점 3</div></td><td><span class="lv lvu">미검증</span><div class="sub">미검증</div></td><td class="sub" style="color:var(--slate)">[manual] GA4 접근 필요 (AI 유입 커스텀 채널그룹 여부)</td></tr><tr><td class="mono">E3</td><td><b>GSC AI Overviews 노출</b><div class="sub">배점 2</div></td><td><span class="lv lvu">미검증</span><div class="sub">미검증</div></td><td class="sub" style="color:var(--slate)">[manual] GSC 접근 필요 (AI Overviews 노출)</td></tr><tr><td class="mono">E4</td><td><b>기준선 스팟체크</b><div class="sub">배점 2</div></td><td><span class="lv lvu">미검증</span><div class="sub">미검증</div></td><td class="sub" style="color:var(--slate)">[manual] 기준선 스팟체크 미실시 (질의 10개 × 5회 반복은 별도 단계)</td></tr>
|
||||||
|
</tbody></table><h3 style="margin-top:22px;font-size:18px">F · 기술 위생 <span class="sub">이미지 대체텍스트·CMS 보안·페이지 무게·모바일. 보조 지표.</span></h3>
|
||||||
|
<table class="tbl"><thead><tr><th style="width:44px">ID</th><th style="width:22%">항목</th><th style="width:88px">판정</th><th>실측 근거</th></tr></thead><tbody>
|
||||||
|
<tr><td class="mono">F1</td><td><b>이미지 대체텍스트</b><div class="sub">배점 2</div></td><td><span class="lv lv0">L0</span><div class="sub">50% 이상 누락</div></td><td class="sub" style="color:var(--slate)">메인 페이지 이미지 45개 중 28개(62%) alt 누락 또는 빈 값</td></tr><tr><td class="mono">F2</td><td><b>CMS 보안·최신성</b><div class="sub">배점 1</div></td><td><span class="lv lvu">미검증</span><div class="sub">미검증</div></td><td class="sub" style="color:var(--slate)">Server: Microsoft-IIS/10.0, ASP.NET 계열 자체 제작 추정(meta generator 없음). CMS 버전·보안 패치 여부 판정 불가</td></tr><tr><td class="mono">F3</td><td><b>페이지 무게</b><div class="sub">배점 1</div></td><td><span class="lv lv3">L3</span><div class="sub">< 300KB</div></td><td class="sub" style="color:var(--slate)">초기 HTML 153KB (300KB 미만)</td></tr><tr><td class="mono">F4</td><td><b>모바일 대응</b><div class="sub">배점 1</div></td><td><span class="lv lv2">L2</span><div class="sub">반응형</div></td><td class="sub" style="color:var(--slate)">viewport meta 존재, 반응형. CWV 미측정</td></tr>
|
||||||
|
</tbody></table>
|
||||||
|
</div></section>
|
||||||
|
|
||||||
|
<section class="pb light"><div class="page">
|
||||||
|
<div class="eyebrow">Action Plan</div><h2>지금 고칠 것과 4주 안에 만들 것을 나눴습니다</h2>
|
||||||
|
<h3 style="margin-top:20px">P0 · 지금 고칠 것 (1주 안)</h3><div class="grid g2"><div class="card act"><span class="pill gray eff">1일</span><div class="pri">P0</div><h3>정본 URL 수렴 + sitemap 선언</h3><p style="margin:0 0 8px;color:var(--slate)">k-wonjin.co.kr → www.k-wonjin.co.kr 로 301 통일, robots.txt 에 Sitemap: 선언, sitemap lastmod 갱신. 전화번호를 대표번호 1개로 통일.</p><div class="sub">연결 항목 <span class="mono">A4</span> <span class="mono">A5</span> <span class="mono">B4</span></div></div><div class="card act"><span class="pill gray eff">1주</span><div class="pri">P0</div><h3>MedicalClinic + Physician 스키마</h3><p style="margin:0 0 8px;color:var(--slate)">Organization 을 MedicalClinic 으로 승격(address·telephone·openingHoursSpecification·medicalSpecialty). 의료진 17명 Physician 스키마(이름·직함·전문의·프로필 URL). 영문 사이트와 hreflang 상호 연결.</p><div class="sub">연결 항목 <span class="mono">B2</span> <span class="mono">B3</span> <span class="mono">B7</span></div></div></div><h3 style="margin-top:20px">P1 · 4주 안에 만들 것</h3><div class="grid g2"><div class="card act"><span class="pill gray eff">2~4주</span><div class="pri">P1</div><h3>시술 페이지 인용 구조: H1·표·FAQ</h3><p style="margin:0 0 8px;color:var(--slate)">시술 페이지마다 H1 1개, 수술 시간·마취·실밥·일상 복귀를 HTML 표로, FAQ 5문항 + FAQPage 스키마. CFS·트임 페이지의 수치 형식을 다른 눈·코·윤곽 페이지로 확산. 메인에 병원 정의문 한 단락.</p><div class="sub">연결 항목 <span class="mono">C1</span> <span class="mono">C2</span> <span class="mono">C3</span> <span class="mono">C4</span> <span class="mono">C5</span></div></div><div class="card act"><span class="pill gray eff">1주</span><div class="pri">P1</div><h3>이미지 alt 일괄 정비 + 갱신 신호</h3><p style="margin:0 0 8px;color:var(--slate)">메인 28개 이미지 alt 작성(무엇을 찍은 사진인지 사실만). 페이지에 dateModified 마크업, sitemap lastmod 를 실제 수정일로.</p><div class="sub">연결 항목 <span class="mono">F1</span> <span class="mono">C6</span></div></div><div class="card act"><span class="pill gray eff">2~4주</span><div class="pri">P1</div><h3>서포터즈 사이트로 오픈웹 원문 공급</h3><p style="margin:0 0 8px;color:var(--slate)">자동 빌드 미리보기(supporters-wonjin.vercel.app)의 글 6편을 병원이 검토·승인하면 색인 허용 도메인으로 발행. 유튜브 설명 영상 10편을 글에 연결. 이후 질문 뱅크 기준으로 편집 캘린더 운영.</p><div class="sub">연결 항목 <span class="mono">C2</span> <span class="mono">C4</span> <span class="mono">C5</span> <span class="mono">D3</span></div></div></div><h3 style="margin-top:20px">P2 · 이어서 할 것</h3><div class="grid g2"><div class="card act"><span class="pill gray eff">지속</span><div class="pri">P2</div><h3>표면 실측과 측정 인프라</h3><p style="margin:0 0 8px;color:var(--slate)">강남언니·GBP·네이버 플레이스 NAP 대조표 작성, GA4 AI 유입 채널그룹, GSC AI Overviews 확인, 서버 로그의 AI 크롤러 히트 계측. Bing Webmaster 등록.</p><div class="sub">연결 항목 <span class="mono">D1</span> <span class="mono">D2</span> <span class="mono">D4</span> <span class="mono">D5</span> <span class="mono">E1</span> <span class="mono">E2</span> <span class="mono">E3</span> <span class="mono">A6</span></div></div></div>
|
||||||
|
</div></section>
|
||||||
|
|
||||||
|
<section class="pb dark"><div class="page">
|
||||||
|
<div class="eyebrow">Supporters Preview</div><h2>홈페이지 자료만으로 서포터즈 사이트 초안을 만들었습니다</h2>
|
||||||
|
<p class="lede">병원 URL 하나로 근거 수집, 글 생성, 발행 게이트, 미리보기 배포까지 자동으로 돌렸습니다. 모든 글은 의학 검토 대기 상태이고 색인은 막혀 있습니다. 병원이 확인 항목을 입력하고 검토·승인하면 코드 수정 없이 발행됩니다.</p>
|
||||||
|
<div class="kpi" style="margin-top:18px">
|
||||||
|
<div class="k"><b>6</b><span>글 (게이트 통과)</span></div>
|
||||||
|
<div class="k"><b>736</b><span>유튜브 영상 집계</span></div>
|
||||||
|
<div class="k"><b>66</b><span>사용 가능 이미지 (전후·사례 제외)</span></div>
|
||||||
|
<div class="k"><b>17</b><span>의료진 프로필</span></div>
|
||||||
|
</div>
|
||||||
|
<p class="note" style="margin-top:14px">미리보기 <a href="https://supporters-wonjin.vercel.app" style="color:#C4B5FD">https://supporters-wonjin.vercel.app</a> · 병원 확인 항목 입력 <a href="https://infinith-demo.vercel.app/supporters/wonjin" style="color:#C4B5FD">infinith-demo.vercel.app/supporters/wonjin</a></p>
|
||||||
|
</div></section>
|
||||||
|
<section><div class="page">
|
||||||
|
<h3 style="font-size:18px">자동 생성한 글 6편</h3>
|
||||||
|
<table class="tbl"><thead><tr><th style="width:54px">분류</th><th>제목</th><th style="width:70px">근거 영상</th><th style="width:86px">병원 확인 대기</th><th style="width:90px">상태</th></tr></thead><tbody>
|
||||||
|
<tr><td class="mono">A</td><td><b>원진성형외과는 어떤 병원인가요? 진료 분야·의료진 구성·위치</b><div class="sub"><a href="https://supporters-wonjin.vercel.app/posts/what-is-clinic">https://supporters-wonjin.vercel.app/posts/what-is-clinic</a></div></td><td>0편</td><td>5건</td><td><span class="pill gray">의학 검토 대기</span></td></tr><tr><td class="mono">B</td><td><b>원진성형외과 방문 안내: 위치·진료시간·주차·예약은 어떻게 하나요?</b><div class="sub"><a href="https://supporters-wonjin.vercel.app/posts/visit-guide">https://supporters-wonjin.vercel.app/posts/visit-guide</a></div></td><td>0편</td><td>3건</td><td><span class="pill gray">의학 검토 대기</span></td></tr><tr><td class="mono">D</td><td><b>원진성형외과 윤곽은 어떤 방법이 있고 시술 시간·마취·회복은 어떻게 되나요?</b><div class="sub"><a href="https://supporters-wonjin.vercel.app/posts/procedure-facial">https://supporters-wonjin.vercel.app/posts/procedure-facial</a></div></td><td>0편</td><td>5건</td><td><span class="pill gray">의학 검토 대기</span></td></tr><tr><td class="mono">D</td><td><b>원진성형외과 눈성형은 어떤 방법이 있고 시술 시간·마취·회복은 어떻게 되나요?</b><div class="sub"><a href="https://supporters-wonjin.vercel.app/posts/procedure-eye">https://supporters-wonjin.vercel.app/posts/procedure-eye</a></div></td><td>3편</td><td>5건</td><td><span class="pill gray">의학 검토 대기</span></td></tr><tr><td class="mono">D</td><td><b>원진성형외과 레이저안티에이징은 어떤 방법이 있고 시술 시간·마취·회복은 어떻게 되나요?</b><div class="sub"><a href="https://supporters-wonjin.vercel.app/posts/procedure-skin">https://supporters-wonjin.vercel.app/posts/procedure-skin</a></div></td><td>0편</td><td>6건</td><td><span class="pill gray">의학 검토 대기</span></td></tr><tr><td class="mono">C</td><td><b>상담에서 꼭 물어봐야 할 질문은 무엇인가요?</b><div class="sub"><a href="https://supporters-wonjin.vercel.app/posts/consult-questions">https://supporters-wonjin.vercel.app/posts/consult-questions</a></div></td><td>3편</td><td>3건</td><td><span class="pill gray">의학 검토 대기</span></td></tr>
|
||||||
|
</tbody></table>
|
||||||
|
<h3 style="font-size:18px;margin-top:26px">병원이 확인해 주실 것 9가지</h3>
|
||||||
|
<p class="sub" style="color:var(--slate)">홈페이지 공개 자료에 없어 병원만 답할 수 있는 값입니다. 입력 전까지 사이트에는 "확인 대기"로 표시됩니다.</p>
|
||||||
|
<div class="grid g3" style="margin-top:10px"><div class="card" style="padding:14px 16px"><span class="mono">1</span> <b>작성자 실명·직함·공개 프로필</b></div><div class="card" style="padding:14px 16px"><span class="mono">2</span> <b>글별 의학 검토 원장과 검토일</b></div><div class="card" style="padding:14px 16px"><span class="mono">3</span> <b>지원 관계 문구</b></div><div class="card" style="padding:14px 16px"><span class="mono">4</span> <b>견적 기본 포함 항목·결제 방식</b></div><div class="card" style="padding:14px 16px"><span class="mono">5</span> <b>회복 일정표의 병원 확정값</b></div><div class="card" style="padding:14px 16px"><span class="mono">6</span> <b>재수술 정책</b></div><div class="card" style="padding:14px 16px"><span class="mono">7</span> <b>페이지 간 표기 불일치의 정답</b></div><div class="card" style="padding:14px 16px"><span class="mono">8</span> <b>진료 분야별 담당 원장</b></div><div class="card" style="padding:14px 16px"><span class="mono">9</span> <b>정식 도메인·색인 허용 시점·홈페이지 링크 위치</b></div></div>
|
||||||
|
<p class="note">싣지 않는 것: 전후 사진, 환자 경험담, 다른 병원과의 비교, 효과 보장, 가격 금액. 이미지는 의료법 기준 규칙에 따라 전후·사례·모델·수술 장면·인증 마크를 자동 제외했습니다.</p>
|
||||||
|
</div></section>
|
||||||
|
|
||||||
|
<section class="pb light"><div class="page">
|
||||||
|
<div class="eyebrow">Integrity</div><h2>근거 없는 것은 약속하지 않습니다</h2>
|
||||||
|
<table class="tbl" style="margin-top:12px"><thead><tr><th style="width:30%">하지 않는 것</th><th>이유</th></tr></thead><tbody>
|
||||||
|
<tr><td><b>llms.txt 제작</b></td><td style="color:var(--slate)">Google 공식(2026-06) 효과 0, 채택률 0.13%, 서버 로그에 요청 자체가 없음. 위약이다.</td></tr><tr><td><b>"스키마 넣으면 AI가 인용합니다" 약속</b></td><td style="color:var(--slate)">인과 증거 없음. 스키마는 엔티티 식별을 돕는 위생 조치로만 설명한다.</td></tr><tr><td><b>단발 조회로 순위·노출 보고</b></td><td style="color:var(--slate)">LLM 답변 분산 10~34%. 반복 측정 + 신뢰구간으로만 보고한다.</td></tr><tr><td><b>답변엔진 UI 자동 조회</b></td><td style="color:var(--slate)">OpenAI·Perplexity 약관 위반. 주력 측정은 오너가 소유한 신호(로그·GA4)로 한다.</td></tr><tr><td><b>네이버 블로그 증량</b></td><td style="color:var(--slate)">blog.naver.com robots.txt가 AI 크롤링을 전면 금지. 글로벌 AI 답변 기여도 0. 네이버 AI 브리핑은 별도 트랙.</td></tr>
|
||||||
|
</tbody></table>
|
||||||
|
<h3 style="margin-top:26px;font-size:18px">측정 조건</h3>
|
||||||
|
<ul style="color:var(--slate)"><li>실측 대상: 메인 페이지 + /contents/eye/cfs 2개 URL, JS 미실행 HTML 기준</li><li>크롤러 접근성: robots.txt 파싱 + 12개 AI 봇 UA 실제 GET 요청</li><li>semi/manual 항목은 자동 수집 증거만 첨부하고 미검증 처리, 분모 제외 (사람 보정 후 확정)</li><li>답변엔진 언급률은 측정하지 않았다 (단발 조회는 무효, 반복 측정은 별도 기준선 단계에서 수행)</li></ul>
|
||||||
|
<h3 style="margin-top:26px;font-size:18px">채점 방법</h3>
|
||||||
|
<p style="color:var(--slate);margin:0">기준표 v1.0 36개 실측 항목(A 접근성 · B 엔티티 · C 콘텐츠 · D 표면 · E 측정 · F 위생)을 0~3 레벨로 판정하고, v2.0은 그 항목을 답변 준비도(AEO) 8개와 출처 준비도(GEO) 8개로 묶어 각 100점으로 정규화합니다. 미검증 항목은 분모에서 빼고, 치명 게이트(크롤러 차단 등)에 걸리면 상한을 둡니다. 답변엔진 언급률은 단발 조회로는 재지 않습니다.</p>
|
||||||
|
</div></section>
|
||||||
|
|
||||||
|
<footer>INFINITH · AI오투오 · 문의 o2oteam@o2o.kr · 이 리포트는 공개 페이지 실측에 근거하며, 오너 계정(GA4·GSC·서버 로그)이 필요한 항목은 미검증으로 두었습니다. 법률 자문이 아닙니다.</footer>
|
||||||
|
</body></html>
|
||||||
Binary file not shown.
@ -0,0 +1,192 @@
|
|||||||
|
{
|
||||||
|
"_meta": {
|
||||||
|
"sampleUrls": [
|
||||||
|
"https://www.k-wonjin.co.kr",
|
||||||
|
"https://www.k-wonjin.co.kr/contents/eye/cfs"
|
||||||
|
],
|
||||||
|
"sampleWarning": "표본 URL 2개 (<5). 판정은 홈·대표 시술 페이지 기준이며 사이트 전체로 일반화하지 말 것. 시술 상세 3개·오시는길·블로그를 curl+파서로 추가 확인할 것 (2026-08-28 뷰성형외과 오판 3건의 원인)"
|
||||||
|
},
|
||||||
|
"results": [
|
||||||
|
{
|
||||||
|
"criterionId": "A1",
|
||||||
|
"level": 3,
|
||||||
|
"evidence": "12개 AI 봇 전부 허용. OAI-SearchBot·PerplexityBot·GPTBot UA로 GET → 전부 200",
|
||||||
|
"source": "robots.txt: User-agent: * / Disallow: /admin/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "A2",
|
||||||
|
"level": 3,
|
||||||
|
"evidence": "Server: Microsoft-IIS/10.0 직접 응답, Cloudflare 헤더 없음, AI UA 챌린지 없음"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "A3",
|
||||||
|
"level": 3,
|
||||||
|
"evidence": "서버 렌더링. JS 미실행 HTML에서 본문 텍스트 14,079자 추출"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "A4",
|
||||||
|
"level": 1,
|
||||||
|
"evidence": "변형 간 최종 URL 불일치(중복 콘텐츠 위험): ['https://k-wonjin.co.kr', 'https://www.k-wonjin.co.kr']"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "A5",
|
||||||
|
"level": 1,
|
||||||
|
"evidence": "/sitemap.xml 200이나 robots.txt에 Sitemap 미선언. URL 132개"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "A6",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[manual] Bing Webmaster Tools 등록 여부는 오너 계정 접근 필요 (또는 site: 검색 수동 확인)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "A7",
|
||||||
|
"level": 3,
|
||||||
|
"evidence": "TTFB 0.094s / 초기 HTML 153KB. 시술 페이지 145KB — 모두 기준 이내"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "B1",
|
||||||
|
"level": 2,
|
||||||
|
"evidence": "JSON-LD 4블록 전부 유효 (@graph 미사용)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "B2",
|
||||||
|
"level": 1,
|
||||||
|
"evidence": "ItemList + Organization만 존재. MedicalClinic/LocalBusiness 없음 → 주소·전화·진료시간이 구조화되어 있지 않음"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "B3",
|
||||||
|
"level": 0,
|
||||||
|
"evidence": "Physician/Attorney 스키마 없음. 전문가 정보는 HTML 텍스트·이미지로만 존재"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "B4",
|
||||||
|
"level": 3,
|
||||||
|
"evidence": "주소 단일 표기: \"서울시 서초구 강남대로 419 파고다타워 12\". 전화 6종: 02-3477-3300, 023480-3573, 02392-0330"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "B5",
|
||||||
|
"level": 3,
|
||||||
|
"evidence": "sameAs 10개 (SNS·버티컬·지도 연결)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "B6",
|
||||||
|
"level": 2,
|
||||||
|
"evidence": "rel=canonical self-referencing 존재"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "B7",
|
||||||
|
"level": 0,
|
||||||
|
"evidence": "다국어 페이지 흔적(https://www.wonjinbeauty.com/en/) 있으나 hreflang 없음 — 미연결"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "C1",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[semi·사람 판정 필요] 메인 첫 200자: \"당신만 봅니다 - WJ 원진성형외과 Ai 상담 카카오톡 상담 빠른 비용 상담 빠른 비용 상담 바로 예약 피부과 안녕하세요, WJ 원진 성형외과입니다 :-) 빠른 비용 상담 이름 연…\" / 시술 페이지 첫 200자: \"눈매교정(고도안검하수)-당신만 봅니다-원진성형외과 Ai 상담 카카오톡 상담 빠른 비용 상담 빠른 비용 상담 바로 예약 피부과 안녕하세요, WJ …\" (첫 200자 내 상호 있음)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "C2",
|
||||||
|
"level": 0,
|
||||||
|
"evidence": "FAQ·자주 묻는 질문·Q&A 섹션 탐지 안 됨 (메인·시술 페이지)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "C3",
|
||||||
|
"level": 0,
|
||||||
|
"evidence": "메인 H1 0개: 없음. 시술 페이지 H1 없음"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "C4",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[semi·사람 판정 필요] 시술 페이지 수치 밀도: 가격표기 0회, 시간 2회, 일/주 14회, % 0회, 가격/비용/회복 단어 8회 — 표기 맥락(마케팅 문구 vs 실제 표) 확인 필요"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "C5",
|
||||||
|
"level": 0,
|
||||||
|
"evidence": "HTML <table> 없음. 비교 정보는 이미지로 추정 (이미지 표 여부는 수동 확인)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "C6",
|
||||||
|
"level": 1,
|
||||||
|
"evidence": "최신 갱신 신호 2025-02-18 (sitemap lastmod 2025-02-18) — 18개월 전. dateModified 마크업 없음"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "C7",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[semi·사람 판정 필요] 전문가 언급 22회, 권위 키워드 15회 (논문, 인증, 학회) — 자격·경력이 텍스트인지 이미지인지 확인 필요"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "C8",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[manual] 핵심 페이지 단락 샘플 10개의 상호·시술명 포함 비율 수동 채점 필요"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "D1",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[manual] 업종 버티컬(병의원: 강남언니 / 법률: 로톡) 프로필 수동 실측 필요 — 후기 수·의료진·이벤트·갱신일"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "D2",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[manual] Google Maps 검색으로 GBP 소유·리뷰·NAP 수동 실측 필요"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "D3",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[semi·사람 판정 필요] 검색 그라운딩 미실시. 사이트에서 발견된 외부 채널: pf.kakao.com(2), www.facebook.com(2), www.instagram.com(2), blog.naver.com(2), www.youtube.com(2) — naver.com 제외 오픈웹 언급(티스토리·언론)은 검색으로 별도 집계 필요"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "D4",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[manual] 홈페이지·버티컬·GBP·플레이스 NAP 대조표 수동 작성 필요"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "D5",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[semi·사람 판정 필요] 사이트에 네이버 플레이스 링크 없음 — 플레이스 존재·홈페이지 역연결·리뷰 수 수동 확인"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "D6",
|
||||||
|
"level": 0,
|
||||||
|
"evidence": "Wikidata에서 \"원진성형외과\" 검색 결과 없음"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "E1",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[manual] 서버 로그 접근 필요 (AI 크롤러 히트 + IP 검증)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "E2",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[manual] GA4 접근 필요 (AI 유입 커스텀 채널그룹 여부)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "E3",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[manual] GSC 접근 필요 (AI Overviews 노출)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "E4",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "[manual] 기준선 스팟체크 미실시 (질의 10개 × 5회 반복은 별도 단계)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "F1",
|
||||||
|
"level": 0,
|
||||||
|
"evidence": "메인 페이지 이미지 45개 중 28개(62%) alt 누락 또는 빈 값"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "F2",
|
||||||
|
"level": "unverified",
|
||||||
|
"evidence": "meta generator 없음 — CMS 종류·버전 판정 근거 없음 (수동 확인 필요)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "F3",
|
||||||
|
"level": 3,
|
||||||
|
"evidence": "초기 HTML 153KB (300KB 미만)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"criterionId": "F4",
|
||||||
|
"level": 2,
|
||||||
|
"evidence": "viewport meta 존재, 반응형. CWV 미측정"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
189
scripts/build_discovery_report.ts
Normal file
189
scripts/build_discovery_report.ts
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
/**
|
||||||
|
* AI Answer Readiness 리포트 HTML 빌더. /discovery/:id 와 같은 데이터(discoveryResults + 기준표 v1/v2 + 채점 lib)로
|
||||||
|
* 독립 HTML 한 파일을 만든다. PDF 는 Chrome headless 로 이 HTML 을 인쇄한다.
|
||||||
|
*
|
||||||
|
* npx esbuild scripts/build_discovery_report.ts --bundle --platform=node --format=esm --outfile=<tmp>/report.mjs
|
||||||
|
* node <tmp>/report.mjs --id wonjin --out docs/reports/wonjin/01_readiness_report/Wonjin_AI_Answer_Readiness_Report_v2.0_2026-09-08.html
|
||||||
|
* [--status ~/supporters-builds/wonjin/status.json] [--site ~/supporters-builds/wonjin/site] [--briefs ~/supporters-builds/wonjin/briefs.json]
|
||||||
|
*
|
||||||
|
* 화법: 고객용. 판단 제목은 "~합니다", 목차성 제목은 명사구. 엠대시 없음. 숫자는 표와 배지에만.
|
||||||
|
*/
|
||||||
|
import { readFileSync, writeFileSync, existsSync } from 'node:fs';
|
||||||
|
import { DISCOVERY_RESULTS } from '../src/data/discoveryResults';
|
||||||
|
import { AEO_GEO_RUBRIC } from '../src/data/aeoGeoRubric';
|
||||||
|
import { AEO_GEO_RUBRIC_V2 } from '../src/data/aeoGeoRubricV2';
|
||||||
|
import { scoreDiscovery } from '../src/lib/discoveryScore';
|
||||||
|
import { scoreDiscoveryV2 } from '../src/lib/discoveryScoreV2';
|
||||||
|
|
||||||
|
const args = process.argv.slice(2);
|
||||||
|
const opt = (k: string, d?: string) => { const i = args.indexOf(`--${k}`); return i >= 0 && args[i + 1] && !args[i + 1].startsWith('--') ? args[i + 1] : d; };
|
||||||
|
const id = opt('id', 'wonjin')!;
|
||||||
|
const out = opt('out')!;
|
||||||
|
const result = DISCOVERY_RESULTS[id];
|
||||||
|
if (!result || !out) { console.error('--id <등록된 id> --out <html> 필요'); process.exit(2); }
|
||||||
|
const v1 = scoreDiscovery(AEO_GEO_RUBRIC, result);
|
||||||
|
const v2 = scoreDiscoveryV2(AEO_GEO_RUBRIC_V2, result);
|
||||||
|
const today = new Date().toISOString().slice(0, 10);
|
||||||
|
const readJson = (p?: string) => (p && existsSync(p) ? JSON.parse(readFileSync(p, 'utf8')) : null);
|
||||||
|
const status = readJson(opt('status'));
|
||||||
|
const site = opt('site');
|
||||||
|
const briefs = readJson(opt('briefs'));
|
||||||
|
const videos = readJson(site ? `${site}/src/data/videos.json` : undefined);
|
||||||
|
const images = readJson(site ? `${site}/src/data/images.json` : undefined);
|
||||||
|
const authors = readJson(site ? `${site}/src/data/authors.json` : undefined);
|
||||||
|
|
||||||
|
const esc = (s: unknown) => String(s ?? '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
||||||
|
const criterionById = new Map(AEO_GEO_RUBRIC.criteria.map((c) => [c.id, c]));
|
||||||
|
const resultById = new Map(result.results.map((r) => [r.criterionId, r]));
|
||||||
|
const levelLabel = (cid: string, level: number | 'unverified') => {
|
||||||
|
if (level === 'unverified') return '미검증';
|
||||||
|
const c = criterionById.get(cid); return c?.levels.find((l) => l.level === level)?.label ?? String(level);
|
||||||
|
};
|
||||||
|
const gradeStyle: Record<string, string> = { A: 'background:#E9F7EF;color:#2E7D4F;border-color:#BFE6CE', B: 'background:#EEF3FF;color:#2F4FBF;border-color:#C9D7FF', C: 'background:#FFF4E5;color:#B26A00;border-color:#FFD9A8', D: 'background:#FDECEF;color:#B84C5F;border-color:#F7C3CD' };
|
||||||
|
const sevStyle: Record<string, string> = { critical: '#D4889A', warning: '#D4A872', good: '#9B8AD4' };
|
||||||
|
const sevLabel: Record<string, string> = { critical: '핵심 과제', warning: '보완', good: '강점' };
|
||||||
|
const ring = (score: number, label: string, grade: string) => {
|
||||||
|
const r = 52, c = 2 * Math.PI * r, off = c * (1 - score / 100);
|
||||||
|
return `<div class="ring"><svg viewBox="0 0 120 120" width="132" height="132"><circle cx="60" cy="60" r="${r}" fill="none" stroke="#E8ECF7" stroke-width="10"/><circle cx="60" cy="60" r="${r}" fill="none" stroke="#6C5CE7" stroke-width="10" stroke-linecap="round" stroke-dasharray="${c.toFixed(1)}" stroke-dashoffset="${off.toFixed(1)}" transform="rotate(-90 60 60)"/><text x="60" y="66" text-anchor="middle" font-family="Playfair Display, serif" font-weight="700" font-size="30" fill="#0A1128">${score}</text><text x="60" y="84" text-anchor="middle" font-size="10" fill="#7A8399">/ 100</text></svg><span class="badge" style="${gradeStyle[grade]}">${label} 등급 ${grade}</span></div>`;
|
||||||
|
};
|
||||||
|
|
||||||
|
const verified = v1.categories.reduce((s, c) => s + c.verifiedCount, 0);
|
||||||
|
const total = AEO_GEO_RUBRIC.criteria.length;
|
||||||
|
const P = { P0: '지금 고칠 것 (1주 안)', P1: '4주 안에 만들 것', P2: '이어서 할 것' } as Record<string, string>;
|
||||||
|
|
||||||
|
// 서포터즈 자동 빌드 섹션 데이터
|
||||||
|
const posts = (status?.posts ?? []) as any[];
|
||||||
|
const briefById = new Map(((briefs?.posts ?? []) as any[]).map((b) => [b.id, b]));
|
||||||
|
const imgCounts = images?.counts ?? null;
|
||||||
|
const physicians = authors?.physicians ? Object.keys(authors.physicians).length : 0;
|
||||||
|
const INPUTS = ['작성자 실명·직함·공개 프로필', '글별 의학 검토 원장과 검토일', '지원 관계 문구', '견적 기본 포함 항목·결제 방식', '회복 일정표의 병원 확정값', '재수술 정책', '페이지 간 표기 불일치의 정답', '진료 분야별 담당 원장', '정식 도메인·색인 허용 시점·홈페이지 링크 위치'];
|
||||||
|
|
||||||
|
const axisTable = (ax: typeof v2.aeo) => `
|
||||||
|
<table class="tbl"><thead><tr><th style="width:52px">항목</th><th>무엇을 보는가</th><th style="width:70px">점수</th><th style="width:72px">근거</th><th>파생된 실측 항목</th></tr></thead><tbody>
|
||||||
|
${ax.items.map((it) => `<tr><td class="mono">${esc(it.item.id)}</td><td><b>${esc(it.item.name)}</b><div class="sub">${esc(it.item.question)}</div></td><td>${it.pct === null ? '<span class="pill gray">미검증</span>' : `<b>${Math.round(it.pct * 100)}</b><span class="sub"> / 100</span>`}</td><td>${it.basis === 'derived' ? '실측 파생' : it.basis === 'judged' ? '사람 판정' : '미검증'}</td><td class="sub">${it.signals.map((s) => `${s.criterionId} ${s.level === 'unverified' ? '미검증' : 'L' + s.level}`).join(' · ')}</td></tr>`).join('')}
|
||||||
|
</tbody></table>
|
||||||
|
${ax.cappedBy?.length ? `<p class="note">게이트 상한 적용: ${ax.cappedBy.map((g) => esc(g.gate.name)).join(', ')}. 상한 전 점수 ${ax.rawScore}.</p>` : ''}`;
|
||||||
|
|
||||||
|
const html = `<!doctype html>
|
||||||
|
<html lang="ko"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<title>${esc(result.clinicName)} AI Answer Readiness Report v${esc(result.rubricVersion)}</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com"><link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@600;700&display=swap" rel="stylesheet">
|
||||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css">
|
||||||
|
<style>
|
||||||
|
:root{--ink:#0A1128;--navy:#021341;--violet:#4F1DA1;--accent:#6C5CE7;--light:#F7F8FC;--slate:#4A5268;--muted:#7A8399;--line:#E3E7F2}
|
||||||
|
*{box-sizing:border-box}body{margin:0;font-family:Pretendard,-apple-system,sans-serif;color:var(--ink);background:#fff;word-break:keep-all;line-height:1.62;font-size:14px}
|
||||||
|
.serif{font-family:'Playfair Display',serif}
|
||||||
|
.page{padding:48px 56px;max-width:1080px;margin:0 auto}
|
||||||
|
.dark{background:var(--ink);color:#fff}.dark .sub,.dark .note{color:#B9C0D4}.light{background:var(--light)}
|
||||||
|
.eyebrow{font-size:12px;font-weight:700;letter-spacing:.24em;color:var(--accent);text-transform:uppercase}.dark .eyebrow{color:#C4B5FD}
|
||||||
|
h1{font-size:44px;line-height:1.1;margin:10px 0 6px;letter-spacing:-.02em}h2{font-size:30px;margin:8px 0 12px;line-height:1.2}h3{font-size:17px;margin:0 0 6px}
|
||||||
|
.accent{background:linear-gradient(90deg,#C4B5FD,#93C5FD);-webkit-background-clip:text;background-clip:text;color:transparent}
|
||||||
|
.lede{font-size:16px;color:var(--slate);max-width:760px}.dark .lede{color:#D6DBEA}
|
||||||
|
.sub{font-size:12.5px;color:var(--muted)}.note{font-size:12.5px;color:var(--muted);margin-top:8px}
|
||||||
|
.badge{display:inline-block;border:1px solid;border-radius:999px;padding:3px 12px;font-size:13px;font-weight:700}
|
||||||
|
.pill{display:inline-block;border-radius:999px;padding:2px 9px;font-size:11.5px;font-weight:700}.pill.gray{background:#EEF0F6;color:#6B7280}
|
||||||
|
.grid{display:grid;gap:16px}.g2{grid-template-columns:1fr 1fr}.g3{grid-template-columns:repeat(3,1fr)}
|
||||||
|
.card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:20px 22px;box-shadow:3px 4px 12px rgba(0,0,0,.05)}.dark .card{color:var(--ink)}
|
||||||
|
.rings{display:flex;gap:28px;align-items:flex-start;flex-wrap:wrap}.ring{display:flex;flex-direction:column;align-items:center;gap:8px}
|
||||||
|
.tbl{width:100%;border-collapse:collapse;font-size:13px;background:#fff;border-radius:12px;overflow:hidden;border:1px solid var(--line)}.tbl th{background:#F1F3FA;text-align:left;padding:9px 11px;font-size:12px;color:var(--slate);border-bottom:1px solid var(--line)}.tbl td{padding:9px 11px;border-bottom:1px solid #EEF0F6;vertical-align:top}.tbl tr:last-child td{border-bottom:0}.mono{font-family:ui-monospace,Menlo,monospace;font-size:12px;color:var(--accent);font-weight:700}
|
||||||
|
.lv{display:inline-block;min-width:26px;text-align:center;border-radius:6px;padding:1px 6px;font-weight:700;font-size:12px}.lv3{background:#E9F7EF;color:#2E7D4F}.lv2{background:#EEF3FF;color:#2F4FBF}.lv1{background:#FFF4E5;color:#B26A00}.lv0{background:#FDECEF;color:#B84C5F}.lvu{background:#EEF0F6;color:#6B7280}
|
||||||
|
.find{border-left:5px solid;padding-left:16px}.find .tag{font-size:11.5px;font-weight:700;letter-spacing:.08em}
|
||||||
|
.act .pri{font-family:'Playfair Display',serif;font-size:22px;font-weight:700;color:var(--accent)}.act .eff{float:right}
|
||||||
|
.kpi{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.kpi .k{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);border-radius:14px;padding:14px 16px}.kpi b{font-family:'Playfair Display',serif;font-size:30px;color:#AF90FF;display:block;line-height:1}.kpi span{font-size:12.5px;color:#C7CDE0}
|
||||||
|
a{color:var(--accent)}ul{margin:6px 0 0 18px;padding:0}li{margin:3px 0}
|
||||||
|
footer{padding:28px 56px;font-size:12px;color:var(--muted);border-top:1px solid var(--line)}
|
||||||
|
@media print{@page{size:A4;margin:12mm}body{font-size:12.5px}.page{padding:22px 10px;max-width:none}.pb{page-break-before:always}h1{font-size:34px}h2{font-size:24px}.dark{-webkit-print-color-adjust:exact;print-color-adjust:exact}.card,.tbl,.lv,.badge,.pill,.kpi .k{-webkit-print-color-adjust:exact;print-color-adjust:exact}tr,.card{page-break-inside:avoid}}
|
||||||
|
</style></head><body>
|
||||||
|
|
||||||
|
<section class="dark"><div class="page" style="padding-top:64px;padding-bottom:56px">
|
||||||
|
<div class="eyebrow">INFINITH AI Discovery · AEO / GEO Audit v${esc(result.rubricVersion)}</div>
|
||||||
|
<h1 class="serif"><span class="accent">AI Answer Readiness</span></h1>
|
||||||
|
<div style="font-size:26px;font-weight:700;margin:4px 0 2px">${esc(result.clinicName)}</div>
|
||||||
|
<div class="sub" style="color:#C4B5FD">${esc(result.industry)} · <a href="${esc(result.url)}" style="color:#C4B5FD">${esc(result.url)}</a></div>
|
||||||
|
<p class="lede" style="margin-top:18px">AI 답변엔진(ChatGPT·Perplexity·Gemini·네이버 AI 브리핑)이 이 병원을 얼마나 읽고, 믿고, 인용할 수 있는지를 실측 신호로 채점한 리포트입니다. 답변 준비도(AEO)와 출처 준비도(GEO)를 각각 100점으로 보고, 확인하지 못한 항목은 점수에서 뺍니다.</p>
|
||||||
|
<div style="display:flex;gap:32px;align-items:center;flex-wrap:wrap;margin-top:26px">
|
||||||
|
<div class="card" style="display:flex;gap:26px;padding:22px 30px">${ring(v2.aeo.score, 'AEO', v2.aeo.grade)}${ring(v2.geo.score, 'GEO', v2.geo.grade)}</div>
|
||||||
|
<div class="kpi" style="flex:1;min-width:420px">
|
||||||
|
<div class="k"><b>${verified}</b><span>실측 항목 / ${total}</span></div>
|
||||||
|
<div class="k"><b>${v1.score}</b><span>v1.0 종합 (${v1.grade})</span></div>
|
||||||
|
<div class="k"><b>${result.keyFindings.length}</b><span>핵심 발견</span></div>
|
||||||
|
<div class="k"><b>${result.actions.length}</b><span>실행 항목</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="note" style="margin-top:22px">실측일 ${esc(result.auditedAt)} · 리포트 작성 ${today} · 미검증 ${total - verified}개 항목은 분모에서 제외했습니다. 조건은 마지막 장에 적었습니다.</p>
|
||||||
|
</div></section>
|
||||||
|
|
||||||
|
<section class="light pb"><div class="page">
|
||||||
|
<div class="eyebrow">Findings</div><h2>AI가 지금 ${esc(result.clinicName)}를 어떻게 읽는지 정리했습니다</h2>
|
||||||
|
<div class="grid g2" style="margin-top:14px">
|
||||||
|
${result.keyFindings.map((f) => `<div class="card find" style="border-left-color:${sevStyle[f.severity]}"><div class="tag" style="color:${sevStyle[f.severity]}">${sevLabel[f.severity]}</div><h3>${esc(f.title)}</h3><p style="margin:0;color:var(--slate)">${esc(f.detail)}</p></div>`).join('')}
|
||||||
|
</div>
|
||||||
|
</div></section>
|
||||||
|
|
||||||
|
<section class="pb"><div class="page">
|
||||||
|
<div class="eyebrow">AEO · Answer Readiness</div><h2>답변 준비도 ${v2.aeo.items.length}개 항목</h2>
|
||||||
|
<p class="lede">${esc(v2.aeo.axis.description)}</p>
|
||||||
|
${axisTable(v2.aeo)}
|
||||||
|
<div class="eyebrow" style="margin-top:34px">GEO · Source Readiness</div><h2>출처 준비도 ${v2.geo.items.length}개 항목</h2>
|
||||||
|
<p class="lede">${esc(v2.geo.axis.description)}</p>
|
||||||
|
${axisTable(v2.geo)}
|
||||||
|
</div></section>
|
||||||
|
|
||||||
|
<section class="pb dark"><div class="page">
|
||||||
|
<div class="eyebrow">Category Detail</div><h2>카테고리별 실측 ${total}개 항목</h2>
|
||||||
|
<div class="grid g3" style="margin-top:12px">
|
||||||
|
${v1.categories.map((c) => `<div class="card"><div class="sub">${esc(c.category.code)} · ${esc(c.category.nameEn)}</div><h3 style="margin-top:2px">${esc(c.category.name)}</h3><div><span class="serif" style="font-size:28px;font-weight:700;color:var(--accent)">${c.pct}</span><span class="sub"> / 100 · 실측 ${c.verifiedCount}/${c.totalCount}</span></div></div>`).join('')}
|
||||||
|
</div>
|
||||||
|
</div></section>
|
||||||
|
<section><div class="page">
|
||||||
|
${AEO_GEO_RUBRIC.categories.map((cat) => {
|
||||||
|
const rows = AEO_GEO_RUBRIC.criteria.filter((c) => c.category === cat.id);
|
||||||
|
return `<h3 style="margin-top:22px;font-size:18px">${esc(cat.code)} · ${esc(cat.name)} <span class="sub">${esc(cat.description)}</span></h3>
|
||||||
|
<table class="tbl"><thead><tr><th style="width:44px">ID</th><th style="width:22%">항목</th><th style="width:88px">판정</th><th>실측 근거</th></tr></thead><tbody>
|
||||||
|
${rows.map((c) => { const r = resultById.get(c.id); const lv = r?.level ?? 'unverified'; const cls = lv === 'unverified' ? 'lvu' : `lv${lv}`; return `<tr><td class="mono">${c.id}</td><td><b>${esc(c.name)}</b><div class="sub">배점 ${c.weight}</div></td><td><span class="lv ${cls}">${lv === 'unverified' ? '미검증' : 'L' + lv}</span><div class="sub">${esc(levelLabel(c.id, lv))}</div></td><td class="sub" style="color:var(--slate)">${esc(r?.evidence ?? '')}</td></tr>`; }).join('')}
|
||||||
|
</tbody></table>`;
|
||||||
|
}).join('')}
|
||||||
|
</div></section>
|
||||||
|
|
||||||
|
<section class="pb light"><div class="page">
|
||||||
|
<div class="eyebrow">Action Plan</div><h2>지금 고칠 것과 4주 안에 만들 것을 나눴습니다</h2>
|
||||||
|
${(['P0', 'P1', 'P2'] as const).map((p) => { const list = result.actions.filter((a) => a.priority === p); if (!list.length) return ''; return `<h3 style="margin-top:20px">${p} · ${P[p]}</h3><div class="grid g2">${list.map((a) => `<div class="card act"><span class="pill gray eff">${esc(a.effort)}</span><div class="pri">${p}</div><h3>${esc(a.title)}</h3><p style="margin:0 0 8px;color:var(--slate)">${esc(a.detail)}</p><div class="sub">연결 항목 ${a.criterionIds.map((c) => `<span class="mono">${c}</span>`).join(' ')}</div></div>`).join('')}</div>`; }).join('')}
|
||||||
|
</div></section>
|
||||||
|
|
||||||
|
${status ? `<section class="pb dark"><div class="page">
|
||||||
|
<div class="eyebrow">Supporters Preview</div><h2>홈페이지 자료만으로 서포터즈 사이트 초안을 만들었습니다</h2>
|
||||||
|
<p class="lede">병원 URL 하나로 근거 수집, 글 생성, 발행 게이트, 미리보기 배포까지 자동으로 돌렸습니다. 모든 글은 의학 검토 대기 상태이고 색인은 막혀 있습니다. 병원이 확인 항목을 입력하고 검토·승인하면 코드 수정 없이 발행됩니다.</p>
|
||||||
|
<div class="kpi" style="margin-top:18px">
|
||||||
|
<div class="k"><b>${posts.length}</b><span>글 (게이트 통과)</span></div>
|
||||||
|
<div class="k"><b>${videos?.channel?.videos ?? '-'}</b><span>유튜브 영상 집계</span></div>
|
||||||
|
<div class="k"><b>${imgCounts ? imgCounts.doctors + imgCounts.clinic + imgCounts.procedure + imgCounts.equipment : '-'}</b><span>사용 가능 이미지 (전후·사례 제외)</span></div>
|
||||||
|
<div class="k"><b>${physicians}</b><span>의료진 프로필</span></div>
|
||||||
|
</div>
|
||||||
|
<p class="note" style="margin-top:14px">미리보기 ${status.previewUrl ? `<a href="${esc(status.previewUrl)}" style="color:#C4B5FD">${esc(status.previewUrl)}</a>` : '준비 중'} · 병원 확인 항목 입력 <a href="https://infinith-demo.vercel.app/supporters/${esc(id)}" style="color:#C4B5FD">infinith-demo.vercel.app/supporters/${esc(id)}</a></p>
|
||||||
|
</div></section>
|
||||||
|
<section><div class="page">
|
||||||
|
<h3 style="font-size:18px">자동 생성한 글 ${posts.length}편</h3>
|
||||||
|
<table class="tbl"><thead><tr><th style="width:54px">분류</th><th>제목</th><th style="width:70px">근거 영상</th><th style="width:86px">병원 확인 대기</th><th style="width:90px">상태</th></tr></thead><tbody>
|
||||||
|
${posts.map((p: any) => { const b = briefById.get(p.id); return `<tr><td class="mono">${esc(p.category)}</td><td><b>${esc(p.title)}</b>${status.previewUrl ? `<div class="sub"><a href="${esc(status.previewUrl)}/posts/${esc(p.id)}">${esc(status.previewUrl)}/posts/${esc(p.id)}</a></div>` : ''}</td><td>${(b?.videos ?? []).length}편</td><td>${(p.pending ?? []).length}건</td><td><span class="pill gray">의학 검토 대기</span></td></tr>`; }).join('')}
|
||||||
|
</tbody></table>
|
||||||
|
<h3 style="font-size:18px;margin-top:26px">병원이 확인해 주실 것 ${INPUTS.length}가지</h3>
|
||||||
|
<p class="sub" style="color:var(--slate)">홈페이지 공개 자료에 없어 병원만 답할 수 있는 값입니다. 입력 전까지 사이트에는 "확인 대기"로 표시됩니다.</p>
|
||||||
|
<div class="grid g3" style="margin-top:10px">${INPUTS.map((t, i) => `<div class="card" style="padding:14px 16px"><span class="mono">${i + 1}</span> <b>${esc(t)}</b></div>`).join('')}</div>
|
||||||
|
<p class="note">싣지 않는 것: 전후 사진, 환자 경험담, 다른 병원과의 비교, 효과 보장, 가격 금액. 이미지는 의료법 기준 규칙에 따라 전후·사례·모델·수술 장면·인증 마크를 자동 제외했습니다.</p>
|
||||||
|
</div></section>` : ''}
|
||||||
|
|
||||||
|
<section class="pb light"><div class="page">
|
||||||
|
<div class="eyebrow">Integrity</div><h2>근거 없는 것은 약속하지 않습니다</h2>
|
||||||
|
<table class="tbl" style="margin-top:12px"><thead><tr><th style="width:30%">하지 않는 것</th><th>이유</th></tr></thead><tbody>
|
||||||
|
${result.notDoing.map((n) => `<tr><td><b>${esc(n.item)}</b></td><td style="color:var(--slate)">${esc(n.reason)}</td></tr>`).join('')}
|
||||||
|
</tbody></table>
|
||||||
|
<h3 style="margin-top:26px;font-size:18px">측정 조건</h3>
|
||||||
|
<ul style="color:var(--slate)">${result.conditions.map((c) => `<li>${esc(c)}</li>`).join('')}</ul>
|
||||||
|
<h3 style="margin-top:26px;font-size:18px">채점 방법</h3>
|
||||||
|
<p style="color:var(--slate);margin:0">기준표 v1.0 ${total}개 실측 항목(A 접근성 · B 엔티티 · C 콘텐츠 · D 표면 · E 측정 · F 위생)을 0~3 레벨로 판정하고, v2.0은 그 항목을 답변 준비도(AEO) ${v2.aeo.items.length}개와 출처 준비도(GEO) ${v2.geo.items.length}개로 묶어 각 100점으로 정규화합니다. 미검증 항목은 분모에서 빼고, 치명 게이트(크롤러 차단 등)에 걸리면 상한을 둡니다. 답변엔진 언급률은 단발 조회로는 재지 않습니다.</p>
|
||||||
|
</div></section>
|
||||||
|
|
||||||
|
<footer>INFINITH · AI오투오 · 문의 o2oteam@o2o.kr · 이 리포트는 공개 페이지 실측에 근거하며, 오너 계정(GA4·GSC·서버 로그)이 필요한 항목은 미검증으로 두었습니다. 법률 자문이 아닙니다.</footer>
|
||||||
|
</body></html>`;
|
||||||
|
writeFileSync(out, html);
|
||||||
|
console.log(`${out} · AEO ${v2.aeo.score}${v2.aeo.grade} · GEO ${v2.geo.score}${v2.geo.grade} · v1 ${v1.score}${v1.grade} · 실측 ${verified}/${total}`);
|
||||||
@ -5,8 +5,10 @@
|
|||||||
import type { DiscoveryResult } from '../types/discovery';
|
import type { DiscoveryResult } from '../types/discovery';
|
||||||
import { DISCOVERY_VIEWCLINIC } from './discovery_viewclinic';
|
import { DISCOVERY_VIEWCLINIC } from './discovery_viewclinic';
|
||||||
import { DISCOVERY_TAEHA } from './discovery_taeha';
|
import { DISCOVERY_TAEHA } from './discovery_taeha';
|
||||||
|
import { DISCOVERY_WONJIN } from './discovery_wonjin';
|
||||||
|
|
||||||
export const DISCOVERY_RESULTS: Record<string, DiscoveryResult> = {
|
export const DISCOVERY_RESULTS: Record<string, DiscoveryResult> = {
|
||||||
viewclinic: DISCOVERY_VIEWCLINIC,
|
viewclinic: DISCOVERY_VIEWCLINIC,
|
||||||
taeha: DISCOVERY_TAEHA,
|
taeha: DISCOVERY_TAEHA,
|
||||||
|
wonjin: DISCOVERY_WONJIN,
|
||||||
};
|
};
|
||||||
|
|||||||
112
src/data/discovery_wonjin.ts
Normal file
112
src/data/discovery_wonjin.ts
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
/**
|
||||||
|
* 원진성형외과 (www.k-wonjin.co.kr) AEO/GEO 진단. 자동 채점 초안
|
||||||
|
* 생성: audit_aeo_geo.py · 2026-09-08 · JS 미실행 HTML 기준
|
||||||
|
*
|
||||||
|
* ⚠️ 이 파일은 초안이다. 배포 전 사람이 해야 할 일:
|
||||||
|
* 1. [semi·사람 판정 필요] 항목 5개(C1·C4·C7·D3·D5)의 증거를 보고 level 확정
|
||||||
|
* 2. [manual] 항목 9개 중 실측 가능한 것(D1·D2·D4) 실측, 나머지는 unverified 유지
|
||||||
|
* 3. keyFindings(3~5개) · actions(P0~P2) 작성
|
||||||
|
* 4. discoveryResults.ts에 등록: wonjin: DISCOVERY_WONJIN,
|
||||||
|
*/
|
||||||
|
import type { DiscoveryResult } from '../types/discovery';
|
||||||
|
|
||||||
|
export const DISCOVERY_WONJIN: DiscoveryResult = {
|
||||||
|
id: 'wonjin',
|
||||||
|
clinicName: '원진성형외과',
|
||||||
|
url: 'https://www.k-wonjin.co.kr',
|
||||||
|
industry: '성형외과 (강남역)',
|
||||||
|
auditedAt: '2026-09-08',
|
||||||
|
rubricVersion: '2.0',
|
||||||
|
conditions: [
|
||||||
|
'실측 대상: 메인 페이지 + /contents/eye/cfs 2개 URL, JS 미실행 HTML 기준',
|
||||||
|
'크롤러 접근성: robots.txt 파싱 + 12개 AI 봇 UA 실제 GET 요청',
|
||||||
|
'semi/manual 항목은 자동 수집 증거만 첨부하고 미검증 처리, 분모 제외 (사람 보정 후 확정)',
|
||||||
|
'답변엔진 언급률은 측정하지 않았다 (단발 조회는 무효, 반복 측정은 별도 기준선 단계에서 수행)',
|
||||||
|
],
|
||||||
|
results: [
|
||||||
|
// A. 접근성
|
||||||
|
{ criterionId: 'A1', level: 3, evidence: '12개 AI 봇 전부 허용. OAI-SearchBot·PerplexityBot·GPTBot UA로 GET → 전부 200', source: 'robots.txt: User-agent: * / Disallow: /admin/' },
|
||||||
|
{ criterionId: 'A2', level: 3, evidence: 'Server: Microsoft-IIS/10.0 직접 응답, Cloudflare 헤더 없음, AI UA 챌린지 없음' },
|
||||||
|
{ criterionId: 'A3', level: 3, evidence: '서버 렌더링. JS 미실행 HTML에서 본문 텍스트 14,079자 추출' },
|
||||||
|
{ criterionId: 'A4', level: 1, evidence: '변형 간 최종 URL 불일치(중복 콘텐츠 위험): [\'https://k-wonjin.co.kr\', \'https://www.k-wonjin.co.kr\']' },
|
||||||
|
{ criterionId: 'A5', level: 1, evidence: '/sitemap.xml 200이나 robots.txt에 Sitemap 미선언. URL 132개' },
|
||||||
|
{ criterionId: 'A6', level: 'unverified', evidence: '[manual] Bing Webmaster Tools 등록 여부는 오너 계정 접근 필요 (또는 site: 검색 수동 확인)' },
|
||||||
|
{ criterionId: 'A7', level: 3, evidence: 'TTFB 0.094s / 초기 HTML 153KB. 시술 페이지 145KB. 모두 기준 이내' },
|
||||||
|
// B. 엔티티
|
||||||
|
{ criterionId: 'B1', level: 2, evidence: 'JSON-LD 4블록 전부 유효 (@graph 미사용)' },
|
||||||
|
{ criterionId: 'B2', level: 1, evidence: 'ItemList + Organization만 존재. MedicalClinic/LocalBusiness 없음 → 주소·전화·진료시간이 구조화되어 있지 않음' },
|
||||||
|
{ criterionId: 'B3', level: 0, evidence: 'Physician/Attorney 스키마 없음. 전문가 정보는 HTML 텍스트·이미지로만 존재' },
|
||||||
|
{ criterionId: 'B4', level: 3, evidence: '주소 단일 표기: "서울시 서초구 강남대로 419 파고다타워 12". 전화 6종: 02-3477-3300, 023480-3573, 02392-0330' },
|
||||||
|
{ criterionId: 'B5', level: 3, evidence: 'sameAs 10개 (SNS·버티컬·지도 연결)' },
|
||||||
|
{ criterionId: 'B6', level: 2, evidence: 'rel=canonical self-referencing 존재' },
|
||||||
|
{ criterionId: 'B7', level: 0, evidence: '다국어 페이지 흔적(https://www.wonjinbeauty.com/en/) 있으나 hreflang 없음. 미연결' },
|
||||||
|
// C. 콘텐츠
|
||||||
|
{ criterionId: 'C1', level: 0, evidence: "홈 본문 1,999자에 \"원진성형외과는 …에 있는 … 병원입니다\" 형태의 정의문 없음. 소개 문구(25년 헤리티지·강남역)는 메인 비주얼 이미지 alt 에만 있고, 소개 페이지(/hospitalinfo/about) 첫 단락도 슬로건형", source: "evidence/wonjin/pages/home.json · hospitalinfo-about.json (2026-09-07)" },
|
||||||
|
{ criterionId: 'C2', level: 0, evidence: 'FAQ·자주 묻는 질문·Q&A 섹션 탐지 안 됨 (메인·시술 페이지)' },
|
||||||
|
{ criterionId: 'C3', level: 0, evidence: '메인 H1 0개: 없음. 시술 페이지 H1 없음' },
|
||||||
|
{ criterionId: 'C4', level: 2, evidence: "눈매교정(CFS) 페이지에 수술 시간 2시간·단기 수면 또는 부분 마취·실밥 제거 7일·일상생활 3일 텍스트 존재. 트임(오픈아이) 40분·5~7일. 쌍꺼풀·눈매교정(글램아이·더블유착) 페이지는 수치 없음. 가격 표기 0회(비급여 안내 페이지는 별도)", source: "https://www.k-wonjin.co.kr/contents/eye/cfs 원본 HTML 파싱 (2026-09-07 근거 수집)" },
|
||||||
|
{ criterionId: 'C5', level: 0, evidence: 'HTML <table> 없음. 비교 정보는 이미지로 추정 (이미지 표 여부는 수동 확인)' },
|
||||||
|
{ criterionId: 'C6', level: 1, evidence: '최신 갱신 신호 2025-02-18 (sitemap lastmod 2025-02-18). 18개월 전. dateModified 마크업 없음' },
|
||||||
|
{ criterionId: 'C7', level: 2, evidence: "의료진 상세 페이지 17명의 직함·전문의 여부·경력(원장당 12~23줄)이 HTML 텍스트로 존재. 학술 활동 페이지 3,760자. 단 Physician 스키마·저자 표기는 없어 구조화되지 않음", source: "evidence/wonjin/doctors.json (2026-09-07)" },
|
||||||
|
{ criterionId: 'C8', level: 'unverified', evidence: '[manual] 핵심 페이지 단락 샘플 10개의 상호·시술명 포함 비율 수동 채점 필요' },
|
||||||
|
// D. 표면
|
||||||
|
{ criterionId: 'D1', level: 'unverified', evidence: "강남언니 프로필은 공개 페이지 수동 실측 필요 (후기 수·의료진·이벤트·갱신일). 홈페이지 sameAs 에 버티컬 링크 포함 여부는 확인됨(10개 중)" },
|
||||||
|
{ criterionId: 'D2', level: 'unverified', evidence: '[manual] Google Maps 검색으로 GBP 소유·리뷰·NAP 수동 실측 필요' },
|
||||||
|
{ criterionId: 'D3', level: 2, evidence: "자체 YouTube 채널 @wjwonjin 영상 736편·구독 1.5만·누적 조회 3,113만(2026-09-08 API 집계). 인스타그램 3계정·페이스북·네이버 블로그(popokpop) 존재. 채널 sameAs 10개로 홈페이지와 연결됨. 단 홈페이지 내 외부 링크는 JS 렌더라 HTML에서 미노출", source: "YouTube Data API v3 channels.list, clinic registry (2026-09-08)" },
|
||||||
|
{ criterionId: 'D4', level: 'unverified', evidence: '[manual] 홈페이지·버티컬·GBP·플레이스 NAP 대조표 수동 작성 필요' },
|
||||||
|
{ criterionId: 'D5', level: 'unverified', evidence: '[semi·사람 판정 필요] 사이트에 네이버 플레이스 링크 없음. 플레이스 존재·홈페이지 역연결·리뷰 수 수동 확인' },
|
||||||
|
{ criterionId: 'D6', level: 0, evidence: 'Wikidata에서 "원진성형외과" 검색 결과 없음' },
|
||||||
|
// E. 측정
|
||||||
|
{ criterionId: 'E1', level: 'unverified', evidence: '[manual] 서버 로그 접근 필요 (AI 크롤러 히트 + IP 검증)' },
|
||||||
|
{ criterionId: 'E2', level: 'unverified', evidence: '[manual] GA4 접근 필요 (AI 유입 커스텀 채널그룹 여부)' },
|
||||||
|
{ criterionId: 'E3', level: 'unverified', evidence: '[manual] GSC 접근 필요 (AI Overviews 노출)' },
|
||||||
|
{ criterionId: 'E4', level: 'unverified', evidence: '[manual] 기준선 스팟체크 미실시 (질의 10개 × 5회 반복은 별도 단계)' },
|
||||||
|
// F. 위생
|
||||||
|
{ criterionId: 'F1', level: 0, evidence: '메인 페이지 이미지 45개 중 28개(62%) alt 누락 또는 빈 값' },
|
||||||
|
{ criterionId: 'F2', level: 'unverified', evidence: "Server: Microsoft-IIS/10.0, ASP.NET 계열 자체 제작 추정(meta generator 없음). CMS 버전·보안 패치 여부 판정 불가" },
|
||||||
|
{ criterionId: 'F3', level: 3, evidence: '초기 HTML 153KB (300KB 미만)' },
|
||||||
|
{ criterionId: 'F4', level: 2, evidence: 'viewport meta 존재, 반응형. CWV 미측정' },
|
||||||
|
],
|
||||||
|
keyFindings: [
|
||||||
|
{
|
||||||
|
title: "크롤러 접근은 열려 있습니다. 서버 렌더링이라 AI가 본문을 읽습니다",
|
||||||
|
detail: "robots.txt가 AI 검색봇 12종을 모두 허용하고, IIS가 본문을 서버에서 렌더링해 JS 없이도 14,079자를 읽을 수 있습니다. TTFB 0.09초, 초기 HTML 153KB로 가볍습니다. 다만 www 유무에 따라 최종 URL이 갈라지고(정본 미수렴), sitemap이 robots.txt에 선언돼 있지 않습니다.",
|
||||||
|
severity: "good",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "연결은 됐지만 병원 자체가 스키마로 정의돼 있지 않습니다",
|
||||||
|
detail: "Organization.sameAs 10개로 SNS·지도·버티컬을 잘 묶었고 주소 표기도 한 가지입니다. 그러나 MedicalClinic·Physician 스키마가 없어 주소·전화·진료시간·의료진 17명이 구조화돼 있지 않고, 전화번호는 6종이 섞여 있습니다. 영문 사이트(wonjinbeauty.com)는 hreflang으로 연결되지 않았습니다.",
|
||||||
|
severity: "critical",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "인용할 문장이 부족합니다. H1도 표도 정의문도 없습니다",
|
||||||
|
detail: "메인·시술 페이지에 H1이 없고 HTML 표가 없으며 병원 정의문도 없습니다. 눈매교정(CFS)·트임 페이지에는 수술 시간·마취·실밥·일상 복귀 수치가 텍스트로 있어 인용 구조의 출발점이 될 수 있지만, 쌍꺼풀·눈매교정 나머지 페이지는 수치가 없습니다. 최신 갱신 신호가 2025-02-18(sitemap)로 18개월 전입니다.",
|
||||||
|
severity: "critical",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "유튜브는 강합니다. 736편·누적 3,113만 회",
|
||||||
|
detail: "설명형 롱폼(눈성형 관리법·중년 눈성형 비교·지방흡입 QnA 등)이 있어 글의 근거 영상으로 쓸 수 있습니다. 다만 상위 조회 영상의 다수가 브랜드 필름·연예인·전후 형식이라 인용용 정보형 영상은 10편 안팎입니다. 이 채널이 원진의 가장 큰 오픈웹 자산입니다.",
|
||||||
|
severity: "warning",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "이미지 alt 62% 누락, 의료진 경력은 텍스트지만 구조화는 안 됨",
|
||||||
|
detail: "메인 이미지 45개 중 28개가 alt 없이 실려 AI가 이미지 내용을 읽지 못합니다. 의료진 17명의 경력은 텍스트로 있어(원장당 12~23줄) Physician 스키마만 붙이면 바로 엔티티가 됩니다. 강남언니·GBP·네이버 플레이스는 이번 자동 채점 범위 밖이라 수동 실측이 남아 있습니다.",
|
||||||
|
severity: "warning",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
actions: [
|
||||||
|
{ priority: "P0", title: "정본 URL 수렴 + sitemap 선언", detail: "k-wonjin.co.kr → www.k-wonjin.co.kr 로 301 통일, robots.txt 에 Sitemap: 선언, sitemap lastmod 갱신. 전화번호를 대표번호 1개로 통일.", criterionIds: ["A4", "A5", "B4"], effort: "1일" },
|
||||||
|
{ priority: "P0", title: "MedicalClinic + Physician 스키마", detail: "Organization 을 MedicalClinic 으로 승격(address·telephone·openingHoursSpecification·medicalSpecialty). 의료진 17명 Physician 스키마(이름·직함·전문의·프로필 URL). 영문 사이트와 hreflang 상호 연결.", criterionIds: ["B2", "B3", "B7"], effort: "1주" },
|
||||||
|
{ priority: "P1", title: "시술 페이지 인용 구조: H1·표·FAQ", detail: "시술 페이지마다 H1 1개, 수술 시간·마취·실밥·일상 복귀를 HTML 표로, FAQ 5문항 + FAQPage 스키마. CFS·트임 페이지의 수치 형식을 다른 눈·코·윤곽 페이지로 확산. 메인에 병원 정의문 한 단락.", criterionIds: ["C1", "C2", "C3", "C4", "C5"], effort: "2~4주" },
|
||||||
|
{ priority: "P1", title: "이미지 alt 일괄 정비 + 갱신 신호", detail: "메인 28개 이미지 alt 작성(무엇을 찍은 사진인지 사실만). 페이지에 dateModified 마크업, sitemap lastmod 를 실제 수정일로.", criterionIds: ["F1", "C6"], effort: "1주" },
|
||||||
|
{ priority: "P1", title: "서포터즈 사이트로 오픈웹 원문 공급", detail: "자동 빌드 미리보기(supporters-wonjin.vercel.app)의 글 6편을 병원이 검토·승인하면 색인 허용 도메인으로 발행. 유튜브 설명 영상 10편을 글에 연결. 이후 질문 뱅크 기준으로 편집 캘린더 운영.", criterionIds: ["C2", "C4", "C5", "D3"], effort: "2~4주" },
|
||||||
|
{ priority: "P2", title: "표면 실측과 측정 인프라", detail: "강남언니·GBP·네이버 플레이스 NAP 대조표 작성, GA4 AI 유입 채널그룹, GSC AI Overviews 확인, 서버 로그의 AI 크롤러 히트 계측. Bing Webmaster 등록.", criterionIds: ["D1", "D2", "D4", "D5", "E1", "E2", "E3", "A6"], 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 브리핑은 별도 트랙.' },
|
||||||
|
],
|
||||||
|
};
|
||||||
Loading…
Reference in New Issue
Block a user