The two-layer model
finalScore = round(contentScore × eligibility), 0–100, fully rule-based (no LLM). Eligibility gates are multiplicative because a live citation pilot proved they are gates, not slices: a blocked AI bot, a JavaScript-only page, or an unindexed URL each make a page uncitable — treating them as small additive point deductions (the old flat Σ(points) model) wrongly let good content "outweigh" being invisible. Content quality is additive and sums to 100.
Content quality: five signals
| Signal | Weight | From zero to full |
|---|---|---|
| Evidence density | 30 | none → 1 of {statistics, quotations, authoritative citations} → 2+; a puffery guard drops a band on fluff-heavy pages |
| Answer-shape | 25 | wall of text → lead answer OR structure → both (+tables, +FAQ/HowTo schema) |
| Trust (entity-type-aware) | 22 | markers appropriate to the entity; bonus for schema sameAs + authoritative outbound links |
| Freshness (page-type-conditional) | 13 | article: undated → >1yr → <1yr → <3mo; an evergreen page with no date gets benefit of the doubt |
| Fundamentals | 10 | title + meta description + ≥300 words (indexability moved to a gate) |
Weights are anchored to measured effect sizes: Aggarwal et al. 2024 (quotations, statistics and citations are the top levers for generative-engine visibility), Kevin Indig's analysis (44% of AI citations come from a page's first third), and Ahrefs' recency data.
Entity-aware Trust
Trust scores the markers that matter for the kind of page — a portfolio's trust is a verifiable person, not a brand's About page. Entity type is read from JSON-LD (decisive) plus URL heuristics. The model scores the presence of markers, never actual trustworthiness.
| Entity | Trust markers |
|---|---|
| person / portfolio | credited name + bio/credential + professional sameAs (LinkedIn, GitHub, ORCID…) |
| product | About + Contact + brand-in-title + ratings (AggregateRating) |
| local business | About + Contact + NAP (name/address/phone) + name-in-title |
| organization | About + Contact + official sameAs |
| article | author E-E-A-T (name → +credential) |
| generic page | brand trust (About + Contact + brand-in-title) |
Intent re-weighting (QDF / QDD / YMYL)
Default weights are re-weighted by the page's query intent, detected from its own topic signals (title/H1/body), language-scoped (en/id/de; an unlisted or undetected language gets flat weights, never a penalty):
- QDF (freshness-sensitive queries) → freshness weight goes up
- QDD (depth-deserving queries) → evidence + answer-shape go up
- YMYL (health/finance/legal) → trust goes up, and thin authority is flagged as a citation risk
Each signal keeps its earned fraction; only its weight (its maximum) changes. The applied profile is shown in the UI ("weighted for: …"). The vector always sums to 100 (largest-remainder rounding). It is a heuristic, not a certainty — and the UI says so.
What it refuses to score
The model never scores debunked signals — schema markup as a ranking lever, or llms.txt — and deliberately leaves a section empty rather than fabricate a suggestion it can't stand behind. Debated signals are shown as informational only.