ezomfy
All posts
June 17, 20265 min read

Getting to Lighthouse 90+ on Shopify without a rebuild

Mid-50s to over 90 on mobile without touching the design. The five steps in order, what each is worth, and the three cases where a rebuild genuinely is the answer.

A

Ashraful

Shopify Select Partner

Two colorful lighthouses with a clear blue sky and fluffy clouds, showcasing maritime navigation. — Photo by Jan van der Wolf on Pexels

When a merchant asks us to make their store faster, they usually expect the answer to be a rebuild. It is what they have been told, and it is the most expensive possible answer.

It is also, most of the time, wrong. We have taken stores from the mid-50s to over 90 on mobile Lighthouse without changing the design, the theme, or a single thing a customer would notice.

Here is what that work actually consists of, in the order we do it, so you can judge whether your store needs a rebuild or a week.

When a rebuild genuinely is the answer

Being honest about this first, because the rest of the page is arguing the other way.

Your theme is built on a page builder that outputs bloated markup. Some drag-and-drop builders generate deeply nested containers and inline styles you cannot meaningfully optimise. You can improve at the margins; you cannot get to 90.

Your theme is more than five or six years old. Pre-dating Shopify's Online Store 2.0, it will be missing native lazy loading, modern image handling, and section architecture. At that point you are backporting years of platform improvements one at a time.

The design itself is the problem. A homepage carrying four autoplaying videos and a 40-image carousel is slow because of what it is, not how it is coded.

If none of those describe you, keep reading. Most stores are slow for reasons that are cheap to fix.

Step 1: remove apps

Free, and usually the largest single gain.

Open your store, view source, count the unique third party domains loading. A typical store we audit has 15 to 25. Each one is a DNS lookup, a TLS handshake, and often a blocking request that happens before your product image starts downloading.

Go through your installed apps and ask what would visibly break if you removed each one tomorrow. The honest answer is "nothing" more often than merchants expect. We routinely remove six to eight, and the usual reaction is that they had forgotten it was there.

Look hardest at: popup apps, review apps whose widget you already removed from the theme but whose script still loads everywhere, trust badges, currency converters that only rewrite text, and anything with "speed" or "optimise" in the name.

Typical gain: 15 to 30 points on mobile. Plus $60 to $200 a month back.

Step 2: fix the image markup

Shopify's CDN already serves correctly sized, modern-format images. It only does it if your theme asks properly, and plenty do not.

You need three things on every image: a srcset with real size options so the CDN can serve a phone-sized file to phones, width and height so the browser reserves space and the page does not jump, and loading="lazy" on everything below the fold but never above it.

That last distinction matters more than people realise. Lazy loading your hero or main product image delays the exact thing Google is timing.

Typical gain: 10 to 20 points. It also removes any reason to run an image optimiser app.

Step 3: preload the hero

One line, and consistently the best effort-to-result ratio available:

<link rel="preload" as="image"
      href="{{ section.settings.hero | image_url: width: 1600 }}"
      fetchpriority="high">

Without it, the browser often does not discover your biggest visible image until after it has parsed the CSS or run JavaScript, by which point it is queued behind analytics and app scripts.

Typical gain: 600 to 900ms off LCP on stores where the hero is a CSS background or set by a slider.

Step 4: unblock the head

Anything in the <head> that blocks rendering delays everything.

Third party scripts that do not need to run before paint get defer or async. Analytics, chat widgets, and marketing pixels almost never need to block. Fonts get preloaded and given font-display: swap so text is readable immediately.

Be careful here rather than aggressive. Deferring a script that another script depends on breaks things quietly, and you find out weeks later when your conversion data looks wrong. This is per-script work, which is exactly why the apps that do it with a blanket rule cause problems.

Typical gain: 5 to 15 points, and it is where most of the remaining CLS goes too.

Step 5: clean the tag manager

Nobody owns the tag manager, so tags only ever get added.

Open the container. On a store a few years old you will typically find a pixel from an agency you no longer work with, two heatmap tools, a chat widget from an abandoned trial, and conversion tags for platforms you stopped advertising on.

Delete what is unused. Set the survivors to fire on the pages that need them instead of everywhere.

Typical gain: 0 to 20 points. The most variable item on the list and the most often skipped.

What "95" is actually worth

Being straight about the number in the title: chasing 95 is usually not the right goal.

Lighthouse is a lab score from a simulated device. It varies by several points between runs on the same page. Optimising the last five points is optimising a simulation.

What Google actually uses is field data from real Chrome users, and the thresholds are:

  • LCP under 2.5 seconds
  • CLS under 0.1
  • INP under 200 milliseconds

Hit those three on mobile and you have got the ranking benefit and, more importantly, the conversion benefit. Whether the lab number reads 88 or 96 that day does not matter.

Also: test product pages, on mobile, throttled, and take the median of three runs. Your homepage on desktop office wifi is not a measurement of anything your customers experience.

The realistic outcome

For a store on a reasonably modern theme, the five steps above are typically four to six days of work and land in the high 80s or 90s on mobile, with all three Core Web Vitals inside their thresholds.

For a store on a page builder or a pre-2.0 theme, they get you meaningfully better but not to 90, and at that point a rebuild is a legitimate conversation rather than an upsell.

Either way, the diagnosis costs nothing and you should get it before you commit to a rebuild quote.


We do this as a fixed-price engagement with a Lighthouse 90+ guarantee and a 14 day re-test, normally shipping inside a week. If your store is one of the cases that genuinely needs a rebuild, we will tell you that instead of taking the smaller job.

The free store audit tests your actual product pages on mobile and reports which of these five is costing you most. Or book a 30 minute call.

A

About the author

Ashraful

Shopify Select Partner, Top Rated Plus on Upwork. 700+ Shopify projects shipped over 7+ years: themes, apps, migrations, speed, Hydrogen. Solo shop, no agency middlemen.

Read the full story

Working on a Shopify project?

That's what I do every day. Pick whichever feels lower-friction.