GEO 전 과정 서비스
진단부터 납품까지 완전한 연결고리, 단순한 조언이 아닙니다:
크롤링 → 사이트 검사 → AI 답변 샘플링 → 작업 지시서 생성 → 자산 생성 → 보고서 → 자동 검수 → 고객 납품 패키지
핵심 판단은 단 하나: GEO의 종착점은 순위가 아니라, AI 답변 속 문장이 당신이 의도한 대로 말해지고 있는지입니다. 그래서 최소 단위는 페이지가 아니라 추출 가능한 사실 블록입니다.
프로젝트 디렉터리: /Users/brucejan/geo, 각 고객/제품은 work/<slug>/ 하위에 있습니다.
가장 빠른 사용법: URL 하나 입력
python3 scripts/geo.py new --url https://example.com --market both
9단계 완전 자동: 프로젝트 생성 → 공식 사이트 크롤링 → 사이트 검사 → 브랜드 사실/경쟁사/문제 은행 자동 추론 → 사이트 재검사 → AI 답변 샘플링 → 작업 지시서 및 구축 청사진 → 자산 및 보고서 → 3종 납품 산출물.
work/<slug>/deliverables/ 출력:
| 파일 | 설명 |
|---|---|
1-GEO진단보고서.html | 현재 상태는 어떤지 |
2-GEO최적화방안.html | 어떻게, 왜 바꿔야 하는지 |
3-GEO실행방안.html | 누가, 언제, 무엇을, 어디까지 완료해야 하는지 |
자동 추론된 브랜드 사실은 반드시 사람이 검증해야 합니다 — bootstrap은 공식 사이트 본문만 추출하며,
추출하지 못한 것은 모두 '확인 필요'로 표시하고, 절대 상식으로 채우지 않습니다.
'확인 필요'로 표시된 필드(설립일, 사업자 등록 정보, 실명 고객 등)는 직접 보완하거나 공개하지 않음을 명시해야 합니다.
두 가지 사용법
인터페이스 (권장)
python3 scripts/geo.py ui # 기본 http://127.0.0.1:8765
전체 프로세스를 인터페이스에서 처리하므로 명령어를 외울 필요가 없습니다: 새 프로젝트 생성, 구성 및 문제 은행 편집, 사실 카드 작성, 원클릭 단계 또는 전체 주기 실행(실시간 로그 포함), 작업 지시서 상태 변경, 자산 확인, 수동 샘플링 테이블 가져오기, 납품 패키지 열기.
인터페이스는 다크 테마의 4단계 메인 라인(AtlasGEO): 현황(개요 / 엔진 성능 / 경쟁사 비교 / 문제 은행) → 진단(격차 진단 / 진지 지도 / 브랜드 사실 데이터베이스) → 개선(실행 계획 / 콘텐츠 작업대) → 효과(효과 검증 / 보고서 및 납품), 설정 및 3단계 온보딩 가이드 포함. 통일된 용어: GEO 건강 점수(5개 항목 가중치, 미측정 항목 가중치 정규화), 언급률, 인용 점유율, 진지, 작업, 콘텐츠. 개요 제목은 데이터에서 자동 생성된 한 줄 결론; 모든 숫자는 동일한 샘플링에서 비롯되며, 계산할 수 없으면 '미측정'으로 표시하고 숫자를 만들지 않습니다. 작업은 백그라운드 서브프로세스에서 실행되므로 페이지를 닫아도 계속 진행됩니다; 동일한 프로젝트에서는 동시에 하나의 작업만 허용되어 동일한 audit.json 파일 충돌을 방지합니다.
표준 라이브러리만으로 서비스를 시작하고, 프런트엔드에 외부 종속성이 없으며, 오프라인에서도 사용할 수 있습니다.
명령줄
python3 scripts/geo.py serve --slug <프로젝트>
크롤링 → 사이트 검사 → 샘플링 → 작업 지시서 → 자산 → 보고서 → 이전 주기 검증 → 납품 패키징, 모두 완료합니다.
출력은 work/<slug>/delivery/<날짜>/에 있으며, 고객에게 직접 전송할 수 있습니다.
처음 신규 고객을 맡을 때는 아래 0~2단계를 거쳐 기반을 다지고, 이후 각 주기마다 이 명령어만 실행하면 됩니다.
먼저 읽어야 할 문서
- 매번 필독:
references/method.md(평가 기준 및 모든 판단 근거의 출처, 스크립트는 이를 코드로 구현한 것) - 외부 소스 우선순위 결정 시 필독:
references/cn-source-ranking.md(CN-GEO 187,818개 인용 실측 순위. 공식 사이트는 1.37%에 불과, 이 숫자는 리소스 할당을 바꿉니다) - 국내 플랫폼:
references/cn-platforms.md| 해외 플랫폼:references/global-platforms.md - 콘텐츠 작성/페이지 수정:
references/content-patterns.md - 더 깊은 방법론 또는 원시 데이터:
references/sources.md(GEORank / GEOFlow 선정 설명 포함) - 샘플링/플랫폼 이상 시 먼저 확인:
references/known-issues.md(더우바오 타임아웃, 302 국내/해외 엔드포인트 모델 디렉토리, SPA 껍데기, llms.txt 범위 필터)
경험에 의존하여 GEO 조언을 하지 마십시오. 모든 조언은 method.md의 특정 측정 숫자로 추적 가능해야 하며,
근거를 말할 수 없다면 방안에 포함시키지 마십시오.
단계 0 · 프로젝트 생성
python3 scripts/geo.py init --url <제품 공식 사이트> --name <브랜드명> --market both
--market은 cn / global / both 중 선택합니다.
듀얼 마켓은 '해외도 겸사겸사'가 아닙니다 — 두 개의 병행 전장입니다 — 문제 은행, 콘텐츠, 경쟁사 목록, 지표가 모두 분리됩니다.
규칙은 global-platforms.md 섹션 5를 참조하세요.
단계 1 · 제품 이해, 사실 기반 구축
공식 사이트 + 사용자가 제공한 자료(PDF/PPT/문서/공식 계정 게시글 등)를 읽고 geo.json을 보완:
brand: 공식 이름, 별칭 및 흔한 오타 (브랜드 모호성 해소의 기초), 제품 라인, 업종, 타겟 사용자, 비즈니스 목표competitors: 3–6개의 실제 경쟁사, 별칭 포함. 첫 번째 주기에는 비워둘 수 있음 — 먼저 '추천' 유형 질문에 대한 샘플링을 실행하고, AI 답변에서 실제 경쟁 세트를 역추론하는 것이 주관적인 추측보다 훨씬 정확합니다. 듀얼 마켓의 경우 국내외 경쟁사는 일반적으로 동일하지 않으므로 모두 나열해야 함 (순위 지표는 이 목록을 기준으로 계산되므로 실제 경쟁사를 누락하면 순위가 과대평가될 수 있음)
동시에 work/<slug>/content/facts.md 브랜드 사실 카드를 작성합니다. 템플릿은 content-patterns.md 섹션 1을 참조하세요.
각 사실은 증거 수준 A–E를 표시하고, 출처가 없으면 '확인 필요'로 표시하며, 절대 지어내지 마십시오.
이 파일은 이후 모든 자산 생성의 입력입니다 — llms.txt, JSON-LD, 정의 블록이 모두 여기서 비롯됩니다.
자료가 부족하면 사용자에게 직접 요청하고, 제품 기능이나 가격을 추측하지 마십시오.
단계 2 · 문제 은행 구축
문제 은행은 무엇을 샘플링할지, 어떤 콘텐츠를 작성할지, 지표를 어떻게 계산할지 결정합니다. 7개 그룹 각각 3–6문제: 추천 / 비교 / 대안 / 가격 / 리스크 / 브랜드 검증 / 시나리오.
각 문제는 반드시 market을 표시해야 하며, 스크립트는 이를 기준으로 라우팅합니다 — 중국어 질문은 Perplexity로 전송되지 않고, 영어 질문은 더우바오로 전송되지 않습니다:
{"id": "q001", "group": "추천", "market": "cn", "text": "국내에서 프라이빗 도메인 운영을 위한 SaaS 중 좋은 것은 무엇인가요?"}
{"id": "q101", "group": "추천", "market": "global", "text": "What's the best CRM for small B2B teams in 2026?"}
{"id": "q900", "group": "브랜드 검증", "market": "both", "text": "<브랜드>는 어떤 회사인가요?"}
cn: 중국어 구어체 질문, 번역투 금지 |global: 영어 원어민 질문, 기계 번역 금지both는 브랜드 검증 유형에만 사용합니다. 이러한 질문은 브랜드를 직접 언급하므로 답변이 필연적으로 브랜드명을 반복합니다. 스크립트는 이를 별도로 '브랜드 인지도'로 분류하여 가시성 지표와 혼합하지 않습니다.
각 주기 사이클 (serve가 자동으로 완료, 각 단계의 역할 설명)
크롤링 + 사이트 검사
6차원 점수: 크롤링 가능성 / 길이 / 구조 / 추출 가능한 블록 / 권위 신호 / 질문 적합성. 결과를 읽을 때 먼저 네 가지를 확인:
- SPA 껍데기 페이지 (
word_count가 0에 가까움) — 국내 공식 사이트에서 가장 흔한 치명적 문제, AI 크롤러가 빈 페이지를 봄 - robots가 AI 크롤러를 차단하는지 — 차단하면 더 이상 할 것이 없음
language_coverage중/영이 동등한지 — 해외를 목표로 하는데 영어 네이티브 페이지가 없으면 즉시 P0block_gap에서 가장 많이 누락된 블록 — 콘텐츠 엔지니어링 최우선 순위
AI 답변 샘플링
| 시장 | 플랫폼 | 변수 | 설명 |
|---|---|---|---|
| 국내 | 지푸GLM | ZHIPUAI_API_KEY | OpenAI 호환 엔드포인트, 비연결 |
| 국내 | 더우바오 | ARK_API_KEY | 火山方舟; 연결을 위해 콘솔에서 콘텐츠 플러그인을 별도로 활성화해야 함, 활성화되지 않으면 자동 다운그레이드 |
| 국내 | DeepSeek | DEEPSEEK_API_KEY | 비연결, 모델 파라미터화 지식 내 브랜드 인지도 측정 |
| 국내 | Kimi | MOONSHOT_API_KEY | 기본 비연결 |
| 국내 | MiniMax | MINIMAX_API_KEY | OpenAI 호환 엔드포인트, 비연결 |
| 해외 | Gemini | GEMINI_API_KEY | OpenAI 호환 엔드포인트, grounding 없음 |
| 해외 | OpenAI(ChatGPT) | OPENAI_API_KEY | Chat Completions 기본 비연결 |
| 해외 | Claude | ANTHROPIC_API_KEY | Anthropic 네이티브 프로토콜, 비연결 |
| 해외 | Grok | XAI_API_KEY | xAI API, 비연결 |
| 해외 | Perplexity | PERPLEXITY_API_KEY | 네이티브 연결 및 citations 반환, 해외 증거 품질 최고 |
Key는 프로젝트 루트 디렉터리의 .env에 저장(gitignore, 권한 600), 스크립트가 자동 로드.
더우바오는 302.AI 모드에서 '검색+답변' 조합으로 작동하며, 단일 질문 타임아웃은 .env의 AI302AI_SEARCH_ASK_TIMEOUT
(기본 45초)을 읽습니다. 플랫폼/엔드포인트 이상 발생 시 references/known-issues.md를 먼저 확인하여 작업이 무한 대기하지 않도록 하십시오.
공개 연결 API가 없는 경우 — 국내 나노AI 검색/바이두AI/더우바오 앱, 해외 ChatGPT 웹 버전/ Claude 웹 버전 — 수동 또는 브라우저 샘플링 사용:
python3 scripts/geo.py sample-sheet --slug <프로젝트>
python3 scripts/geo.py sample-import --slug <프로젝트> --file <샘플링 테이블>
평가 규칙 규율 (자세한 내용은 method.md 섹션 4 참조):
- 국내 ≠ 해외, 시장 간 평균 언급률은 설명력이 없으며, 보고서에서 각각 별도 표를 차지
- API ≠ 웹 버전, Web ≠ App (Qianwen Web과 App의 소스 중복은 24.5%에 불과), 별도 기록 및 계산
- 답변 원문/스크린샷/샘플링 환경 기록이 없는 경우, '실제 샘플링'으로 표시 금지
- 인과 관계는 기본적으로 '관찰 관련'으로 작성, 기준선 윈도우 + 대조 Prompt + 경쟁사 대조가 있는 경우에만 변경
- 샘플링 빈도는 자제하고, 플랫폼 서비스 약관을 준수하며, 대량 남용이나 로그인 시뮬레이션 금지
작업 지시서 생성 plan
진단 결과 → tasks.json, 이는 실행 상태의 단일 진실 공급원입니다. 각 작업 지시서는 반드시 다음을 포함:
근거(method.md의 어느 조항까지 추적 가능), 담당 역할, 작업량, 시간 창, 검수 기준, 시장.
7개 작업 패키지: 개체 모호성 해소 / 페이지 기술 / 콘텐츠 매트릭스 / 제목 체계 / 지식 베이스 / 외부 증거 / 모니터링 폐쇄 루프.
우선 순위 (method.md 섹션 6):
입장권 문제 → 사실 오류 → 추출 블록 격차 → 고가치 질문 미대응 → 외부 소스(P1, P2 아님) → 롱테일 확장.
외부 소스는 P1이지 P2가 아닙니다. 왜냐하면 공식 사이트는 전체 데이터베이스 인용의 1.37%만을 차지하기 때문입니다. 공식 사이트는 사실 소스이지 인용 소스가 아닙니다. 이를 60점에서 90점으로 만드는 한계 수익은 하나의 랭킹 사이트나 위키피디아 항목을 확보하는 것보다 훨씬 낮습니다.
자산 생성 generate
work/<slug>/assets/에, 중/영 분리:
| 산출물 | 설명 |
|---|---|
llms.txt / llms.en.txt | 공식 사실 색인, 웹사이트 루트 디렉터리에 직접 업로드 |
jsonld/*.json | Organization / SoftwareApplication / FAQPage / Article / BreadcrumbList, <head>에 삽입 |
snippets/definition.*.html | 정의 블록, 첫 화면 슬로건 아래에 배치 (슬로건 유지, 전환율에 영향 없음) |
snippets/faq.*.html | FAQ 블록, 답변이 정적 HTML에서 보여야 함, 순수 JS 접기 금지 |
outlines/*.md | 각 타겟 질문에 대한 콘텐츠 개요 (제목 후보, 섹션 뼈대, 글자 수 및 추출 블록 요구 사항 포함) |
drafts/*.md | --draft 추가 시 구성된 LLM을 호출하여 전체 초안 생성 |
작업 분담: 구조적 자산은 코드가 결정적으로 생성(schema 필드 누락 없음); 기사 본문은 개요에 따라 직접 작성 —
코드는 좋은 카피를 쓸 수 없습니다. --draft의 초안은 반드시 사람이 사실을 확인한 후에 게시해야 합니다.
자동 검수 verify
사이트 재크롤링 → checker 실행 → 작업 지시서 상태 다시 쓰기. 이것이 '서비스'와 '조언'의 경계선입니다:
자동 검수할 수 있으면, 사람이口头로 완료했다고 말하는 것에 의존하지 않습니다. 완료되면 done으로, 회귀되면 todo로 되돌립니다.
프로그램으로 판단할 수 없는 경우(예: 위키피디아 항목 심사 통과 여부)는 '수동 확인 필요'로 표시하고, 확인 후 수동으로 표시:
python3 scripts/geo.py task --slug <프로젝트> --id T-003 --status done --note "항목이 이미 게시됨"
python3 scripts/geo.py status --slug <프로젝트> # 진행 상황 대시보드
고객 납품 deliver
work/<slug>/delivery/<날짜>/로 패키징: 개요 index, 진단 보고서, 실행 방안,
작업 지시서 표(HTML + CSV, 프로젝트 관리 도구로 가져오기 가능), 검수 표, 구축 맵, 엔진 성능 / 경쟁사 비교
(UI와 동일한 analytics 기준 재사용, 엔진별 언급률/인용 점유율/샘플 재생 + 경쟁사×엔진 매트릭스/미대응 질문),
assets 디렉터리, 납품 설명.
실행 후 사용자가 해야 할 일 (스크립트가 할 수 없는 부분):
reports/latest.md를 읽어 delta 확인: 평균 점수 변동, 언급률 변화, 새로 등장한 P0- 'AI가 실제로 인용한 소스 도메인 TOP' 및 '전국 데이터와 대조' 확인 — 이는 해당 주기의 실제 배포 맵이며, 이를 사용하여 외부 소스 계획을 수정
- 샘플링 답변에서 사실 오류 확인 (브랜드 오표기, 엉뚱한 회사 연결, 가격 오류, 잘못된 업종 분류) → 즉시 P0
outlines/에 따라 콘텐츠 작성,plan.md에 따라 진행 상황 업데이트
권장 리듬: 페이지 검사는 매주, 답변 샘플링은 2주 또는 매월 (샘플링에는 비용이 있고, 지표 자체에 노이즈가 있으며, 너무 자주 실행하면 신호를 식별하기 어렵습니다).
전체 명령어
| 명령어 | 기능 |
|---|---|
new | ★ URL 하나만 주면 자동으로 3종 납품 산출물 생성 |
autopilot | 이미 생성된 프로젝트에 대해 전체 안내 프로세스 실행 |
bootstrap | 공식 사이트 본문에서 브랜드 사실, 경쟁사, 문제 은행 추론 |
deliverables | 3종 공식 납품 산출물 생성 (진단/최적화/실행) |
init | 프로세스 실행 없이 프로젝트 뼈대만 생성 |
crawl / audit | 사이트 크롤링 / 6차원 사이트 검사 |
sample / sample-sheet / sample-import | API 샘플링 / 수동 샘플링 테이블 내보내기 / 재주입 |
plan | 진단 결과 → 검수 기준이 포함된 작업 지시서 |
generate | 배포 가능한 자산 생성 (--draft 추가 시 LLM 초안 포함) |
report | Markdown + 자체 포함 HTML 보고서, delta 및 전체 데이터 대조 포함 |
verify | 재크롤링 및 작업 지시서 자동 검수 (--no-recrawl로 기존 결과 사용) |
task / status | 단일 작업 지시서 상태 / 프로젝트 대시보드 |
deliver | 고객 납품 산출물 패키징 |
ui | 전체 프로세스 인터페이스: 새 프로젝트, 구성, 문제 은행, 사실 카드, 원클릭 실행, 작업 지시서, 자산, 납품 |
serve | 전체 프로세스 단일 명령어 |
cycle | 경량 사이클 (크롤링→사이트 검사→샘플링→보고서, 작업 지시서 및 납품 제외) |
list | 모든 프로젝트 |
일정 자동 실행
schedule 스킬을 사용하여 정기 작업 생성:
매주 월요일 아침에
python3 /Users/brucejan/geo/scripts/geo.py serve --slug <프로젝트>실행, 그런 다음work/<프로젝트>/reports/latest.md를 읽고, 새로운 P0, 언급률 10% 포인트 이상 하락, 또는 작업 지시서가 done에서 todo로 회귀한 경우 알려주십시오.
경계
수행: GEO 진단, 방안, 작업 지시서, 콘텐츠 엔지니어링, 자산 생성, AI 답변 모니터링, 검수 폐쇄 루프, 고객 납품 패키지.
수행하지 않음:
- 전통적인 SEO 키워드 순위, 백링크 매매, 입찰 광고
- 사이트 구축/수정의 실제 코드 구현 (방안과 직접 사용 가능한 스니펫 제공, 실제 구현은 개발팀이 수행)
- 플랫폼 제한을 우회한 대량 수집, 로그인 시뮬레이션, 조회수 조작
- 브랜드 사실, 고객 사례, 가격 또는 자격 지어내기 — 찾을 수 없으면 '확인 필요'로 표시하고 사용자에게 질문
보장하지 않음: 어떤 플랫폼이 특정 페이지를 반드시 인용할 것이라고. GEO는 확률을 높일 뿐, 보장하지 않습니다. 고객에게 방안을 작성할 때 이 문장은 원문 그대로 포함해야 합니다.
디렉터리 구조
/Users/brucejan/geo/
├── SKILL.md
├── references/
│ ├── method.md 평가 기준 및 모든 판단 근거 출처
│ ├── cn-source-ranking.md 국내 소스 실측 순위 (CN-GEO 실측, 재계산 스크립트 포함)
│ ├── cn-platforms.md 국내 플랫폼 어댑테이션
│ ├── global-platforms.md 해외 플랫폼 어댑테이션
│ ├── content-patterns.md 추출 가능한 콘텐츠 템플릿
│ └── sources.md 자료 색인 (GEORank / GEOFlow 선정 포함)
├── scripts/
│ ├── geo.py CLI 메인 진입점
│ ├── crawl.py 사이트 크롤링 audit.py 6차원 사이트 검사
│ ├── sample.py 멀티 플랫폼 샘플링 benchmark.py 전국 데이터 대조
│ ├── tasks.py 작업 지시서 시스템 generate.py 자산 생성
│ ├── verify.py 자동 검수 deliver.py 고객 납품 패키지
│ ├── bootstrap.py 자동 추론 기반 deliverables.py 3종 납품 산출물
│ ├── blueprint.py 구축 맵
│ ├── dashboard.py 인터페이스 백엔드 ui.html 프런트엔드 작업대
│ ├── jobs.py 백그라운드 작업 (서브프로세스 + 실시간 로그)
│ └── report.py 보고서 렌더링 geolib.py 공용 도구
└── work/<slug>/
├── geo.json 브랜드, 경쟁사, 문제 은행, 플랫폼, 목표
├── content/facts.md 브랜드 사실 카드 (모든 자산의 입력)
├── evidence/ 크롤링 스냅샷 audit.json 사이트 검사 결과
├── samples/ 샘플링 원시 답변 metrics/ 각 주기 지표
├── tasks.json 작업 지시서 (실행 상태 단일 진실 공급원)
├── assets/ 배포 가능한 자산
├── reports/ 각 주기 보고서 + latest.md
├── verify/ 각 주기 검수 결과
├── delivery/<날짜>/ 고객 납품 패키지
├── history/ 과거 기준선 (delta 계산)
└── plan.md 30/60/90 방안