How it works

What we measure and where the numbers are weak.

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 the family that draws it. That’s the first one in the stack with a loaded font file. If the stack names the operating system’s interface font before any loaded file, 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. Neither do code samples, unless a page is mostly code.

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 counts only when a site shows a new font in two browser crawls in a row. That rules out A/B tests, slow font servers and one-day experiments. 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 7570 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 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. We miss a site that switched fonts and switched back between two measurements. The data marks which quarters we filled in.

This can’t read pages that build their text with JavaScript, or sites whose CSS was never archived. Trend lines follow a fixed set of homepages (currently 7570) 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, apart from the Hacker News articles. 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.
  • Commercial fonts we can’t license. Their names are grey, in our own typeface, with a lock. System fonts, marked with a screen, use your device’s copy.

Blocked this week

CategorySitesBlocked
Top 1,00040823%
Top 5,0002,10724%
Y Combinator4,5058.5%
Unicorns7657.6%
Hacker News (articles)8979.1%
Startups5,0808.5%
SaaS2065.0%
Developer tools2201.8%
News2329.9%
E-commerce14425%
Enterprise21712%
Government2499.2%
Universities2154.4%
Indie blogs9413.6%
Popular sites1,90125%

The sites

The lists come from open sources.

  • 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 we added or checked over half the entries and websites 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. We leave out parked domains and sites that now redirect to another site we already track.

Hacker News

Every Tuesday we take the 1,000 highest-scoring stories posted to Hacker News the week before (Monday to Sunday, UTC), from the public Hacker News search API, and measure the page each story links to. We skip posts without a link, and links to PDFs, images and other files.

It counts articles, not sites. A site linked ten times that week counts ten times. Each week is a new set of articles, so its trend line compares weeks rather than following the same pages, and the change figures compare the last four weeks with the four before. Articles aren’t part of the site totals, switches, rising and falling fonts, the category heatmap or the downloads, and there’s no archive history. We measure each page once, the week after it was posted.

Opting out

We load each homepage once per crawl, and each article a top Hacker News story links to once, with a normal browser and no logins. We never follow links from those pages. 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 and its articles are never crawled again and we remove its data from this site and the current downloads. Older versions of the data files remain in the repository’s history.

Request an opt-out

Source

The crawler, the site lists and every snapshot are on GitHub. Send corrections to the lists and font names as pull requests.