LCPⓘLargest Contentful Paint — how long the biggest visible thing (usually the hero image) takes to appear. Slow LCP = shoppers think the site is broken.Goal: ≤ 2.5 sHow to act: preload the hero image, defer non-critical scripts, serve images in WebP at the right size.
79%
(N=22,719)
good · 22,719 events ✓ PASS
79% good · 9% NI · 6% poor
CLSⓘCumulative Layout Shift — how much page content jumps around as it loads (a button moving just as you tap it).Goal: ≤ 0.10How to act: set width + height on every image, reserve space for ads/embeds, never inject content above existing elements.
84%
(N=27,165)
good · 27,165 events ✓ PASS
84% good · 5% NI · 7% poor
INPⓘInteraction to Next Paint — how long the page takes to react when a shopper taps or clicks. Slow INP feels laggy.Goal: ≤ 200 msHow to act: break up long JavaScript tasks, defer third-party scripts, lazy-init heavy widgets (carousels, modals).
83%
(N=13,953)
good · 13,953 events ✓ PASS
83% good · 6% NI · 3% poor
FCPⓘFirst Contentful Paint — how long until the shopper sees ANYTHING (often the header or page background).Goal: ≤ 1.8 sHow to act: reduce server response time, eliminate render-blocking CSS/JS in the head, use a CDN.
78%
(N=18,887)
good · 18,887 events ✓ PASS
78% good · 9% NI · 7% poor
TTFBⓘTime to First Byte — how long Shopify takes to respond after the shopper clicks a link.Goal: ≤ 800 msHow to act: minimize Shopify app overhead, cache where possible. Largely determined by Shopify's servers + apps installed.
79%
(N=17,349)
good · 17,349 events ✓ PASS
79% good · 10% NI · 4% poor
INP — Week-over-WeekⓘInteraction to Next Paint — how long the page takes to react when a shopper taps or clicks. Slow INP feels laggy.Goal: ≤ 200 msHow to act: break up long JavaScript tasks, defer third-party scripts, lazy-init heavy widgets (carousels, modals).
83%
good · 13,953 events ✓ PASS
↑ +2.2 pp vs prev 7d
83% good · 6% NI · 3% poor
Prev 7d (5,346 events)
80% good · 12% NI · 7% poor
CLS — Week-over-WeekⓘCumulative Layout Shift — how much page content jumps around as it loads (a button moving just as you tap it).Goal: ≤ 0.10How to act: set width + height on every image, reserve space for ads/embeds, never inject content above existing elements.
84%
good · 27,165 events ✓ PASS
↓ -5.9 pp vs prev 7d
84% good · 5% NI · 7% poor
Prev 7d (16,553 events)
90% good · 5% NI · 5% poor