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/