If your website feels slow, the odds are overwhelming that images are the reason. Across hundreds of audits we've run at Creative Scope, images are the single largest contributor to page weight on roughly nine out of ten sites — and the first thing we fix when rebuilding a client's web presence. A single oversized hero image can push Largest Contentful Paint past four seconds on mobile, which fails Google's Core Web Vitals, kills organic rankings, and pushes bounce rate into double digits.
The fix is mechanical. Modern browsers, image formats, and CDNs have quietly made image optimisation a solved problem — but only if you actually do the work. This guide walks through the exact playbook we use in production: formats, sizing, lazy loading, CDNs, and the WordPress workflow that stops your content team from uploading 6MB phone photos.
Why images dominate page weight in 2026
The HTTP Archive's 2026 Web Almanac still shows the same pattern it has for a decade: images account for the largest share of bytes on the median web page. On content-heavy sites, it's common to see images making up 70-80% of total page weight. Video is catching up, but for the typical small-business or ecommerce site we audit, images are still the one lever that moves speed the most.
Here's why it gets so bad, so fast:
- Phone cameras shoot at 12-48 megapixels. A single unprocessed photo can be 8MB.
- WordPress uploads the original. By default, WordPress keeps the full-resolution file and generates thumbnails — but many themes still load the full size on product pages.
- Retina displays doubled the density requirement. A 400px wide image needs to be served at 800px to look crisp on high-DPI screens.
- Content teams rarely know the difference between 200KB and 2MB. Both look identical in the editor.
How images affect Core Web Vitals
Google's three performance metrics — Largest Contentful Paint (LCP), Cumulative Layout Shift (CLS), and Interaction to Next Paint (INP) — are ranking factors. Images directly affect two of them.
LCP: the hero image problem
On 80% of websites, the LCP element is an image — usually the hero. If that hero takes 3.2 seconds to appear on a mobile 4G connection, your LCP score fails. Targets:
- Good: under 2.5 seconds
- Needs improvement: 2.5-4.0 seconds
- Poor: over 4.0 seconds
A 2.8MB hero image on a 4G connection with typical latency is a guaranteed fail before the browser even starts rendering.
CLS: the missing-dimensions problem
If you don't declare width and height on your <img> tags, the browser doesn't know how much space to reserve. When the image loads, content below shifts — and Google penalises you for it. Always include intrinsic dimensions on every image, even if you're using CSS to size it responsively. The browser uses the ratio to reserve space.
Modern image formats: WebP, AVIF, JPEG XL
If you're still serving JPEG and PNG in 2026, you're leaving 30-50% of your image bytes on the table. The current format hierarchy:
- AVIF — the best modern format. Typically 30% smaller than WebP, 50% smaller than JPEG at equivalent quality. Browser support is now ~96% globally.
- WebP — the safe default. Universal support, good compression, reliable encoders. Still the right answer for most WordPress sites.
- JPEG XL — technically superior to AVIF but browser support remains fragmented. Not ready for production without a CDN handling fallbacks.
- JPEG — fine as a fallback for older browsers, never as the primary format.
- PNG — only for images that truly need transparency or lossless rendering (logos, UI sprites). Never for photos.
- SVG — always use for icons, logos, and simple illustrations. Infinite resolution, tiny file size.
The production pattern is a <picture> element with multiple sources:
<picture>
<source srcset="hero.avif" type="image/avif">
<source srcset="hero.webp" type="image/webp">
<img src="hero.jpg" alt="..." width="1600" height="900" fetchpriority="high">
</picture>
Responsive sizing with srcset and sizes
One of the most common mistakes we see: a site serves the same 2000px-wide image to a phone viewing a 400px column. The phone downloads 5x more data than it needs. The fix is srcset.
A proper responsive image tells the browser which file to pick based on the user's screen:
<img
src="hero-800.jpg"
srcset="hero-400.jpg 400w,
hero-800.jpg 800w,
hero-1200.jpg 1200w,
hero-1600.jpg 1600w"
sizes="(max-width: 768px) 100vw, 50vw"
alt="..."
width="1600"
height="900">
For sites at scale, generating these variants by hand is impractical. This is where image CDNs earn their cost — they produce every size on demand.
Lazy loading (without killing your LCP)
Native lazy loading has been universally supported since 2021. It's as simple as adding loading="lazy" to any <img> tag. The browser will defer loading until the image approaches the viewport.
Three rules we enforce on every build:
- Lazy-load everything below the fold. Every image that isn't visible on initial load should have
loading="lazy". - Never lazy-load your LCP image. Adding
loading="lazy"to the hero will hurt your score. Instead, addfetchpriority="high"to tell the browser to download it first. - Preload critical images. For LCP images, add
<link rel="preload" as="image" href="hero.webp" fetchpriority="high">in the head.
Common mistake
We see this constantly during audits: someone installs a lazy-load plugin, it applies loading="lazy" to every image including the hero, and LCP gets worse. Exclude above-the-fold images explicitly.
Image CDNs: Cloudinary, ImageKit, Bunny
For any site with more than a few dozen images or a content team that updates regularly, an image CDN is no longer optional. They handle on-the-fly resizing, format negotiation (serving AVIF to Chrome, WebP to Safari, JPEG to the one user on an ancient browser), global edge caching, and automated compression.
The ones we've shipped in production:
- Cloudinary — most powerful, deep transformation API, excellent DAM features. Pricing scales aggressively. Best for large teams or media-heavy sites. Around $99/mo for most SMB workloads.
- ImageKit — simpler, cheaper, excellent URL-based transformations. Great middle ground for WordPress or Shopify sites. $49-99/mo.
- Bunny.net Optimizer — the budget pick. Pay-per-GB CDN with an image optimiser add-on. Around $10-30/mo for a typical SMB site.
- Cloudflare Images — flat $5/mo for 100K images. Simple, fast, deeply integrated if you already use Cloudflare.
The bytes-saved-per-dollar on an image CDN is the best-value performance upgrade we recommend. Expect 30-60% reduction in image weight on day one.
Site feels slow?
We ship performance-first websites for Toronto brands.
Every Creative Scope build includes image optimisation, responsive srcset, lazy loading, image CDN integration, and Core Web Vitals targets as a delivery requirement — not an afterthought. Free performance audit to start.
See our web design servicesA WordPress-friendly image workflow
WordPress's default media handling is decent but not great. Here's the stack we recommend on every WordPress build where performance matters — the same one we pair with the technical SEO work we do for clients.
- Enforce upload limits. Use a plugin like Imsanity or Resize Image After Upload to automatically downscale anything over 2560px.
- Install an image optimiser. ShortPixel, Smush Pro, or Optimole will compress on upload and generate WebP/AVIF variants.
- Add an image CDN. Optimole, Jetpack Site Accelerator, or a direct Cloudflare/ImageKit integration handles responsive delivery.
- Configure your theme correctly. Make sure it outputs
srcset,sizes, and explicitwidth/height. Most modern themes do; some older ones don't. - Audit quarterly. New blog posts slip through with bloated images. Run PageSpeed Insights on your top 10 pages every quarter.
Measuring the impact
Don't optimise blind — measure before and after. The tools we trust:
- PageSpeed Insights — Google's official Core Web Vitals tool. Use both lab (Lighthouse) and field (CrUX) data.
- WebPageTest — more detailed, lets you test from specific locations and connection speeds. Free tier is generous.
- Chrome DevTools Network tab — see exactly which images are downloading and how large each one is.
- Search Console's Core Web Vitals report — shows real-user field data for your entire site, broken down by page and device.
A good target: hero images under 150KB, content images under 80KB, total page weight under 1.5MB on mobile. A well-built site can hit those comfortably with modern formats and a CDN.
Next steps
Image optimisation compounds. Every bloated image you replace pays dividends in LCP, bounce rate, and organic rankings — forever. Start with the hero on your five highest-traffic pages, then work through the rest.
If you'd rather have a Toronto studio audit your site and fix the worst offenders, get in touch — we'll run a free performance audit and share a prioritised action list. Or see how we approach web design, where performance is built in from the first wireframe.
