What delays the first paint
The browser can’t paint until it has the HTML, and it won’t paint until it has every stylesheet in the <head> and has run every synchronous script there. Anything on that critical path pushes FCP back.
Toggle the fixes on a slow phone
First Contentful Paint ≈ 1.9 s → Needs improvement
Magenta bars block rendering: the browser won't paint until they finish. Simplified model of a mobile load with 600 ms server response; real pages have more files, but the rule is the same.
How to improve FCP
- Lower TTFB: FCP can never beat server response. Check it with the TTFB checker.
- Remove render-blocking resources: inline critical CSS and defer scripts (guide).
- Avoid invisible text: use
font-display: swapso text shows in a fallback font while the web font loads. - Avoid client-side-only rendering: a page that ships an empty
<div id="app">can’t paint until JavaScript downloads and runs. Server-render or prerender the first view. - Keep the HTML light: huge inline JSON or SVG sprites in the head delay parsing.