본문으로 이동
문서 탐색GEO 가시성
벤치마크레퍼런스

GEO 가시성

fetch, retrieval, citation, placement, absorption, quality, outcome 증거를 단계별로 측정하는 벤치마크 계약입니다. 단일 GEO 점수는 만들지 않습니다.

무엇을 검증하는가

GEO는 단계별 증거를 관리하는 상태머신입니다. preflight → live_observe로 진단하며, 변경 효과를 주장할 때만 사전 등록된 experiment로 진행합니다. 앞 단계가 뒤 단계를 증명할 수 없습니다. 측정 영수증이 없는 값은 not_measured로 남습니다.

질의 실행 1회가 관측치 1개입니다. live profile은 6개 root × (원문 1개 + paraphrase 3개) × K=5, 즉 120개 관측치를 만듭니다. C는 이 120개 전체를 분모로 쓰지만, R·P·A·Q는 해당 증거가 실제로 존재하는 관측치나 claim만 각자의 분모로 사용합니다.

Stage분자: 무엇을 세는가분모: 어떤 집합에서 보는가
F각 preflight 조건을 통과한 URL감사 대상 URL
Rtarget URL이 retrieval 목록에 나온 실행retrieval 목록을 노출한 24×K 실행
Ctarget URL을 인용한 실행전체 24×K 질의 실행
Ptarget 인용의 visible_rank가 3 이하인 실행target URL을 인용한 실행
Averifier가 target 내용 사용을 확인한 실행A 판정이 있는 target 인용 실행
Qsource support가 확인된 target 연결 claimverifier가 선언하고 빠짐없이 감사한 target 연결 claim
O관측된 referral·engagement·conversion측정 가능한 1차 impression·referral·session

빈 칸과 비교군

아래 값은 2026-08-24 로컬 diagnostic receipt에 한정됩니다. 0은 관측 결과,not_measured는 적격 분모·영수증 부재, partial은 해당 단계의 일부 하위 지표만 측정했다는 뜻입니다.

상태빈칸이 뜻하는 것필요한 비교군
F · partial로컬 78/78 URL과 내부 링크 577/577은 통과했지만, 당시 runner는 공개 sitemap 77/78 실패를 예외로 버려 영수증을 결합하지 못했습니다. 현재 runner는 이를 partial receipt로 보존합니다.동일성 비교: 같은 URL digest의 로컬 export ↔ 공개 호스트
R/C/PPages는 R 0/120, C 4/120, P 4/4로 측정됐습니다. R의 0은 120회에서 관측된 결과입니다.표면 진단: Pages ↔ GitHub 저장소(R 109/120, C 9/120)
A/QA 4/4, Q 43/58이지만 같은 모델의 앞선 반복은 35/54였습니다. Q는 claim support만 포함해 partial입니다.판정 보정: 고정 claim 집합의 독립 verifier ↔ 사람 표본 판정
O · not_measured종료된 Search Console·referral·conversion 관측 기간이 없어 분모 자체를 만들지 않았습니다.성과 비교: 같은 기간·질의·엔진의 baseline ↔ treatment
Promotion · none이번 실행은 진단 계약이며 비교 대상과 변경 arm을 사전 등록하지 않았습니다.승격 비교: 동결된 baseline ↔ treatment, 동일 index·budget·window

GitHub 저장소는 Pages로 권위가 전달되지 않는 위치를 찾는표면 진단 비교군입니다. 콘텐츠 변경의 효과를 주장하려면 별도의 인과 비교군인 동결 baseline과 treatment가 필요합니다.

실행 계약

  1. 6개 root마다 root query 1개와 paraphrase 3개, 총 24개 문자열을 고정합니다.
  2. run-spec.json이 workload SHA-256과 모델을 동결하고, live는 동일 surface의 별도 operator approval receipt와 정확히 K=5를 요구합니다.
  3. native result는 run-spec digest와 adapter·provider·credential source·model을 함께 고정합니다.
  4. 24×K 각 셀은 하나의 native receipt로 돌아가며 검색 활성화, retrieval, citation의 JSON Pointer가 원본과 일치해야 합니다.
  5. absorption과 quality는 별도 verifier receipt·producer/version/model·digest-bound rubric이 없으면 측정값으로 인정하지 않습니다.
  6. Q는 verifier가 선언한 전체 target-linked claim 수와 실제 감사 행 수가 같아야 계산합니다.
  7. Q의 support 판정은 claim 본문과 source receipt에 실제 존재하는 인용 구간을 함께 남깁니다.
  8. 실패한 public-host preflight도 partial receipt로 보존하며, O는 native 결과를 수정하지 않는 사후 analytics overlay입니다.
  9. v1은 Q 중 claim support만 측정하므로, 모든 영수증이 있어도 Q 전체는 partial입니다.
uv run python scripts/eval/geo_collect.py \
  --run-spec <run-dir>/run-spec.json \
  --workload <run-dir>/workload.json \
  --site-preflight <run-dir>/site-preflight.json \
  --link-audit <run-dir>/link-audit.json \
  --host-preflight <run-dir>/host-preflight.json \
  --out <run-dir>/native-results.json
uv run python scripts/eval/geo_verify.py \
  --workload <run-dir>/workload.json \
  --native-results <run-dir>/native-results.json \
  --rubric <run-dir>/verifier-rubric.json \
  --adapter <verifier-adapter> \
  --model <verifier-model> \
  --effort medium \
  --claim-adapter <claim-extractor-adapter> \
  --claim-model <claim-extractor-model> \
  --claim-effort low \
  --producer-version <version-or-revision> \
  --out <run-dir>/verifier-results.json
uv run python scripts/eval/geo_visibility.py \
  --run-spec <run-dir>/run-spec.json \
  --workload <run-dir>/workload.json \
  --native-results <run-dir>/native-results.json \
  --verifier-results <run-dir>/verifier-results.json \
  --outcome <run-dir>/outcome.json \
  --out <run-dir>/geo-vector.json

데이터·artifact 결합

vector 안에 trajectory나 원본 receipt를 복제하지 않습니다.attempts.jsonl의 한 행이 각 파일을 상대 경로와 SHA-256으로 결합하고, analysis.jsonmeasurement의 분자·분모 JSON Pointer를 읽어 비율을 재계산합니다.

run-specattempt kind권한
native_resultsnative-resultprovider 원본
measurement_resultsmeasurementgeode.geo-vector@1
verifier_receiptsverifier-receipt독립 A/Q 판정
outcome_receiptsoutcome-receipt종료된 1차 analytics
trajectorytrajectorygeode.trajectory@1 / release manifest

trajectory는 행동 증거입니다. 점수 권한은 native result에 남습니다. publication manifest는 선언된 모든 파일을 public 또는 withheld로 분류하고, bundle gate는 schema, digest, run ID, trajectory release scope를 한 번에 확인합니다.

uv run python scripts/eval/contract.py validate-run-bundle \
  <run-dir>/run-spec.json

현재 경계

로컬 export·sitemap·self-canonical·noindex·내부 링크만 확인한 F는partial입니다. 동일 URL 집합에 대한 공개 호스트의 HTTP·HTML· canonical·robots 영수증까지 결합돼야 measured가 됩니다. A/Q는 별도 source-aware verifier, O는 관측 기간이 끝난 1차 analytics 영수증 없이는 측정하지 않습니다.

현재 구현은 실패한 host preflight도 보존하고, Q의 claim 본문과 실제 source quote를 검증하며, O를 immutable native result에 사후 결합합니다. 남은 빈칸은 배포·독립 판정·1차 analytics 증거가 아직 없음을 뜻합니다.

native outcome, verifier 판단, GEODE trajectory, analysis와 publication manifest는 서로 다른 권한입니다. Inspect가 실행하지 않은 slash run을.eval로 포장하지도 않습니다.

slash의 typed state는 작업 진행을 위한 advisory projection입니다. 모델이 기록한 분자나 locator 자체는 벤치마크 권한이 아니며, schema와 digest를 통과한 native/vector/verifier/outcome bundle만 측정 근거가 됩니다.

근거