- aeoGeoRubricV2 status active/2.0, 결과 rubricVersion 2.0. 리포트 헤더는 AEO·GEO 링 2개가 주, v1.0 종합은 보조 표기 - 랜딩: Hero 카피, ABMR 칩(AEO/GEO 목표), SampleReport(두 링 + 축별 8항목 바), Roadmap 제목, HowItWorks를 v2 계산값에서 파생. 발견 칩 수치 v1.1 스냅샷으로 정정 - 비교 엑셀 v2: scripts/build_supporters_v2_compare.ts(점수 계산 TS 단일 원본) → build_supporters_audit_v2_xlsx.py. 공식 AEO 42/GEO 56 · 서포터즈 noindex 상한 40(G1) · 색인 허용 AEO 94/GEO 77 - 덱 v2.0: build_viewclinic_deck_v2_0.py (17장, 표지 배지 v2.0, KPI AEO/GEO, 스코어카드 2장, Method v2.0) + 표준캔버스 + PDF. v1.0·v1.1 파일은 그대로 - docs/AEO_GEO_RUBRIC.md에 v2.0 채택 주석, AEO_GEO_RUBRIC_v2.md 재생성, 리포트 페이지 PDF 재출력 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
144 lines
12 KiB
Python
144 lines
12 KiB
Python
"""GEO/AEO 최적화 웹사이트에 워드프레스를 쓰는 것의 장단점 — INFINITH 덱."""
|
|
import sys; sys.path.insert(0, "/Users/haewonkam/.claude/skills/infinith-deck/scripts")
|
|
from ifd import Deck
|
|
|
|
d = Deck()
|
|
|
|
# 01 표지
|
|
d.cover(eyebrow="GEO / AEO · PLATFORM DECISION",
|
|
title_lines=["WordPress for", "AI Search."],
|
|
subtitle="GEO·AEO 최적화 웹사이트에 워드프레스를 쓰는 것의 장단점 · 2026. 08. 28",
|
|
meta_right="INFINITH Strategy Memo · 2026")
|
|
|
|
# 02 요약
|
|
s = d.slide(eyebrow="Executive Summary",
|
|
title="콘텐츠를 계속 쌓는다면 ", title_accent="워드프레스",
|
|
lede=["GEO·AEO의 핵심은 AI 크롤러가 읽는 정적 HTML에 구조화된 사실을 꾸준히 쌓는 것입니다.",
|
|
"워드프레스는 이것을 기본으로 해주지만, 플러그인과 테마를 통제하지 못하면 장점이 전부 단점으로 뒤집힙니다."],
|
|
section="Summary")
|
|
a, b, c = s.cards3(y=s.band_y)
|
|
a.chip("결론", "good").title("병원 납품 사이트").text("비개발자가 FAQ 페이지를 직접 늘려야 합니다. 워드프레스 + 경량 테마 + 단일 스키마 플러그인 + 관리형 호스팅.").divider().foot("운영 편의 우선")
|
|
b.chip("결론", "info").title("자체 제품 랜딩").text("Astro 또는 프리렌더링된 React. 코드로 스키마와 헤더를 완전히 제어하고, 성능을 최고 수준으로 유지합니다.").divider().foot("제어·성능 우선")
|
|
c.chip("결론", "violet").title("확장 단계").text("워드프레스를 헤드리스 CMS로 두고 Astro가 빌드 시 가져와 정적 배포. 운영 편의와 제어를 둘 다 확보합니다.").divider().foot("프로덕트화 대비")
|
|
|
|
# 03 실측 (다크)
|
|
s = d.slide(eyebrow="Why It Matters · INFINITH 실측 2026. 08. 28",
|
|
title="JS만 있는 사이트는 ", title_accent="AI에게 안 보인다",
|
|
lede="INFINITH 랜딩을 GPTBot, ClaudeBot, PerplexityBot, Googlebot, Yeti로 직접 요청해 받은 본문 단어 수입니다.",
|
|
dark=True, section="Evidence")
|
|
s.stats3([("4 → 810", "프리렌더 전후 크롤러가 읽는 본문 단어 수. 전에는 title 4단어가 전부였습니다."),
|
|
("1.5 MB", "본문을 만들기 위해 실행해야 했던 JS 번들. GPTBot, ClaudeBot은 JS를 실행하지 않습니다."),
|
|
("0 → 3", "JSON-LD 스키마 수. Organization, SoftwareApplication, WebSite를 추가했습니다.")])
|
|
|
|
# 04 요구조건
|
|
s = d.slide(eyebrow="What GEO / AEO Requires",
|
|
title="플랫폼을 고르기 전에 ", title_accent="세 가지 조건",
|
|
lede="어떤 도구를 쓰든 이 세 조건을 통과해야 AI 답변에 인용됩니다. 플랫폼 비교는 이 기준으로만 합니다.",
|
|
section="Requirements")
|
|
a, b, c = s.cards3(y=s.band_y)
|
|
a.icon_square().title("크롤러 가독성").text("서버가 완성된 HTML을 내려줘야 합니다. 본문, 제목 구조, 링크가 JS 실행 없이 응답에 포함되어야 합니다.").divider().foot("SSR 또는 SSG")
|
|
b.icon_square().title("구조화 데이터").text("MedicalClinic, Physician, FAQPage, Article JSON-LD가 페이지마다 정확히 하나씩. 중복과 충돌이 없어야 합니다.").divider().foot("Schema.org 단일 소스")
|
|
c.icon_square().title("콘텐츠 생산량").text("질문과 답변 쌍을 수십에서 수백 페이지 쌓아야 합니다. 비개발자가 매주 추가할 수 있는 구조여야 합니다.").divider().foot("운영 지속성")
|
|
|
|
# 05 장점 1
|
|
s = d.slide(eyebrow="Advantages · 1 / 2",
|
|
title="크롤러 가독성은 ", title_accent="기본으로 통과",
|
|
lede="PHP가 완성된 HTML을 내려주므로 별도 작업 없이 본문이 크롤러에 노출됩니다.",
|
|
section="Advantages")
|
|
a, b, c = s.cards3(y=s.band_y)
|
|
a.chip("장점", "good").title("서버 렌더링 기본").text("GPTBot, ClaudeBot, PerplexityBot은 JS를 실행하지 않습니다. 워드프레스 응답에는 본문이 그대로 들어 있습니다. SPA는 빈 div만 보입니다.").divider().foot("추가 작업 0")
|
|
b.chip("장점", "good").title("스키마 생태계").text("Rank Math, Yoast, Schema Pro가 MedicalClinic, FAQPage, LocalBusiness JSON-LD를 UI로 생성합니다. robots.txt와 llms.txt도 파일 편집으로 즉시 반영됩니다.").divider().foot("비개발자 운영 가능")
|
|
c.chip("장점", "good").title("콘텐츠 생산 속도").text("코 재수술 비용, 눈매교정 회복 기간 같은 질문 페이지를 마케팅 담당자가 에디터에서 직접 추가합니다. ACF로 구조화 필드도 관리됩니다.").divider().foot("주 단위 발행")
|
|
|
|
# 06 장점 2
|
|
s = d.slide(eyebrow="Advantages · 2 / 2",
|
|
title="락인 없이 ", title_accent="오픈웹에 남는다",
|
|
lede="지금 워드프레스를 골라도 나중에 프론트를 바꿀 수 있고, 네이버와 달리 AI 크롤러가 접근할 수 있는 소유 자산이 됩니다.",
|
|
section="Advantages")
|
|
L, R = s.cards2(y=s.band_y)
|
|
L.chip("장점", "good").title("헤드리스 전환 경로").rows([
|
|
("REST API / WPGraphQL", "콘텐츠를 그대로 꺼내 Astro, Next.js 프론트에 연결할 수 있습니다."),
|
|
("빌드 시 정적화", "프론트를 바꾸면 성능과 스키마 제어를 코드 수준으로 가져옵니다."),
|
|
("이전 비용 낮음", "글, 이미지, 카테고리 구조가 DB에 남아 마이그레이션이 단순합니다."),
|
|
])
|
|
R.chip("장점", "good").title("오픈웹 소유 자산").rows([
|
|
("네이버 자산은 차단됨", "네이버 블로그, 플레이스, 카페는 robots.txt로 AI 크롤러를 전면 차단합니다."),
|
|
("자체 도메인은 열림", "워드프레스 사이트는 GPTBot, ClaudeBot이 읽고 인용할 수 있는 유일한 소유 표면입니다."),
|
|
("브랜드 신호 축적", "인용될수록 브랜드 언급이 쌓여 다음 답변에도 다시 인용됩니다."),
|
|
])
|
|
|
|
# 07 단점 1
|
|
s = d.slide(eyebrow="Disadvantages · 1 / 2",
|
|
title="통제 못하면 ", title_accent="성능과 HTML이 무너진다",
|
|
lede="테마, 페이지빌더, 플러그인이 쌓이면 크롤러가 읽는 HTML이 지저분해지고 로딩이 느려집니다.",
|
|
section="Disadvantages")
|
|
a, b, c = s.cards3(y=s.band_y)
|
|
a.chip("단점", "critical").title("성능 저하가 기본값").text("페이지빌더와 플러그인 20개면 LCP 4초를 넘기기 쉽습니다. AI Overview는 검색 순위 기반이라 간접 영향이 큽니다.").divider().foot("대책: 경량 테마 + 캐시")
|
|
b.chip("단점", "critical").title("HTML 노이즈").text("Elementor, Divi가 만드는 div 중첩 10단계와 인라인 스타일은 AI가 답변 단락을 뽑을 때 노이즈입니다. h2 질문, p 답변 구조가 깨집니다.").divider().foot("대책: Gutenberg만 사용")
|
|
c.chip("단점", "critical").title("스키마 중복 충돌").text("Yoast, 테마 내장, FAQ 플러그인이 각자 JSON-LD를 뿌려 Organization이 3개 나오는 경우가 흔합니다. Rich Results 검사에서 오류가 납니다.").divider().foot("대책: 스키마 소스 1개")
|
|
|
|
# 08 단점 2
|
|
s = d.slide(eyebrow="Disadvantages · 2 / 2",
|
|
title="보안, 제어, ", title_accent="한국 시장 커버리지",
|
|
lede="병원 사이트는 해킹 피해가 브랜드 오염으로 이어지고, 국내 AI 답변은 네이버 자산을 우선 인용합니다.",
|
|
section="Disadvantages")
|
|
a, b, c = s.cards3(y=s.band_y)
|
|
a.chip("단점", "warning").title("보안·유지보수 부담").text("플러그인 취약점으로 해킹당하면 스팸 페이지가 대량 생성되고, 이것이 AI 크롤러에 잡혀 브랜드가 오염됩니다.").divider().foot("대책: 관리형 호스팅")
|
|
b.chip("단점", "warning").title("세밀한 제어 한계").text("페이지별 robots 메타, 크롤러별 응답 분기, Edge 캐싱 정책은 커스텀 코드나 Cloudflare에서 처리해야 합니다.").divider().foot("Astro보다 손이 많이 감")
|
|
c.chip("단점", "warning").title("한국 시장 특수성").text("네이버 서치어드바이저 등록과 사이트맵 제출을 별도로 해야 하고, 네이버 AI 브리핑은 네이버 자산을 우선 인용합니다.").divider().foot("글로벌 AI에 강함")
|
|
|
|
# 09 대안 비교 (다크)
|
|
s = d.slide(eyebrow="Alternatives",
|
|
title="네 가지 선택지, ", title_accent="같은 기준으로",
|
|
lede="크롤러 가독성, 운영, 스키마 제어, 성능, 유지보수, 비용. INFINITH 현재 스택(Vite SPA)을 기준선으로 넣었습니다.",
|
|
dark=True, section="Alternatives")
|
|
w = s.card_wide(y=s.band_y)
|
|
w.grid(["기준", "워드프레스", "Astro / Next.js SSG", "Webflow / Framer", "Vite SPA (INFINITH 기존)"],
|
|
[["AI 크롤러 가독성", "좋음", "최고", "좋음", "나쁨"],
|
|
["비개발자 콘텐츠 운영", "최고", "나쁨", "좋음", "불가"],
|
|
["스키마 제어", "플러그인 의존", "코드로 완전 제어", "제한적", "코드로 완전 제어"],
|
|
["성능", "관리 필요", "최고", "좋음", "좋음"],
|
|
["유지보수", "부담 있음", "낮음", "낮음", "낮음"],
|
|
["비용", "낮음", "낮음", "월 구독", "낮음"]],
|
|
col_w=[3.5, 3.3, 3.3, 3.3, 3.3], row_h=0.66,
|
|
tones=[[None, "good", "good", "good", "critical"],
|
|
[None, "good", "critical", "good", "critical"],
|
|
[None, "warning", "good", "warning", "good"],
|
|
[None, "warning", "good", "good", "good"],
|
|
[None, "warning", "good", "good", "good"],
|
|
[None, "good", "good", "warning", "good"]])
|
|
|
|
# 10 추천 구성
|
|
s = d.slide(eyebrow="Recommendation",
|
|
title="용도에 따라 ", title_accent="세 가지 구성",
|
|
lede="한 가지 정답은 없습니다. 누가 콘텐츠를 추가하는지, 얼마나 제어가 필요한지로 정합니다.",
|
|
section="Recommendation")
|
|
a, b, c = s.cards3(y=s.band_y)
|
|
a.icon_square().title("병원 클라이언트 납품").text("워드프레스 + GeneratePress 또는 Kadence + Rank Math 단일 스키마 + WP Rocket 캐시 + 관리형 호스팅. 클라이언트가 FAQ를 직접 추가합니다.").divider().foot("운영 편의 우선")
|
|
b.icon_square().title("INFINITH 자체 랜딩").text("Astro 콘텐츠 + React 아일랜드. 현재 Vite SPA에는 프리렌더링을 붙여 크롤러 본문 4단어를 810단어로 이미 끌어올렸습니다.").divider().foot("제어·성능 우선")
|
|
c.icon_square().title("하이브리드").text("워드프레스를 헤드리스 CMS로 두고 Astro가 빌드 시 가져와 정적 배포. 클라이언트 수가 늘어나면 이 구성이 프로덕트화에 유리합니다.").divider().foot("확장 단계")
|
|
|
|
# 11 운영 규칙
|
|
s = d.slide(eyebrow="If WordPress · Operating Rules",
|
|
title="워드프레스를 쓴다면 ", title_accent="다섯 가지 규칙",
|
|
lede="이 규칙을 지키면 장점만 남고, 어기면 단점이 전부 살아납니다.",
|
|
section="Rules")
|
|
w = s.card_wide(y=s.band_y)
|
|
w.bullets([
|
|
"플러그인은 10개 이하. 하나 추가할 때마다 LCP와 HTML 크기를 다시 측정합니다.",
|
|
"테마는 GeneratePress, Kadence 같은 경량 테마만. Elementor, Divi 같은 페이지빌더는 쓰지 않습니다.",
|
|
"스키마 소스는 Rank Math 하나로 통일. 테마 내장 스키마와 별도 FAQ 플러그인의 JSON-LD 출력은 끕니다.",
|
|
"본문은 Gutenberg 블록으로 h2 질문, p 답변 구조를 유지합니다. AI는 이 단락 단위로 인용합니다.",
|
|
"호스팅은 관리형(WP Engine, Kinsta, Cafe24 매니지드)으로. 보안 패치와 백업을 운영자가 직접 하지 않습니다.",
|
|
], size=17.25, step=1.0)
|
|
|
|
# 12 클로징
|
|
d.closing(eyebrow="Next Step",
|
|
title_lines=["도구보다 조건이 먼저입니다."],
|
|
lede="크롤러 가독성, 단일 스키마, 콘텐츠 생산 구조. 이 세 가지를 통과하는 쪽을 고릅니다.",
|
|
cta_primary="병원용 워드프레스 표준 스택 문서화 →", cta_secondary="INFINITH 랜딩 FAQ 스키마 추가",
|
|
contact="infinith-demo.vercel.app · team.backstageai@gmail.com")
|
|
|
|
out = "docs/deck/INFINITH_WordPress_GEO_AEO_장단점.pptx"
|
|
d.save(out); print("saved", out)
|