First Contentful Paint (FCP) is a timing-based metric that reports when the first content is rendered on screen. While FCP sounds similar to Largest Contentful Paint (LCP), but it’s not the same. FCP aims to measure when the first content appears, and LCP quantifies when the primary content appears. FCP is a Web Vital metric.
Content, in FCP calculations, means:
<img>,<image>or<svg>elements (including background images set in CSS withbackground-image: url())- Non-white
<canvas>elements - Text
How is First Contentful Paint calculated?#
In Calibre, FCP is sourced directly from Chrome browser. The browser emits this timing as part of its tracing.
What First Contentful Paint measurement is fast?#
First Contentful Paint lower or equal than 1.8s are considered fast, and above 3s are considered slow.

How to improve First Contentful Paint?#
First Contentful Paint starts after the document arrives, so it is shaped by how quickly the server responds and how much work blocks the first render. Work through these steps:
1. Eliminate render-blocking resources#
- Inline critical CSS: Deliver the styles needed for the first paint inline, and load the rest asynchronously.
- Defer non-critical JavaScript: Use
asyncordefer, and remove unused scripts and CSS that block rendering.
2. Reduce server response time#
- Improve Time to First Byte: FCP cannot start until the document begins arriving, so reduce Time to First Byte with a CDN, caching and faster server-side rendering.
- Use resource hints:
preconnectto required origins so connections are ready when the browser needs them.
3. Optimise web font loading#
- Preload and swap: Preload critical fonts and use
font-display: swapso text is visible while fonts load. - Ship less font data: Use WOFF2 and subset fonts to the characters you need.
4. Monitor First Contentful Paint over time#
- Track FCP with Calibre: Monitor FCP with Real User Monitoring, the CrUX Dashboard and synthetic tests, and set a performance budget.
- Compare against thresholds: FCP is good at 1.8s or less and poor above 3.0s. See Core Web Vitals thresholds.
Browser compatibility#
See the full browser compatibility table on MDN.