First Contentful Paint (FCP)
Also known as: FCP, first contentful paint
FCP is the time from page request to the first piece of content (text, image, SVG, non-white canvas) being painted on the screen. FCP is a supplementary Web Vitals metric — it's not one of the three Core Web Vitals (LCP, INP, CLS) but is widely reported in Lighthouse / PageSpeed audits. The threshold for 'Good' is ≤ 1.8 seconds; 'Needs Improvement' is 1.8–3.0; 'Poor' is > 3.0.
FCP vs LCP — the relationship
FCP measures when the user sees ANY content; LCP measures when they see the LARGEST content. FCP almost always fires earlier than LCP.
A typical page progression:
- 0.0s: page request starts
- 0.4s: TTFB (server response begins)
- 1.2s: FCP fires (first text or image visible)
- 2.1s: LCP fires (hero image fully rendered)
Optimizing FCP optimizes the “page is loading” moment; optimizing LCP optimizes the “page has loaded” moment.
What FCP measures (precisely)
The metric fires the first time the browser paints ANY of:
- Text (after web fonts load, or fallback fonts)
- Images (raster, SVG, or background)
- Non-white canvas
- Iframe content
White-background-only pages don’t satisfy FCP — there must be visible content.
Why FCP matters
Even though FCP isn’t directly used in Google ranking, it correlates strongly with perceived speed and bounce rate:
- Sites with poor FCP (>3s) bounce 32% more on mobile
- Users feel they “can use” the site once FCP fires, regardless of whether all content is loaded
For business outcomes, FCP shapes user impression in the critical 0-2 second window.
Optimization tactics
- Eliminate render-blocking resources — critical CSS inline, defer/async JS
- Reduce TTFB — CDN edge caching, server-side optimizations
- Server-side render or static generate — avoid CSR-only patterns where the page is white until JS runs
- Optimize font loading —
font-display: swaporoptionalto avoid invisible text - Compress critical text content — gzip/brotli served from origin
FCP vs LCP — which to prioritize
If you have to choose, LCP wins (it’s a Core Web Vital and directly affects ranking). But the optimizations that improve LCP usually improve FCP too — they’re related metrics. A page with good LCP almost always has good FCP.
The exception: pages where the LCP element is much later than FCP (large hero images after early text). Optimizing LCP-specific levers (image preload, image format) won’t help FCP at all.
Measurement
- PageSpeed Insights — surfaces FCP for both lab (Lighthouse) and field (CrUX) data
- Lighthouse — lab simulation; useful for debugging
- CrUX — 28-day rolling real-user FCP
- Web Vitals JS library — RUM measurement of FCP
Resocial perspective
We monitor FCP alongside the three Core Web Vitals, but treat it as supplementary. A page that passes LCP almost always passes FCP; the inverse isn’t always true. FCP regressions usually indicate broader render-pipeline issues that will eventually hurt LCP too.
- Resocial service →
/services/seo/technical-seo/ - Read on the blog →
/blog/technical-seo-complete-guide/