Field data first
Google ranks on field data from real Chrome users, reported in Search Console over a rolling 28 days. We start there, use Lighthouse only to iterate quickly, and judge success by the field numbers moving — LCP under 2.5 s, INP under 200 ms and CLS under 0.1 are the thresholds that count.
The hero image decides LCP
On most stores the largest element is the hero or first product image. Preloading it, giving it fetch priority, never lazy-loading it and serving it at its displayed width usually moves LCP more than any other single change.
Apps decide INP
Interaction to Next Paint suffers when long JavaScript tasks block the main thread. Review widgets, chat, popups and analytics are the usual culprits. We measure each app's real cost, defer what is not needed for the first interaction and remove what nobody uses — including code left behind by apps uninstalled months ago.
- Inventory of every third-party request
- Deferred loading for chat and reviews
- Removal of leftover app code from the theme
Layout shift is reserved space
CLS comes from content inserted into space nobody reserved: images without dimensions, late banners, review stars, cookie bars. Fixing it is mostly declaring sizes and aspect ratios in the theme.
The result goes in the contract
Our engagements carry a written target — Lighthouse 95+ and LCP under 1.5 s — and we report before and after on the same pages, so the improvement is measured rather than claimed.
Keeping it fast
Performance decays with every new app, tag and unoptimised campaign image. Monitoring with an alert on regression turns optimisation from a one-off cost into something that lasts.