
You ran PageSpeed Insights on your Framer site and saw the warning "Ensure text remains visible during webfont load". But here's the thing: Framer already optimizes font loading automatically for most cases. So why is the warning still there?
The answer usually comes down to a few specific edge cases: you're using a Thin (100) weight, a decorative font category, fonts loaded through Custom Code, or icon fonts. These fall outside Framer's automatic optimization rules.
This tutorial explains why this warning exists, what Framer already does to prevent it, and how to fix the specific cases where the problem — and the warning — still appear.

Before diving into fixes, it helps to understand what this warning actually means — and why Framer handles it automatically in most situations.
When a browser loads a page with custom fonts, it faces a decision: what should it show while the font file downloads? By default, many browsers hide the text completely until the font arrives. This behavior is called FOIT (Flash of Invisible Text).
For users, FOIT means staring at a page where images and buttons are visible, but they can't read anything. On slow connections, this blank period can last several seconds.
FOUT is almost always better. Users might briefly see a different font, but at least they can read your content right away.
The font-display CSS property tells the browser what to do while waiting for a font. Setting it to swap means: "Show fallback text immediately, then swap when the custom font arrives."
This is what the PageSpeed warning is checking — whether your fonts have this fallback strategy defined.
Here's the good news: Framer applies font-display: swap automatically for most fonts. You don't need to configure anything if you're using standard font setups.
Framer enables swap behavior under these conditions:
Framer also applies size-adjust automatically when swap is enabled, which helps reduce layout shift by matching the fallback font's dimensions more closely to your custom font.
Framer intentionally excludes certain cases from automatic swap:
This is a deliberate UX tradeoff. Framer prioritizes visual consistency over eliminating every possible FOIT scenario.
If Framer already optimizes most fonts, why does PageSpeed still flag yours? Usually it's one of these cases:
The fix depends on which case applies to you. Let's start by identifying the culprit.
Before changing anything, find out exactly which font file PageSpeed is flagging. This prevents the classic mistake of "fixing" one font while the real problem is somewhere else.
The URL tells you where the font comes from:
For more detail:
This tells you whether the font comes from Framer's font system or from Custom Code/external scripts.
If you're using a Thin weight and that's what PageSpeed flags, you have two options.
The simplest fix is switching to a weight that Framer optimizes automatically.
This works because weights 300-800 get automatic font-display: swap from Framer.

If your design absolutely requires Thin weights, understand the tradeoff: Framer won't apply swap because the fallback would look too different. You're choosing visual consistency over eliminating the warning.
In this case, the warning may persist, but your users likely won't notice FOIT on fast connections. You can also load the font yourself via Custom Code with explicit font-display control (see the Custom Code section below).
If you're using a decorative or display category font from Google or Fontshare, Framer doesn't apply automatic swap for the same reason as Thin weights — the fallback mismatch would be too jarring.
If a visually similar font exists in the serif or sans-serif categories, switching gives you automatic swap behavior.
If you need that specific decorative font, you can load it yourself with explicit font-display control. See the Custom Code section below for the exact implementation.
If you're loading fonts through Custom Code (external stylesheets, scripts, or your own @font-face rules), Framer's automatic optimization doesn't apply. You need to add font-display yourself.
If you're self-hosting fonts or loading them via CSS, add font-display: swap directly in your @font-face declaration.
Add this via Custom Code in Framer:
<style>
/*!
* BRIX Templates Custom Font Setup for Framer
* ----------------------------------------------------------------------------
* Example @font-face with font-display to prevent invisible text (FOIT).
* Replace the font-family, src, and other values with your actual font.
*
* Version: 1.0.0
* Author: BRIX Templates
*/
@font-face {
font-family: "YourFontName";
font-style: normal;
font-weight: 400;
src: url("https://your-cdn.com/fonts/YourFont-Regular.woff2") format("woff2");
font-display: swap; /* Shows fallback text immediately, swaps when font loads */
}
</style>
If you're loading Google Fonts via your own link tag (not through Framer's font picker), add display=swap to the URL:
<!-- Google Fonts with explicit font-display control -->
<link
href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700&display=swap"
rel="stylesheet"
/>
The key is display=swap in the URL — this tells Google's CSS to include font-display: swap in the generated rules.

Icon fonts (Font Awesome, Bootstrap Icons, Material Icons, etc.) are a common reason the warning persists even after fixing your text fonts. They load separately and often don't have font-display configured.
With text fonts, swap works well — users see fallback text, then it swaps. But with icon fonts, the "fallback" is usually empty squares or random characters, which looks broken. This makes icon fonts harder to handle gracefully.
The cleanest solution is replacing icon fonts with SVG icons:
When you use inline SVGs, the icon code is part of your HTML — it doesn't add an extra network request, so there's no performance penalty.
If you must keep the icon font, ensure it has font-display defined. Check how the icon font is loaded:
After applying the fix, verify that icons don't show broken placeholder characters during the swap period. If they do, SVGs are the professional solution.
If you're using Adobe Fonts (Typekit), the font is loaded through Adobe's embed code. You can configure font-display directly in Adobe's dashboard.
If you can't find the option or it doesn't resolve the issue, the alternative is self-hosting the fonts (if your license allows) and loading them via Custom Code with explicit font-display control.
After making changes, verify properly — don't just assume it worked.
If it's still there, check if the flagged URL changed. You might have fixed one font but another is still failing.
If changes aren't reflecting:
"I'm using Thin (100) and the warning won't go away"
Framer intentionally doesn't apply swap for Thin weights because the fallback mismatch would look bad. Switch to Light (300) or higher, or accept the tradeoff.
"I changed my font but the warning still shows"
The flagged font probably isn't the one you changed. Go back to PageSpeed, check the exact URL being flagged, and trace it in DevTools to find the real source.
"The flagged font is from a widget or embed I added"
Framer's optimization only applies to fonts loaded through Framer's font system. For external widgets, you need to configure font-display in the widget's settings or replace it with an alternative that handles font loading properly.
"Font Awesome or another icon font triggers the warning"
Icon fonts often don't have font-display configured. Either add it to the icon font's CSS, or switch to SVG icons — which is the recommended approach anyway.
"Lighthouse says it can't check my font-display value"
Some implementations (iframes, script loaders, cross-origin CSS) limit what Lighthouse can validate. Focus on the real outcome: test on a slow connection and watch if text is ever invisible. If it renders immediately, you're fine regardless of what the audit says.
Framer applies font-display: swap automatically, but only under specific conditions: weights between 300-800 and (for Google/Fontshare) serif or sans-serif categories. If you're using Thin (100) weights, decorative fonts, fonts via Custom Code, or icon fonts, you fall outside these rules.
The fix depends on your case: change to a supported weight, switch font categories, or add font-display manually via Custom Code for fonts you load yourself.
This warning means the browser might hide text while waiting for your custom font to download. Users see blank areas where text should be — a problem called FOIT (Flash of Invisible Text).
The solution is setting font-display: swap so the browser shows fallback text immediately. Framer does this automatically for most fonts, so if you're seeing this warning, you're likely hitting one of the edge cases.
It's a deliberate design decision. Thin weights look very different from standard system fonts like Arial or Georgia. If Framer applied swap, users would see a jarring mismatch — regular-weight fallback text that suddenly becomes ultra-thin.
Framer decided it's better to wait for the real font than show a confusing fallback. If you need the warning gone, switch to Light (300) or higher.
Framer's automatic optimization only applies to fonts selected through the built-in font picker. For fonts loaded via Custom Code, you need to add font-display yourself.
Create an @font-face rule with font-display: swap and add it to your site's Head via Custom Code. For Google Fonts loaded via link tags, add display=swap to the URL parameters.
Swap is the safe default — it shows fallback text immediately and swaps whenever the font arrives. Use optional if you prioritize stability over typography (the browser may keep the fallback permanently if the font is slow). Fallback is a middle ground with a short invisible period.
For most Framer sites, stick with swap unless you notice significant layout shift when fonts swap in.
Icon fonts load separately from Framer's font system, so they don't get automatic optimization. You can add font-display to the icon font's CSS if you control it, but the better solution is switching to SVG icons.
SVGs render immediately, don't require font loading, and give you more styling control. Most icon libraries offer SVG versions alongside their font versions.
Yes, since November 2023. Framer automatically converts uploaded custom fonts to WOFF2 format for better compression and faster loading. If you uploaded fonts before that date, consider re-uploading them to get the automatic conversion.
After publishing, run PageSpeed Insights again and confirm the warning is gone. Then open DevTools → Network, filter by fonts, and check that the loaded CSS includes font-display: swap in the @font-face rule.
If the warning persists, compare the flagged URL to what you fixed — you might have addressed one font while another is still causing the issue.
Not easily. Framer intentionally skips swap for Thin weights, and there's no native setting to override this. Your options are: accept the warning (it may not affect real users much), load the font via Custom Code with your own font-display rule, or change to a heavier weight.
For most marketing sites, switching to Light (300) is the practical choice.
Fixing the warning ensures users see text immediately rather than staring at blank space. Whether this matters depends on your audience's connection speeds. On fast connections, the difference is negligible. On slow mobile connections, it can mean seconds of readable content vs blank space.
The real benefit is user experience — but if your fonts already fall within Framer's automatic optimization rules, you're likely fine without any changes.
The "Ensure text remains visible during webfont load" warning in Framer usually indicates you've hit one of the edge cases that Framer's automatic optimization doesn't cover: Thin weights, decorative fonts, fonts loaded via Custom Code, or icon fonts.
For most Framer projects using standard weights and font categories, you won't see this warning at all — Framer handles font-display automatically. When the warning does appear, the fix is usually straightforward: change to a supported weight, switch font categories, or add explicit font-display control for fonts you load yourself.
If you'd like help optimizing fonts and overall performance across your Framer site, our team specializes in Framer development and can handle these optimizations efficiently.

Click-to-load embeds in Framer with a Code Override: load Calendly/Google Maps only on click, with code, setup, and DevTools checks.

Fix invisible text during font loading in Webflow using font-display for custom fonts, Google Fonts, and icon fonts.

Prevent layout shift in Framer by reserving image space before load. Reduce CLS in hero, CMS, and responsive layouts.