First Contentful Paint measures how quickly your page shows its first piece of content. It's worth 10% of your PageSpeed score and affects how fast your site feels.
First Contentful Paint (FCP) measures how long it takes for the browser to render the first piece of content on the screen. That content can be text, an image, a background image, or an SVG.
FCP is worth 10% of your PageSpeed score. A good FCP is under 1.8 seconds. Above 3 seconds is considered poor.
FCP is the first signal to the user that the page is actually loading. Before FCP, the screen is blank. A slow FCP makes users think the site is broken or down, leading to higher bounce rates even if the rest of the page loads quickly.
It's different from LCP (Largest Contentful Paint), which measures when the main content loads. FCP just measures the very first thing the user sees.
If your server takes a long time to respond, FCP can't start until the HTML arrives. TTFB (Time to First Byte) directly delays FCP.
Fix: Use caching, move to faster hosting, or use edge/CDN delivery.
CSS and synchronous JavaScript in the <head> block the browser from rendering anything until they finish loading and parsing.
Fix: Move non-critical CSS to load asynchronously. Add defer or async to JavaScript. Inline the critical CSS needed for above-the-fold content.
If your server sends a huge HTML document before the browser can start rendering, FCP is delayed.
Fix: Use server-side rendering or static generation so the first HTML response includes ready-to-display content. Avoid loading all content on a single giant page.
Each redirect adds a round trip before the browser gets the actual page content.
Fix: Eliminate redirect chains. Go directly from the URL to the final destination.
Move non-critical CSS out of the <head> or load it asynchronously:
<link rel="preload" href="styles.css" as="style" onload="this.rel='stylesheet'">
Inline only the CSS needed to render above-the-fold content. Everything else can load after FCP.
Any JavaScript in the <head> without defer or async blocks rendering:
<!-- Blocks FCP -->
<script src="app.js"></script>
<!-- Does not block FCP -->
<script defer src="app.js"></script>
A CDN puts your content on servers close to your users, reducing TTFB and therefore FCP. This is one of the highest-impact changes for global audiences.
If your page loads resources from external domains (fonts, analytics, CDN assets), add preconnect hints to start those connections early:
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://cdn.example.com">
Client-side rendered apps (React, Vue, Angular SPAs without SSR) show a blank screen until JavaScript loads and runs. This devastates FCP.
Switch to SSR or static generation so the browser receives rendered HTML immediately.
People often confuse FCP and LCP:
FCP is always earlier than or equal to LCP. A fast FCP makes the page feel responsive. A fast LCP makes it feel loaded.
| Score | FCP | |---|---| | Good | Under 1.8s | | Needs improvement | 1.8s to 3s | | Poor | Over 3s |
<head>defer or asyncTest your site to see your current FCP and get a full breakdown of all your Core Web Vitals.
How fast is your site?
Get your PageSpeed score in seconds — free, no sign-up needed.
Test Your Site →