N

Fonts load from Google only after you agree · nothing you type is sent

Font Pairing Tool

Try heading and body font combinations from Google Fonts on a realistic sample, tune size, weight, line height and spacing, then copy link tags and CSS that load only what you chose.

Fonts and settings

Heading size48px
Body size17px
Body line height1.60
Heading line height1.15
Heading letter spacing-0.010em
Body letter spacing0.000em

Playfair Display 700 + Source Sans 3 400

Load the real fonts from Google Fonts?

The preview below uses your device's fallback fonts. Loading the real ones downloads them from Google, which receives your IP address and browser details. Nothing you type is sent. The code exports work either way.

Good type makes reading effortless

Pairing a heading face with a body face

A strong pairing contrasts in style but agrees in proportion. The heading font sets the tone; the body font has one job — to be comfortable over long paragraphs, at small sizes, on every screen. Read this at arm's length and squint: if the texture looks even and nothing jumps out, it works.

Body text with bold emphasis, numbers 0123456789 and punctuation “quotes” — dashes & ampersands.

Get startedCaption · 14px · Updated 7 October 2026
Edit the sample text

What you type stays in this page — it isn't sent to Google or anywhere else.

Why it works: High-contrast display serif over a neutral humanist sans.

Code for your site

HTML <link> tags

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700&family=Source+Sans+3:wght@400;700&display=swap" rel="stylesheet">

Paste into <head>. Requests only these families and weights, with display=swap so text shows in a fallback font while they load.

CSS @import

@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700&family=Source+Sans+3:wght@400;700&display=swap');

Alternative to the link tags: put it at the very top of your stylesheet. Link tags usually start downloading sooner.

font-family CSS

body {
  font-family: "Source Sans 3", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Arial, sans-serif;
  font-weight: 400;
  font-size: 1.0625rem; /* 17px */
  line-height: 1.6;
  letter-spacing: normal;
}

h1, h2, h3 {
  font-family: "Playfair Display", ui-serif, Georgia, Cambria, "Times New Roman", serif;
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: -0.01em;
}

h1 { font-size: 3rem; /* 48px */ }

Tailwind v4 @theme

@theme {
  --font-heading: "Playfair Display", ui-serif, Georgia, Cambria, "Times New Roman", serif;
  --font-body: "Source Sans 3", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Arial, sans-serif;
}

/* Use as class="font-heading" and class="font-body" */

How the export works

  1. Each family becomes one family= parameter of the Google Fonts css2 URL, with spaces written as +.
  2. Weights are listed after :wght@ in ascending order, separated by semicolons. With italics, each style is an ital,wght pair such as 1,400, uprights first.
  3. If the heading and body use the same family, their weights are merged into one parameter. Single-style families are requested by name alone.
  4. display=swap is added so text is never invisible while fonts load, and every font-family rule ends with system fallbacks for its style (serif, sans-serif, monospace or cursive).

URL format from Google's CSS API v2 documentation; family names and weights from Google Fonts' public family metadata. Checked 7 October 2026.

Worked example

Playfair Display 700 for headings and Source Sans 3 400 for body text, plus bold for emphasis, gives:

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700&family=Source+Sans+3:wght@400;700&display=swap" rel="stylesheet">

That URL asks for three font styles — Playfair+Display:wght@700 and Source+Sans+3:wght@400;700 — and nothing else.

All 39 curated pairings

The weights are starting points — every family listed here offers the weight shown. The full list of 150 families covers 89 sans serif, 31 serif, 12 display, 9 handwriting, 9 monospace fonts.

Classic serif + sans

HeadingBodyStyles
Playfair Display 700Source Sans 3 40012 / 16
Merriweather 700Open Sans 40014 / 12
Lora 600Roboto 4008 / 18
Libre Baskerville 700Source Sans 3 4008 / 16
EB Garamond 600Lato 40010 / 10
Cormorant Garamond 600Work Sans 40010 / 18
Crimson Pro 600Montserrat 40016 / 18
PT Serif 700PT Sans 4004 / 4
Spectral 600Karla 40014 / 14

Modern sans

HeadingBodyStyles
Poppins 600Inter 40018 / 18
Montserrat 700Hind 40018 / 5
Raleway 700Open Sans 40018 / 12
Oswald 600Source Sans 3 4006 / 16
Manrope 700Inter 4007 / 18
Space Grotesk 700Inter 4005 / 18
Plus Jakarta Sans 700Inter 40014 / 18
Sora 600Inter 4008 / 18
Archivo 700Libre Franklin 40018 / 18

Editorial

HeadingBodyStyles
DM Serif Display 400DM Sans 4002 / 20
Fraunces 600Inter 40018 / 18
Montserrat 700Merriweather 40018 / 14
Playfair Display 700Lato 40012 / 10
Abril Fatface 400Lato 4001 / 10
Bodoni Moda 600Jost 40012 / 18
Source Serif 4 600Source Sans 3 40016 / 16
Prata 400Lato 4001 / 10

Friendly

HeadingBodyStyles
Fredoka 600Nunito 4005 / 18
Baloo 2 700Nunito Sans 4005 / 18
Rubik 600Open Sans 40014 / 12
Quicksand 700Mulish 4005 / 18
Pacifico 400Nunito 4001 / 18
Varela Round 400Open Sans 4001 / 12

Technical / mono

HeadingBodyStyles
JetBrains Mono 700Inter 40016 / 18
IBM Plex Sans 600IBM Plex Mono 40014 / 14
Space Mono 700Roboto 4004 / 18
Roboto 700Roboto Mono 40018 / 14
Fira Sans 600Fira Code 40018 / 5
Source Sans 3 600Source Code Pro 40016 / 16
Chivo 700Chivo Mono 40018 / 18

“Styles” is the number of weights plus italics each family offers (heading / body). Font previews on this page are loaded from Google Fonts only for the pairing on screen; the tables above are plain text.

Frequently asked questions

What are good Google Font pairings?+

Pairings that contrast in style but match in proportions — a serif heading with a sans-serif body, or two sans-serifs with clearly different personalities. Well-known examples include Playfair Display with Source Sans 3, Merriweather with Open Sans, Lora with Roboto, and superfamilies designed to work together such as PT Serif with PT Sans or IBM Plex Sans with IBM Plex Mono. This tool has 39 curated pairings in five styles, plus 150 families to combine yourself.

How do I add Google Fonts to my website?+

Copy the tags into your page's : two preconnect hints and one stylesheet link to fonts.googleapis.com/css2 listing only your families and weights. Then copy the font-family CSS (or the Tailwind v4 @theme block) so your headings and body text use them. The @import line is an alternative to the link tags if you can only edit CSS.

What does display=swap do?+

It sets font-display: swap for the downloaded fonts, so the browser shows your text straight away in a fallback font and swaps in the web font when it arrives, instead of hiding the text while it loads. That's why the exported font-family rules include a fallback stack after each font name.

What does Google receive when fonts load from Google Fonts?+

The visitor's browser downloads the CSS and font files from fonts.googleapis.com and fonts.gstatic.com, so Google receives the visitor's IP address and the request's HTTP headers — including the user agent (browser and operating system) and usually the referring page. Google's Google Fonts FAQ says the API doesn't set cookies and that the data isn't used to build profiles or for targeted ads. This tool asks first: nothing is requested from Google until you press “Load font previews”, then only the families you preview are requested, and nothing you type is sent. The link tags you export have the same effect for your own site's visitors.

Is using Google Fonts GDPR-compliant?+

It depends on how you use it, and this isn't legal advice. In January 2022 the Munich Regional Court (LG München I, 3 O 17493/20) found that a site which loaded Google Fonts from Google's servers without consent had unlawfully passed a visitor's IP address to Google. The privacy-friendly alternative is to self-host: download the font files from the family's page on fonts.google.com or install them from Fontsource (for example npm install @fontsource-variable/inter), serve them from your own domain with @font-face, and keep the same font-family CSS.

How many fonts and weights should I load?+

As few as you use. Two families is plenty for most sites, and each extra weight or italic can mean another file to download. A common set is one heading weight, a regular body weight and a bold for emphasis — which is what the export requests by default. Tick italics only if your content uses them.

Can I use these fonts commercially?+

The families in this tool are all open-source fonts from Google Fonts — most under the SIL Open Font License, some under the Apache License — which allow commercial use, embedding and self-hosting. Check the license shown on each family's Google Fonts page if you plan to modify or redistribute the font files themselves.