Core Web Vitals on Shopify: what genuinely moves the needle
After remediating dozens of storefronts, the pattern is clear. Three fixes deliver roughly 80% of the gain, and none of them involves installing a speed app.
Every slow Shopify store I have audited believed its problem was unique. It never was. After years of performance remediation across themes, apps, and headless builds, the same three culprits appear in nearly every waterfall, and addressing them delivers most of the win.
1. The app tax
The average established store runs more than 20 apps, and most inject JavaScript into every page whether it is used there or not. A review widget loads on your policy pages. A quiz app loads in your checkout. Each one is a render-blocking tax on every session.
The fix is unglamorous and effective. Audit every script tag, map it to genuine revenue, and remove or defer everything that cannot justify itself. On one eight-figure beauty brand, this alone reduced the JavaScript payload from 2.8MB to 900KB. There was no redesign and no replatform, only subtraction.
2. Images that fight the layout
LCP on commerce sites is almost always a product or hero image. The failures are predictable: images served at twice the rendered size, no priority hints on the LCP element, carousels that lazy-load the first slide, and layout shift from containers without aspect ratios.
Shopify's image CDN is excellent, yet most themes do not use it well. Serve the exact rendered size per breakpoint, preload the LCP image, set explicit dimensions everywhere, and never lazy-load above the fold.
3. Fonts and the flash of nothing
Custom fonts loaded from third-party origins block text paint. Self-host through Shopify's CDN, or use next/font on headless builds, subset aggressively, and apply font-display: swap with metric-compatible fallbacks so that the swap does not shift the layout.
Treat speed as a revenue metric
The reason performance work stalls is not technical but organisational. Nobody owns the milliseconds. The programmes that succeed set a performance budget (170KB of JavaScript on the critical path is a sensible start), enforce it in CI, and report speed alongside revenue in the same dashboard. When LCP appears beside conversion rate, it stops being an engineering vanity metric and becomes what it always was, which is money.
Written by
Akshay Vaghasiya
Full Stack Commerce Engineer · Freelance eCommerce Consultant · Shopify Select Partner. Building commerce systems that are fast for humans and legible to machines.
Read next
B2B on Shopify Plus: lessons from a $40M migration