If your Shopify store feels so slow that pages crawl on mobile, the cause is almost never Shopify itself — it’s what’s been layered on top of the theme. Third-party scripts, app embeds that load on every page, oversized images and video, extra web fonts, and render-blocking code stack up until the browser spends seconds working before the shopper sees anything. The fix is not to guess and start deleting. Measure first with a real tool, rank the causes by how much time each one actually costs, then fix the biggest offenders. Here are the 12 most common causes, in order of impact.
First: measure before you optimize
You cannot fix what you haven’t measured. Run your homepage, a collection page, and a product page through PageSpeed Insights or Lighthouse (in Chrome DevTools) and read the field data and the waterfall, not just the score. The waterfall shows you exactly what loads, in what order, and what blocks rendering — large images near the top, long JavaScript tasks, and rows of third-party domains are your suspects.
Test on a real mid-range phone on a normal mobile connection, not just your fast desktop on office Wi-Fi. Most of your traffic is mobile, and that’s where a slow store loses the most money. For the metrics that matter — LCP, CLS and INP — see our guide to Shopify Core Web Vitals.
Why it matters
Speed is not vanity. A slower store converts worse: every extra second before a shopper can interact is a share of them leaving. It also quietly taxes your paid traffic — if your landing pages are slow, you pay for the click and then lose the visitor before the page is usable, so your cost per acquisition rises even though nothing about the ad changed. If you want a rough sense of the money at stake, our slow-site revenue loss calculator shows what a given delay can cost at your traffic and conversion rate.
The 12 causes, ranked by impact
Ordered by how much they typically hurt a Shopify storefront. Yours may differ — that’s what measuring is for — but this is a reliable starting order.
- Third-party scripts and tags. Chat widgets, reviews, upsell tools, A/B testers, ad pixels loaded outside the theme. These are usually the single heaviest cause because they block the main thread and often pull in more scripts of their own. Fix: list every tag, keep only what earns its place, and load non-critical scripts with
defer/asyncor after interaction. - App embeds that run on every page. Apps inject code sitewide even where their feature never appears — a wishlist script on a page with no wishlist. Fix: audit each app’s real weight and scope; disable embeds on pages that don’t use them.
- Oversized images. Uncompressed hero images and product photos are the classic LCP killer. Fix: serve properly sized, compressed images (Shopify does WebP automatically when you use its image tags), and add
loading="lazy"to anything below the fold. - Video. Autoplaying background video and embedded YouTube/Vimeo players pull in large payloads before the page is usable. Fix: use a poster image and load the player on click, or drop autoplay video above the fold entirely.
- Too many web fonts. Each font family, weight and style is another file, and the wrong loading strategy hides your text while they download. Fix: limit to two families and the weights you actually use, self-host or preload the critical one, and set
font-display: swap. - Render-blocking CSS and JavaScript. Stylesheets and scripts in the
<head>that the browser must fetch and run before it can paint. Fix: defer non-critical JS, inline critical CSS, and remove blocking resources you don’t need. - Heavy theme code. Bloated or heavily customized themes ship large CSS/JS bundles and do expensive Liquid work. Fix: trim unused sections and snippets, or move to a lean, well-built theme.
- A large DOM. Mega-menus, giant product grids and deeply nested sections create thousands of nodes the browser must lay out and re-layout. Fix: paginate or lazy-render long lists and simplify nesting.
- Unoptimized apps left behind. You uninstall an app but its snippets, assets and embeds stay in the theme, loading forever. This is one of the most common hidden causes — see leftover Shopify app code. Fix: remove orphaned code after every uninstall.
- Sliders and carousels. Homepage sliders load every slide’s image up front and ship a JS library to animate them. Fix: lazy-load off-screen slides, or replace the slider with a static hero.
- Popups. Email, discount and exit-intent popups add scripts that often run early and block interaction. Fix: keep one, load it after the page is interactive, and cut the rest.
- Excessive tracking. Stacking GA, GTM, multiple ad pixels, heatmaps and session recorders multiplies network requests and main-thread work. Fix: consolidate through one tag manager and keep only the tracking you actually use for decisions.
For the step-by-step version of these fixes with settings and examples, read how to speed up your Shopify store.
How to test changes safely
Never experiment on your live theme. In Shopify admin, go to Online Store → Themes, Duplicate your live theme, and make changes on the copy. Then measure the duplicate the same way you measured the original and compare — same pages, same device, same tool. To confirm a single suspect (an app or a tag), disable just that one thing on the duplicate and re-test: the difference is its real cost. When a change proves out, publish the duplicate. This isolates cause and effect and means a bad edit never touches shoppers.
Common mistakes
- Chasing a perfect score. A green 100 in Lighthouse is not the goal — a fast experience for real shoppers is. Fix the causes that move LCP and INP; ignore lab points that don’t change what a visitor feels.
- Removing revenue-critical apps blindly. The slowest app might also be the one driving your reviews or upsells. Weigh performance cost against the revenue it earns, and replace rather than just delete when the feature matters.
- Optimizing one page. The homepage looks great, but product and collection pages — where people actually buy — are still slow. Measure the templates that convert.
- Editing the live theme. Always work on a duplicate.
When to get help
If you’ve measured, fixed the obvious images and scripts, and the store is still slow — or you’re staring at a waterfall you can’t interpret — that’s the point to bring in someone who does this daily. A performance audit finds the causes hiding in theme code and app leftovers that a settings pass won’t catch, and ranks them so you spend effort where the speed win is biggest. See how Profit Flow can speed up your store, or start with a free profit audit.
Store still slow? Send us your store URL — we’ll measure it, rank the causes by impact, and tell you exactly what to fix first for the biggest speed win. See how we speed up Shopify stores or get a free profit audit.