What counts as a site’s font
Every Sunday we open each homepage in a real Chromium browser, wait for its web fonts to finish loading, and walk every visible piece of text on the page. For each run of text we read the computed font-family and find which family draws it, which is the first one in the stack with a loaded font file. If none has loaded and the stack starts with the operating system’s interface font, we recordsystem-ui. Otherwise we record the first family named.
The body font is the family covering the most characters on the page. The heading font is the same calculation restricted to h1 to h3. Text hidden from view, inside cookie banners and other dialogs, or smaller than two pixels doesn’t count.
Why a browser, not the CSS
Stylesheets say which fonts a site declares, not which ones it uses. Next.js renames fonts to hashed names, CSS-in-JS injects styles at runtime, and site builders load fonts late. When we checked the same homepages both ways, reading the CSS alone agreed with the browser only about two times in three.
Names
Sites call the same typeface many things: __Inter_a1b2c3, InterVariable, inter. We fold these into one name using a list of aliases that is part of the public data. Optical and weight variants of one family, like Text and Display cuts, count as the same face.
Switches
A switch is recorded only when a site shows a new font in two browser crawls in a row, so an A/B test, a slow font server or a one-day experiment doesn’t count. We crawl a few hundred of the best-known sites daily, so their switches show up within two days. The rest take two weeks.
How far back the data goes
Our own crawl started in September 2026. Everything on this site dated earlier is an estimate from web archives, covering a smaller set of about 177 well-known sites that we can trace back to 2021. When we checked the archive estimates for the most recent quarter against our own crawl, they named the same body font about two times in three. Treat the long-range trend lines as a rough guide, and our crawl as the record. Charts draw archive estimates as dashed lines on a shaded background and our crawl as solid lines.
History before our crawls
The shaded part of each trend chart comes from copies of the same homepages saved by the Internet Archive and by Arquivo.pt, Portugal’s national web archive, one per quarter. We load each archived page’s HTML and CSS in the same browser and run the same measurement, with scripts turned off and every request paced to stay well within each archive’s limits. Because the font files themselves often weren’t archived, we record the typeface the page asks for rather than what an old copy manages to draw. When a copy’s stylesheets weren’t archived, we try another copy from the same quarter, and leave the quarter out if none works, rather than guess.
Fonts change rarely, so we don’t measure every quarter. We measure the first and last copy; if they match we fill in the quarters between, and if they differ we split the range and measure again until we find the quarter it changed. A site that switched fonts and switched back between two measurements would be missed. Filled-in quarters are marked in the data.
Pages that build their text with JavaScript, and sites whose CSS was never archived, can’t be read this way. Trend lines follow a fixed set of homepages (currently 177) that have archive history, so a line moves only when sites change fonts, not when the sample changes.
What we can’t see
- Only homepages. Product pages, docs and apps often use different type.
- Fonts loaded only after scrolling or clicking.
- Sites that block automated browsers. When that happens we fall back to reading the page’s CSS, and if that’s blocked too the site isn’t counted that week. The block rate by category is below.
- Our crawler runs from US data centers, so sites that serve different pages by country show us their US version.
- We can’t license commercial fonts for this site, so their names are shown in grey in our own typeface.
Blocked this week
| Category | Sites | Blocked |
|---|---|---|
| Top 1,000 | 466 | 16% |
| Top 5,000 | 2,614 | 17% |
| Y Combinator | 4,625 | 7.7% |
| Unicorns | 772 | 4.9% |
| Startups | 5,199 | 7.5% |
| SaaS | 209 | 0.9% |
| Developer tools | 223 | 0.4% |
| News | 236 | 4.8% |
| E-commerce | 165 | 11% |
| Enterprise | 233 | 3.6% |
| Government | 257 | 4.0% |
| Universities | 220 | 0.9% |
| Indie blogs | 958 | 2.7% |
| Popular sites | 2,386 | 18% |
The sites
We build the list from open sources, so anyone can reproduce it.
- Top sites. The 5,000 most visited origins in the Chrome UX Report, Google’s public data on real Chrome traffic. We fold subdomains and country versions into one site per company and leave out adult sites.
- Y Combinator. Every active, public and acquired company in the YC directory that has a website.
- Unicorns. Private companies valued at $1 billion or more. The starting point is Wikipedia’s list, with websites from Wikidata. That list has many gaps, so over half the entries and websites were added or checked by hand. Each row records its source.
- Indie blogs. Personal sites pooled from the Kagi Small Web list, the HN Popularity Contest and a list of Hacker News users’ blogs, then ranked by how many of their posts scored 100 points or more on Hacker News since 2023. We keep the top 1,000.
- Hand-picked lists for news, government, universities, developer tools, SaaS, e-commerce and large companies, seeded from Wikipedia, the US government’s list of .gov domains and a public list of university domains.
Each site has one industry category, and can also be in any of the traffic and funding groups. Parked domains and sites that now redirect to another site we already track are left out, which matters for acquired startups.
Opting out
We load each homepage once per crawl, with a normal browser and no logins, and never follow links. If you run a site and would rather not be included, open an opt-out request. It asks you to confirm you run the site, either with a DNS TXT record or a small file on the site, and a bot checks it automatically. Once confirmed, the site is never crawled again and its data is removed from this site and the current downloads. Older versions of the data files remain in the repository’s history.
Source
The crawler, the site lists and every snapshot are on GitHub. Corrections to the lists and font names are welcome as pull requests.