Typography trouble
Twenty Twenty-Five Fonts Not Loading: theme.json, Variations and the Font Library
Twenty Twenty-Five ships its typefaces inside the theme and never calls Google. So when Manrope turns into Arial, the font did not fail to download from somewhere far away. Something on your own site stopped asking for it, and that narrows the hunt to a handful of records.
October 17, 2026 · 8 min read
The short answer
Twenty Twenty-Five fonts usually stop loading because a Font Library font was installed but never activated or assigned, a theme font was deactivated, a style variation changed the font pair, font files or their stored addresses broke in a migration, or an optimizer stripped WordPress's inline @font-face rules. Check Styles, Typography first, then the page source.
On this page
The typeface you chose versus the one visitors get
Font trouble on this theme rarely looks like an error. The site works. Headings that should wear Literata come out in a plain system serif, or the light, airy Manrope body text arrives in Helvetica. Sometimes the editor looks perfect and only the live site is wrong, which is the most useful clue of all.
- Every page in a system font: the font face rules are missing from the page, or the files they point at return errors.
- Right in the editor, wrong on the site: the editor and the front end are loading different font lists.
- One block in the wrong font: that block names a family the active settings do not include.
- Wrong only after a move to a new domain: stored font addresses still point at the old one.
- Wrong only for visitors: a cache or optimizer is serving older or trimmed CSS.
Classic-theme font failures (Google Fonts switches, CDN headers, icon sets) are handled in our cross-theme fonts guide. Little of that applies here, because this theme takes a different route.
Where Twenty Twenty-Five keeps its type
Fonts are declared in theme.json, not enqueued as stylesheets. The default style declares two families, each a single variable .woff2 file in the theme's assets/fonts folder: Manrope (weights 200 to 800) for headings and body, and Fira Code for code. WordPress reads those declarations and prints the @font-face rules itself, inline in the page head, inside a style tag with the class wp-fonts-local. No stylesheet file, no Google request.
The style variations bring their own pairs. Noon pairs Beiruti headings with Literata body text. Dusk sets Vollkorn over Fira Code, Afternoon sets Platypi over Ysabeau Office, Twilight puts Roboto Slab over Manrope, Morning uses Literata over Ysabeau Office, Sunrise Platypi over Literata, and Midnight Literata over Fira Sans. Evening changes colors only. The same seven pairs are also offered on their own as typography presets, named for the pair, so a site can keep Default colors with Beiruti and Literata type.
| Where it is declared | Where the files live | Who can break it | |
|---|---|---|---|
| Theme fonts | theme.json in the theme folder | assets/fonts inside the theme | Deactivation in the Font Library, an optimizer stripping inline CSS |
| Variation and preset fonts | The variation's JSON, copied into your global styles when chosen | assets/fonts inside the theme | Switching variations, block-level font choices that outlive a switch |
| Font Library fonts | Your global styles record, once activated | wp-content/uploads/fonts | Migrations, domain changes, theme switches, forgetting to activate |
The Font Library arrived in WordPress 6.5, inside Styles, Typography. WordPress 7.0 gave it its own screen, Appearance, Fonts, for every theme. Installing a font saves it to the site; activating it adds it to the active theme's global styles; assigning it, in Styles, Typography under Text or Headings, is what actually changes the page. Three separate steps, and skipping the last two is the most common mistake.
Suspects, ranked for a Twenty Twenty-Five site
1. Installed, but never activated or assigned
The font appears in the Library, so the owner assumes it is live. Check: open the Font Library and confirm the family shows as active, with the weights you need ticked. Then open Styles, Typography, Text and Headings and confirm the family is selected for each.
2. A theme font switched off
The Font Library lists the theme's own families too, and lets you deactivate them to trim downloads. Deactivate Manrope while the Default style still uses it and the browser falls back to a system font. Check: in the Library's theme section, Manrope and Fira Code should be active unless you replaced them everywhere.
3. A block remembering a font from another look
Since WordPress 6.7, the editor loads the font files of every style variation so it can preview them, while the live site loads only the families in your active settings. A block or copied pattern that carries an explicit family from another variation can look right in the editor and wrong on the site. Check: select the odd block and look at Typography in its Styles tab; reset any font family that is not part of your current pair.
4. Files or addresses lost in a migration
Font Library files live in wp-content/uploads/fonts, and their full web addresses are saved as JSON in the database. JSON often stores slashes escaped, as https:\/\/, so a search and replace that only looks for https:// can miss them. Check: in the browser's Network tab, filter by Font. A 404 or a request to the old domain settles it.
5. An optimizer trimming inline CSS
Because the @font-face rules are inline, tools that remove unused CSS, move inline styles or rewrite the head can drop them. Check: view the page source logged out and search for wp-fonts-local. If the block is missing or empty while the editor works, the optimizer is the suspect.
6. A new theme, or a child theme
Activation is stored per theme, so switching themes, including to a child theme, leaves Library fonts installed but inactive. Check: did the active theme change since the fonts last worked?
Getting the right type back on screen
- 1
Look at the page source first
Open the live page in a private window, view the source and find the style tag with the class wp-fonts-local. Note which families it declares and whether their src addresses use your current domain.
- 2
Read the Network tab
Reload with the Font filter on. Every font file should return 200 from your own domain. Write down any 404s or old addresses.
- 3
Confirm activation and assignment
In the Font Library, activate the families and weights you use. In Styles, Typography, set Text and Headings explicitly, then save.
- 4
Pick one look on purpose
If a style variation or typography preset was tried and abandoned, choose the one you want again from Browse styles or the Typography presets so the saved settings match it.
- 5
Repair moved fonts
If files are missing, copy wp-content/uploads/fonts from the old server. If addresses are wrong, run the search and replace again for both https://old-domain and its escaped form, on a staging copy first.
- 6
Exempt the font rules from optimization
Exclude the wp-fonts-local inline style from any unused-CSS or inline-CSS feature, then purge the plugin, host and CDN caches.
- 7
Recheck on a phone
Test logged out on a slow mobile connection. Text shows in a fallback font briefly by design, because WordPress uses font-display fallback unless told otherwise.
If fonts load but text jumps when they arrive, that is layout shift rather than loading; see layout shift on WordPress themes. The Twenty Twenty-Five speed guide explains why adding families costs downloads even when they load correctly.
One family per job, written down
Most repeat font failures on this theme come from abundance. Nine looks, seven presets and a Library with a whole Google collection invite experiments, and each experiment can leave an activated family, a block-level override or a stray setting behind. Settle on one heading family and one body family, deactivate the rest, and record the choice.
- Write down the variation or preset in use and the two families it relies on.
- Assign fonts in Styles, Typography, not block by block, so a future switch changes everything at once.
- Treat wp-content/uploads/fonts as part of the site: back it up and move it with every migration.
- Reactivate Library fonts after any theme switch, child themes included.
- Keep the optimizer away from WordPress's inline font rules.
Where custom CSS sets fonts too, it can win over everything above; Twenty Twenty-Five CSS not updating explains the order. And if fonts went missing together with the header, check Twenty Twenty-Five header not showing for a theme switch behind both; the same switch can reset the phone menu. Our hosting and maintenance plans back up the fonts folder with everything else.
A font that lives in your theme folder cannot be blocked by Google. It can still be forgotten by your own database.
Three switches between a font and the page
Credit where due: Twenty Twenty-Five handles type better than most commercial themes. Local files, variable fonts, no third-party requests, a font manager built into core. The fragility is in the layers: installed, activated and assigned are three switches, stored per theme, editable by anyone with access to Styles, and subject to whatever an optimizer does to the head of the page.
On a Next.js site, next/font fetches the font files during the build, hosts them on the same domain as the pages and writes a size-matched fallback, so nobody can switch the font off on the live server by accident. It costs more to build and needs a developer to change the type. Weigh it in Twenty Twenty-Five vs Next.js and plan with moving Twenty Twenty-Five to Next.js. The Twenty Twenty-Five review covers the theme as a whole, the troubleshooting hub every other fix, and our theme troubleshooting service will trace a stubborn font for you. When fonts are one symptom among several, the theme repair team takes the whole site.
Questions people ask before they call
Not by itself. Its typefaces ship inside the theme folder, and anything installed from the Font Library's Google collection is copied to your own server first. A request to fonts.googleapis.com on your pages was added by a plugin, an embed or a pasted snippet.
Installing only saves the font to the site. You must also activate it for the theme and then choose it in Styles, Typography for Text, Headings or a specific block. Check the weights you need are selected too, since an inactive weight falls back to a synthesized one.
By default the files go in wp-content/uploads/fonts, and their details are stored in the database. That means a migration that skips part of the uploads folder, or a domain change that misses the stored addresses, can break them while theme fonts keep working.
The editor loads every style variation's fonts so it can preview them, but the live site loads only the families your saved settings include. A block carrying a font from another variation, a stale page cache or an optimizer removing the inline font rules are the usual reasons for the difference.
Yes, for every variation except Evening, which changes colors only. Each of the others brings its own heading and body pair, such as Platypi and Literata in Sunrise. If you want new colors without new type, apply a color palette preset instead of a full variation.
Keep reading
- Default theme, phone menuTwenty Twenty-Five Mobile Menu Not Working: One Setting, Then Four SuspectsTwenty Twenty-Five mobile menu not working? Check the Navigation block's overlay setting, the menu it points to, script delays and overlay colors, in order.
- The default, defendedTwenty Twenty-Five Speed: What the Default Theme Gets Right, and How Plugins Undo ItTwenty Twenty-Five inlines its stylesheet and hosts its fonts locally. See how plugins quietly reverse both, and the steps that keep the theme quick.
- Theme reviewTwenty Twenty-Five Theme Review (2026): The Free Default, Judged Like a PurchaseTwenty Twenty-Five theme review: who maintains it, Site Editor setup, speed, SEO, WooCommerce limits, the mobile menu quirk, and who should skip it.
- The default, tested fairlyTwenty Twenty-Five vs Next.js: Plain WordPress Against a Custom BuildTwenty Twenty-Five vs Next.js across 22 rows: the free default block theme against a custom build, and the sites where the free theme wins.
- Block theme migrationTwenty Twenty-Five to Next.js: Moving a Block Theme Site, Block by BlockMove a Twenty Twenty-Five site to Next.js: block markup, Site Editor changes saved in the database, Font Library fonts, patterns, and every URL kept.
- Install, activate, renderWordPress Theme Not Loading: Why It Won't Install, Activate or AppearWordPress theme not loading, installing or activating? Decode the exact core error, from a missing stylesheet to a missing parent theme, and fix it safely.
- Everything in WordPress TroubleshootingSee the section
Get your Twenty Twenty-Five type showing as designed
Tell us which font is missing and where. We will check the Library, your global styles, the page source and the migration history, then tell you plainly what broke and what the fix involves.
Which of these sounds like you? (pick any)
Rather talk now? Call (210) 346-0848.