How this is measured
A cron reads the top 30 stories from the Hacker News API every 15 minutes and logs where each one sat. Crawling once a day would measure "the front page at 06:00 UTC" instead of the front page: it over-counts stories that sit for hours, and never sees the ones that arrive and fall off in between.
The same host often carries several stories, and what serves it doesn't change hourly, so the crawler probes once per host per day rather than once per story. That's also what makes a per-host history, and with it the record of who moved, expressible at all.
Each probe runs three ways and scores the results against each other rather than taking the first match.
- Response headers. Vendor request-ids like
cf-ray,x-vercel-idorx-nf-request-idcarry heavy weight.servercarries less, because any reverse proxy can rewrite it. - DNS over HTTPS. A CNAME into a platform's ingress domain is close to a confession. Nameservers go into the record as a fact but score nothing: running DNS on Cloudflare says nothing about who serves the site, and four Route 53 nameservers would otherwise out-vote every real signal on record count alone.
- ASN. The resolved address maps to its origin AS, over IPv4 or IPv6. This is the only signal that survives a provider stripping its own headers.
What "serves the response" means
Exactly one party terminates each connection, and that's what this site counts. You can observe it for everything that answers, which is why this number has no unknowns, unlike almost everything else you might want to ask.
That party is one of three things, and the difference matters:
- A CDN: something you put in front of hosting you already have. Seeing one tells you nothing about where the site lives.
- A platform: a deployment target. You can't put Vercel in front of somebody else's server, so seeing Vercel means the site is on Vercel.
- Nothing at all: no CDN, no platform, just the site's own server answering. About a quarter of the front page, consistently.
An edge a company built for itself still counts as an edge. GitHub answers github.com from GitHub's own network, and Google answers youtube.com from Google's. That you can't buy it makes it no less a CDN, and filing those under "nothing at all" would describe the purchase order rather than what serves the bytes. Only a site doing its own serving, on a machine it rents, lands in the last group.
Every row carries a label for which one it is, because a single vendor can be more than one. Cloudflare is both the web's dominant CDN and a developer platform; Vercel is a platform that serves its own edge. Summing them into one unlabelled list would let a proxy statistic read as a hosting one, which is the mistake this site exists to avoid.
Two ways to count
"Which one wins" has two honest answers, and they disagree. Counting each story once asks what do HN authors put in front of their sites? Weighting each story by how long it sat on the front page asks what did a reader actually load? A single story parked at #1 for twenty hours barely moves the first number and dominates the second. This site shows both rather than picking one for you.
Why hosting is not shown
Every probe also works out where a site is actually hosted, and the answer goes into the database. None of it reaches this page, because the numbers wouldn't survive scrutiny.
Hiding the origin is what a reverse proxy is for, and they all succeed at it. Across 1,700 HN-linked hosts, roughly a third gave away nothing at all about where they run. Cloudflare hid 76% of the sites it fronted, CloudFront a third, Fastly a quarter. The proportion varies by vendor and by how each site is configured, but the direction never does.
There is a second problem, and it applies to any vendor that is both a proxy and a place to deploy. Its own proxy hides exactly the sites that would count toward its own platform share, so its own product undercounts it. Cloudflare is the clearest case today because it's the largest of both, but nothing about the effect is specific to it.
A hosting leaderboard built on that would be a set of floors presented as shares. So this site publishes what it can observe and keeps collecting the rest until detection can support the claim. The history will be there when it can.
Caveats
One request per host per day, from one Cloudflare colo. Geo-routed and multi-CDN setups will look different from elsewhere. Detection rules are heuristics and will be wrong sometimes, so nothing here is asserted without its evidence: expand any hostname on the front page to see the exact signals behind a verdict, and the raw archived probe behind those.