Key takeaways
- The top causes of slow Shopify stores: large images, too many app scripts, render-blocking JavaScript, and outdated themes.
- Check your speed: use Shopify’s Web performance reports (Analytics → Reports) and PageSpeed Insights.
- Image optimization alone typically improves load time more than any other single change.
- Fudge writes native Shopify code without the external script overhead that slows app-dependent stores down.
To speed up a Shopify theme, compress images, remove apps you no longer use, defer render-blocking scripts and lazy load everything below the fold. Each extra second of load time costs conversions, most of all on mobile. For how real stores across the ecosystem actually score, see our State of Shopify Performance 2026 report.
How do I improve my Shopify speed?
Start by measuring. Then fix the biggest problems first.
Check your current speed
Shopify’s Web performance reports: go to Analytics → Reports and search for the web performance report you want. They show your store’s real-user Core Web Vitals (LCP, INP and CLS), rated Good, Moderate or Poor. The Online Store → Themes page also shows a summary that links to each report.
PageSpeed Insights: Run your homepage, a product page, and a collection page at pagespeed.web.dev. The mobile score is what matters most - desktop performance is usually much better. For slow phones specifically, see Shopify Mobile Speed.
Lighthouse in Chrome DevTools: F12 → Lighthouse tab → Generate report. More detailed breakdown than PageSpeed Insights with specific opportunities listed by impact.
Why is Shopify so laggy?
If your store feels sluggish, here are the most common causes ranked by how often they’re the culprit:
1. Oversized images. A 4MB hero image. Product images uploaded from a DSLR at full resolution. This is the #1 performance issue in most Shopify stores. A 2000px-wide image shown at 400px downloads about 25 times more pixels than the screen uses.
2. Too many apps. Every app adds JavaScript. 15 installed apps can mean 15 separate external script requests before your page loads. Even apps you never open slow your store if their scripts are still loading.
3. Render-blocking scripts. Scripts in <head> without async or defer freeze page rendering while they download. See our guide on render-blocking scripts.
4. An old or bloated theme. Older Shopify themes (pre-2.0) weren’t built for performance. Dawn scores well; older premium themes often don’t.
5. Embedded video not lazy loaded. YouTube iframes load megabytes of scripts from Google’s servers. Without the facade pattern, every page with an embedded video has a significant performance penalty. See: Lazy Load Videos in Shopify.
Fix 1 — Compress images before uploading
This is the highest-impact change for most stores. Target sizes:
- Hero/banner images: under 300KB, maximum width 2000px
- Product images: under 200KB each
- Collection thumbnails: under 80KB
Tools:
- Squoosh.app — free, browser-based, excellent compression with quality preview
- TinyPNG — free, drag and drop, good for PNGs
- Adobe Photoshop / Lightroom “Export for Web” — for bulk processing
Use WebP format. WebP images are typically 25-35% smaller than JPEG at equivalent quality. Shopify’s CDN serves WebP automatically to supporting browsers, but you can also upload WebP directly.
For the full walkthrough, see How to Compress Images in Shopify.
Fix 2 — Audit and remove unused apps
Go to Apps in your Shopify admin. For each app, ask: “When did I last actively use this?” If the answer is “months ago” or “I’m not sure,” uninstall it.
After uninstalling, clean up any leftover code with our guide to removing leftover app code from Shopify.
Rule of thumb: every app you remove that had a script tag in theme.liquid removes one external HTTP request and potentially 20-200KB of JavaScript.
For theme code you no longer need, see How to Remove Unused Code in Shopify.
Fix 3 — Add lazy loading to images
Check if your theme already includes loading="lazy" on product and collection images. Modern themes do. If not, add it to image tags in your section files.
Never lazy load your hero image — that’s your LCP element and must load immediately. If yours is, see Fix Hero Banner Eager Loading in Shopify.
For the full walkthrough, see How to Lazy Load Images in Shopify.
Fix 4 — Fix render-blocking scripts
Run PageSpeed Insights and look under “Opportunities” for “Eliminate render-blocking resources.” It will list specific scripts.
For each: add defer if it’s a theme script, async if it’s an analytics or marketing script. Full guide: How to Optimize Render-Blocking Scripts in Shopify.
Fix 5 — Use a fast base theme
If your current theme scores below 40 on mobile PageSpeed after the above fixes, consider switching to a faster theme.
Fast themes to consider:
- Dawn — Shopify’s official free theme, consistently scores 90+ on mobile PageSpeed
- Craft — built on Dawn architecture, clean performance
- Sense — same architecture, strong default scores
The performance difference between a well-built theme (Dawn: 90+) and an older premium theme (50-60) is significant and hard to recover through optimization alone.
Why Fudge is faster than app-based customization
Most Shopify store “features” — countdown timers, sticky CTAs, announcement bars, FAQ sections — are added via apps. Each app adds external scripts and styles.
Fudge, the AI operator for Shopify stores, builds these same features as native Liquid/HTML/CSS code directly in your theme. No external script requests. No app JavaScript loading on every page: each feature loads only where it’s used.
A sticky add-to-cart bar built with Fudge adds negligible performance overhead. The equivalent app-based solution adds a script tag, an external API call, and potentially additional CSS conflicts.
That’s how stores use Fudge to replace several single-purpose apps. You don’t have to know where to start, either: ask Fudge for a speed audit and it lists what’s slowing your pages down and drafts the fixes in your theme for you to approve. After you uninstall an app, it can also find the code the app left behind and draft a clean-up.
What to track after making performance improvements
Run PageSpeed Insights before and after each change and note the scores. The specific metrics to track:
- LCP (Largest Contentful Paint) - should be under 2.5 seconds (good)
- INP (Interaction to Next Paint) - responsiveness to taps and clicks, should be under 200ms (good). In PageSpeed’s lab test, TBT (Total Blocking Time) under 200ms is the stand-in.
- CLS (Cumulative Layout Shift) - layout stability, should be under 0.1 (good)
These three are Google’s Core Web Vitals and affect your search ranking in addition to user experience.
Once the basics are done, two advanced levers are worth a look: the Speculation Rules API on Shopify, which prerenders the next page before the shopper clicks, and service workers for Shopify, which are riskier and worth reading up on before you try one.
For smaller CSS and JavaScript files, see How to Minify CSS and JavaScript in Shopify.
FAQ
What's a "good" mobile PageSpeed score for a Shopify store?
90+ is excellent (rare on real-world stores), 70–89 is solid, 50–69 is the average for app-heavy stores, under 50 needs immediate work. Dawn ships with 90+ scores; most established stores running 5–10 apps land in the 50–75 range. Don't chase 100 — diminishing returns past 85.
How long does it take to see speed improvements after fixes?
PageSpeed Insights reflects changes immediately on the next test. Real-user metrics (Core Web Vitals from Search Console) lag 28 days because they're a rolling 28-day average. Don't judge improvements from a single PageSpeed run — test multiple times and look at trends, not single scores.
Will switching to a faster Shopify theme lose my customizations?
Theme Editor settings (colors, fonts, sections, content) don't carry across themes — they're stored per-theme. You'll have to rebuild the homepage and other customized pages on the new theme. Direct code edits also don't transfer. Plan a migration: rebuild on the new theme as a draft, then publish when ready.
Should I worry about desktop speed at all?
Less than mobile, but yes. Most traffic on most stores is mobile, so mobile is priority. Desktop optimization is usually free if you optimize for mobile (compressed images, fewer scripts apply to both).
Can speed optimizations break my Shopify apps?
Possibly. Aggressive optimizations like deferring all scripts, removing what looks like unused code, or stripping inline styles can break apps that depend on specific load order or markup. Always test apps after major optimization rounds — checkout, reviews, search, cart drawer — to confirm they still work. The deeper fix is replacing app widgets with native theme features: describe the feature you have today to Fudge and it builds it as native theme code, removing the app's script weight entirely.