From f50426eaed3788ca8c56948eff00713597d874a3 Mon Sep 17 00:00:00 2001 From: Haewon Kam Date: Mon, 31 Aug 2026 16:46:29 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=B7=B0=EC=84=B1=ED=98=95=EC=99=B8?= =?UTF-8?q?=EA=B3=BC=20=EC=9E=AC=EC=B1=84=EC=A0=90=204=EA=B1=B4=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20(A5=C2=B7B4=C2=B7C6=C2=B7D6)=20=E2=80=94?= =?UTF-8?q?=2048/C=20=E2=86=92=2049/C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - audit_aeo_geo.py 재채점에서 확인된 기존 수작업 실측의 샘플링 누락 보정 - A5 2→3 (page/portfolio-sitemap lastmod 최신 2026-08-31), B4 2→1 (시술 페이지 세 번째 주소 표기), C6 1→3 (article:modified_time·dateModified 2026-04-17 실재), D6 unverified→0 (Wikidata 검색 결과 없음) - keyFindings '15개월간 갱신 신호 없음' → '갱신 신호는 살아 있다(블로그만 2024-05 정지)'로 정정 - 검증 분모 88→89 (검증 32/36), 등급·목표(C→B) 변화 없음 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01WgWoJZAvvzMxTpWeenZSia --- docs/AI_DISCOVERY_BUILD2_HANDOVER.md | 5 +++-- src/data/discovery_viewclinic.ts | 25 ++++++++++++++----------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/docs/AI_DISCOVERY_BUILD2_HANDOVER.md b/docs/AI_DISCOVERY_BUILD2_HANDOVER.md index 33ac77f..1de732c 100644 --- a/docs/AI_DISCOVERY_BUILD2_HANDOVER.md +++ b/docs/AI_DISCOVERY_BUILD2_HANDOVER.md @@ -104,8 +104,9 @@ auto 22항목 중 **18항목 기존 실측(2026-08-28)과 일치**. 불일치 4 | C6 | 1 | 3 | 시술 페이지에 article:modified_time·dateModified(2026-04-17) 실재 — 기존 실측은 메인만 확인 | | D6 | unverified | 0 | Wikidata API 조회 자동화됨 (기존은 미실시) | -주의: `discovery_viewclinic.ts`는 2026-08-28 실측 기록으로 그대로 두었다. 위 4건을 반영해 뷰성형외과 점수를 -갱신할지(48/C가 소폭 오름)는 오너 결정 사항. 갱신하려면 스크립트 재실행 후 semi/manual만 기존 값 이식하면 된다. +2026-08-31 haewon 결정으로 위 4건을 `discovery_viewclinic.ts`에 반영했다: 48점/C (42.1/88, 검증 31/36) +→ **49점/C (44.0/89, 검증 32/36)**. 등급·목표(C→B) 변화 없음. keyFindings의 "15개월간 갱신 신호 없음"은 +"갱신 신호는 살아 있다(단 블로그는 2024-05 정지)"로 정정. ### 새 업체 30분 온보딩 플로우 diff --git a/src/data/discovery_viewclinic.ts b/src/data/discovery_viewclinic.ts index ab1447b..0eb8efe 100644 --- a/src/data/discovery_viewclinic.ts +++ b/src/data/discovery_viewclinic.ts @@ -1,6 +1,8 @@ /** * 뷰성형외과 (viewclinic.com) AEO/GEO 진단 결과 * 실측일: 2026-08-28 · 도구: crawler_audit.py + curl + HTML 파서 + * 2026-08-31 audit_aeo_geo.py 재채점 반영: A5(2→3)·B4(2→1)·C6(1→3)·D6(unverified→0) + * — 기존 수작업 실측의 샘플링 누락 보정 (post-sitemap만 확인, 시술 페이지 meta 미확인 등) * 미검증 항목은 'unverified'. 오너 접근(GA4·GSC·Bing) 또는 수동 확인이 필요하다. */ import type { DiscoveryResult } from '../types/discovery'; @@ -10,13 +12,14 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = { clinicName: '뷰성형외과', url: 'https://www.viewclinic.com', industry: '성형외과 (강남 신논현)', - auditedAt: '2026-08-28', + auditedAt: '2026-08-31', rubricVersion: '1.0', conditions: [ '실측 대상: 메인 페이지 + /breast/main/ (가슴성형) 2개 URL, JS 미실행 HTML 기준', '크롤러 접근성: robots.txt 파싱 + 12개 AI 봇 UA 실제 GET 요청', '강남언니·Google 비즈니스 프로필은 공개 페이지를 실측(2026-08-28). GBP 소유권 클레임 여부·인사이트와 측정 인프라(GA4·GSC·Bing·서버로그)는 오너 접근 필요 → 미검증 처리, 분모 제외', '답변엔진 언급률은 측정하지 않았다 (단발 조회는 무효, 반복 측정은 별도 기준선 단계에서 수행)', + '2026-08-31 자동 채점기(audit_aeo_geo.py) 재채점으로 A5·B4·C6·D6 4항목 보정 (전체 sitemap·시술 페이지 meta·Wikidata까지 실측 범위 확장)', ], results: [ // A. 접근성 @@ -24,7 +27,7 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = { { criterionId: 'A2', level: 3, evidence: 'Server: nginx 직접 응답, Cloudflare 헤더 없음, AI UA 챌린지 없음' }, { criterionId: 'A3', level: 3, evidence: 'WordPress 서버 렌더링. JS 미실행 HTML에서 본문 텍스트 10,757자 추출' }, { criterionId: 'A4', level: 3, evidence: 'http://viewclinic.com → 301 → https://www.viewclinic.com/ 정본 수렴' }, - { criterionId: 'A5', level: 2, evidence: 'robots.txt에 sitemap 선언, 200 응답, AIOSEO 3.7.1 동적 생성. 페이지 249개 + kboard 11개. 단 post lastmod 최신이 2024-05-31' }, + { criterionId: 'A5', level: 3, evidence: 'robots.txt에 sitemap 선언, 200 응답, AIOSEO 3.7.1 동적 생성, URL 3,636개. page/portfolio-sitemap lastmod 최신 2026-08-31 (단 post-sitemap은 2024-05-31에 멈춤)' }, { criterionId: 'A6', level: 'unverified', evidence: 'Bing Webmaster Tools 등록 여부는 오너 계정 접근 필요' }, { criterionId: 'A7', level: 2, evidence: 'TTFB 0.135s (양호) / 초기 HTML 838KB (비대). 시술 페이지 862KB' }, @@ -32,7 +35,7 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = { { criterionId: 'B1', level: 1, evidence: 'JSON-LD 2블록 중 ItemList 블록이 문법 오류(쉼표 누락, line 11)로 파싱 실패 → 시술 목록 구조화 데이터 전체 무효', source: 'Expecting \',\' delimiter: line 11 column 7' }, { criterionId: 'B2', level: 1, evidence: 'Organization + WebSite + WebPage만 존재. MedicalClinic/LocalBusiness 없음 → 주소·전화·진료시간이 구조화되어 있지 않음' }, { criterionId: 'B3', level: 0, evidence: 'Physician 스키마 없음. 의료진 정보는 HTML 텍스트·이미지로만 존재' }, - { criterionId: 'B4', level: 2, evidence: '주소 2가지 표기 혼재: "서울 강남구 봉은사로 107 뷰성형외과 빌딩" / "서울특별시 강남구 봉은사로 107, 뷰성형외과빌딩". 전화 02-539-1177 + 휴대폰 2개 혼재' }, + { criterionId: 'B4', level: 1, evidence: '주소 3가지 표기 혼재: "서울 강남구 봉은사로 107 뷰성형외과 빌딩" / "서울특별시 강남구 봉은사로 107, 뷰성형외과빌딩" / 시술 페이지 "서울시 강남구 봉은사로 107, 뷰성형외과빌딩(논현동…". 전화 02-539-1177·02-539-1132 + 휴대폰 혼재' }, { criterionId: 'B5', level: 0, evidence: 'Organization.sameAs: [] (빈 배열). 푸터에 YouTube·Instagram·Facebook·네이버블로그 링크가 있으나 스키마에 미연결' }, { criterionId: 'B6', level: 2, evidence: 'rel=canonical self-referencing 존재' }, { criterionId: 'B7', level: 0, evidence: '영문 사이트가 별도 도메인(viewplasticsurgery.com, en-US)으로 존재하나 두 사이트 어디에도 hreflang 없음. 다국어 페이지가 있는데 미연결' }, @@ -43,7 +46,7 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = { { criterionId: 'C3', level: 0, evidence: 'H1 5개: "VIEW SELFIE / VIEW EVENT / VIEW SHORTS / VIEW FILM / VIEW SPECIALITY". 전부 영문 라벨. H2는 같은 문구가 2회씩 중복(모바일/PC 분기). 시술 페이지 H1 없음' }, { criterionId: 'C4', level: 1, evidence: '메타 설명에 "가슴보형물사용량1위" 등 주장형 문구. 가슴성형 페이지에 가격/비용 단어 8회이나 표기된 가격대·수술시간·회복기간 표 없음' }, { criterionId: 'C5', level: 0, evidence: 'HTML 없음. 비교 정보는 이미지로 추정' }, - { criterionId: 'C6', level: 1, evidence: 'article:modified_time·dateModified 없음. post-sitemap 최신 lastmod 2024-05-31 (15개월 전). 단 H3 콘텐츠(유튜브 제목)는 최근 갱신 흔적' }, + { criterionId: 'C6', level: 3, evidence: '시술 페이지에 article:modified_time·dateModified 2026-04-17 존재, page/portfolio-sitemap lastmod 최신 2026-08-31. 단 블로그 포스트(post-sitemap)는 2024-05-31에 멈춤' }, { criterionId: 'C7', level: 2, evidence: '원장·전문의·의료진 언급 17회, 모티바 글로벌 KOL·보건복지부장관표창·갈더마 방문 등 권위 신호 존재. 단 구조화 안 됨' }, { criterionId: 'C8', level: 1, evidence: 'H2 "철저한 정밀 검진 / ONE_STOP 시스템 / 1:1 전담 마취시스템". 단독으로 떼면 어느 병원의 무엇인지 알 수 없음' }, @@ -53,7 +56,7 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = { { criterionId: 'D3', level: 2, evidence: '자체 YouTube 채널 활발(VIEW SHORTS/FILM, 최신 영상 제목 다수). 티스토리·언론 언급은 미집계' }, { criterionId: 'D4', level: 1, evidence: '주소 표기 3종 혼재: 홈페이지 "서울 강남구 봉은사로 107 뷰성형외과 빌딩" / 강남언니 "서울 강남구 봉은사로 107 (논현동)" / GBP "서울특별시 강남구 봉은사로 107". GBP 전화 누락, 웹사이트 도메인 불일치' }, { criterionId: 'D5', level: 2, evidence: '네이버 플레이스 존재(리뷰 776건, 2026-04 INFINITH 리포트 기준). 홈페이지 링크 연결 여부 미확인 → 보수적으로 2' }, - { criterionId: 'D6', level: 'unverified', evidence: 'Wikidata 조회 미실시' }, + { criterionId: 'D6', level: 0, evidence: 'Wikidata에서 "뷰성형외과" 검색 결과 없음 (wbsearchentities ko, 2026-08-31)' }, // E. 측정 { criterionId: 'E1', level: 'unverified', evidence: '서버 로그 접근 필요 (nginx 직접 호스팅, Cloudflare AI Crawl Control 미사용)' }, @@ -75,7 +78,7 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = { }, { title: '읽어도 "누구인지" 확정할 수 없다', - detail: 'MedicalClinic 스키마가 없고 Organization.sameAs가 비어 있으며, 시술 목록 JSON-LD는 쉼표 하나가 빠져 통째로 무효다. 주소 표기도 사이트 안에서 2가지. AI는 "뷰성형외과"라는 이름과 흩어진 사실을 하나의 엔티티로 묶을 근거를 얻지 못한다.', + detail: 'MedicalClinic 스키마가 없고 Organization.sameAs가 비어 있으며, 시술 목록 JSON-LD는 쉼표 하나가 빠져 통째로 무효다. 주소 표기도 사이트 안에서 3가지(메인 2종 + 시술 페이지 1종). AI는 "뷰성형외과"라는 이름과 흩어진 사실을 하나의 엔티티로 묶을 근거를 얻지 못한다.', severity: 'critical', }, { @@ -84,9 +87,9 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = { severity: 'critical', }, { - title: '15개월간 갱신 신호 없음', - detail: 'post-sitemap의 최신 lastmod가 2024-05-31이고 dateModified 마크업이 없다. 유튜브는 활발하지만 그 신선도가 사이트로 전달되지 않는다. 오래된 사이트는 brand 질의에서 "영업 중인가?" 오정보 위험을 만든다.', - severity: 'warning', + title: '갱신 신호는 살아 있다. 단 블로그 포스트는 2024-05에 멈췄다', + detail: '재채점에서 시술 페이지의 article:modified_time(2026-04-17)과 page/portfolio-sitemap의 최신 lastmod(2026-08-31)를 확인했다. 사이트 자체는 계속 갱신되고 있어 "영업 중인가?" 오정보 위험은 낮다. 다만 블로그 포스트(post-sitemap)는 2024-05-31 이후 멈춰 있어, 신규 텍스트 콘텐츠 공급이 유튜브에 치우쳐 있다.', + severity: 'good', }, { title: '강남언니는 강하다. GBP는 전화번호가 없고 웹사이트가 다르다', @@ -139,8 +142,8 @@ export const DISCOVERY_VIEWCLINIC: DiscoveryResult = { }, { priority: 'P2', - title: '신선도 신호 + 오픈웹 시딩', - detail: 'dateModified 마크업 활성화, 유튜브 영상을 사이트 글로 전사(트랜스크립트 요약)해 매월 갱신. 티스토리·언론 기고로 naver.com 외 언급 도메인 확보. 네이버 블로그는 AI에 안 보이므로 글로벌 AEO 용도로는 쓰지 않는다.', + title: '블로그 재가동 + 오픈웹 시딩', + detail: '2024-05에 멈춘 블로그(post-sitemap)를 재가동해 유튜브 영상을 사이트 글로 전사(트랜스크립트 요약)하고 매월 갱신. 티스토리·언론 기고로 naver.com 외 언급 도메인 확보. 네이버 블로그는 AI에 안 보이므로 글로벌 AEO 용도로는 쓰지 않는다.', criterionIds: ['C6', 'D3'], effort: '지속', },