FCP Failures —
Web Font Loading Delays
Your client's brand fonts are delaying the first thing users ever see.
What It Is
FCP — First Contentful Paint — measures when the browser renders the first piece of content: text, an image, or a canvas element. Web fonts delay FCP because by default, browsers won't display text until the custom font is downloaded and ready. This is called FOIT — Flash of Invisible Text. During FOIT, the page appears blank even though the HTML structure has loaded and the content is technically present. Google's target FCP is under 1.8 seconds. On sites loading multiple custom fonts from external services, FOIT alone can add 500ms–2 seconds to FCP.
Why It Matters
FCP is the metric that determines how quickly users feel the page is responding. A blank page — even for half a second — creates the perception of slowness that influences both user behavior and Google's quality assessment. Google specifically calls out font loading in PageSpeed Insights because it's fixable without changing the visual design. The client keeps their brand fonts; they just load in a way that doesn't block content from appearing. This is one of the cleaner fixes in the CWV toolkit: high impact, low risk, no design changes required.
Common Causes
Understanding why this failure occurs is the first step to fixing it permanently.
No font-display Declaration
Custom @font-face declarations load fonts with the default browser behavior — which is FOIT: invisible text until the font loads. Without font-display: swap or optional, text is hidden during font download.
Google Fonts Loaded Without Preconnect
Google Fonts are loaded via a in the head, but without a preconnect hint to fonts.googleapis.com and fonts.gstatic.com. The browser doesn't start the connection to the font server until it encounters the link element — adding a full network round-trip to font loading time.
Too Many Font Weights Loaded
The site loads 6–8 font weight variations (100, 300, 400, 500, 700, 900) even though the design only uses 2–3. Each additional weight is a separate download that extends the FOIT window.
Fonts Not Self-Hosted or Preloaded
Fonts are loaded from external CDNs (Google Fonts, Adobe Fonts, Typekit) without preload hints. The browser must establish a connection to the external domain and download fonts before text can render.
The Fix Blueprint (Interactive SOP)
Check off each step to monitor your implementation progress live!
Tools
-
PageSpeed Insights
Free | 'Ensure text remains visible during webfont load' diagnostic lists every font file and its font-display status -
Google Fonts Helper (gwfh.mranftl.com)
Free | Downloads Google Fonts files for self-hosting with optimized @font-face CSS included -
FontSquirrel Webfont Generator
Free (fontsquirrel.com/tools/webfont-generator) | Converts font files to WOFF2 format with optimal subsetting for web delivery
Time to Fix
Pro Tip
font-display: swap is the fastest win — add it before anything else.
Adding font-display: swap to @font-face declarations takes minutes and eliminates FOIT immediately — text is visible from the first paint even while fonts are still downloading. It's the highest-impact-to-effort fix in font optimization. Do this first, measure the FCP improvement, then evaluate whether self-hosting and preloading are needed to get FCP under 1.8 seconds.