Type something to search...
How Many Fonts Should a Website Use?

How Many Fonts Should a Website Use?

Open the Network panel on a typical small-business website and filter by "Font." It's common to see a dozen requests: three families from Google Fonts, an icon font, a theme's bundled fallback, and a page builder that quietly loads its own copy of Roboto. Each one was added by someone with a reasonable goal, and together they make the site slower and visually incoherent. Nobody decided the site should use five typefaces. It just happened.

This article answers the question properly: how many font families a website should use, why the answer is usually one or two, how to count weights and files (which matter more for performance than families), and how to audit and trim an existing site down to a sensible font budget.

The Short Answer

For almost every website, use one or two font families, and treat a third as an exception that has to justify itself.

SetupFamiliesTypical use
One family1Product sites, documentation, dashboards, minimalist brands
Two families2Most marketing sites, blogs, e-commerce (display + text pairing)
Two plus monospace3Developer docs, technical blogs, SaaS sites with code samples
Three or more3+Editorial publications and brand campaigns with a strong art lead

The monospace case is the most common legitimate third family. A code font serves a functional role that neither your body nor display face can fill, so it doesn't compete with them visually.

Families, Styles, Weights, and Files Are Different Things

"How many fonts" is ambiguous, and the ambiguity is where most of the confusion comes from. There are four different things you can count:

  • Family: the typeface as a whole, such as Inter or Merriweather.
  • Style: upright or italic.
  • Weight: 100 to 900, such as Regular (400), Semibold (600), or Bold (700).
  • File: the actual WOFF2 the browser downloads. A static family with four weights and matching italics is eight files. A variable font might deliver all of them in one or two files.

From a design point of view, the number of families is what matters. From a performance point of view, the number of files and their total bytes is what matters. A site using one family in nine static weights with italics loads 18 files, which is worse for performance than a site using two variable fonts in two files.

So the real rule has two parts:

  1. Design budget: one or two families.
  2. Performance budget: as few files as possible, ideally four or fewer on any given page, and under about 100–150 KB of font data for the initial view.

Why Fewer Fonts Usually Works Better

Visual Coherence

Every typeface has its own proportions, x-height, stroke contrast, and rhythm. When you add a family, you add a new set of visual rules for the reader to absorb. Two families can create a deliberate contrast, such as a serif headline over sans-serif body text. Three or more without a clear system read as indecision, and the hierarchy becomes muddy because the reader can't tell whether a change of font means a change of meaning.

You can usually get all the contrast you need from a single family by varying size, weight, case, and color. A strong type family with a full weight range gives you headings, body, captions, and buttons without ever switching typefaces. The guide on what a type family is and how many weights you need covers how to choose weights within a family.

Performance

Each font file is a network request that can block or delay text rendering. Fonts are typically discovered late, after the HTML and CSS are parsed, so they sit right on the critical path for Largest Contentful Paint when your hero is text. More files means:

  • More bytes over slow connections.
  • More chances for a late swap that causes layout shift.
  • More competition for bandwidth with images and scripts.

A common real-world figure: a single Latin-subset WOFF2 weight of a text family is roughly 15–35 KB. Four weights of two families is easily 150 KB or more before you add italics.

Maintenance

Every family you add is another license to track, another set of fallback metrics to tune, and another thing to keep in sync between Figma, your CSS, and your CMS. Teams with three or four families almost always end up with inconsistent usage, because nobody remembers which one is for which role.

When One Family Is Enough

A single family is the right call when:

  • The site is a product, app, dashboard, or documentation site where clarity trumps personality.
  • You use a large, versatile family with a wide weight range and good italics (Inter, IBM Plex Sans, Source Sans 3, Roboto Flex, Geist).
  • Your brand expression comes from color, illustration, or layout rather than letterforms.
  • Performance is a top priority, such as a high-traffic content site on mobile.

A one-family system still has plenty of hierarchy:

:root {
  --font-sans: "Inter", ui-sans-serif, system-ui, sans-serif;
}

body {
  font-family: var(--font-sans);
  font-size: 1.125rem;
  font-weight: 400;
  line-height: 1.6;
}

h1,
h2,
h3 {
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: -0.02em;
}

.eyebrow {
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.caption {
  font-size: 0.875rem;
  color: var(--color-text-muted);
}

That is four distinct text styles from one family and, if Inter is loaded as a variable font, one file.

You can even go to zero web fonts and use a system font stack. That is a perfectly respectable choice for apps and internal tools.

When Two Families Make Sense

Two families is the classic setup for marketing sites, blogs, and stores. The second family earns its place when it does something the first can't:

  • A display face for headlines paired with a neutral text face for body copy.
  • A serif for long-form reading paired with a sans-serif for UI, navigation, and captions.
  • A brand typeface required by guidelines for headings, with a more economical text face for everything else.

The key is a clear division of labor. Each family should own specific roles, and those roles should never swap. If headings are Fraunces and body is Inter, then buttons, nav, labels, and captions are Inter too. The rules for picking a pair that works together are covered in how to pair fonts.

When a Third Family Is Justified

A third family should solve a specific functional problem:

  1. Code and technical content. A monospace font for code blocks, inline code, terminal output, and API keys.
  2. Non-Latin scripts. If your site serves Bengali, Arabic, or Japanese, you'll need a family that covers that script. This doesn't really count against your design budget, because it's the same role in a different writing system.
  3. Data-heavy interfaces. Occasionally a dedicated figure-friendly face for tables and dashboards, though most good UI families already have tabular figures.

Decorative or "accent" fonts for one-off promotional banners are the classic budget-buster. If you need one for a campaign, load it only on that page.

How to Audit the Fonts on Your Site

Before you set a budget, find out what you're actually loading.

In the Browser

  1. Open DevTools, go to the Network panel, reload, and filter by Font. Count the requests and note their sizes.
  2. In Chrome, inspect an element and scroll to the bottom of the Computed tab, where "Rendered Fonts" shows which font actually painted the text.
  3. In Firefox, the Fonts panel in the Inspector lists every font used on the page.

From the Command Line

You can list every font file a page requests with a headless browser, but a quick check of your CSS is often enough:

# Find every @font-face and font-family declaration in your built CSS
grep -rhoE "font-family:[^;]+" ./out ./.next/static 2>/dev/null | sort | uniq -c | sort -rn

# Find every font file shipped with the build
find ./public ./.next/static -type f \( -name "*.woff2" -o -name "*.woff" -o -name "*.ttf" \) -exec ls -lh {} \;

If you find families you didn't know you were using, look at plugins, page builders, embedded widgets, and icon libraries. Lighthouse will also flag render-blocking font CSS; see how to audit web font performance with Lighthouse for a full walkthrough.

How to Trim Down to a Font Budget

Once you know what's loading, cut it down in this order:

  1. Remove unused families. Search the codebase for each font-family value. If a family appears only in a stale component or a plugin you don't need, remove it.
  2. Consolidate weights. Most designs need regular, a medium or semibold, and bold. Light (300) and black (900) are often used once and can be replaced.
  3. Drop faux variants. If you load italic only for a handful of emphasized words, consider whether the browser's synthesized oblique is acceptable, or keep only regular italic.
  4. Switch to variable fonts when you need three or more weights of a family. One variable WOFF2 is usually smaller than three static files.
  5. Subset to the character sets you actually use.
  6. Load secondary families on demand. A code font only needs to load on pages with code, which happens automatically if it's referenced only by pre and code styles and no element on the page uses it.

Here is what a lean two-family setup looks like with @font-face:

@font-face {
  font-family: "Source Serif 4";
  src: url("/fonts/source-serif-4-var.woff2") format("woff2");
  font-weight: 400 700;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Inter";
  src: url("/fonts/inter-var.woff2") format("woff2");
  font-weight: 400 700;
  font-style: normal;
  font-display: swap;
}

body {
  font-family: "Source Serif 4", Georgia, serif;
}

h1,
h2,
h3,
nav,
button,
.ui {
  font-family: "Inter", ui-sans-serif, system-ui, sans-serif;
}

Two families, two files, a full weight range in each.

Font Budgets in Design Systems

If you work in a team, write the budget down. A short entry in your design system docs prevents the slow creep back to five families:

TokenFamilyRolesWeights loaded
--font-displayFrauncesh1–h3, pull quotes600 (variable)
--font-sansInterBody, UI, nav, buttons, captions, h4–h6400–700 (var)
--font-monoJetBrains MonoCode blocks, inline code, keyboard input400

When someone wants to add a font, they have to replace a row or make the case for a new one. That one rule keeps sites coherent for years.

How Many Fonts FAQ

Not inherently, but the third family needs a clear functional role, such as monospace for code or a script that your main fonts don't support. Three families chosen for decoration usually weaken the hierarchy and add unnecessary load time.

For design purposes, weights of the same family count as one font. For performance, each static weight is a separate file the browser has to download, so six weights of one family can cost more than two variable families.

Yes. Many excellent product and documentation sites use a single versatile family and create hierarchy through size, weight, case, and color. A single variable font can cover every text style in one file.

Not directly, but more font files slow down rendering and can cause layout shift, which affects Core Web Vitals. Those metrics are part of Google's page experience signals, so a bloated font setup can have an indirect effect.

They count toward the performance budget because they are font files the browser must download. Most modern sites replace icon fonts with inline SVG icons, which removes that cost entirely.

Most sites need three: a regular weight for body text, a medium or semibold for UI and subheadings, and a bold for headings. Add italics only if your content uses emphasis regularly.

Conclusion

The honest answer to "how many fonts should a website use" is one or two families, with a monospace or script-specific family as the only routine exception. That limit isn't arbitrary. It keeps the visual hierarchy legible, keeps the font payload small, and keeps the system simple enough that a team can actually follow it.

Separate the design question from the performance question. Count families for coherence, and count files and kilobytes for speed. Audit what your site really loads, cut unused families and weights, move to variable fonts where you need a range, and write the budget into your design system so it stays lean.

Here are some useful references for going deeper on choosing and limiting web fonts:

  1. web.dev: Optimize web fonts — how font count and file size affect loading performance.
  2. MDN Web Docs: @font-face — reference for declaring families, weight ranges, and font-display.
  3. Google Fonts Knowledge: Pairing typefaces — guidance on when a second family adds value.
  4. Butterick's Practical Typography: Font recommendations — a practitioner's view on choosing and limiting typefaces.
Share :

Related Posts

Ascenders, Descenders, and Baselines: The Anatomy of a Letterform

Ascenders, Descenders, and Baselines: The Anatomy of a Letterform

You align an icon next to a button label and it looks a pixel or two too high, no matter how you adjust vertical-align. You set overflow: hidden

Continue Reading
Are Google Fonts GDPR-Compliant?

Are Google Fonts GDPR-Compliant?

In late 2022, thousands of small business owners in Germany and Austria opened letters demanding a few hundred euros in "damages" because their websi

Continue Reading
How to Audit Web Font Performance with Lighthouse?

How to Audit Web Font Performance with Lighthouse?

A client sends you a screenshot of their PageSpeed Insights report: performance score 61, LCP 3.9 seconds, and a vague list of warnings. They want to

Continue Reading