Describe and optimize images
Name and describe each image, then ship it small and lazy.
From seo-audit, Image Optimization checks.
Turn the images off
Press Images off, then rewrite the last alt.
No altBad
<img src="IMG_4832.jpg">Screen reader "IMG underscore 4832 dot jpg, image"
Generic altBad
alt="image"Screen reader "image, image"
Describes itGood
Screen reader
<img src="/img/revenue-chart-2025.webp"
alt="Bar chart of monthly revenue rising from $12k in January to $40k in June"
width="1200" height="800">
<img src="/img/divider-wave.svg" alt="">
Name it, then compress it
Rename it, pick format and width, then Load both.
As exportedBad
IMG_4832.jpg
camera name · full-resolution JPEGAs shippedGood
IMG_4832.jpg
9.4 s
revenue-chart-2025.webp
0.7 s
cwebp -q 80 -resize 1200 0 IMG_4832.jpg -o revenue-chart-2025.webp
avifenc --min 20 --max 40 IMG_4832.jpg revenue-chart-2025.avif
Lazy-load below the fold
Scroll each feed and compare the request logs.
EagerBad
loading="lazy"Good
<!-- LCP image: never lazy -->
<img src="harbor-at-dawn.webp" alt="…" width="1200" height="800" fetchpriority="high">
<img src="market-stalls.webp" alt="…" width="1200" height="800" loading="lazy" decoding="async">
Why it matters, pros and cons
Why it matters
Alt text is the image for screen readers, crawlers and failed loads.
Pros
- Accessible and indexable in image search.
- WebP is often 5-10× smaller.
- Initial requests shrink to what is visible.
Cons
- Decorative images get
alt="", not a description. - Never lazy-load the hero or LCP image.
- Set
width/heightor lazy images shift layout.