Remove Shopify Speed Killers

100% Working Shopify Apps Optimization (Remove Shopify Speed Killers)

Apps are the fastest way to add functionality to Shopify and the fastest way to wreck your store's speed. Every installed app adds JavaScript, CSS, and network requests to your storefront. A store running 20 apps might be loading 600KB of extra code visitors never interact with. The fix is a systematic audit: identify what each app costs you, remove what you do not need, replace heavy apps with lighter alternatives, and lazy load what stays.

600KB
Extra code a 20-app store can load
2-4s
Mobile JS processing time for 400KB of app scripts
10+
Extra network requests from 10 apps
35pts
Typical PageSpeed gap from app bloat

How Shopify Apps Actually Affect Speed

When you install a Shopify app, it does not just sit quietly in your admin. It gets access to your storefront and almost always injects code into your live store pages.

Diagram showing how Shopify apps inject scripts into a storefront with arrows from multiple app icons including reviews app, chat widget, loyalty app, and countdown timer flowing into a browser page showing the stacking effect of JavaScript
How Shopify Apps Inject Scripts Into Your Storefront - each app adds its own JavaScript, and the performance cost stacks with every installation

Apps inject scripts in two ways. The first is through Shopify's ScriptTag API. The app registers a JavaScript file that Shopify automatically adds to every page of your storefront. No theme code required. The app controls when and how its script loads. Most apps default to loading globally, meaning every page, every visitor, every time.

The second method is direct theme injection. During installation, some apps add code directly to your theme.liquid file or specific template files. This gives the app more control over placement and behavior, but it also means the code stays in your theme permanently, even after you uninstall the app.

The performance cost stacks in three layers:

Network Requests

Every app script is a separate HTTP request. Ten apps mean at minimum ten extra network connections. Each connection has overhead: DNS lookup, TCP handshake, TLS negotiation, before a single byte of the script is transferred.

Download Size

App scripts range from a few kilobytes to hundreds of kilobytes. A loyalty program app, a product recommendation engine, and a size guide widget together might add 400KB of JavaScript to every page load.

Execution Time

Downloaded JavaScript has to be parsed and executed by the browser. On a mid-range mobile device, 400KB of JavaScript can take 2 to 4 seconds to process. During this time, taps and clicks feel unresponsive and your INP score climbs.

The compounding effect: Each app looks small in isolation. Five apps that each add 80KB of JavaScript look fine individually. Together they add 400KB before your theme code, your images, or anything else loads. This is what catches most store owners off guard.

How to Audit Your Installed Shopify Apps

A proper audit takes about an hour and gives you a clear picture of what each app costs you in performance terms.

Shopify app audit table infographic showing columns for app name, script size, pages loaded on, and performance cost with some rows highlighted in red as heavy apps and green as lightweight apps
Shopify App Audit Table - build this for your store to see exactly which apps are costing the most performance relative to their value
1
List every installed app
Go to your Shopify admin and click Apps. Write down every app, including ones you installed and forgot about. It is common to find 5 to 8 apps in this list that nobody on the team actively uses.
2
Classify each app by function
Group your apps into categories: revenue-generating (reviews, upsells, subscriptions), operational (inventory, shipping, accounting), customer experience (chat, loyalty, wishlists), and marketing (email capture, pixels, social proof).
3
Find each app's script in your store
Open Chrome DevTools on your homepage. Go to the Network tab and filter by JS. Look at the domain names of every loading script. Each app loads from its own domain. Match each external domain to an installed app. Build a table with: App Name, Domain, File Size, Pages Loaded On, Last Used.
4
Measure the performance cost of each app
Create a duplicate of your theme under Themes > Actions > Duplicate. On the duplicate, disable or remove one app's code. Run Lighthouse on both the live theme and the duplicate. The score difference is that app's real cost. Focus on the five largest scripts you found in Step 3.

How to Identify Heavy Apps

File size is one signal, but it is not the only one. Some apps load small scripts that trigger large external resources. Others load modest scripts but fire dozens of API calls on every page interaction.

Signs an app is disproportionately heavy:

  • It loads on every page without restriction. A review widget has no reason to load on your Contact page or your blog archive. If an app loads globally and only functions on product pages, it is loading 80 to 90 percent of the time for no reason.
  • It loads external fonts or icon libraries. Some apps bundle their own icon font (Font Awesome, Material Icons) rather than using your theme's existing icon system. Loading a 50KB icon font for three icons used inside an app widget is wasteful.
  • It makes API calls on every page load. Social proof notification apps often poll a server every few seconds. This creates ongoing network activity that competes with your page's own resources.
  • It injects large DOM structures. Apps that inject floating buttons, persistent chat windows, or complex overlay widgets add to your DOM size and require layout calculations the browser has to perform on every resize and scroll.
Consistently heavy app categories: Live chat widgets, page builders, loyalty and rewards programs, social proof notifications, and product personalization tools. This does not mean these apps are bad. It means they come with real performance costs you should weigh against their revenue impact.

How to Remove Unused Shopify Apps Safely

Removing apps incorrectly can leave broken code in your theme and orphan scripts that fire against dead URLs.

Before removing any app: Check if the app injected code into your theme files. Go to Online Store > Themes > Actions > Edit Code. Use the search function to look for the app's name or domain. Look in theme.liquid and any template files the app might have modified. Screenshot or copy any code you find before removing the app.

The safe uninstall process:

  1. Open the app in your Shopify admin
  2. Check the app's settings for a "remove code" or "uninstall" option. Some apps offer to clean up their own code.
  3. Go to Shopify admin > Apps and click the trash icon next to the app
  4. Confirm the uninstall
  5. Go back to your theme code editor and search for the app's domain name
  6. Remove any remaining script tags, CSS links, or Liquid code the app left behind
  7. Run a PageSpeed test to confirm the script no longer loads
After removing multiple apps: Search your theme for common orphan patterns. Look for <script src="https:// tags in your theme.liquid that do not match any current app. Look for empty Liquid snippets that apps created. Look for unused CSS files in your assets folder referencing app domains. A store that has cycled through 30 apps over its lifetime can accumulate significant orphan code.

Replacing Apps with Custom Code

Several common app functions can be replicated with small amounts of custom code that add zero external dependencies. This is the most impactful long-term optimization: eliminate the app entirely and own the functionality yourself.

Countdown Timers

A static countdown can be built with 15 lines of JavaScript placed directly in a theme snippet. No external script, no API calls, no ongoing performance cost.

Back-in-Stock Notifications

Shopify has native back-in-stock notification functionality built in for most plan levels. Check Products > Inventory before installing a third-party app for this.

Cookie Consent Banners

A basic GDPR cookie banner is a few lines of HTML, CSS, and JavaScript. Unless you need granular consent management, a custom snippet handles this without an app.

Trust Badges

Static trust badge images embedded in a theme section cost nothing. Upload your badge images to Shopify Files, add them to a custom section, done.

Size Charts

A Shopify metafield or a simple Liquid snippet that renders a table can replace most size guide apps for stores with straightforward sizing information.

Here is a simple countdown timer you can add directly to your theme with no app required:

function startCountdown(endDate, elementId) {
  const timer = setInterval(function() {
    const now = new Date().getTime();
    const distance = new Date(endDate) - now;
    if (distance < 0) { clearInterval(timer); return; }
    const hours = Math.floor(distance / (1000 * 60 * 60));
    const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
    const seconds = Math.floor((distance % (1000 * 60)) / 1000);
    document.getElementById(elementId).innerHTML =
      hours + "h " + minutes + "m " + seconds + "s";
  }, 1000);
}

How to Lazy Load App Scripts

For apps you need to keep, lazy loading shifts their JavaScript from page load time to user interaction time. The script only downloads when the visitor actually needs it.

Illustration showing lazy loading concept for Shopify app scripts with a timeline showing page load on the left and user scroll interaction triggering script load on the right as a before and after comparison
Shopify App Lazy Loading Timeline - scripts load only when the visitor engages, keeping initial page load clean and fast

The most practical approach is interaction-triggered loading: load the app script the first time a user engages with the page, not when the page first loads.

function loadAppScript(src) {
  const script = document.createElement('script');
  script.src = src;
  script.async = true;
  document.head.appendChild(script);
}

// Load chat widget only when user scrolls or moves mouse
let appLoaded = false;
function triggerAppLoad() {
  if (appLoaded) return;
  appLoaded = true;
  loadAppScript('https://chatwidget.example.com/widget.js');
  window.removeEventListener('scroll', triggerAppLoad);
  window.removeEventListener('mousemove', triggerAppLoad);
}

window.addEventListener('scroll', triggerAppLoad, { passive: true });
window.addEventListener('mousemove', triggerAppLoad);
Result: A visitor who lands on your page and immediately bounces never triggers the script load. A visitor who scrolls and engages loads it exactly when they might need it.

For review widgets specifically, load them when the reviews section scrolls into view using Intersection Observer:

const reviewSection = document.querySelector('.reviews-section');
if (reviewSection) {
  const observer = new IntersectionObserver(function(entries) {
    if (entries[0].isIntersecting) {
      loadAppScript('https://reviewapp.example.com/widget.js');
      observer.disconnect();
    }
  }, { rootMargin: '200px' });
  observer.observe(reviewSection);
}

The 200px root margin loads the script 200 pixels before the section enters the viewport, so by the time the visitor sees it, the widget is already loaded.

Shopify App Alternatives Worth Knowing

For the most common heavy apps, lighter alternatives exist. These are apps built with performance as a priority rather than feature breadth.

Reviews

Judge.me is one of the lightest full-featured review apps available. It loads significantly faster than Yotpo, which carries substantial JavaScript overhead. Worth evaluating if you are on a performance-sensitive store.

Email Capture

Shopify's native email capture under Marketing has improved. For basic newsletter signup forms, the native option loads no external scripts. Klaviyo's popup is lighter than many alternatives for advanced needs.

Upsells and Cross-sells

ReConvert and Frequently Bought Together are generally lighter than enterprise-tier upsell platforms. Test the JavaScript impact of any upsell app before committing.

Loyalty Programs

Smile.io and BON Loyalty both run well on most stores. Heavier enterprise loyalty platforms often add significant JavaScript overhead that smaller stores do not need.

Page Speed Optimization

Ecom: Page Speed Expert is purpose-built for Shopify performance. It handles image compression, script management, and performance monitoring without adding the kind of bloat it is designed to remove.

General principle: Always search for the simplest app that does exactly what you need. Feature-rich apps charge their performance cost whether or not you use those features.

How to Test After App Removal

Testing after app changes requires a structured approach. You want to confirm three things: the performance improved, the store still functions correctly, and no orphan code was left behind.

Performance testing: Run Lighthouse on your homepage, product page, and collection page immediately after removing an app. Wait 24 hours and run it again. Shopify's CDN cache clears over time and the second test is often more accurate. Look specifically at:

  • Total Blocking Time (lower is better, reflects fewer render-blocking scripts)
  • Main thread work (should decrease after removing heavy scripts)
  • Number of third-party domains (should match your reduced app count)

Functional testing: Check every page type after each app removal. Homepage, collection, product, cart, and checkout. Click through the buying flow completely. Test on mobile. Open DevTools Console and look for errors after your app removals. A 404 error fetching a script from an app's domain is a sign of leftover code.

Revenue monitoring: Track your conversion rate for 7 to 14 days after significant app removals. If you removed a high-friction app, conversion should improve. If you removed something that was genuinely helping conversion, you will see it in the data quickly enough to reinstall.

How to Monitor App Performance Ongoing

App creep, the slow accumulation of new apps over time, is the reason most stores end up in the situation this guide addresses. Preventing it is easier than fixing it after the fact.

Set an App Cap

Decide your store will run a maximum number of apps. When someone wants to add a new app, they make the case for which existing app it replaces. This forces a real cost-benefit analysis every time.

Monthly Script Audit

On the first of each month, open Chrome DevTools Network tab on your homepage, filter by JS, and count external script domains. If the number is higher than last month, investigate what was added.

48-Hour New App Test

Install the app, configure it, run Lighthouse. If the performance cost is significant and the app is not yet deeply integrated, it is much easier to remove it now than after three months of use.

Quarterly App Review

Every three months, go through every installed app and ask: is this generating measurable value? Has Shopify or our theme added native functionality that makes this app redundant?

Check Google Search Console Core Web Vitals monthly. Real user data in Search Console lags by about 28 days, but it catches performance regressions that lab tests miss. If your INP score shifts from Good to Needs Improvement, cross-reference with any apps installed in the preceding month.

Summary

Apps are not the enemy. Unexamined, unaudited apps are. The difference between a 35 and a 70 on PageSpeed is often 6 to 8 apps loading scripts globally that serve no purpose on most of your pages.

The process is simple: Audit what you have, measure what each app costs, remove what you do not genuinely need, replace heavy apps with lighter alternatives where possible, and lazy load what stays. Then set up monitoring so the problem does not silently rebuild itself over the next 12 months.

Tools like Ecom: Page Speed Expert fit into this workflow by handling the optimization layer that sits between your app stack and your actual page performance. But no optimization tool replaces the discipline of keeping your app list lean in the first place.

Start with your audit today. The data will tell you exactly where to focus.
Retour au blog

Frequently Asked Questions

Every app that injects JavaScript into your storefront adds some overhead. The question is whether that overhead is proportionate to the value the app provides. A review app that adds 60KB of JavaScript and drives a measurable lift in conversion is a net positive. A countdown timer app that adds 40KB for a feature you use once a month is not.

Search your theme code editor for the app's name and domain after uninstalling. Also check theme.liquid for any script tags added during installation. In Chrome DevTools, load your store after uninstalling and look for 404 errors in the Console tab — these indicate scripts being requested from a domain that no longer has your app registered.

It depends on the apps and how they load. A store with 20 apps where each one is page-targeted, lazy loaded, and genuinely lightweight can outperform a store with 8 apps that all load globally. The number matters less than the implementation. That said, fewer apps is almost always easier to maintain and optimize.

Not necessarily. Some heavy apps generate enough revenue to justify their performance cost. The decision should be data-driven: measure the app's revenue contribution, measure its performance cost, and make an informed trade-off. A loyalty program adding 120KB of JavaScript might still be worth running if it drives 15% of your repeat purchase revenue.

Will removing apps affect my SEO?