Skip to content
Website basics

Website fonts: how to choose, pair and keep them readable

Which typeface suits your website? How to pair headings with body text, check umlauts and figures, and stay fast by shipping only the weights you use.

13 min read SchriftenTypografieLadezeitFlow DesignLesbarkeit

The typeface is the first thing a visitor reads on your website and the last thing they think about. They only notice it when it gets in the way: when the price list is hard to make out on a phone, when the ß in a heading comes from a different font, or when the page jumps during loading because the house font arrives after the text. The choice is huge, with free font families available by the hundred, and that is exactly why a method beats gut feeling. This article shows how to choose one or two families, pair headings with body text, check figures and umlauts, and stay fast with only a few weights. How to embed fonts without sending visitor data to third-party servers is covered in our article on external content, maps and fonts; this one deals with the design decision that comes before it.

Type specimen card: two pairings under testHeading and body text, test line with umlauts and figures, weights in the buildA: serif + sans-serifHeading · serif, boldWarmth that lastsBody text · sans-serif, regularWe service your system before the heatingseason and confirm a fixed appointment.Test lineGröße, Öffnungszeiten, 0 1 7B: one family, two weightsHeading · sans-serif, boldWarmth that lastsBody text · sans-serif, regularWe service your system before the heatingseason and confirm a fixed appointment.Test lineGröße, Öffnungszeiten, 0 1 7Weights in the buildEvery weight is a separate file the visitor downloadsOnly the chosen weights2Whole family embedded872%of websites serve at least onefont file from their own serverSource: HTTP Archive Web Almanac 2025

Type is reading matter, not decoration

Web fonts have long been the norm. In 2025, around 88 percent (HTTP Archive Web Almanac 2025) of the websites studied loaded web font files, up from about 87 percent (HTTP Archive Web Almanac 2025) in 2024. Only a minority of around 12 percent (HTTP Archive Web Almanac 2025) stick to the fonts that are installed on every device anyway. So the question is rarely whether a website gets its own typeface, but which one and how many. That is where the typical mistakes happen: a heading face that ends up in body text, four families on one page because every template brought its own, or a thin weight that looks elegant on a laptop and disappears on a phone in the sun.

On a business website, type has three jobs, and all three are down-to-earth. It has to keep body text legible at small sizes on a phone. It has to show figures, prices, phone numbers and opening hours unambiguously. And it has to set German text completely, with umlauts, ß and proper typographic quotation marks. The personality of the brand comes after that, usually through the headings. Choosing in this order rarely leads to a typeface that gets replaced three months later because customers cannot read the price list or mistype the phone number.

One or two families are enough

A font family is one typeface with all its variants: light, regular, bold and italic weights and styles. A business website needs one or two families.

A single family looks calm and consistent as long as it offers enough weights for headings and text. Two families add character: a distinctive one for headings, a calm one for body text. The XICflow documentation sums it up: two typefaces are enough, and more rarely looks better (XICflow documentation). A third family rarely adds expression, but it reliably adds files, coordination and chances for two typefaces to look so alike that they read as a mistake.

Scroll table sideways

Set-upWhen it fitsWhat to watch
One family for everythingCalm, text-heavy pages, businesses with a matter-of-fact imageAt least one regular and one bold weight so headings stand out
Two families: distinctive and calmBrands with their own character, such as trades, restaurants or practicesA clear difference in form, not just in size
System fontCustomer portals, tools, pages where speed is the top priorityLooks slightly different on every device, no fixed brand appearance
Display or handwriting faceHeadings, short lines, elements close to the logoNot in body text, not in forms or price lists

The system font is a real option, not a fallback of last resort. The system-ui value uses the interface font of the visitor's operating system and needs no font file at all. Around 9.7 percent (HTTP Archive Web Almanac 2025) of desktop pages and 9.3 percent (HTTP Archive Web Almanac 2025) of mobile pages now use it. The price: the page looks different on a phone than on a laptop, lines break in different places, and the brand gets no handwriting of its own. For a website that is meant to sell and be recognised, a deliberately chosen web font is usually the better choice; for a customer portal or an internal tool it often is not.

  • Similar proportions: the lowercase letters of both typefaces should look roughly the same height, otherwise body text looks too small or too large next to the heading
  • Same basic attitude: a sober text face suits a clear heading face, a playful heading needs especially calm body text
  • Use display and handwriting faces only for short lines: headings, quotes, a promotional band, no paragraphs
  • Test the heading face with long German words such as “Öffnungszeiten” or “Gebäudereinigung” before you commit to it
  • Look at both typefaces next to the real logo, not next to a placeholder
  • Give every typeface one role and stick to it: no third font for buttons, the footer or a promotional banner

The long-word test

German headings are long. Words like “Heizungsmodernisierung”, “Öffnungszeiten” or “Kostenvoranschlag” often do not fit on one line in a wide heading face on a phone; they break mid-word or run off the screen. Test every candidate with the longest word that appears in your headings, at the size the phone actually shows. A typeface that fails this test is out, however good it looked in the draft. The same applies to English sites with long product or place names.

For longer texts, success criterion 1.4.8 at the highest level AAA gives further guide values that also work as a voluntary benchmark: lines of no more than 80 characters (W3C, WCAG 2.2), line spacing of at least space-and-a-half (W3C, WCAG 2.2) within paragraphs, and text that is not justified (W3C, WCAG 2.2). Justified text is especially tricky in German, because long compound words tear wide gaps into lines on narrow screens. Automatic hyphenation helps; the browser handles it when the page language is marked up with lang="de" and the hyphens: auto property is set. It is rarely used: only about 10.5 percent (HTTP Archive Web Almanac 2025) of pages set hyphens: auto in their CSS. Three more things cost readability: paragraphs in capitals, which rob the eye of word shapes, italic body text, which becomes restless at small sizes, and light grey text on a white background.

Check figures, umlauts and special characters

Many typefaces are presented with English sample lines, and those do not reveal what is missing for German.

Before a typeface is settled, your draft therefore needs its own test line: “Größe, Öffnungszeiten, 0 1 7” shows umlauts, ß, the comma and figures that are easily confused at a glance. Add typographic quotation marks, the en dash, the euro sign and the capital ẞ. The official German spelling rules explicitly allow both forms when writing in capitals, the capital ẞ and the double SS (Rat für deutsche Rechtschreibung, section 25 E3). If you set headings or labels in capitals, you need to know whether your typeface contains the capital ẞ. If a character is missing, the browser switches to a fallback font for exactly that character, and a letter in a foreign shape appears in the middle of a word.

Figures deserve a second look. Many typefaces offer two kinds: proportional figures, which flow harmoniously in running text, and tabular figures, which all have the same width and line up neatly in price lists, opening hours and tables. Among the fonts found on the web that have OpenType features, around 20 percent (HTTP Archive Web Almanac 2025) include tabular figures as a switchable feature. They are turned on with font-variant-numeric: tabular-nums (W3C, CSS Fonts Module Level 4), which so far happens on only 3.2 to 3.3 percent (HTTP Archive Web Almanac 2025) of pages. If you show a price list with amounts stacked in a column, check whether the typeface's figures are of equal width by default or can be switched; otherwise decimal commas and euro amounts sit crookedly under each other, and the list looks untidy even though every number is right.

readability.css
/* Mark up the language so hyphenation works: <html lang="de"> */
body {
  font-family: "Your text face", system-ui, sans-serif;
  line-height: 1.5;
}

p {
  max-width: 65ch;   /* keep lines from getting too long */
  hyphens: auto;     /* hyphenation based on the page language */
}

.price-list td,
.opening-hours {
  font-variant-numeric: tabular-nums;   /* figures of equal width */
}

Every weight is a file

A weight, or style, is one stroke thickness or slant of a family: regular, semibold, bold, italic. With classic web fonts, every weight is a separate file that the browser downloads on the first visit.

A typical web font file is 30 to 40 KB (HTTP Archive Web Almanac 2025) compressed, and many websites load several of them. Two families with two weights each make four files; embed a whole family with all its weights and italics and you quickly reach eight or more, of which the page may use two. The rule of thumb for business websites: one regular weight for text, one bold for emphasis and subheadings, and one weight of the heading face if there is a second family. Italic only if you actually use it.

Text: one regular weight

The regular weight carries paragraphs, lists, form fields and the footer. It has to stay calm and unambiguous at small sizes, because the readability of the whole page depends on it.

Emphasis: one bold weight

Semibold or bold for subheadings, prices and important notes. One strong weight is enough; a second one is barely noticeable next to the first and still costs a file.

Headings: one weight of the second family

If there is a separate heading face, it usually needs only one weight. Headings rarely appear in several weights, so every extra weight would be a file without a job.

The file format is largely settled: about 65 percent (HTTP Archive Web Almanac 2025) of requested font files are WOFF2, the format with the better compression. Variable fonts, which combine many weights in one file, are growing alongside it; 39.4 percent (HTTP Archive Web Almanac 2025) of desktop and 41.3 percent (HTTP Archive Web Almanac 2025) of mobile websites use at least one. A variable file is usually larger than a single weight but replaces several. It pays off if you really use three or more weights; for two weights, two lean single files are often the smaller solution. Every file also comes with a licence. Around 64 percent (HTTP Archive Web Almanac 2025) of the websites studied use at least one font under the SIL Open Font License, which allows use, modification and redistribution and therefore also hosting on your own server. With purchased fonts this cannot be taken for granted: many licences distinguish between print, desktop and web, and some require a separate add-on for embedding in a website. If you bring a house typeface over from print, check before the relaunch whether the web licence is included.

Loading without the page jumping

If a web font has not arrived yet, the browser has to decide: show invisible text and wait, or draw a fallback font right away and swap later. The font-display property controls this.

For swap, the specification recommends, in most cases, a very short block period of 100 milliseconds (W3C, CSS Fonts Module Level 4) or less, after which the font can be swapped in at any time; for block it recommends, again for most cases, a block period of 3 seconds (W3C, CSS Fonts Module Level 4), during which the text stays invisible while the font is missing. About half (HTTP Archive Web Almanac 2025) of the pages using web fonts set swap for at least one font. The swap has a side effect: if the fallback is wider or narrower than the real typeface, lines and paragraphs shift as soon as the real font arrives, and anyone who is reading loses their place.

The stricter option is optional. If the font is not there at first paint, the fallback stays for that page view; according to the specification, such a font must not make the layout jump as it loads (W3C, CSS Fonts Module Level 4). To make sure it usually arrives in time anyway, the most important file is requested early with a preload hint. So far optional is hardly used, on about 0.4 to 0.5 percent (HTTP Archive Web Almanac 2025) of pages. What delivery, caching and preloading mean for loading time overall is explained in the article on static delivery and PageSpeed. Around 72 percent (HTTP Archive Web Almanac 2025) of websites now serve at least one font file from their own server, and the Web Almanac sees the balance tilting further towards hosting fonts exclusively in-house, likely for performance and privacy reasons. What data protection requires here is explained in the article on fonts without data leaks.

Setting typefaces in XICflow

In XICflow you choose typefaces once for the whole website, separated into two roles: one for "Headings" and one for "Body text" (XICflow documentation).

You can choose from 775 open-source font families (XICflow features page) with search and a category filter, split into 272 sans-serif, 147 serif, 191 display, 128 handwriting and 37 monospace families (XICflow documentation). For each family you decide which weights ship; the default is the regular weight 400 plus 600 and 700 where the family has them (XICflow documentation). Every extra weight is delivered with the site, so it pays to tick only the weights your pages really use. Where the setting lives is shown in the brand and design documentation; what the design system offers beyond that is in the Flow Design feature overview.

On publish, the build fetches only the chosen families and weights and stores them as woff2 with your website (XICflow features page); no font is loaded from third-party servers when someone visits. The character sets for Latin and extended Latin are included, covering umlauts, ß and Western European special characters. The delivered page uses font-display: optional and preloads the main weight of each family so the text does not shift during loading. One note for choosing: the preview line in the list shows your computer's fallback font as long as the family is not installed there; you see the real typeface after publishing (XICflow documentation). So check your test line on the published page, on a phone and on a computer. How typeface, colour and layout work together in finished websites is shown in the demos.

The type check before going live

  1. Pick two or three candidates per role and allow display or handwriting faces for headings only
  2. Set a real heading with the longest word from your offer and look at it full size on a phone
  3. Check the test line “Größe, Öffnungszeiten, 0 1 7” and the sequence “Il1 O0” in body text, plus quotation marks, en dash, euro sign and the capital ẞ
  4. Set a price list or your opening hours and check whether the figures line up neatly
  5. Zoom the text to 200 percent (W3C, WCAG 2.2) in the browser and increase line and letter spacing: nothing may be cut off or overlap
  6. Count the weights that are actually shipped and deselect everything that has no job
  7. Load the page on an older phone with a slow connection and watch whether text shifts

Fewer typefaces, a clearer page

Good type choices go unnoticed. They show in visitors reading prices, times and phone numbers at first glance, in a heading that fits the phone, and in nothing jumping during loading. Two families, a few weights and a test line with umlauts and figures get you there. What belongs on the first screen that these typefaces carry is described in the article on the first screen of your homepage.
This article is based on data from: HTTP Archive Web Almanac 2025, Fonts chapter (published 15 January 2026); W3C, Web Content Accessibility Guidelines (WCAG) 2.2, success criteria 1.4.4, 1.4.8 and 1.4.12; W3C, CSS Fonts Module Level 4, sections on font-display and font-variant-numeric; Rat für deutsche Rechtschreibung (Council for German Orthography), official rules 2024, section 25 E3; XICflow features page (Flow Design section) and XICflow documentation (brand and design, typefaces section), as of October 2026.