# Does Shopify Compress Images? What We Measured {#post-title}

[XSeo](/blog/#blog-xseo)

By [B2B Gold](/about/#how-we-write) Published 6 November 2026

## Does Shopify compress images? {#does-shopify-compress-images}

Shopify doesn’t compress the images you upload, but its CDN sends browsers a resized copy, as WebP or AVIF when they accept them. In our test, Chrome’s 400 px copies weighed 11 to 28 KB, from originals of 124 KB to 14 MB. The original’s size still matters where a page asks for the full-size file, as product zoom can.

> **Note:** The Shopify and Google pages cited in this guide were checked on 6 November 2026, the day we ran the tests below.

Shopify says it plainly: “Images aren’t compressed when you upload them to the Shopify admin” ([Shopify Help Center: theme images](https://help.shopify.com/en/manual/online-store/images/theme-images)). The same page puts the compression on the way out: images served through your theme may be compressed, Shopify picks the file format for each delivery, browsers that support WebP or AVIF get those formats, and you don’t need to compress images before uploading.

Themes ask for each image at the width they need. Shopify’s `image_url` Liquid filter takes a width of up to 5,760 px and never makes an image larger than its original. It chooses the format from what the browser supports, and its `format` parameter can only ask for JPEG (`jpg` or `pjpg`). Its output isn’t guaranteed to be byte-identical to your file ([shopify.dev: image_url](https://shopify.dev/docs/api/liquid/filters/image_url)).

## What does Shopify’s CDN actually send? {#what-does-shopifys-cdn-actually-send}

Shopify’s CDN sent a new copy at whatever width we asked for: WebP to Chrome in almost every case, and the original format to software that didn’t ask for WebP. We requested four public images on Shopify’s own Dawn and Horizon theme demo stores: two JPEG product photos and two photos saved as PNG.

Each image was requested 400, 800 and 1,600 px wide and with no width, which returns the full-size file. Each went out with four `Accept` headers: Chrome’s, one with WebP but not AVIF, JPEG only, and `*/*` (any format, curl’s default). Every request ran twice, and both rounds returned identical bytes. Here, 1 KB is 1,000 bytes.

**What Shopify's CDN sent for one product photo, by width** KB

What Shopify's CDN sent for one product photo, by width. Chrome (got WebP): 400 px 18 → Full size (2,000 px) 500, max 500; JPEG only (got JPEG): 400 px 23 → Full size (2,000 px) 542, max 542

Source: [B2B Gold, requests to Shopify's CDN](https://b2bgold.app/data/shopify-image-compression/2026-11-cdn-test.csv), checked 6 November 2026. A Horizon demo store product photo stored as a 542 KB JPEG, 2,000 × 2,667 px. A browser with WebP but not AVIF got the same files as Chrome.

Show the data

| Width requested | Chrome (got WebP) | JPEG only (got JPEG) |
| --- | --- | --- |
| 400 px | 18 | 23 |
| 800 px | 76 | 87 |
| 1,600 px | 337 | 363 |
| Full size (2,000 px) | 500 | 542 |

| Image as stored | 400 px, Chrome | 1,600 px, Chrome | Full size, Chrome | Full size, other software |
| --- | --- | --- | --- | --- |
| Horizon product photo: JPEG, 2,000 × 2,667 px, 542 KB | 18 KB WebP | 337 KB WebP | 500 KB WebP | 542 KB JPEG |
| Dawn product photo: JPEG, 1,600 × 1,600 px, 124 KB | 13 KB WebP | 81 KB WebP | 79 KB WebP | 114 KB JPEG |
| Dawn video cover: PNG, 1,999 × 871 px, 1,945 KB | 11 KB AVIF | 60 KB WebP | 73 KB WebP | 1,145 KB PNG |
| Horizon banner: PNG, 3,072 × 2,048 px, 13,956 KB | 28 KB WebP | 336 KB WebP | 1,641 KB WebP | 13,518 KB PNG |

“Other software” is a request that accepts only JPEG, or any format: both got the same file. What the four images show:

- **The width does most of the work.** The Horizon photo went from 18 KB at 400 px to 500 KB at full size, in the same format.
- **WebP almost every time.** Chrome got WebP for every image and width but one: AVIF for the Dawn PNG at 400 px. Shopify’s WebP copies of the two JPEG photos were 7% to 38% smaller than its JPEG copies at the same width.
- **Full size follows the stored JPEG.** At full size, Chrome got 92% of the Horizon photo’s stored bytes and 64% of the Dawn photo’s. A JPEG-only request got 541,832 bytes for a file stored at 541,846.
- **A photo saved as PNG stays a PNG for software that doesn’t ask for WebP:** 7 to 16 times the size of the WebP, up to 13.5 MB at full size.

## How much smaller are WebP and AVIF than JPEG? {#how-much-smaller-are-webp-and-avif-than-jpeg}

In our test, AVIF beat JPEG’s quality score with 32% to 46% fewer bytes, while WebP matched it only at about the same file size. A quality number means little across formats: WebP at 75 was half the size of JPEG at 75, and it scored 10 points lower.

This is our test with the sharp image library, not Shopify’s encoder and not XSeo’s. We scaled one CC0 photo of a hand-knitted dog jumper ([Wikimedia Commons, by Sciencia58](https://commons.wikimedia.org/wiki/File:Dog_sweater_2.jpg)) to 2,048 × 1,431 px and saved it at each setting. SSIMULACRA 2 scored each file against that scaled photo: 90 means visually lossless, 70 high quality, with flaws you can see but that don’t bother you ([SSIMULACRA 2](https://github.com/cloudinary/ssimulacra2)).

| Format and quality | File size | SSIMULACRA 2 score |
| --- | --- | --- |
| JPEG 95 | 862 KB | 88.1 |
| JPEG 85 | 400 KB | 82.0 |
| JPEG 75 | 269 KB | 76.0 |
| JPEG 60 | 184 KB | 68.0 |
| WebP 85 | 267 KB | 75.8 |
| WebP 75 | 132 KB | 66.1 |
| AVIF 65 | 183 KB | 77.3 |
| AVIF 50 | 100 KB | 70.0 |

At 100%, the four crops look alike at a glance. Up close, JPEG 60 shows faint square blocks in the dark knit, and WebP 75 and AVIF 50 smooth away the yarn’s fine grain. The JPEG 95 file is more than eight times the size of the AVIF 50 one. [The four crops as a lossless PNG](/data/shopify-image-compression/2026-11-crops.png) show the exact pixels; this page re-encodes images.

On a Shopify store, the format is chosen for you at delivery, so converting originals to WebP yourself buys browsers little: they already get WebP or AVIF. The levers you control are the original’s pixel size and the quality you save it at, and they show most where the full-size file is served.

## When does compressing the original still help? {#when-does-compressing-the-original-still-help}

Compressing or resizing the original helps where Shopify serves the full-size file, and where software that doesn’t ask for WebP gets your original format. Where a theme asks for a smaller width, Shopify makes its own copy: at 400 px, Chrome got our two product photos at 13 and 18 KB, from stored files of 124 KB and 542 KB.

| Situation | What we found | Does a lighter original help? |
| --- | --- | --- |
| A theme asks for a width below the original | A new copy at that width, made by Shopify | Probably little; not tested |
| Product zoom on a large or high-density screen | Dawn’s default zoom, **Open lightbox**, offers sizes up to 4,096 px plus the full-size file ([Dawn’s code](https://github.com/Shopify/dawn/blob/3e9ee2281dc40e1eda9d5fd3ca64719d0a36b47d/snippets/product-media.liquid)). Horizon photo, full size in Chrome: 500 KB from 542 KB | Yes |
| The image shared on social networks | Dawn’s `og:image` is the image with no width ([Dawn’s code](https://github.com/Shopify/dawn/blob/3e9ee2281dc40e1eda9d5fd3ca64719d0a36b47d/snippets/meta-tags.liquid)) | Yes; the format each network gets wasn’t tested |
| Software that doesn’t ask for WebP | The original format: at full size, 59% to 100% of the stored size (the PNG photos: 1.1 MB and 13.5 MB) | Yes. For a photo saved as PNG, re-saving it as JPEG matters most |
| An image address with no `width=` | The full-size file, as for every no-width request above | Yes |

Dawn’s product gallery never asks for more than 1,946 px ([Dawn’s code](https://github.com/Shopify/dawn/blob/3e9ee2281dc40e1eda9d5fd3ca64719d0a36b47d/snippets/product-thumbnail.liquid)), so an original at 2,048 px covers it. What we couldn’t test is whether a lighter original also makes Shopify’s smaller copies lighter: that needs uploading the same photo twice, and these tests were read-only.

## What size should product images be? {#what-size-should-product-images-be}

For square product images, Shopify says 2,048 × 2,048 px usually displays best; product and collection images can be up to 5,000 × 5,000 px or 25 megapixels, and must be under 20 MB ([Shopify Help Center: product media types](https://help.shopify.com/en/manual/products/product-media/product-media-types)). Shopify’s theme images page sets 20 megapixels and 20 MB as the upload limits, so staying under both is safe.

Shopify’s help disagrees about format. The product media page calls PNG the best file type for most product images; the theme images page recommends JPEG for product images and PNG for graphics with flat colours. Our measurement sides with JPEG for photos: software that didn’t ask for WebP got the two PNG photos as PNG, at 7 to 16 times the size of Chrome’s WebP.

To see an image’s format, pixel size and file size, click it in the product’s media: the **Details** line shows them. The same editor has **Resize**, which changes the image’s actual pixel size ([Shopify Help Center: media editor](https://help.shopify.com/en/manual/shopify-admin/productivity-tools/media-editor)).

## How do you find images that slow a page? {#how-do-you-find-images-that-slow-a-page}

To find the images that slow a page, run it through PageSpeed Insights and read the **Improve image delivery** insight, then check Shopify’s web performance reports for what real visitors experience. To find your heaviest originals, sort Content › Files by size.

- **PageSpeed Insights.** Its lab test runs Lighthouse ([about PageSpeed Insights](https://developers.google.com/speed/docs/insights/v5/about)), which includes Chrome’s performance insights. **Improve image delivery** lists images whose estimated savings reach 4 KiB, from compression, a modern format, a size closer to the one displayed, or video instead of a large animation ([Chrome for Developers: Improve image delivery](https://developer.chrome.com/docs/performance/insights/image-delivery), published 8 October 2025).
- **Shopify’s web performance reports.** They show loading (LCP), responsiveness (INP) and layout shift (CLS) from real visitors over the past 30 days: a summary under **Online Store**, and the reports in **Analytics** › **Reports**. A store in private mode may have no metrics ([Shopify Help Center: web performance reports](https://help.shopify.com/en/manual/online-store/web-performance/web-performance-reports)).
- **Files.** In **Content** › **Files**, sort by **Size**, **Largest first** ([Shopify Help Center: Files](https://help.shopify.com/en/manual/shopify-admin/productivity-tools/file-uploads)). Shopify says files uploaded directly to product pages might not show there.
- **The image’s address.** In your browser’s developer tools, an image address with no `width=`, or a width above the image’s own, returns it at full size.

## How do you compress originals with an app? {#how-do-you-compress-originals-with-an-app}

XSeo, which we build, compresses the product images and other images in your Shopify Files in place, at the same links, and lets you preview any result at actual size first. It keeps each original for 60 days while it’s installed, and it keeps each image’s format: Shopify already converts at delivery.

1. Open **Images** in XSeo. It reads your images, biggest first, and estimates what you could save; reading changes nothing.
2. Pick a **Compression** level: **Best quality**, **Balanced (recommended)** or **Smallest files**. In **Settings** → **Images**, **Largest image size** sets the longest side: 1,600, 2,048, 2,560 (the default) or 3,200 px. Bigger images are scaled down; smaller ones are never enlarged.
3. Click **Preview** on an image. XSeo makes the lighter copy from the exact original, in your browser; compare **Original** and **Optimized** at **Actual size**, then click **Replace in store**.
4. For many images, click **Optimize all**. Your browser does the work one image at a time, so keep the page open until it finishes.

- **Same place, same format.** Each image keeps its link, its place in the gallery, its variant images and its alt text. JPEG stays JPEG, PNG is compressed without loss, WebP stays WebP; GIF, HEIC and SVG are left as they are. An image a lighter copy would barely shrink is marked **Already optimal**.
- **Restore.** **Restore**, **Restore selected** and **Restore all** put back the exact original, byte for byte, for 60 days while XSeo is installed. If you uninstall, originals are deleted 48 hours later. A daily **Backup check** restores a test image of XSeo’s own to check that backups work.
- **Google’s numbers, before and after.** **Results** → **Store speed** runs PageSpeed Insights on your home page, a product page and a collection page before and after XSeo optimises images, and shows the middle result of 3 tests. If a score didn’t improve, it lists what else slows the page, usually the theme or other apps.

Going by our measurements, a lighter original matters most for zoom, sharing images and software that doesn’t ask for WebP. XSeo doesn’t convert formats or rename files, and it promises no score. A photo saved as PNG stays a PNG, compressed without loss; to make it a JPEG, export it again and upload it yourself. The details are in [how XSeo compresses images in place](/docs/xseo/image-compression/) and [XSeo’s Results and speed checks](/docs/xseo/results/).

> **Tip:** [XSeo, which compresses Shopify images in place and keeps each original for 60 days](/shopify/xseo/), is free: since its launch on 6 November 2026, every feature is included.

## How we measured {#how-we-measured}

- **Shopify’s CDN.** 128 requests on 6 November 2026, 11:57 to 12:03 UTC, at least 1.5 seconds apart, made with curl from Vietnam and all answered by Cloudflare’s Singapore edge. Stored sizes are the ones Shopify’s image service reports with each response.
- **Limits.** One day, one edge, four files, and nothing uploaded. Shopify can change its formats and quality settings at any time.
- **Encoders.** One CC0 photo scaled to 2,048 × 1,431 px and saved with sharp 0.35.4 (libvips 8.18.6) at default settings apart from quality, scored with SSIMULACRA 2 from jpeg-xl 0.12.0. Other photos give other numbers.
- **Data:** [requests to Shopify’s CDN, 6 November 2026 (CSV)](/data/shopify-image-compression/2026-11-cdn-test.csv).

> **Cite as:** B2B Gold, “Does Shopify Compress Images? What We Measured”, 6 November 2026, [https://b2bgold.app/blog/shopify-image-compression/](https://b2bgold.app/blog/shopify-image-compression/).

## Frequently asked questions {#frequently-asked-questions}

### Should I convert images to WebP before uploading? {#should-i-convert-images-to-webp-before-uploading}

You don’t need to: Shopify already sends WebP or AVIF to browsers that accept them, from JPEG and PNG originals alike, and its help says images don’t need compressing before upload. Save photos as good-quality JPEGs at a sensible size, such as 2,048 px.

### Does Shopify convert GIFs? {#does-shopify-convert-gifs}

Yes. Shopify’s theme images page says GIFs are converted to animated WebP to reduce file size. For large animations, Chrome’s image insight suggests a video instead. XSeo leaves GIFs as they are.

### Will smaller images improve my SEO? {#will-smaller-images-improve-my-seo}

Lighter images can make pages faster, but nobody can promise a ranking change. Google notes that images are often the largest part of a page’s size and can make it slow ([Google Images guidelines](https://developers.google.com/search/docs/appearance/google-images), updated 2 March 2026). Core Web Vitals are used by its ranking systems, yet good scores don’t guarantee a top position ([Google: page experience](https://developers.google.com/search/docs/appearance/page-experience), updated 22 September 2026). Alt text matters for images in search too: [how to add alt text to Shopify images](/blog/shopify-alt-text/).

[XSeo - SEO & Image Optimizer](/shopify/xseo/)

XSeo is a free Shopify app for SEO and images. It writes SEO titles, meta descriptions and image alt text from templates or AI, compresses images in place with a 60-day backup, adds structured data through a theme app embed, manages redirects and checks the product data AI shopping reads. Runs you start show examples first, and Activity can undo them.

[Install free on the Shopify App Store](https://apps.shopify.com/xseo?utm_source=b2bgold.app&utm_medium=referral&utm_campaign=blog&utm_content=blog/shopify-image-compression&utm_term=post-cta) [Plans and pricing](/shopify/xseo/#pricing) [XSeo docs](/docs/xseo/)

Need help with XSeo? Email [support@b2bgold.app](mailto:support@b2bgold.app).

## More on XSeo {#related-heading}

- 6 November 2026 **[How to Create URL Redirects in Shopify](/blog/shopify-url-redirects/)** Create, import and check URL redirects in Shopify: when Shopify adds one for you, why a redirect doesn't fire, and what Google says about 301s and 404s.
- 6 November 2026 **[How to Write Shopify Meta Titles and Descriptions](/blog/shopify-meta-title-description/)** Where to set meta titles and descriptions in Shopify, the limits Shopify and Google actually use, what to write for products, and why Google rewrites them.
- 6 November 2026 **[How to Add Alt Text to Shopify Images](/blog/shopify-alt-text/)** Add alt text to Shopify product, collection, theme and Files images, write it for shoppers and search, use Shopify's AI suggestions, and fill a whole catalogue.
