style(reports): v1.1 덱 제목·본문을 고객용 존댓말로 (판단 슬라이드 존댓말, 목차성 슬라이드 명사구)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
13a8fca775
commit
fdb6aaf91b
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -30,7 +30,7 @@ d.cover(
|
|||||||
|
|
||||||
# 02 Executive summary
|
# 02 Executive summary
|
||||||
s = d.slide(eyebrow="Executive Summary",
|
s = d.slide(eyebrow="Executive Summary",
|
||||||
title="읽을 수는 있지만, ", title_accent="인용할 근거가 부족하다",
|
title="읽을 수는 있지만, ", title_accent="인용할 근거가 부족합니다",
|
||||||
lede=["36개 항목 중 32개를 실측했고, 오너 계정이 필요한 4개는 분모에서 제외했습니다.",
|
lede=["36개 항목 중 32개를 실측했고, 오너 계정이 필요한 4개는 분모에서 제외했습니다.",
|
||||||
"접근성(A) 98%와 표면(D) 68%는 양호. 엔티티(B) 25%와 콘텐츠(C) 44%가 총점을 끌어내립니다."],
|
"접근성(A) 98%와 표면(D) 68%는 양호. 엔티티(B) 25%와 콘텐츠(C) 44%가 총점을 끌어내립니다."],
|
||||||
section="Summary")
|
section="Summary")
|
||||||
@ -42,12 +42,12 @@ k4.kpi("4 / 36", "미검증 항목", "GA4 · 서버로그 · GSC · Bing")
|
|||||||
|
|
||||||
# 03 What AI sees (dark)
|
# 03 What AI sees (dark)
|
||||||
s = d.slide(eyebrow="What AI Sees · 진단의 결론",
|
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, R = s.cards2(y=s.band_y)
|
||||||
L.chip("정상", "good").rows([
|
L.chip("정상", "good").rows([
|
||||||
("크롤러 접근 정상", "robots.txt가 AI 검색봇 12종을 허용. Cloudflare 차단 없음."),
|
("크롤러 접근 정상", "robots.txt가 AI 검색봇 12종을 허용. Cloudflare 차단 없음."),
|
||||||
("서버 렌더링 본문", "WordPress가 본문을 서버에서 렌더. JS 없이 10,757자 추출."),
|
("서버 렌더링 본문", "WordPress가 본문을 서버에서 렌더. JS 없이 10,757자 추출."),
|
||||||
("표면이 넓다", "강남언니 후기 19,373건. 유튜브 1,215편. 블로그는 발행 중이고 AI 봇 허용."),
|
("표면이 넓습니다", "강남언니 후기 19,373건. 유튜브 1,215편. 블로그는 발행 중이고 AI 봇 허용."),
|
||||||
], t_size=HEAD, b_size=BODY)
|
], t_size=HEAD, b_size=BODY)
|
||||||
R.chip("치명", "critical").rows([
|
R.chip("치명", "critical").rows([
|
||||||
("누구인지 확정 불가", "MedicalClinic 스키마 없음, sameAs 비어 있음. 시술 목록 JSON-LD 무효."),
|
("누구인지 확정 불가", "MedicalClinic 스키마 없음, sameAs 비어 있음. 시술 목록 JSON-LD 무효."),
|
||||||
@ -80,12 +80,12 @@ W.grid(
|
|||||||
Rail.title("읽는 법", size=HEAD).bullets([
|
Rail.title("읽는 법", size=HEAD).bullets([
|
||||||
"분모는 검증 항목의 배점 합. E는 분모가 2점뿐.",
|
"분모는 검증 항목의 배점 합. E는 분모가 2점뿐.",
|
||||||
"48.0 / 89 = 54점, 등급 C. v1.0 50점은 오판 포함.",
|
"48.0 / 89 = 54점, 등급 C. v1.0 50점은 오판 포함.",
|
||||||
"미검증 4개는 계정 접근 후 1일 안에 채운다.",
|
"미검증 4개는 계정 접근 후 1일 안에 채웁니다.",
|
||||||
], size=BODY)
|
], size=BODY)
|
||||||
|
|
||||||
# 05 A 접근성
|
# 05 A 접근성
|
||||||
s = d.slide(eyebrow="A · Access & Crawlability · 98%",
|
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, R = s.cards2(y=s.band_y)
|
||||||
L.chip("우수 · 3/3", "info").rows([
|
L.chip("우수 · 3/3", "info").rows([
|
||||||
("A1 검색용 AI 봇 허용", "Disallow는 /wp-admin/ 뿐. 12종 UA로 GET, 전부 200."),
|
("A1 검색용 AI 봇 허용", "Disallow는 /wp-admin/ 뿐. 12종 UA로 GET, 전부 200."),
|
||||||
@ -100,7 +100,7 @@ R.chip("보완·미검증", "warning").rows([
|
|||||||
|
|
||||||
# 06 B 엔티티 (dark)
|
# 06 B 엔티티 (dark)
|
||||||
s = d.slide(eyebrow="B · Entity & Structured Data · 25%",
|
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, R = s.cards2(y=s.band_y)
|
||||||
L.chip("치명", "critical").rows([
|
L.chip("치명", "critical").rows([
|
||||||
("B1 JSON-LD 문법 무효", "ItemList 블록 쉼표 누락. 09-07에도 그대로. 파서가 통째로 버림."),
|
("B1 JSON-LD 문법 무효", "ItemList 블록 쉼표 누락. 09-07에도 그대로. 파서가 통째로 버림."),
|
||||||
@ -115,7 +115,7 @@ R.chip("미흡", "warning").rows([
|
|||||||
|
|
||||||
# 07 C 콘텐츠
|
# 07 C 콘텐츠
|
||||||
s = d.slide(eyebrow="C · Answer-Ready Content · 44%",
|
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, R = s.cards2(y=s.band_y)
|
||||||
L.chip("0점 항목", "critical").rows([
|
L.chip("0점 항목", "critical").rows([
|
||||||
("C1 병원 정의문 없음", "메인은 슬라이더와 라벨. 가슴성형 페이지 첫 텍스트는 상담 폼."),
|
("C1 병원 정의문 없음", "메인은 슬라이더와 라벨. 가슴성형 페이지 첫 텍스트는 상담 폼."),
|
||||||
@ -130,7 +130,7 @@ R.chip("정정·부분 점수", "warning").rows([
|
|||||||
|
|
||||||
# 08 D 표면 / E 측정 (dark)
|
# 08 D 표면 / E 측정 (dark)
|
||||||
s = d.slide(eyebrow="D · Surfaces / E · Measurement",
|
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, R = s.cards2(y=s.band_y)
|
||||||
L.chip("D · 표면 68%", "good").rows([
|
L.chip("D · 표면 68%", "good").rows([
|
||||||
("D1 강남언니 우수", "후기 19,373건, 의료진 26명, 이벤트 52건. 핵심 표면 확보."),
|
("D1 강남언니 우수", "후기 19,373건, 의료진 26명, 이벤트 52건. 핵심 표면 확보."),
|
||||||
@ -145,7 +145,7 @@ R.chip("E · 측정 0%", "critical").rows([
|
|||||||
|
|
||||||
# 09 Action plan
|
# 09 Action plan
|
||||||
s = d.slide(eyebrow="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, b, c = s.cards3(y=s.band_y)
|
||||||
a.chip("P0 · 1일~1주", "critical").title("엔티티·표면·측정", size=HEAD).bullets([
|
a.chip("P0 · 1일~1주", "critical").title("엔티티·표면·측정", size=HEAD).bullets([
|
||||||
"깨진 JSON-LD 수정, MedicalClinic 스키마.",
|
"깨진 JSON-LD 수정, MedicalClinic 스키마.",
|
||||||
@ -176,7 +176,7 @@ s.stats3([
|
|||||||
|
|
||||||
# 11 Validation
|
# 11 Validation
|
||||||
s = d.slide(eyebrow="Validation · 120-Question Live Test",
|
s = d.slide(eyebrow="Validation · 120-Question Live Test",
|
||||||
title="진단을 120문항 실측으로 ", title_accent="검증했다",
|
title="진단을 120문항 실측으로 ", title_accent="검증했습니다",
|
||||||
lede="잠재 환자 질문 120개를 OpenAI·Perplexity 정식 API로 질의해 예측력을 채점했습니다 (09-01).",
|
lede="잠재 환자 질문 120개를 OpenAI·Perplexity 정식 API로 질의해 예측력을 채점했습니다 (09-01).",
|
||||||
section="Validation")
|
section="Validation")
|
||||||
L, R = s.cards2(y=s.band_y)
|
L, R = s.cards2(y=s.band_y)
|
||||||
@ -186,7 +186,7 @@ L.chip("예측 적중", "good").rows([
|
|||||||
("표면(D)이 브랜드 방어", "병원명을 아는 36문항은 97~100% 답변. 근거는 강남언니·GBP·뉴스."),
|
("표면(D)이 브랜드 방어", "병원명을 아는 36문항은 97~100% 답변. 근거는 강남언니·GBP·뉴스."),
|
||||||
], t_size=HEAD, b_size=BODY)
|
], t_size=HEAD, b_size=BODY)
|
||||||
R.chip("진단 밖 발견 · 정정 반영", "info").rows([
|
R.chip("진단 밖 발견 · 정정 반영", "info").rows([
|
||||||
("제3자 표면이 더 넓다", "뉴스·채용공고·바비톡·네이버 예약이 개원연도·주차·휴진을 답함."),
|
("제3자 표면이 더 넓습니다", "뉴스·채용공고·바비톡·네이버 예약이 개원연도·주차·휴진을 답함."),
|
||||||
("발행 중인 블로그가 인용됨", "ChatGPT 추천 근거가 blog.viewclinic.com. v1.0은 정지로 오판."),
|
("발행 중인 블로그가 인용됨", "ChatGPT 추천 근거가 blog.viewclinic.com. v1.0은 정지로 오판."),
|
||||||
("엔진별 오답 편차", "주차 질문에 Perplexity는 정답, ChatGPT는 추측. 구조화 부재의 비용."),
|
("엔진별 오답 편차", "주차 질문에 Perplexity는 정답, ChatGPT는 추측. 구조화 부재의 비용."),
|
||||||
], t_size=HEAD, b_size=BODY)
|
], t_size=HEAD, b_size=BODY)
|
||||||
@ -236,7 +236,7 @@ c.chip("액션 · 홈페이지 쪽", "critical").title("병원이 직접 고쳐
|
|||||||
|
|
||||||
# 14 Integrity
|
# 14 Integrity
|
||||||
s = d.slide(eyebrow="What We Don't Sell · 정직성 규약",
|
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, b, c = s.cards3(y=s.band_y)
|
||||||
a.icon_square().title("만들지 않는 것", size=HEAD).bullets([
|
a.icon_square().title("만들지 않는 것", size=HEAD).bullets([
|
||||||
"llms.txt. Google 공식 효과 0, 요청 로그 없음.",
|
"llms.txt. Google 공식 효과 0, 요청 로그 없음.",
|
||||||
@ -249,12 +249,12 @@ b.icon_square().title("약속하지 않는 것", size=HEAD).bullets([
|
|||||||
c.icon_square().title("측정 규율", size=HEAD).bullets([
|
c.icon_square().title("측정 규율", size=HEAD).bullets([
|
||||||
"단발 조회 보고 금지. 반복 측정만.",
|
"단발 조회 보고 금지. 반복 측정만.",
|
||||||
"답변엔진 UI 자동 조회 금지. 약관 위반.",
|
"답변엔진 UI 자동 조회 금지. 약관 위반.",
|
||||||
"틀린 판정은 정정 슬라이드로 남긴다.",
|
"틀린 판정은 정정 슬라이드로 남깁니다.",
|
||||||
], size=BODY)
|
], size=BODY)
|
||||||
|
|
||||||
# 15 Method
|
# 15 Method
|
||||||
s = d.slide(eyebrow="Method · AEO / GEO Rubric v1.0",
|
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, b, c = s.cards3(y=s.band_y)
|
||||||
a.icon_square().title("채점 방식", size=HEAD).bullets([
|
a.icon_square().title("채점 방식", size=HEAD).bullets([
|
||||||
"항목별 0~3 레벨 × 배점. 미검증은 분모 제외.",
|
"항목별 0~3 레벨 × 배점. 미검증은 분모 제외.",
|
||||||
@ -262,9 +262,9 @@ a.icon_square().title("채점 방식", size=HEAD).bullets([
|
|||||||
"등급 A 81+ · B 61~80 · C 41~60 · D 40 이하.",
|
"등급 A 81+ · B 61~80 · C 41~60 · D 40 이하.",
|
||||||
], size=BODY)
|
], size=BODY)
|
||||||
b.icon_square().title("배점 근거", size=HEAD).bullets([
|
b.icon_square().title("배점 근거", size=HEAD).bullets([
|
||||||
"차단되면 인용될 수 없다. A·B에 무게.",
|
"차단되면 인용될 수 없어 A·B에 무게.",
|
||||||
"콘텐츠 전술 효과는 논쟁 중. C는 원칙만.",
|
"콘텐츠 전술 효과는 논쟁 중이라 C는 원칙만.",
|
||||||
"병의원은 강남언니가 장악. D1 배점 6.",
|
"병의원은 강남언니 비중이 커 D1 배점 6.",
|
||||||
], size=BODY)
|
], size=BODY)
|
||||||
c.icon_square().title("항목마다 붙는 태그", size=HEAD).bullets([
|
c.icon_square().title("항목마다 붙는 태그", size=HEAD).bullets([
|
||||||
"근거 등급: 실측 / 학술 / 벤더 / 추정.",
|
"근거 등급: 실측 / 학술 / 벤더 / 추정.",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user