Complete Image SEO Guide: How I Increased a Client's Traffic by 40%
Image SEO is often overlooked. I grew one client's organic traffic by 40% in 3 months through image optimization alone—no new content, no new backlink
Complete Image SEO Guide: How I Increased a Client's Traffic by 40%
Image SEO gets ignored a lot.
But Google Images can drive serious traffic, and most websites haven't optimized for it at all.
I grew one client's organic traffic by 40% in 3 months through image optimization alone—no new content, no new backlinks.
Why Image SEO Matters
Google Images traffic is huge:
- 20-30% of search results include images
- Google Images drives significant traffic
- Most competitors completely ignore this
The 5 Pillars of Image SEO
- Alt tags - Describe your images
- File names - Use keywords
- File size - Fast loading
- Format - Use modern formats
- Sitemap - Help Google find images
1. Alt Tags
What are Alt Tags?
Text descriptions of images. Used for:
- Screen readers (accessibility)
- Google understanding image content
- Display when images fail to load
Good vs Bad Alt Tags
Bad:
<img src="IMG_1234.jpg" alt="">
<img src="product.jpg" alt="photo">
<img src="blue-dress.jpg" alt="image">
Good:
<img src="blue-summer-dress.jpg" alt="Women's blue floral summer dress with white polka dots">
How to Write Alt Tags
Formula:
[Subject] + [Action/Description] + [Context]
Examples:
| Image Type | Alt Tag |
|---|---|
| Product photo | "Red running shoes with white sole and black laces" |
| Team photo | "Marketing team celebrating Q4 success in conference room" |
| Infographic | "Chart showing 40% increase in mobile traffic from 2024 to 2025" |
| Blog cover | "Woman working on laptop at coffee shop with city view" |
Alt Tag Length
- Target under 125 characters
- Descriptive but concise
- Naturally include primary keyword
Don't Keyword Stuff
Bad:
<img src="shoes.jpg" alt="running shoes best cheap sale buy now discount">
Good:
<img src="shoes.jpg" alt="Best running shoes for marathons - our top 10 picks">
2. File Names
Use Descriptive Names
Bad:
IMG_1234.jpg
DSC00567.jpg
product-photo.jpg
Good:
red-nike-running-shoes.jpg
blue-summer-dress-2025.jpg
best-coffee-maker-reviews.jpg
Include Keywords
File names also pass ranking signals to Google.
womens-blue-running-shoes.jpg
- Target keyword: "womens running shoes"
- Target keyword: "blue running shoes"
3. File Size (Page Speed)
Why It Matters
Google uses page speed as a ranking factor.
Large images = slow page = ranking drop
Image Size Guidelines
| Type | Max Size |
|---|---|
| Hero images | 200-400 KB |
| Content images | 50-150 KB |
| Thumbnails | 10-30 KB |
Format Selection
| Format | Browser Support | Compression |
|---|---|---|
| WebP | 97%+ | 30% smaller |
| AVIF | 80%+ | 50% smaller |
| JPEG | 97%+ | Fallback |
Use WebP, with JPEG as fallback.
Generate Optimized Images
from PIL import Image
from pathlib import Path
def optimize_for_seo(input_path, output_path):
"""Optimize for web: resize, compress, WebP"""
img = Image.open(input_path)
# Resize to max 1920px
if max(img.size) > 1920:
ratio = 1920 / max(img.size)
img = img.resize(
tuple(int(d * ratio) for d in img.size),
Image.Resampling.LANCZOS
)
# Convert to RGB
if img.mode == 'RGBA':
img = img.convert('RGB')
# Save as WebP
img.save(output_path, 'WEBP', quality=85)
return output_path
optimize_for_seo('photo.jpg', 'photo.webp')
4. Image Format
Use Modern Formats
| Format | Support | Advantage |
|---|---|---|
| WebP | 97%+ | 30% smaller |
| AVIF | 80%+ | 50% smaller |
| JPEG | 97%+ | Fallback |
HTML Format Fallback
<picture>
<!-- AVIF (smallest) -->
<source
srcset="image.avif"
type="image/avif"
>
<!-- WebP -->
<source
srcset="image.webp"
type="image/webp"
>
<!-- JPEG fallback -->
<img
src="image.jpg"
alt="Description"
>
</picture>
5. Image Sitemap
Let Google find and index your images.
Sitemap Example
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://example.com/blog/post</loc>
<image:image>
<image:loc>https://example.com/images/hero.webp</image:loc>
<image:title>Post Title</image:title>
</image:image>
</url>
</urlset>
Generate Image Sitemap
from pathlib import Path
def generate_image_sitemap(image_dir, output_path, base_url):
"""Generate image XML sitemap"""
sitemap = '''<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
'''
image_path = Path(image_dir)
extensions = ('.jpg', '.jpeg', '.png', '.webp', '.avif')
for img_file in image_path.glob('*'):
if img_file.suffix.lower() in extensions:
url = f"{base_url}/{img_file.name}"
sitemap += f''' <url>
<loc>{url}</loc>
</url>
'''
sitemap += '</urlset>'
with open(output_path, 'w') as f:
f.write(sitemap)
print(f"✓ Sitemap created: {output_path}")
generate_image_sitemap('./images', 'image-sitemap.xml', 'https://example.com')
Checklist
- [ ] All images have descriptive alt tags
- [ ] File names include keywords
- [ ] All images under 200KB
- [ ] Using WebP format
- [ ] Responsive images (srcset)
- [ ] Lazy loading enabled
- [ ] Image sitemap submitted
- [ ] Core Web Vitals passing
Real Results
Client: E-commerce site, 500 products
| Metric | Before | After |
|---|---|---|
| Avg image size | 1.4MB | 95KB |
| Page speed | 8.2 seconds | 1.8 seconds |
| Google Images traffic | 1,200/mo | 3,400/mo |
| Total organic traffic | 12,000/mo | 16,800/mo |
| Revenue | $45,000/mo | $62,000/mo |
Result: Traffic +40%, Revenue +38%
Common Mistakes
Mistake 1: No Alt Tags
Problem: Google doesn't know what the image is.
Solution: Add descriptive alt tags to every image.
Mistake 2: Alt Tag Keyword Stuffing
Problem: Looks like spam.
Solution: Write natural descriptions with primary keyword included.
Mistake 3: Images Too Large
Problem: Slow page load, hurts ranking.
Solution: Compress to under 200KB, use WebP.
Mistake 4: Decorative Images Missing Alt
Problem: Empty alt or no alt.
Solution: Decorative images use alt="" (screen readers skip them).
Tools
| Tool | Use |
|---|---|
| Imagic AI | Compress, WebP |
| Screaming Frog | Audit alt tags |
| PageSpeed Insights | Check image sizes |
| Google Search Console | Image performance |
Summary
- Every image needs alt tags - Describe what's in it
- File names should have keywords - Descriptive naming
- Compress all images - Under 200KB
- Use WebP - 30% smaller than JPEG
- Submit image sitemap - Help Google find images
Grew client traffic by 40% through image SEO. Questions? Drop a comment.