Images are the single biggest contributor to slow Webflow sites. Not scripts. Not fonts. Not animations. Images. On the average slow Webflow build I audit, images account for 60-80% of the total page weight.
The reason is straightforward: most builders upload images directly from design tools, stock sites, or cameras without processing them first. A 4000x3000 pixel photo at 4 MB gets uploaded to Webflow, which serves it on every page load to every device. Webflow applies some automatic optimization, but it does not aggressively compress or resize. The result is a page that downloads megabytes of image data the user's screen cannot even display.
The fix is a pre-upload workflow. It takes 5-10 minutes per batch of images and typically cuts page weight by 50-75%.
Step 1: resize to display dimensions
This is the highest-impact step and the one most often skipped. If your hero image displays at 1440 pixels wide on a desktop screen, there is no reason to upload a 4000-pixel-wide file. The extra 2560 pixels are downloaded, decoded by the browser, and then thrown away during rendering. Pure waste.
Before uploading any image to Webflow:
- Check the maximum width at which the image will display. In Webflow, this is determined by the container width and any CSS max-width settings.
- Resize the image to that width. For retina displays (2x pixel density), you can go to 2x the display width, so 2880px for a 1440px display. But only if the file size stays reasonable.
- For mobile, Webflow serves the same image at all breakpoints unless you use the responsive image settings. If you set up responsive images (srcset), provide separate versions for desktop, tablet, and mobile.
A hero image resized from 4000px to 1440px typically goes from 3-5 MB to 200-500 KB before any compression. That single change can cut your LCP by 1-2 seconds.
Step 2: compress before uploading
Resizing reduces dimensions. Compression reduces file size within those dimensions. You need both.
Tools I use:
- Squoosh (squoosh.app): Free, browser-based, lets you compare quality settings side-by-side. I use this for individual images where I want precise control.
- TinyPNG/TinyJPG (tinypng.com): Batch compression that works well for processing 10-20 images at once. Drops file size significantly with minimal visible quality loss.
- ImageOptim (Mac): Desktop tool for lossless and lossy compression. Good for batch processing local files.
For most images, a quality setting of 75-80% in JPEG or WebP produces visually identical results to the original while cutting file size by 30-60%. The human eye cannot distinguish the difference on a website, especially on images displayed at screen resolution.
Want a website that turns visitors into customers, not just compliments?
Book a 15-min introStep 3: use WebP format
WebP delivers the same perceptual quality as JPEG at 25-35% smaller file sizes. Browser support is now universal across Chrome, Firefox, Safari, and Edge. There is no reason not to use it for most images in 2026.
Convert your images to WebP as part of your pre-upload workflow. Squoosh has a WebP output option. Most batch tools support it too.
When to use alternatives:
- SVG for logos, icons, and simple graphics. SVGs are vector-based, so they scale to any size without quality loss and are typically under 10 KB.
- PNG for images that require transparency and where WebP transparency is not sufficient (rare).
- JPEG only as a fallback if you are concerned about very old browser versions, which is increasingly unnecessary.
Step 4: set loading behavior correctly
Not all images should load the same way. Webflow lets you control the loading attribute per image element.
- Hero/LCP image: Set to "Eager" loading. This tells the browser to download it immediately as a priority. Add
fetchpriority="high"via custom attributes if possible. - All other images: Set to "Lazy" loading. The browser only downloads them when the user scrolls near them.
I covered the specific mechanics and common mistakes of lazy-loading in my post on the lazy-loading mistake that hurts LCP. The short version: lazy-loading your hero image delays the single most important speed metric.
Step 5: handle background images separately
CSS background images in Webflow behave differently from <img> elements. They do not have a loading attribute. They download when the CSS is parsed, which is usually early in the page load cycle.
For background images:
- Apply the same resize and compression workflow as regular images.
- If the background image is decorative and below the fold, consider loading it via a class that only applies after the initial paint.
- If the background image is the hero, ensure the CSS file that references it is not deferred.
For hero sections, I generally recommend using an <img> element instead of a CSS background image. It gives you more control over loading priority, responsive sizing, and Core Web Vitals performance.
The Webflow-specific workflow
Here is the complete workflow I follow for every Webflow project:
- Export or download all images from the design file or source.
- Resize each image to its maximum display width (1x or 2x for retina).
- Compress using Squoosh or TinyPNG at 75-80% quality.
- Convert to WebP format.
- Upload to Webflow.
- Set the hero image loading to Eager.
- Set all other images to Lazy.
- Run PageSpeed Insights and confirm image-related warnings are gone.
This workflow takes 15-30 minutes for a typical page and consistently drops page weight by 50% or more. On sites where images were the primary speed bottleneck, I have seen scores jump from the 30s to the 70s from this step alone.
What "without losing quality" actually means
"Quality" on a website is about perception, not pixels. A 4000-pixel image compressed to 200 KB and displayed at 1440 pixels looks identical to the 5 MB original on every screen your users will ever view it on.
The quality loss people worry about, the visible compression artifacts, blocky edges, and color banding, only appears at aggressive compression levels (below 50% quality) or when you resize an image up from a smaller source. As long as you start with a high-resolution source and resize down, compression at 75-80% is visually lossless for web display.
The real quality loss is what happens to your user experience when a 5 MB image takes 4 seconds to load and the user bounces before it renders. That is the quality loss that costs you money.
If your Webflow site is heavy on images and scoring poorly on speed, a focused optimization pass typically recovers 30-50 points on PageSpeed from image work alone. It is the highest-leverage speed fix you can make.