Performance

Shopify Image & Asset Optimization

On almost every Shopify home page and product page, the hero image is the Largest Contentful Paint element. That makes image delivery — not file size alone — the biggest single lever on your LCP score. We fix what the browser downloads, in what order, and at what dimensions.

Book a Free Technical Call
Shopify image and asset optimisation — responsive srcset delivery, modern formats and a preloaded LCP hero image

Why it matters

Compressing your images is the easy half. Delivering them correctly is the half that moves LCP.

Google treats an LCP under 2.5 seconds as good, and on a Shopify storefront the element being measured is nearly always the hero image or the first product photo. That one request decides the score. Most stores have already run their images through a compression app and assume the job is finished — but compression does nothing about a phone downloading a 2400px file, a hero the browser doesn't discover until late, or a page that jumps because no image declares its dimensions. Those three problems are where the seconds actually sit, and none of them appear in a file-size report.

Sound familiar?

Your photography looks immaculate and your mobile LCP is still over four seconds.

Image problems are invisible from the storefront. The page looks right on your laptop, so nobody investigates until a Search Console email arrives.

  • Your hero image sits inside a slider that only appears once JavaScript has finished running.
  • Merchandising uploads 4000px photographs straight from the studio because nobody ever told them not to.
  • The page visibly jumps as product images arrive, pushing the add-to-cart button down the screen.
  • You believe running everything through a compression app is the whole of image optimisation.
  • Your theme serves one image size to every device, so phones download the desktop file.
  • Search Console reports LCP as poor on mobile while your Lighthouse score looks perfectly healthy.

What's included

What image and asset work covers

Everything between the file your merchandising team uploads and the pixels the browser paints — audited, corrected and verified on real devices.

Identify the real LCP element

Before touching anything, we confirm which element Chrome is actually measuring on each key template. It is usually the hero or the first product image, but on some themes it is a heading or a CSS background image — and optimising the wrong asset is the most common reason a speed project delivers nothing. Home, collection and product are checked separately, on mobile.

Preload and prioritise the hero

The LCP image should be discoverable in the initial HTML and fetched early, with a high fetch priority and a preload where the theme hides it behind CSS or a slider script. Themes routinely bury the hero inside a carousel that only initialises after JavaScript runs, which means the browser has no idea the image exists until well into the load.

Correct srcset and sizes

A responsive image is only responsive if the sizes attribute matches the real layout width. Get it wrong and a phone happily downloads the desktop file — the most common waste we find, and one that costs nothing to fix. We set sensible breakpoints per template, then check what a mid-range Android actually requests rather than trusting the theme's defaults.

Modern formats via Shopify's CDN

Shopify's image CDN handles format negotiation and on-the-fly transforms, serving WebP or AVIF to browsers that support them — provided your theme uses the CDN's parameters instead of hard-coding fixed-width URLs or pulling images from an app's own domain. We find where that pipeline is bypassed and route the assets back through it.

Explicit dimensions, zero layout shift

Every image gets width and height attributes or a CSS aspect ratio, so the browser reserves the space before the file arrives. Google's good threshold for CLS is 0.1, and the usual offenders are unsized product images, promotional banners and app-injected badges that shove content down as they load. Reserving space costs nothing and holds permanently.

Lazy loading, with one exception

Everything below the fold is lazy loaded. The LCP image never is. Adding lazy loading to the hero is the most common own-goal in Shopify performance work, because it tells the browser to deprioritise the exact asset your score depends on. We audit every image tag in the theme, and in app blocks, for that specific mistake.

How it runs

How image and asset work runs.

Two to four weeks of work, depending on catalogue size and how much of the theme touches images. Core Web Vitals are judged on field data — a 28-day rolling window of real visits — so expect the reported numbers to move roughly a month after the changes ship, not the same afternoon.

  1. 01

    Measure and identify

    We capture your current field data from CrUX, then confirm the LCP element on each key template, throttled, on mobile. You get a written list of which assets matter and which are noise before any code changes.

  2. 02

    Fix delivery

    srcset and sizes corrected per template, CDN transforms restored where the theme bypasses them, the hero preloaded and prioritised, and the LCP image explicitly excluded from lazy loading everywhere it appears.

  3. 03

    Stabilise the layout

    Dimensions or aspect ratios on every image, including app-injected ones. Space is reserved for anything that arrives late, so the page stops shifting under the customer's thumb mid-scroll.

  4. 04

    Verify, then wait

    Lab testing confirms the change immediately; field data confirms it over the following month. We hand over upload rules for your merchandising team so the catalogue does not quietly drift back.

< 2.5s

LCP target

Google's good threshold

0.1

CLS target

Dimensions on every image

2–4 wks

Typical engagement

Field data follows ~28 days

AVIF

Modern formats

Served by Shopify's CDN

Straight answer

Image work transforms some stores and barely registers on others.

A good fit if…

  • Your LCP element is an image and your mobile LCP currently sits well above 2.5 seconds.
  • You run image-heavy templates — large heroes, editorial lookbooks, dense collection grids.
  • Your team uploads photography constantly and needs rules that survive after we leave.
  • Layout shift is measurably hurting you: content jumps, mis-taps, CLS above the 0.1 threshold.

Probably not, if…

  • Your field data shows LCP already under 2.5 seconds — spend the budget on INP instead.
  • Your bottleneck is app JavaScript blocking the main thread, not image weight or sizing.
  • You want alt text, file naming and Google Images visibility — that is an SEO engagement.
  • You expect a Lighthouse score of 100; images alone will not get any real store there.

Frequently asked questions

  • Partly, and that partial coverage is what catches people out. Shopify's CDN will serve modern formats and resize on request, but only when your theme asks it to — with the right transform parameters and a correct srcset. Plenty of themes hard-code a single fixed-width URL, and plenty of apps serve images from their own domain entirely outside the CDN. Shopify also cannot decide which image is your LCP element, preload it, or stop your theme from lazy-loading it. Those decisions live in the theme, which is where our work happens.

Hero image dragging your LCP?

Book a 30-minute call. We'll pull your field data live, identify the actual LCP element on your key templates, and tell you whether images are your problem or a distraction from it.

Book a free call