- Performance
- SEO
- Engineering
The Core Web Vitals work that actually moves rankings
Most performance advice optimises the metric instead of the experience. Here is the short list of changes that reliably improve both, in the order we apply them.

Every few months a client sends us a Lighthouse screenshot with a red score and asks what it will take to make it green. The honest answer is that the score is not the goal. Google ranks on field data — what real people on real devices experienced — and a lab score is only a proxy for it. Here is the work we actually do, in the order we do it.
Start with field data, not the lab
Before changing anything, pull the Chrome UX Report data for the site. It tells you the 75th-percentile LCP, INP and CLS for real visitors, split by device. Nine times out of ten this reframes the problem: a site with a poor lab score often passes in the field, and a site with a green lab score often fails on mobile.
If you have fewer than 1,000 monthly visitors you will not have CrUX data. In that case, instrument the site yourself with the web-vitals library and send the numbers to your analytics platform. You want two weeks of real traffic before you decide what to fix.
Largest Contentful Paint: it is almost always the image
LCP is the time until the biggest above-the-fold element finishes rendering. On a marketing site that is nearly always the hero image or the hero heading. Four changes cover most of the ground:
Serve the hero image in AVIF or WebP at the size it is actually displayed, not at 2400px wide.
Mark it as high priority so the browser fetches it before anything else on the page.
Preconnect to whichever origin serves it if it is not your own domain.
Make sure the font used by the hero heading loads with a metric-compatible fallback so text paints immediately.
That last point catches people out. If your heading font blocks rendering, the LCP clock keeps running even though the image has arrived. A font-display: swap with a properly sized fallback fixes it, and modern frameworks will generate the fallback metrics for you.
Interaction to Next Paint: audit what runs on load
INP replaced First Input Delay because FID was too forgiving — it only measured the first interaction. INP measures the worst one. The usual culprit is JavaScript that has no business running before the user does something: analytics bundles, chat widgets, cookie banners, carousel libraries.
The fastest script is the one you never ship. Before optimising a third-party tag, ask whether the business still needs it — a surprising number are leftovers nobody has owned for a year.
For what genuinely has to load, defer it until the main thread is idle or until first interaction. Anything that renders below the fold can wait until it is close to the viewport.
Cumulative Layout Shift: reserve the space
CLS is the easiest of the three to fix and the most commonly ignored. Every image and video needs explicit dimensions or an aspect ratio so the browser can reserve the box before the asset arrives. Every element injected after load — banners, ad slots, embedded players — needs a min-height placeholder.
Set width and height attributes on every image, even responsive ones.
Give embeds and iframes a fixed aspect-ratio container.
Never insert content above existing content after page load.
Load web fonts with a fallback whose metrics match, to avoid reflow when the real font swaps in.
What we deliberately skip
Some optimisations look impressive in a report and change nothing for users. Shaving a few kilobytes off an already-small CSS file, inlining every SVG, or chasing a perfect score on a page nobody visits are all poor uses of an engineering week. We would rather spend that week on the checkout flow.
A reasonable target
Passing Core Web Vitals means LCP under 2.5 seconds, INP under 200 milliseconds and CLS under 0.1, at the 75th percentile, on mobile. That is achievable on almost any stack. Beyond it, the ranking benefit flattens out quickly and you are better off writing something worth linking to.
If you want a second pair of eyes on a site that is close but not passing, get in touch — we do fixed-price performance audits and you get the findings whether or not you hire us for the fix.



