From 58fb4a317d444e37acc9beb649588d24943e479d Mon Sep 17 00:00:00 2001 From: Haewon Kam Date: Fri, 28 Aug 2026 11:51:50 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=ED=83=9C=ED=95=98=20=EB=A6=AC=ED=8F=AC?= =?UTF-8?q?=ED=8A=B8=20=EB=8B=A8=EC=9D=BC=20HTML=20=EB=82=B4=EB=B3=B4?= =?UTF-8?q?=EB=82=B4=EA=B8=B0=20+=20export=5Fhtml.py=20(=EB=A7=81=C2=B7?= =?UTF-8?q?=EC=A7=84=ED=96=89=EB=B0=94=20=EC=A0=90=EC=88=98=20=EA=B3=A0?= =?UTF-8?q?=EC=A0=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- .../Taeha_AI_Answer_Readiness_Report.html | 58 ++++++++++++++++ docs/reports/export_html.py | 69 +++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 docs/reports/Taeha_AI_Answer_Readiness_Report.html create mode 100644 docs/reports/export_html.py diff --git a/docs/reports/Taeha_AI_Answer_Readiness_Report.html b/docs/reports/Taeha_AI_Answer_Readiness_Report.html new file mode 100644 index 0000000..47abf42 --- /dev/null +++ b/docs/reports/Taeha_AI_Answer_Readiness_Report.html @@ -0,0 +1,58 @@ + + + + + +Taeha_AI Answer Readiness Report + + + + + + + + +
+
INFINITH AI Discovery · AEO / GEO Audit v1.0

AI Answer Readiness

법무법인 태하

로펌 · 마약 형사 (강남 테헤란로, 6개 분사무소)

https://taehadrug.com

실측일 2026-08-28 · 검증 항목 31 / 36 · 미검증 항목은 분모 제외

68
AI Answer Readiness
B60 / 88점

What AI Sees

AI 답변엔진이 지금 이 업체를 어떻게 읽는지. 진단의 결론

마약 전용 사이트는 AI가 읽기 좋게 만들어져 있다

taehadrug.com은 JSON-LD 3블록이 전부 유효하고(LegalService·Attorney·FAQPage·Breadcrumb), FAQ 14문항이 실제 질문형이며, 변호사의 전관 경력이 텍스트로 노출된다. alt 누락 0, HTML 274KB, sitemap 326개 URL이 3주 전 갱신. 뷰성형외과(C 20%)와 달리 콘텐츠 카테고리가 63%다.

메인 도메인이 ChatGPT를 차단하고 있다

www.taehalaw.com의 가비아 ModSecurity WAF가 GPTBot과 OAI-SearchBot을 403 페이지로 보낸다. 브라우저와 PerplexityBot은 200. 즉 ChatGPT 검색은 "법무법인 태하"의 메인 사이트를 읽지 못하고, 마약 전용 사이트만 본다. 운영자가 모르는 채 걸려 있는 설정일 가능성이 높다.

도메인 6개, 전화번호 4종. 엔티티가 쪼개져 있다

마약·형사·이혼·군형법·학폭이 각각 별도 도메인이고, 사이트별 콜트래킹 번호(1533-2403 / 1533-1403)와 지도의 안심번호(0507-1495-4404 / 050-71496-4404)가 전부 다르다. 사람에게는 분야별 랜딩이지만 AI에게는 같은 이름의 서로 다른 업체 6개로 읽힌다. sameAs가 도메인 간 상호 연결을 하지 않는다.

canonical이 http://이고 URL과 어긋난다

taehadrug.com 메인 canonical은 http://taehadrug.com/ (https 아님). 성공사례 페이지 canonical은 /success-story/인데 실제 경로는 /success/success_story/. 메인 taehalaw.com은 모든 하위 페이지의 canonical이 루트다. 인용 신호가 잘못된 URL로 흘러간다.

브랜드 검색에 경쟁사가 올라탄다

Google 지도에서 "법무법인 태하"를 검색하면 법무법인YK·로엘의 스폰서 리스팅이 상단에 뜬다. 서울 본점 GBP는 평점이 표시되지 않는다. 로톡에는 변호사 개인 프로필만 확인되고 로펌 단위 존재감이 약하다. 네이버 파워링크 1위를 사는 만큼 AI 표면의 방어는 비어 있다.

Scorecard by Category

36개 항목 · 각 항목의 실측 근거와 근거 등급

A · Access & Crawlability

AI 크롤러 접근성

배점 20 · 검증 6/7

15 / 17점

88

AI 검색엔진이 사이트를 읽을 수 있는가. 크롤러 접근이 막히면 나머지 항목은 전부 무효다.

A1

검색용 AI 봇 허용

5점

taehadrug.com robots.txt: User-agent * Allow /. 12개 AI 봇 UA 전부 200

https://taehadrug.com/robots.txt

실측직접 통제자동
검색봇 전부 허용 + 200 응답5 / 5
A2

CDN/WAF AI 차단 없음

3점

메인 도메인 www.taehalaw.com(가비아 호스팅)의 ModSecurity WAF가 GPTBot·OAI-SearchBot을 403으로 차단(errdoc.gabia.io/modsecurity.html로 302). ChatGPT 검색은 메인 사이트를 읽지 못함. taehadrug.com(Apache 별도 호스팅)은 정상

GPTBot → 302 http://errdoc.gabia.io/403.html / OAI-SearchBot → 302 https://errdoc.gabia.io/modsecurity.html

실측직접 통제자동
일부 UA 차단1 / 3
A3

서버 렌더링 본문

3점

서버 렌더링. JS 미실행 HTML에서 본문 18,352자 추출 (메인), 성공사례 4,578자

실측직접 통제자동
80% 이상 (SSR/정적)3 / 3
A4

HTTPS·리다이렉트 정합

2점

http://, http://www, https://www 전부 301로 https://taehadrug.com/ 수렴

실측직접 통제자동
전부 301로 정본 수렴2 / 2
A5

sitemap.xml 제공

3점

robots.txt에 sitemap 선언, 200 응답, URL 326개, lastmod 최신 2026-08-06

실측직접 통제자동
선언·200·lastmod 최신3 / 3
A6

Bing 색인 (ChatGPT 검색 경로)

3점

Bing Webmaster Tools 등록 여부는 오너 계정 접근 필요

벤더직접 통제수동
미검증
A7

응답 속도·크롤 예산

1점

TTFB 0.31s, 초기 HTML 274KB (기준 300KB 이내)

추정직접 통제자동
TTFB < 0.5s, HTML < 300KB1 / 1

B · Entity & Structured Data

엔티티 식별·구조화

배점 20 · 검증 7/7

13.7 / 20점

68

AI가 "이 병원이 누구인지"를 기계적으로 확정할 수 있는가. NAP 일관성과 스키마 위생.

B1

JSON-LD 문법 유효성

3점

JSON-LD 3블록 전부 유효. @graph로 Organization·WebSite·LegalService×4·WebPage·BreadcrumbList·FAQPage 연결

실측직접 통제자동
전부 유효 + @graph 연결3 / 3
B2

업종 엔티티 스키마 (MedicalClinic / LegalService / LocalBusiness)

5점

LegalService에 name·telephone·address·geo·areaServed(서울·수원·인천 등) 존재. openingHoursSpecification 없음

학술직접 통제자동
업종 타입 + 주소·전화3.3 / 5
B3

전문가 스키마 (Physician / Attorney)

3점

Organization.employee에 Attorney 2명(채의준 대표변호사, 최승현) name·jobTitle·knowsAbout. 페이지에 소개된 변호사 6명 중 2명만 구조화, 전관 경력(지청장·판사·부장검사 역임)은 스키마에 없음

학술직접 통제자동
전문분야 포함2 / 3
B4

NAP 사이트 내 일관성

3점

주소는 "테헤란로 522 홍우빌딩 14층" 단일 표기. 전화는 사이트별 상이: taehadrug 1533-2403 / taehalaw 1533-1403 (콜트래킹 번호 2종)

실측직접 통제자동
2개 변형2 / 3
B5

sameAs 연결

2점

Organization.sameAs 6개: 네이버 블로그·Instagram·YouTube·카카오채널·네이버 지도·Google 지도

학술직접 통제자동
5개 이상 (SNS + 버티컬 + 지도)2 / 2
B6

canonical·중복 제거

2점

canonical이 http://taehadrug.com/ (https 아님). 성공사례 페이지 canonical은 /success-story/인데 실제 URL은 /success/success_story/ → 불일치. 메인 taehalaw.com은 모든 하위 페이지 canonical이 루트를 가리킴

실측직접 통제자동
있으나 불일치0.7 / 2
B7

다국어 hreflang

2점

hreflang 없음, lang=ko 단일 언어. 외국인 의뢰인 페이지 없음

벤더직접 통제자동
단일 언어0.7 / 2

C · Answer-Ready Content

답변 인용 가능 콘텐츠

배점 25 · 검증 8/8

16.3 / 25점

65

패시지 단위로 잘라내도 자기완결적인 사실 덩어리가 있는가. 정의문·FAQ·수치·표·의료진 근거.

C1

정의문형 첫 문단

4점

H1 "실제사례로 입증된 프리미엄 전략, 마약 사건엔 태하가 답입니다" 슬로건형. "법무법인 태하는 서울 강남 테헤란로에 있는 마약 형사 전문 로펌으로 …" 형태의 정의문 없음

학술직접 통제반자동
슬로건형1.3 / 4
C2

FAQ 섹션

4점

FAQ 섹션 + FAQPage 스키마 14문항 ("초범인데도 실형이 나올 수 있나요?", "마약 양이 적어도 구속될 수 있어요?" 등 실제 질문형)

학술직접 통제자동
FAQ + FAQPage 스키마 + 시술별4 / 4
C3

제목 계층 의미성

3점

H1 1개. H2 8개가 서술형(3STEP 솔루션, 맞춤감형 전략). 단 첫 H2가 "#필로폰 #MDMA #대마 #밀수" 해시태그 라벨. 메인 taehalaw.com H1은 "변호사추천 변호사상담" 키워드형 + 영문 H1 2개 추가

실측직접 통제자동
H1 1개, H2 일부 라벨형2 / 3
C4

구체 수치 (가격·시간·회복)

4점

성공사례 페이지에 사건 유형별 결과(기소유예·집행유예·불송치·벌금형)가 H2로 구조화. 단 수임료 범위·사건 처리 기간·건수 같은 수치 표기 없음

학술직접 통제반자동
시술별 일부 수치2.7 / 4
C5

표·비교 구조

2점

HTML <table> 없음. "마약사건 처벌현황" 메뉴는 이미지·텍스트 블록

벤더직접 통제자동
없음0 / 2
C6

신선도 신호

3점

sitemap lastmod 2026-08-06(3주 전), 성공사례 지속 추가. 단 dateModified·datePublished 마크업 없음

학술직접 통제자동
6개월 이내2 / 3
C7

전문가 E-E-A-T (의료진 / 변호사)

3점

"지청장 역임 임양운", "판사 역임 최승현", "부장검사 역임 이선녀" 등 전관 경력이 H3 텍스트로 노출. Attorney 스키마 병행

학술직접 통제반자동
+ 논문·학회·수상 + 전문가 스키마3 / 3
C8

패시지 자기완결성

2점

성공사례 각 H2가 "[집행유예] 필로폰 수수·투약 동종 전력 2회, 항소심 집행유예" 형태로 자기완결적. 메인 H2 "3STEP 솔루션"은 단독으로는 주체 불명

학술직접 통제수동
50~80%1.3 / 2

D · Off-site Surfaces

AI 인용 표면 확보

배점 20 · 검증 5/6

10.7 / 19점

56

실제로 AI가 인용하는 외부 표면(강남언니·GBP·오픈웹)에 존재하는가. 네이버 자산은 글로벌 AI에 기여도 0.

D1

업종 버티컬 프로필 (병의원: 강남언니 / 법률: 로톡)

6점

로톡에 소속 변호사 개인 프로필 확인(김진형 5956, 김유석 8918). 로펌 단위 프로필·전체 변호사 등록 여부는 미확인. 로톡 robots.txt는 GPTBot만 차단, 검색봇은 허용

https://www.lawtalk.co.kr/directory/profile/5956-김진형

실측직접 통제수동
항목 다수·후기 활성4 / 6
D2

Google 비즈니스 프로필

4점

Google 지도에 서울 본점(24시간 영업, 050-71496-4404, 웹사이트)과 수원분사무소(5.0) 등록. 서울 본점 평점 미표시. 브랜드명 검색에 경쟁사(법무법인YK·로엘) 스폰서 광고가 상단 노출

실측직접 통제수동
소유·기본 정보2.7 / 4
D3

오픈웹 언급 (티스토리·유튜브·언론)

4점

YouTube @with_lawyer, 네이버TV·클립(@taehalaw), Instagram 운영. 언론보도 페이지 존재. 티스토리·외부 매체 언급은 미집계

학술영향 가능반자동
유튜브 + 언론/티스토리2.7 / 4
D4

표면 간 NAP 완전 일치

3점

전화번호가 표면마다 다름: taehadrug 1533-2403 / taehalaw 1533-1403 / 네이버 플레이스 0507-1495-4404 / Google 050-71496-4404. 콜트래킹 안심번호가 NAP 일치를 깨뜨림

실측직접 통제수동
전화번호 상이0 / 3
D5

네이버 플레이스 (AI 브리핑 전용)

2점

네이버 플레이스 서울주사무소 방문자리뷰 220건, 24시간 연중무휴, 분사무소 5곳 등록. 홈페이지 연결은 학폭 사이트(taehaschool.com)로 걸린 광고 확인, 마약 사이트 연결은 미확인

실측직접 통제반자동
연결·리뷰 활성1.3 / 2
D6

위키데이터/위키백과 엔티티

1점

Wikidata 조회 미실시

추정영향 가능자동
미검증

E · Measurement

AI 가시성 측정 인프라

배점 10 · 검증 1/4

0 / 2점

0

개선을 증명할 수 있는가. 소유 신호(크롤러 로그·GA4 AI 유입) 계측 여부.

E1

AI 크롤러 로그 (IP 검증)

3점

서버 로그 접근 필요 (Apache 직접 호스팅, Cloudflare 미사용)

실측직접 통제수동
미검증
E2

GA4 AI 유입 채널

3점

GA4 접근 필요. 광고 링크에 utm_source=naver 파라미터 사용 중이라 채널그룹 관리 습관은 있음

실측직접 통제수동
미검증
E3

GSC AI Overviews 노출

2점

GSC 접근 필요

벤더직접 통제수동
미검증
E4

기준선 스팟체크

2점

기준선 스팟체크 미실시

학술직접 통제수동
없음0 / 2

F · Technical Hygiene

기술 위생

배점 5 · 검증 4/4

4.3 / 5점

87

이미지 대체텍스트·CMS 보안·페이지 무게·모바일. 보조 지표.

F1

이미지 대체텍스트

2점

이미지 136개 중 alt 누락 0 (메인), 성공사례 56개 중 0

실측직접 통제자동
5% 미만 누락2 / 2
F2

CMS 보안·최신성

1점

generator 메타 없음, 자체 제작 사이트. CMS 버전 노출 없음 (보수적으로 2)

추정직접 통제자동
1년 이내0.7 / 1
F3

페이지 무게

1점

초기 HTML 274KB

추정직접 통제자동
< 300KB1 / 1
F4

모바일 대응

1점

viewport meta 존재, 반응형. CWV 미측정

실측직접 통제자동
반응형0.7 / 1

Action Plan

우선순위별 실행 항목. 각 항목이 어느 기준을 올리는지 연결

P0즉시: 크롤러 접근·엔티티·측정

메인 도메인 WAF에서 AI 검색봇 허용

1일

가비아 호스팅 ModSecurity 규칙에서 GPTBot·OAI-SearchBot·Claude-SearchBot·PerplexityBot UA를 화이트리스트. 학습봇을 막고 싶으면 robots.txt로 GPTBot만 Disallow하고 OAI-SearchBot은 연다. 12개 UA로 200 응답 재확인.

A2A1

canonical https 교정 + 도메인 간 sameAs 상호 연결

1주

taehadrug.com canonical을 https://로, 성공사례 canonical을 실제 경로로. taehalaw.com 하위 페이지 canonical을 self-referencing으로. 6개 도메인의 Organization 스키마에 서로의 URL을 sameAs로 넣어 한 엔티티로 묶는다. 메인 taehalaw.com에 LegalService + Attorney 전원 스키마 삽입.

B6B5B2B3

전화번호 1개로 통일, 표면 4곳 NAP 정렬

1주

대표번호 1개를 정하고 홈페이지 6개·네이버 플레이스·Google 지도 전화를 동일하게. 콜트래킹이 필요하면 스키마 telephone과 지도 등록은 대표번호로, 추적 번호는 화면 버튼에만. Google 본점 리뷰 수집 시작, 로톡 로펌 프로필 정비.

D4D2D1B4
P14주 내: 콘텐츠 구조

정의문 + 수치 + 표 도입

2~4주

각 도메인 첫 단락에 "법무법인 태하는 서울 강남 테헤란로에 본사를 둔 형사 전문 로펌으로, 마약·성범죄·이혼을 다루며 수원·인천·대전·천안·제주 분사무소를 운영한다" 정의문. 성공사례에 사건 처리 기간·결과 분포를 HTML 표로. 메인 H1을 "변호사추천 변호사상담"에서 서술형으로.

C1C4C5C3

측정 인프라 설치

1주

GA4 커스텀 채널그룹(chatgpt.com·perplexity.ai·gemini.google.com·copilot·claude.ai). Apache access.log에서 AI 봇 히트 추출 + IP 검증. GSC·Bing Webmaster 등록 확인 + IndexNow. "마약 변호사", "필로폰 초범 집행유예" 등 질의 10개 × 5회 기준선 스팟체크.

E1E2E3E4A6
P2지속: 신선도·시딩

신선도 마크업 + 오픈웹 시딩

지속

성공사례에 datePublished·dateModified 마크업. YouTube @with_lawyer 영상을 사이트 글로 전사. 네이버 블로그 대신 티스토리·언론 기고로 naver.com 외 언급 도메인 확보. 외국인 의뢰인 대상 영문 페이지가 있다면 hreflang 연결.

C6D3B7

What We Don't Sell

근거 없는 것은 팔지 않는다. 이 리포트의 정직성 규약

하지 않을 것

  • llms.txt 제작

    Google 공식(2026-06) 효과 0, 채택률 0.13%, 서버 로그에 요청 자체가 없음.

  • 도메인 통합 강요

    분야별 도메인은 광고 랜딩 전환에 유리할 수 있다. 통합 대신 sameAs·canonical·NAP로 한 엔티티임을 기계에 알리는 쪽이 비용이 적다.

  • "스키마 넣으면 AI가 인용합니다" 약속

    태하는 이미 스키마가 좋다. 그런데도 ChatGPT가 메인을 못 읽는다. 스키마는 위생이고, 접근이 먼저다.

  • 단발 조회로 순위·노출 보고

    LLM 답변 분산 10~34%. 반복 측정 + 신뢰구간으로만 보고한다.

  • 네이버 블로그 증량

    blog.naver.com robots.txt가 AI 크롤링을 전면 금지. 네이버 AI 브리핑은 별도 트랙.

측정 조건

  • 선정: 네이버 "마약 변호사" 검색 파워링크 1위 광고주. 광고 랜딩은 마약 전용 도메인 taehadrug.com

  • 실측 대상: taehadrug.com 메인 + /success/success_story/, www.taehalaw.com 메인 + /member/page. JS 미실행 HTML 기준

  • 크롤러 접근성: robots.txt 파싱 + 12개 AI 봇 UA 실제 GET 요청 (두 도메인 모두)

  • 외부 표면: Google 지도·네이버 플레이스·로톡은 공개 페이지 실측. GBP 소유권·GA4·GSC·Bing·서버로그는 오너 접근 필요 → 미검증, 분모 제외

  • 태하는 도메인이 6개 이상(taehalaw · taehadrug · taehacri · taehadivorce · taehamil · taehaschool)으로 분산돼 있어 엔티티 판단은 메인 도메인과 교차 확인

점수는 검증된 항목만으로 정규화했습니다. 미검증 항목(강남언니·GBP·GA4·로그)을 확인하면 점수가 오를 수도, 내릴 수도 있습니다. 이 리포트는 답변엔진 노출을 보장하지 않으며, 크롤러 접근·엔티티·콘텐츠 구조라는 전제조건의 충족 여부를 진단합니다.

Scoring Rubric

AEO/GEO 채점 기준표 v1.0 · 36개 항목 · 100점

ID항목배점근거통제채점3점 기준
A. AI 크롤러 접근성 (20)
A1

검색용 AI 봇 허용

OAI-SearchBot·PerplexityBot·Claude-SearchBot·bingbot·Googlebot이 막히면 인용 자체가 불가능. 학습봇(GPTBot·ClaudeBot)과 구분해 평가.

robots.txt 파싱 + 각 UA로 실제 GET 200 확인 (crawler_audit.py)

5실측직접 통제자동검색봇 전부 허용 + 200 응답
A2

CDN/WAF AI 차단 없음

Cloudflare는 2025-07부터 신규 도메인에 AI 크롤러 기본 차단. 업체가 인지하지 못한 채 AI 검색에서 사라지는 주원인.

응답 헤더(server/cf-ray) + AI UA 요청 시 403/challenge 여부

3실측직접 통제자동CDN 차단 없음 확인
A3

서버 렌더링 본문

AI 크롤러는 JS를 실행하지 않거나 지연시킨다. 초기 HTML에 본문이 없으면 빈 페이지로 읽힌다.

JS 미실행 HTML의 텍스트 길이 / 렌더 후 텍스트 길이 비율

3실측직접 통제자동80% 이상 (SSR/정적)
A4

HTTPS·리다이렉트 정합

http/www 변형이 하나의 정본 URL로 301 수렴해야 엔티티가 분산되지 않는다.

http://, http://www, https:// 4변형 → 최종 URL 동일 여부

2실측직접 통제자동전부 301로 정본 수렴
A5

sitemap.xml 제공

크롤러 발견 경로. robots.txt에 선언되어야 한다.

robots.txt Sitemap: 선언 + 200 + lastmod 존재

3실측직접 통제자동선언·200·lastmod 최신
A6

Bing 색인 (ChatGPT 검색 경로)

ChatGPT 검색은 Bing 인덱스에 상당 부분 의존. Bing Webmaster + IndexNow 등록 여부.

Bing Webmaster Tools 등록 확인 (오너 접근 필요) 또는 site: 검색 결과 수

3벤더직접 통제수동색인 + IndexNow 연동
A7

응답 속도·크롤 예산

TTFB가 느리거나 HTML이 비대하면 크롤러가 페이지를 덜 가져간다.

TTFB < 0.5s, HTML < 300KB

1추정직접 통제자동TTFB < 0.5s, HTML < 300KB
B. 엔티티 식별·구조화 (20)
B1

JSON-LD 문법 유효성

문법이 깨진 JSON-LD는 파서가 통째로 버린다. 있는데 무효인 것은 없는 것과 같다.

모든 ld+json 블록 JSON.parse 성공 여부

3실측직접 통제자동전부 유효 + @graph 연결
B2

업종 엔티티 스키마 (MedicalClinic / LegalService / LocalBusiness)

엔티티 식별을 돕는 위생 조치. 인과 증거는 없으나 name·address·telephone·openingHours·전문분야(medicalSpecialty / areaServed)를 기계가 읽게 한다.

@type MedicalClinic|LegalService|LocalBusiness 존재 + 필수 속성 4개

5학술직접 통제자동+ openingHours·전문분야·geo
B3

전문가 스키마 (Physician / Attorney)

"누가 담당하나"는 병의원·로펌 질의의 핵심. 의사·변호사 이름과 자격·경력을 구조화하면 E-E-A-T 엔티티가 된다.

@type Physician|Attorney + name·전문분야·worksFor

3학술직접 통제자동자격·소속·sameAs 포함
B4

NAP 사이트 내 일관성

같은 사이트 안에서 주소 표기가 다르면 외부 표면과 대조할 기준이 없다. 한 글자까지 동일해야 한다.

주소·전화 정규식 추출 → 고유 표기 수

3실측직접 통제자동단일 표기
B5

sameAs 연결

Organization.sameAs로 YouTube·Instagram·강남언니·GBP를 연결해야 AI가 흩어진 언급을 한 엔티티로 묶는다.

Organization.sameAs 배열 길이

2학술직접 통제자동5개 이상 (SNS + 버티컬 + 지도)
B6

canonical·중복 제거

같은 내용이 여러 URL이면 인용 신호가 분산된다.

rel=canonical 존재 + self-referencing

2실측직접 통제자동있음 + 파라미터 정리
B7

다국어 hreflang

외국인 환자 질의(영·중·일)는 별도 엔진 표면. 언어 버전이 있다면 hreflang으로 연결해야 한다.

link hreflang 태그 수

2벤더직접 통제자동3개 이상 연결
C. 답변 인용 가능 콘텐츠 (25)
C1

정의문형 첫 문단

Google AI Mode의 query fan-out은 패시지 단위로 검색한다. "○○은 강남 신논현에 있는 가슴성형 전문 성형외과다"처럼 답을 먼저 써야 청크가 자기완결적이 된다.

메인·시술 페이지 첫 200자에 [상호+지역+전문분야] 정의문 존재

4학술직접 통제반자동전 핵심 페이지 정의문
C2

FAQ 섹션

실제 질문 형태 그대로의 H2/H3 + 답변은 답변엔진이 가장 잘 가져가는 구조. FAQPage 스키마와 결합.

FAQ/Q&A 섹션 탐지 + FAQPage 스키마

4학술직접 통제자동FAQ + FAQPage 스키마 + 시술별
C3

제목 계층 의미성

H1은 페이지당 1개, 주제를 서술해야 한다. "VIEW SELFIE" 같은 라벨형 H1은 AI에게 아무 정보도 주지 않는다.

H1 개수 = 1, H1/H2 텍스트가 명사구 서술형인지, 중복 H2 비율

3실측직접 통제자동H1 1개 서술형, H2 논리 계층
C4

구체 수치 (가격·시간·회복)

가격대·수술시간·회복기간·재수술률 같은 수치는 인용되는 콘텐츠의 공통 특징. (Princeton GEO 정합, 단 C-SEO Bench 반박 있음 → 효과 보장 아님)

시술 페이지에서 원/분/일/% 단위 수치 밀도

4학술직접 통제반자동시술별 가격대·시간·회복 표기
C5

표·비교 구조

AI가 인용하는 콘텐츠는 구조화·표 중심 (인블로그 조사). 보형물 비교표·시술 비교표가 대표 예.

<table> 또는 정의 리스트 존재 (이미지 표 제외)

2벤더직접 통제자동HTML 표 다수
C6

신선도 신호

dateModified·최종 수정일 명시. 1년 이상 갱신 없는 사이트는 "폐업했나?" 오정보 위험.

sitemap lastmod 최신값, article:modified_time, 본문 갱신일

3학술직접 통제자동3개월 이내 + dateModified 표기
C7

전문가 E-E-A-T (의료진 / 변호사)

전문의 자격·경력·학회·수상, 변호사의 전관 경력·전문분야 등록이 텍스트로 존재해야 AI가 "믿을 만한 출처"로 판단할 근거가 생긴다. 이미지 안의 글자는 안 읽힌다.

전문가 페이지 텍스트에 자격·경력 명시 여부

3학술직접 통제반자동+ 논문·학회·수상 + 전문가 스키마
C8

패시지 자기완결성

한 단락만 떼어내도 "누가·어디서·무엇을"이 들어 있어야 인용된다. 대명사·"저희"로 시작하는 단락은 맥락을 잃는다.

핵심 페이지 단락 샘플 10개 중 상호·시술명이 포함된 비율

2학술직접 통제수동80% 이상
D. AI 인용 표면 확보 (20)
D1

업종 버티컬 프로필 (병의원: 강남언니 / 법률: 로톡)

2026-08 실측: 병의원 질의는 강남언니(ai-input=yes 명시)·닥터나우가 AI 인용을 장악. 법률은 로톡·로앤굿 등 변호사 디렉터리가 같은 역할. 여기 없으면 AI에겐 없는 업체.

버티컬 프로필 존재·등록 항목 수·후기 수·최근 갱신 (병원 페이지 / 로펌·변호사 프로필)

6실측직접 통제수동+ 전문가·가격 갱신 3개월 이내
D2

Google 비즈니스 프로필

Gemini·Google AI Mode의 구조화 데이터 원천. 국내 성형외과 등록률이 낮아 선점 여지가 크다.

Google Maps 검색 → 소유권 확인·카테고리·사진·리뷰·NAP 일치

4실측직접 통제수동소유·리뷰 응답·게시물 활성
D3

오픈웹 언급 (티스토리·유튜브·언론)

Ahrefs 7.5만 브랜드: 웹 언급 상관 r=0.664 (백링크 0.218). 네이버 블로그·카페는 AI 차단이라 제외.

검색 그라운딩으로 상호 언급 도메인 집계 (naver.com 제외)

4학술영향 가능반자동다수 오픈 도메인에서 일관된 언급
D4

표면 간 NAP 완전 일치

홈페이지·강남언니·GBP·플레이스의 주소·전화가 한 글자라도 다르면 답변엔진이 동일 업체로 묶지 못한다.

표면별 NAP 표를 만들어 대조

3실측직접 통제수동완전 일치
D5

네이버 플레이스 (AI 브리핑 전용)

글로벌 AI에는 기여도 0. 단 네이버 AI 브리핑(검색의 20%→40%)은 별도 게임이며 플레이스↔홈페이지 연결이 중요.

플레이스 존재·홈페이지 링크·리뷰 수

2실측직접 통제반자동연결·리뷰·소식 활성
D6

위키데이터/위키백과 엔티티

LLM의 엔티티 앵커. 대형 병원만 해당하나 있으면 확정적.

Wikidata API 상호 검색

1추정영향 가능자동항목 + 공식 사이트 연결
E. AI 가시성 측정 인프라 (10)
E1

AI 크롤러 로그 (IP 검증)

AI가 우리를 읽었는가(선행 지표). 크롤러 UA의 최대 81.8%가 위조 → IP 검증 히트만 인정.

Cloudflare AI Crawl Control 또는 서버로그 + bot_ip_verify.py

3실측직접 통제수동IP 검증 히트 집계
E2

GA4 AI 유입 채널

AI에서 사람이 왔는가(후행·매출 귀속). chatgpt.com·perplexity.ai 등 커스텀 채널그룹. 35~70%가 Direct로 유실되므로 하한값.

GA4 커스텀 채널그룹 존재 여부 (오너 접근 필요)

3실측직접 통제수동커스텀 채널 (Perplexity 포함)
E3

GSC AI Overviews 노출

Google AI 표면 노출 (2026-06~ Search Console UI 전용).

GSC 등록 + AI Overviews 필터 확인

2벤더직접 통제수동월간 추적
E4

기준선 스팟체크

질의 10개 × 5~7회 반복 수동 측정 → 언급률+신뢰구간. 단발 조회는 무효(분산 10~34%).

04_baseline 진단 리포트 존재 여부

2학술직접 통제수동분기 반복 측정
F. 기술 위생 (5)
F1

이미지 대체텍스트

성형외과 사이트는 정보의 대부분이 이미지 안 글자. alt가 없으면 AI에게 그 정보는 없다.

alt 누락 이미지 비율

2실측직접 통제자동5% 미만 누락
F2

CMS 보안·최신성

지원 종료 CMS는 해킹 시 스팸 페이지가 주입되어 AI가 엉뚱한 내용을 인용할 위험.

meta generator 버전 vs 최신 안정 버전

1추정직접 통제자동최신
F3

페이지 무게

HTML 크기가 크면 크롤 예산 소모·요약 품질 저하.

초기 HTML 바이트

1추정직접 통제자동< 300KB
F4

모바일 대응

모바일 인앱 브라우저 유입(ChatGPT 앱)이 주 경로.

viewport meta + 반응형

1실측직접 통제자동반응형 + CWV 양호
+
+ + \ No newline at end of file diff --git a/docs/reports/export_html.py b/docs/reports/export_html.py new file mode 100644 index 0000000..008d494 --- /dev/null +++ b/docs/reports/export_html.py @@ -0,0 +1,69 @@ +""" +/discovery/:id 리포트 페이지를 단일 HTML 파일로 내보낸다. + + npm run build && npx vite preview --port 3012 + python3 docs/reports/export_html.py taeha docs/reports/Taeha_AI_Answer_Readiness_Report.html + +- 헤드리스 Chrome으로 렌더된 DOM을 덤프하고 빌드 CSS를 인라인한다 +- Navbar·Footer·스크립트 제거, motion 애니메이션 고정 +- ScoreRing 오프셋과 카테고리 진행 바 폭을 점수 텍스트에서 다시 계산한다 +""" +import glob, re, subprocess, sys + +CHROME = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" +BASE = "http://localhost:3012" + +slug, out = sys.argv[1], sys.argv[2] +title = sys.argv[3] if len(sys.argv) > 3 else f"{slug} AI Answer Readiness Report" + +dom = subprocess.run( + [CHROME, "--headless=new", "--disable-gpu", "--window-size=1440,900", "--virtual-time-budget=20000", + "--dump-dom", f"{BASE}/discovery/{slug}"], + capture_output=True, text=True).stdout +css = open(glob.glob("dist/assets/*.css")[0], encoding="utf-8").read() + +m = re.search(r'
(.*)
\s*', dom, re.S) +body = m.group(1) +body = re.sub(r"", "", body, flags=re.S) +body = re.sub(r"", "", body, flags=re.S, count=1) +body = re.sub(r"", "", body, flags=re.S) + +# ScoreRing: dashoffset = circumference * (1 - score/100) +def fix_ring(mm): + circ = float(mm.group(2)); score = int(mm.group(5)) + return f"{mm.group(1)}{circ * (1 - min(score, 100) / 100):.4f}{mm.group(4)}{score}{mm.group(6)}" +body, n_ring = re.subn( + r'(stroke-dasharray="([\d.]+)"\s+stroke-dashoffset=")([\d.]+)(">
]*>)(\d+)()', + fix_ring, body) + +# 카테고리 바:
NN% +def fix_bar(mm): + return f'{mm.group(1)}width: {mm.group(3)}%;{mm.group(4)}{mm.group(3)}%{mm.group(5)}' +body, n_bar = re.subn( + r'(
]*>
)(\d+)(%)', + lambda mm: f'{mm.group(1)}width: {mm.group(3)}%;{mm.group(2)}{mm.group(3)}{mm.group(4)}', body) + +html = f""" + + + + +{title} + + + + + + + + +
+{body} +
+ +""" +open(out, "w", encoding="utf-8").write(html) +print(f"saved {out} ({len(html):,} bytes) rings={n_ring} bars={n_bar}")