Skip to main content

Learn/Bricks Basics

Web Fonts: How Many You Need, and Where to Host Them

One family, three or four weights, self-hosted. What each weight costs, why text goes invisible while fonts load, and the ruling that settled self-hosting.

Daniel, founder of BricksfusionBy DanielSeptember 9, 20269 min read

The short answer

One family, two at most, three or four weights in total. Self-host the files rather than loading them from someone else's server, because it is faster and it keeps your visitors' IP addresses out of a third party's logs. Set font-display: swap so text appears immediately instead of waiting invisibly. Use a variable font if you need more than two weights, and consider system fonts, which cost nothing at all.

Fonts are the third item on our page speed checklist, after hosting and images, and the one people are least willing to touch, because it feels like being asked to make the site uglier.

It is not that. Almost every font problem is a loading problem rather than a taste problem, and the fixes are invisible to the design.

What does a font actually cost?

A file per weight, per style, per family.

That is the part people miss. Choosing one family does not mean one download. If you use it at regular, semibold and bold, and italic for quotes, that is four files. Add a second family for headings at two weights and you are at six. Each one has to arrive before any text can be drawn in it.

A typical modern font file is somewhere between 15 and 40 KB in the WOFF2 format, which is the one to use and is meaningfully smaller than the older WOFF. Six of those is not catastrophic on its own. The problem is that they sit on the path between your visitor and your words, so they are expensive in a way their file size understates.

Hence the budget: one family, three or four weights. That is regular and bold, plus perhaps one more, and you will be surprised how rarely you miss the rest.

Variable fonts: one file, every weight

A variable font packs a continuous range of weights into a single file. Rather than downloading 400, 500, 600 and 700 separately, you download one thing and ask it for any weight in between.

The arithmetic is straightforward. A variable file is usually somewhat larger than one static weight and much smaller than three or four, so the moment you want more than two weights it is the better deal. It also means adding a weight later costs nothing, which quietly removes a decision you would otherwise keep revisiting.

Most well-known open fonts now ship a variable version. If yours does, use it.

The invisible text problem

Here is what happens by default in most browsers when a font is still loading: the text is there, laid out, taking up space, and completely invisible. Visitors watch a blank rectangle where your headline should be, for as long as the font takes to arrive.

font-display: swap changes that. The browser draws your text immediately in a fallback font, then swaps to the real one when it lands. Nobody stares at nothing.

The cost is that the swap is visible: text appears in one font and changes to another a moment later, and if the two have different proportions the line lengths change and the page shifts. You reduce that by choosing a fallback whose letters are close in width and height to your real font, so the swap is a change of style rather than a change of layout.

Between invisible text and a brief flash, the flash wins every time. People forgive a font changing. They leave a page that appears empty.

Self-host, for two separate reasons

The speed reason. A font on another company's server means the browser has to look up that domain, open a connection and negotiate security before it can even ask for the file. That handshake often costs more than the download. Serving the file from your own domain skips all of it, because the connection is already open.

The privacy reason. Requesting a file from a third party sends that third party your visitor's IP address and the page they were on. In January 2022 the Munich Regional Court awarded a visitor damages against a website that loaded Google Fonts from Google's servers, on the basis that transmitting an IP address that way needed a lawful basis it did not have. The fix the court pointed at was the obvious one: the same fonts, hosted locally.

Keep that in proportion. It was one first-instance decision by one German court, not an EU-wide statute, and this is not legal advice. But it made self-hosting the default recommendation across Europe, and since self-hosting is also the faster option, there is very little reason to argue with it.

Good to know

Self-hosting an open font is usually a download and an upload. The font stays under whatever license it already had, and licensed commercial fonts have their own rules about where files may be served from, so check the license rather than assuming. This site self-hosts its own typeface, which is the same advice taken rather than only given.

The option nobody considers: no web font at all

A system font stack asks for whatever the visitor's device already has. On a Mac that is one typeface, on Windows another, on Android another. All of them are well-made, all of them are already installed, and all of them appear instantly.

Zero downloads. No invisible text. No flash. No layout shift. No third-party request. Every problem in this article disappears at once.

The trade-off is real: your site looks slightly different on different machines, and you give up a piece of brand identity. For a business whose look is the product, that is too much to give up. For a local service business whose visitors care whether the phone number is easy to find, it is a trade almost nobody would notice, and it is worth at least considering rather than dismissing.

How this looks in Bricks

Upload the font files to your site, register the family in the theme settings, and set it once in your theme styles so headings and body text inherit it rather than being set element by element. That is the same principle as design tokens, applied to typefaces.

Then check what is actually loading, because this is the step that catches people out. A theme, a plugin or an old template can each pull in a font you are no longer using, and nothing warns you. Open your site, look at the network activity in your browser's developer tools, and filter for font files. If more arrive than you chose, the extras are being requested by something you have installed.

That check pairs with sizing your images properly, since between them fonts and images are most of what a visitor downloads before your page is usable.

How many families, honestly?

One is a complete answer. A single family with a couple of weights, used consistently, reads as confident. Two is defensible when one is for headings and one for body text and they genuinely do different jobs.

Three is almost always the sign of a decision that never got made, and the fix is usually to delete rather than to choose better. If your headings and your body text are the same family at different weights and sizes, that is not a compromise. That is how most well-designed sites work, and our type scale guide covers how to build the hierarchy that makes one family enough.

Bottom line

One family, three or four weights, in WOFF2, served from your own domain, with font-display: swap so nothing is ever invisible. Use a variable font if you need several weights. Check your network tab afterwards to catch the fonts you did not ask for.

None of that changes how the site looks, which is the point: this is the rare optimization with no design cost attached. And if you are building something where the typeface is not the brand, a system font stack solves the whole category for free and appears instantly on every device your visitors own.

FAQ

Questions about this topic

How many fonts should a website have?

One family in most cases, two at most, and three or four weights in total. Every family, weight and italic is a separate file the visitor downloads before your text can appear in it. Two families at four weights each is eight downloads standing between someone and your headline, which is a lot to pay for a decision most visitors will never consciously notice.

Should I self-host fonts or use Google Fonts?

Self-host. It is faster, because the visitor is already connected to your server and does not have to open a connection to another one, and it avoids sending their IP address to a third party. In January 2022 a German regional court awarded damages against a site for doing exactly that without consent, which is why self-hosting became the default advice across Europe.

What is font-display: swap?

An instruction telling the browser to show your text immediately in a fallback font and swap to the real one when it arrives, instead of hiding the text while it waits. Without it, visitors can stare at a blank space where your headline should be. The cost is a visible flash when the swap happens, which you reduce by picking a fallback with similar proportions.

What is a variable font?

One file that contains a whole range of weights instead of one file per weight. If you want regular, medium, semibold and bold, that is normally four downloads and can be a single variable file instead. They are usually a little larger than one static weight and much smaller than three or four, so they win as soon as you need more than two.

Are system fonts a bad choice?

No, they are an underrated one. A system font stack uses whatever the visitor's device already has, so it costs zero downloads and appears instantly with no flash and no layout shift. The trade-off is that your site looks slightly different on a Mac, a Windows machine and an Android phone, which matters for a brand and often does not for a small business site.

Web Fonts in WordPress: How Many, Where | Bricksfusion