Methodology

Auditable formulas, Core-3 surfaces, and versioning rules for Citebench Index.

Citebench Methodology v0.1

Purpose

Citebench measures brand visibility in AI answer engines using a frozen, versioned query pool per board. It is a measurement standard — not a content generator.

Boards

Index is computed per board (a category + frozen query pool). Cross-board scores are not comparable.

AI Learning (ai-learning) — public MVP leaderboard

CS Learning (cs-learning) — beta / parallel pilot

SaaS and Commerce boards appear after their query pools freeze.

Core-3 engines

The Index averages engines that returned a successful answer for that week (Perplexity, ChatGPT Search, and optionally Google AI Overviews). If an engine is disabled or degraded, the UI marks the week degraded and averages the remaining engines.

Metrics

Brand Mention Rate

For entity E and Core query set Q:

MentionRate(E) = |{ q in Q : brand or alias of E appears in answer text }| / |Q|

• Matching is case-insensitive

• Each brand has an approved name + alias list

• Dangerous short aliases (e.g. TOP) are forbidden

Citation Attribution Rate

CitationRate(E) = |{ q in Q : at least one citation URL host matches E’s domain }| / |Q|

• Host equals the brand domain, or is a subdomain of it

Kaggle Learn uses kaggle.com — competition pages may inflate citations;

treated as known noise in v0.1

GEO Visibility Index

Per engine:

Index_engine(E) = 0.4 × MentionRate_engine(E) + 0.6 × CitationRate_engine(E)

Core-3 composite (equal weight over successful engines):

Index(E) = mean(Index_engine(E))

Rates and Index are reported in [0, 1] (UI may show as %).

Shared brands

Coursera appears in both AI Learning and CS Learning with the same domain and aliases. Scoring is always within one board’s query pool.

Versioning

• Weekly runs must not edit frozen query text in place

• Pool changes bump the pool version and require a changelog entry

• v0.1 uses ~31 Core queries for pilot; public “authority” freeze targets ≥80

queries in v0.2+

Audit trail

Each (engine, query_id, run) stores a raw-answer hash plus parser and adapter versions so published weeks can be audited without exposing internal implementation paths.