diff --git a/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1.pdf b/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1.pdf index fe6e396..3832810 100644 Binary files a/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1.pdf and b/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1.pdf differ diff --git a/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1.pptx b/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1.pptx index be75998..c9cd5b8 100644 Binary files a/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1.pptx and b/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1.pptx differ diff --git a/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1_표준캔버스.pdf b/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1_표준캔버스.pdf index 687ea4b..8ab43fd 100644 Binary files a/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1_표준캔버스.pdf and b/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1_표준캔버스.pdf differ diff --git a/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1_표준캔버스.pptx b/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1_표준캔버스.pptx index 4d4c5c2..f3ceca5 100644 Binary files a/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1_표준캔버스.pptx and b/docs/reports/viewclinic/01_readiness_report/Viewclinic_AI_Answer_Readiness_Report_v1.1_표준캔버스.pptx differ diff --git a/docs/reports/viewclinic/01_readiness_report/build_viewclinic_deck_v1_1.py b/docs/reports/viewclinic/01_readiness_report/build_viewclinic_deck_v1_1.py index 02b5342..91ddbd4 100644 --- a/docs/reports/viewclinic/01_readiness_report/build_viewclinic_deck_v1_1.py +++ b/docs/reports/viewclinic/01_readiness_report/build_viewclinic_deck_v1_1.py @@ -30,7 +30,7 @@ d.cover( # 02 Executive summary s = d.slide(eyebrow="Executive Summary", - title="읽을 수는 있지만, ", title_accent="인용할 근거가 부족하다", + title="읽을 수는 있지만, ", title_accent="인용할 근거가 부족합니다", lede=["36개 항목 중 32개를 실측했고, 오너 계정이 필요한 4개는 분모에서 제외했습니다.", "접근성(A) 98%와 표면(D) 68%는 양호. 엔티티(B) 25%와 콘텐츠(C) 44%가 총점을 끌어내립니다."], section="Summary") @@ -42,12 +42,12 @@ 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") + 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 봇 허용."), + ("표면이 넓습니다", "강남언니 후기 19,373건. 유튜브 1,215편. 블로그는 발행 중이고 AI 봇 허용."), ], t_size=HEAD, b_size=BODY) R.chip("치명", "critical").rows([ ("누구인지 확정 불가", "MedicalClinic 스키마 없음, sameAs 비어 있음. 시술 목록 JSON-LD 무효."), @@ -80,12 +80,12 @@ W.grid( Rail.title("읽는 법", size=HEAD).bullets([ "분모는 검증 항목의 배점 합. E는 분모가 2점뿐.", "48.0 / 89 = 54점, 등급 C. v1.0 50점은 오판 포함.", - "미검증 4개는 계정 접근 후 1일 안에 채운다.", + "미검증 4개는 계정 접근 후 1일 안에 채웁니다.", ], size=BODY) # 05 A 접근성 s = d.slide(eyebrow="A · Access & Crawlability · 98%", - title="크롤러 접근은 ", title_accent="열려 있다", section="A · Access") + 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."), @@ -100,7 +100,7 @@ R.chip("보완·미검증", "warning").rows([ # 06 B 엔티티 (dark) s = d.slide(eyebrow="B · Entity & Structured Data · 25%", - title="AI가 이 병원을 ", title_accent="하나의 엔티티로 못 묶는다", dark=True, section="B · Entity") + 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에도 그대로. 파서가 통째로 버림."), @@ -115,7 +115,7 @@ R.chip("미흡", "warning").rows([ # 07 C 콘텐츠 s = d.slide(eyebrow="C · Answer-Ready Content · 44%", - title="프리저베 한 페이지만 ", title_accent="인용할 구조를 갖췄다", section="C · Content") + title="프리저베 페이지가 ", title_accent="인용 구조의 기준입니다", section="C · Content") L, R = s.cards2(y=s.band_y) L.chip("0점 항목", "critical").rows([ ("C1 병원 정의문 없음", "메인은 슬라이더와 라벨. 가슴성형 페이지 첫 텍스트는 상담 폼."), @@ -130,7 +130,7 @@ R.chip("정정·부분 점수", "warning").rows([ # 08 D 표면 / E 측정 (dark) s = d.slide(eyebrow="D · Surfaces / E · Measurement", - title="강남언니는 강하고, ", title_accent="GBP는 전화번호가 없다", dark=True, section="D · Surfaces") + 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건. 핵심 표면 확보."), @@ -145,7 +145,7 @@ R.chip("E · 측정 0%", "critical").rows([ # 09 Action plan s = d.slide(eyebrow="Action Plan", - title="즉시 고칠 것과 ", title_accent="4주 안에 만들 것", section="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 스키마.", @@ -176,7 +176,7 @@ s.stats3([ # 11 Validation s = d.slide(eyebrow="Validation · 120-Question Live Test", - title="진단을 120문항 실측으로 ", title_accent="검증했다", + title="진단을 120문항 실측으로 ", title_accent="검증했습니다", lede="잠재 환자 질문 120개를 OpenAI·Perplexity 정식 API로 질의해 예측력을 채점했습니다 (09-01).", section="Validation") L, R = s.cards2(y=s.band_y) @@ -186,7 +186,7 @@ L.chip("예측 적중", "good").rows([ ("표면(D)이 브랜드 방어", "병원명을 아는 36문항은 97~100% 답변. 근거는 강남언니·GBP·뉴스."), ], t_size=HEAD, b_size=BODY) R.chip("진단 밖 발견 · 정정 반영", "info").rows([ - ("제3자 표면이 더 넓다", "뉴스·채용공고·바비톡·네이버 예약이 개원연도·주차·휴진을 답함."), + ("제3자 표면이 더 넓습니다", "뉴스·채용공고·바비톡·네이버 예약이 개원연도·주차·휴진을 답함."), ("발행 중인 블로그가 인용됨", "ChatGPT 추천 근거가 blog.viewclinic.com. v1.0은 정지로 오판."), ("엔진별 오답 편차", "주차 질문에 Perplexity는 정답, ChatGPT는 추측. 구조화 부재의 비용."), ], t_size=HEAD, b_size=BODY) @@ -236,7 +236,7 @@ c.chip("액션 · 홈페이지 쪽", "critical").title("병원이 직접 고쳐 # 14 Integrity s = d.slide(eyebrow="What We Don't Sell · 정직성 규약", - title="근거 없는 것은 ", title_accent="팔지 않는다", section="Integrity") + 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, 요청 로그 없음.", @@ -249,12 +249,12 @@ b.icon_square().title("약속하지 않는 것", size=HEAD).bullets([ 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") + 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 레벨 × 배점. 미검증은 분모 제외.", @@ -262,9 +262,9 @@ a.icon_square().title("채점 방식", size=HEAD).bullets([ "등급 A 81+ · B 61~80 · C 41~60 · D 40 이하.", ], size=BODY) b.icon_square().title("배점 근거", size=HEAD).bullets([ - "차단되면 인용될 수 없다. A·B에 무게.", - "콘텐츠 전술 효과는 논쟁 중. C는 원칙만.", - "병의원은 강남언니가 장악. D1 배점 6.", + "차단되면 인용될 수 없어 A·B에 무게.", + "콘텐츠 전술 효과는 논쟁 중이라 C는 원칙만.", + "병의원은 강남언니 비중이 커 D1 배점 6.", ], size=BODY) c.icon_square().title("항목마다 붙는 태그", size=HEAD).bullets([ "근거 등급: 실측 / 학술 / 벤더 / 추정.",