webrank methodology
webrank is an open, data-driven ranking of the world's domains — a free alternative to Tranco for anyone who needs to know how popular or how authoritative a domain is. Two numbers, both derived from public data with a transparent, validated method:
webrank— a popularity rank (1 = most popular), driven by real user traffic.pagerank— a 0–10 link-authority score (PageRank-style): how much the web links to it.
They measure different things and often disagree — e.g. gmpg.org (the XFN spec every WordPress blog links to) is webrank 2,553 but pagerank ~7.0: heavily linked, barely visited.
Why not just average the sources (like Tranco)?
Tranco aggregates several top-lists with equal weights — it assumes every source is an equally good measure of popularity. That's false: Common Crawl measures link authority, not traffic (its rank correlates with real traffic at only ~0.41), and sources vary a lot in reliability.
So instead of guessing weights, we derive them from the data and validate that they beat equal weighting at the one thing that matters — predicting real user traffic.
How the weights are derived (reliability weighting)
Popularity is a latent quantity each source measures with noise. We weight each source by how well it tracks the real-traffic signal (CrUX / Cloudflare Radar / Cisco Umbrella — actual visit and DNS-query data). A source that agrees with real traffic gets more weight; a noisy or different-construct source (link indexes) gets less. Weights are re-derived monthly and versioned.
The two numbers use two anchors:
- webrank (traffic) anchors on the traffic sources → traffic-measuring sources score high, link
indexes low.
- pagerank (authority) anchors on the link sources → the opposite.
Derived weights (2026-07, algorithm v4), normalized to max = 1:
| source | webrank (traffic) | pagerank (authority) |
|---|---|---|
| Tranco | 1.00 | 0.94 |
| Cisco Umbrella | 0.78 | 0.46 |
| host.io | 0.83 | 0.64 |
| Cloudflare Radar | 0.69 | 0.25 |
| Majestic | 0.51 | 0.87 |
| Chrome UX (CrUX) | 0.49 | 0.37 |
| OpenPageRank | 0.36 | 0.82 |
| Common Crawl | 0.29 / 0.35 | 0.97 / 1.00 |
| referring subnets (ours) | 0 — by design | 0.96 |
The ninth signal: referring-subnet diversity (v4)
Since v4, pagerank also folds in our own referring-subnet diversity: for every domain we resolve the DNS of its linking domains (Common Crawl graph) and count the distinct /24 networks they sit in — links from many networks are the expensive thing to fake. It enters the composite like any other source (a rank, top-10M deep) and its authority weight (0.96) is derived by the same rule, not assigned; its correlation with Majestic — whose flagship metric is subnets — is 0.61, the highest of any pair involving it, which is exactly what a valid measurement should show. Its traffic weight is fixed at 0 by construction: network diversity measures links, not visits (and the 0.9998 v3→v4 traffic-rank correlation confirms the popularity rank is untouched).
Two honest notes. First, adding it does not improve our "predict held-out Majestic" score (0.445 vs 0.455 without) — we publish that anyway; the case for the fold is independence (a measurement we make ourselves, 10× Majestic's published depth), and what it does to link farms: in the v4 cutover, the domains demoted hardest were heavily-linked-but-network- concentrated (mirror/farm patterns dropped 10–15×), while domains linked from genuinely many networks rose. Second, subnet counts currently reflect our in-progress DNS pass over linker domains; domains whose linkers sit in not-yet-resolved regions can be temporarily under-counted — this converges as the pass completes and the metric is re-derived monthly.
Proof it beats equal weighting
We hold out a real-traffic source (Chrome UX Report) and measure how well each weighting scheme's composite of the other sources predicts it (Spearman, ~115k-domain sample, 2026-06):
| weighting | predicts real Chrome traffic |
|---|---|
| webrank (data-driven, traffic-anchored) | 0.42 |
| consensus / eigenvector | 0.32 |
| equal weights (Tranco's method) | 0.29 |
webrank predicts real user traffic ~46% better than an equal-weighted list. The method is the whole point: the weights aren't opinions, they're measured.
The composite formula
For each source s with depth N_s (how many domains it ranks) and a domain at rank r in it:
points_s = weight_s × max(0, log10(N_s) − log10(r)) (absent → 0, never a penalty)
webrank = domains ordered by Σ points_s (desc)
Depth-normalized log-rank: a top spot in a deep source is worth more, rank gaps matter on a log scale (popularity is power-law), and a source a domain isn't in simply contributes nothing rather than dragging it down. Common Crawl's harmonic centrality covers ~120M+ domains, so every domain gets a position with graceful degradation into the tail. CC is smoothed over its last 3 monthly releases (geometric-mean rank) to remove crawl-to-crawl noise (cut month-to-month churn ~45%).
What the number means at each depth (be honest)
Traffic data only reaches the head — Tranco ~4.5M, CrUX a few M, Umbrella/Radar ~1M. So:
- In the top few million,
webrankis genuinely traffic-driven (real popularity), and it
diverges from pagerank (both signals present).
- In the long tail below that, the only source with coverage is Common Crawl (links), so
webrank is necessarily link-based there — and the two numbers converge. A coverage table per source is published so you know exactly what you're getting at any depth.
Manipulation resistance
Single lists can be gamed (spam links, bot DNS queries). webrank resists it two ways: (1) it's a consensus of many independent sources, so gaming one barely moves the composite; and (2) the two-number split exposes gaming — link spam lifts pagerank but not webrank, so a domain that's "authoritative but unvisited" is visible, not hidden.
Reproducibility & openness
- Open data: the full list is downloadable (
/list/latest.csv.gz); each month is frozen as a
permanent, citable snapshot (webrank-YYYY-MM).
- Open method: this page + the per-source table + the validation numbers — enough to reproduce
the ranking from the same public sources.
- Versioned: every response and list carries the algorithm version, so results are stable and
citable. We publish the composite; individual providers' data is shown as an attributed cross-reference only where their license permits redistribution.
Sources
Eight public sources feed the composite (a ninth, BuiltWith, is tech-stack data, not popularity, so it's excluded). Traffic sources anchor webrank; link sources anchor pagerank.
| source | measures | coverage | cadence | license |
|---|---|---|---|---|
| Chrome UX Report (CrUX) | real Chrome-user traffic (bucketed) | ~few M origins | monthly | open (Google) |
| Tranco | research aggregate of top-lists | 1M | daily | open (research) |
| Cisco Umbrella | DNS-query traffic (1.1.1.1-style) | 1M | daily | free |
| Cloudflare Radar | DNS traffic to 1.1.1.1 | 1M | daily | CC BY-NC |
| Majestic Million | backlink authority (referring subnets) | 1M | daily | free |
| host.io | link-based domain ranking | 10M | ~weekly | API terms |
| OpenPageRank (DomCop) | PageRank derived from Common Crawl | 10M | monthly | free |
| Common Crawl | web link graph (harmonic centrality + PageRank) | 120M+ | monthly | open (CC0) |
Coverage is why the meaning shifts with depth (see above): the traffic sources cap out around the top few million; only Common Crawl reaches the long tail. Per-source ranks are shown on a domain's page as an attributed cross-reference only where the provider's license permits redistribution; our composite is always public.