Your Shopify store is probably not slow because of Shopify. It is slow because of what has been added to it: the review app you tested in 2023 and never fully removed, the 4,000-pixel hero image straight from the photographer, the three tracking pixels installed by three different freelancers, and a theme that ships code for features you switched off long ago. The platform itself is fast. The pile on top of it is not.
That is good news, because it means most of the speed you are missing is recoverable without a rebuild. This guide walks through the fixes that tend to matter for shoppers, not just for a score, and the order we would tackle them in.
Stop chasing the score, start watching shoppers
The PageSpeed Insights number is a lab test run on a simulated mid-range phone on a throttled connection. It is useful for spotting problems, but it swings from run to run, and a store can score in the 40s while feeling perfectly quick to real customers. Plenty of founders have spent weeks pushing a score from 55 to 80 and seen nothing change in revenue.
What moves conversion is how the page feels to a person on their phone:
- How fast the main content shows up. This is Largest Contentful Paint (LCP), usually your hero image or the main product photo. Google's threshold for good is 2.5 seconds or less.
- How fast the page responds when tapped. This is Interaction to Next Paint (INP). A variant picker that lags or an add-to-cart button that freezes for half a second costs sales. Good is 200 milliseconds or less.
- Whether things jump around while loading. This is Cumulative Layout Shift (CLS). A banner that pops in and shoves the buy button down the page causes mis-taps. Good is 0.1 or less.
Shopify's admin includes a web performance report built on real visitor data for these Core Web Vitals. Start there, because it tells you what actual shoppers experienced, broken down by page type. If your product pages are fine and your collection pages are not, you now know where to spend your time.
Run a 30-minute speed audit before touching anything
Before fixing, find out what you are carrying. This audit needs no developer.
- List every installed app. For each one, write down what it does and whether anyone on the team used it in the last 90 days.
- Test your three most important templates. Run your homepage, your best-selling product page and your biggest collection page through PageSpeed Insights. Note the LCP element it names for each.
- Open the page on your own phone on cellular data. Not on office wifi. Count how long until you could realistically tap add to cart.
- Check the network waterfall. In Chrome DevTools, open the Network tab, reload, and sort by domain. Every domain that is not your store or Shopify's CDN is a third party. Write them down.
- Look at your hero and product images. Check the file sizes of what you uploaded. Anything over roughly 500 KB for a single image is worth questioning.
You will almost always end the audit with a short list of obvious culprits. Now fix them in this order.
The fixes, ranked by payoff
1. Remove apps you are not using, properly
Apps are the most common source of avoidable weight on Shopify stores. Modern apps built on theme app extensions load their code through app blocks and embeds, and most of that code disappears when you uninstall. Older apps often injected snippets directly into theme files, and uninstalling them leaves the code behind, still loading scripts and styles on every page.
For each app you decide to cut:
- Check Online Store > Themes > Customize > App embeds and switch off anything tied to apps you no longer use.
- Ask the app developer, or your developer, whether it left snippets in your theme code. Search the theme for the app's name to find leftovers.
- Uninstall, then re-test the page. Keep a note of what changed so you can prove the win.
Also look for overlap. It is common to find two apps doing the same job, such as a reviews widget plus a separate star-rating app, or a pop-up tool plus an email platform that already has its own sign-up forms. One of them can go.
2. Fix images at the source
Shopify's CDN already does a lot of image work for you. When a theme uses Shopify's image filters correctly, the platform resizes images and serves modern formats like WebP or AVIF to browsers that support them. The problems usually come from how images are uploaded and how the theme requests them.
- Upload sensibly sized originals. A common starting point is around 2,000 to 2,500 pixels on the long edge for product and hero images. Larger files give the CDN more to process and gain you nothing visible on a phone.
- Do not lazy-load the hero. Lazy loading is right for images further down the page, but if your LCP image is lazy-loaded, the browser waits to fetch the most important picture on the page. The first visible image should load eagerly, ideally with a high fetch priority.
- Swap heavy hero videos and slideshows. An autoplaying video or a five-slide carousel above the fold is often the single biggest LCP problem. A strong still image usually converts at least as well and loads far faster. If you keep video, use a light poster image and load the video after the page is usable.
- Set image dimensions. Images without width and height reserve no space and cause layout shift as they load. Most current themes handle this, but custom sections added later often do not.
3. Cut theme bloat
Themes are built to serve thousands of stores, so they ship features you may never use. Over time, customizations pile up too: custom sections from an old campaign, duplicate CSS, a mega-menu script loading on pages that do not need it.
- Check your theme version. If you are on an old vintage theme that predates Online Store 2.0, you are likely missing years of performance work. Moving to a current theme is sometimes the biggest speed fix available.
- Remove unused sections and blocks from templates. A hidden section can still load its assets depending on how it was built.
- Audit custom code. Ask your developer to look for large JavaScript libraries loaded site-wide for one feature, such as a full slider library used on a single landing page.
- Limit fonts. Each font family and weight is another file. Two families with two or three weights each is plenty for most brands. Shopify's font library serves fonts from its CDN, which is usually better than loading them from an outside service.
4. Tame third-party scripts
Tracking pixels, chat widgets, heatmap tools, loyalty programs and pop-ups all compete for the browser's attention, and they are the usual cause of poor INP. The page looks loaded, the shopper taps, and nothing happens because the browser is busy running someone else's code.
- Move tracking to Shopify's Customer Events. Pixels added through the admin's Customer Events area run in a sandbox rather than directly in your theme, which keeps them from blocking the page. Many ad platforms also have official Shopify apps that connect through server-side integrations.
- Delay what can wait. A chat widget does not need to load before the shopper has seen the product. Load it after the page is interactive, or on first scroll.
- Question every tool. If nobody has looked at the heatmap tool's data this quarter, remove it. You can add it back for a two-week study when you need it.
A sample two-week speed sprint
Here is how a focused sprint typically runs for a small to mid-size store. Timelines shift with store complexity, but the order holds.
| Days | Work | Who | Check |
|---|---|---|---|
| 1 to 2 | Audit apps, templates, third parties and images | Store owner or marketer | Written list of culprits |
| 3 to 4 | Remove unused apps and leftover code, turn off stale app embeds | Owner plus developer | Re-test the three key templates |
| 5 to 6 | Re-export oversized images, fix hero loading, replace hero carousel or video if needed | Designer plus developer | LCP element and timing in lab test |
| 7 to 9 | Move pixels to Customer Events, delay chat and pop-ups | Developer | Responsiveness on a real phone |
| 10 to 12 | Theme cleanup: unused sections, heavy scripts, fonts | Developer | Lab tests plus visual QA on all templates |
| 13 to 14 | Duplicate the theme, QA on mobile and desktop, publish | Whole team | Checkout, cart and search still work |
Always work on a duplicate of your live theme, not the published one. It gives you a clean rollback and lets you compare before and after side by side.
Things that rarely help as much as promised
A few common suggestions are worth skipping or treating with caution:
- Speed booster apps. Adding an app to make your store faster is often a contradiction. Some do useful things like image compression, but many add their own scripts. Fix the causes instead.
- Removing everything below the fold. Your reviews, FAQs and trust content sell the product. Lazy-load them, do not delete them.
- Obsessing over desktop. For most DTC brands, the majority of sessions come from phones. Test mobile first.
Measuring the win
Real-user data takes time to update. Core Web Vitals field data is typically reported as a rolling 28-day window, so give it about four weeks before judging. In the meantime, compare conversion rate and add-to-cart rate for the four weeks before and after, segmented by mobile, and watch for bounce rate changes on the templates you fixed. Mark the release date in your analytics so you can see it later.
If the numbers do not move, speed may not have been your bottleneck, and that is worth knowing too. The next place to look is usually the page itself: the product story, the offer, and the layout. Well-built custom Shopify sections can add content like size guides and comparison blocks without piling on more apps.
When to bring in help
You can handle the audit, the app list and the image re-exports in-house. Theme cleanup, leftover app code and script loading are where a developer earns their fee, because a careless edit can break cart or checkout behavior. If your store needs a proper performance pass or a move to a current theme, our web development team can audit what you are running, fix it on a duplicate theme and hand it back with a clear before-and-after.