SkillAgentSearch skills...

seo-images

Image optimization analysis for SEO and performance. Checks alt text, file sizes, formats, responsive images, lazy loading, CLS prevention, image SERP rankings (via DataForSEO), and image file optimization (WebP/AVIF conversion, IPTC/XMP metadata injection)

Install / Use

npx skills add AgriciDaniel/claude-seo --skill seo-images

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

98/100

Category

Marketing

Supported Platforms

Universal

Our assessment of seo-images

seo-images scores 98/100 on our quality scale, 11th of 302 Marketing skills we index (top 4%).

Its SKILL.md is 16 KB long, well organised into 49 sections with 12 code examples: a thorough specification that gives an agent plenty to work with.

With 17,676 GitHub stars, it is one of the more widely adopted skills in the catalogue.

Substance
30/30
Structure
20/20
Description
15/15
Adoption
18/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 4 days ago, so seo-images is actively maintained.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

seo-images compared with similar skills

All 4 of these similar skills score higher than seo-images; compare them before choosing.

SkillScoreStarsUpdatedFormat
seo-images (this skill)by AgriciDaniel9817.7k4d agoSKILL.md
LocalAIby mudler10049.3ktodayMCP Server
algorithmic-artby anthropics100177.9k5d agoSKILL.md
pptxby anthropics100177.9k5d agoSKILL.md
designby nextlevelbuilder100130.2k6d agoSKILL.md

Frequently asked questions

How do I install seo-images?
Run npx skills add AgriciDaniel/claude-seo --skill seo-images. The install tabs above show the steps for each supported agent.
Which AI agents does seo-images work with?
It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
Is seo-images safe to use?
It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is seo-images still maintained?
The repository was last updated 4 days ago, so seo-images is actively maintained.

name: seo-images description: > Image optimization analysis for SEO and performance. Checks alt text, file sizes, formats, responsive images, lazy loading, CLS prevention, image SERP rankings (via DataForSEO), and image file optimization (WebP/AVIF conversion, IPTC/XMP metadata injection). Use when user says "image optimization", "alt text", "image SEO", "image size", "image audit", "optimize images", "image metadata", "image SERP", "convert to webp", or "image file optimize". user-invocable: true argument-hint: "[url]" license: MIT metadata: author: AgriciDaniel version: "2.4.0" category: seo

Image Optimization Analysis

Checks

Alt Text

  • Present on all <img> elements (except decorative: role="presentation")
  • Descriptive: describes the image content, not "image.jpg" or "photo"
  • Includes relevant keywords where natural, not keyword-stuffed
  • Length: 10-125 characters

Good examples:

  • "Professional plumber repairing kitchen sink faucet"
  • "Red 2024 Toyota Camry sedan front view"
  • "Team meeting in modern office conference room"

Bad examples:

  • "image.jpg" (filename, not description)
  • "plumber plumbing plumber services" (keyword stuffing)
  • "Click here" (not descriptive)

File Size

Tiered thresholds by image category:

| Image Category | Target | Warning | Critical | |----------------|--------|---------|----------| | Thumbnails | < 50KB | > 100KB | > 200KB | | Content images | < 100KB | > 200KB | > 500KB | | Hero/banner images | < 200KB | > 300KB | > 700KB |

Recommend compression to target thresholds where possible without quality loss.

Format

| Format | Browser Support | Use Case | |--------|-----------------|----------| | WebP | 97%+ | Default recommendation | | AVIF | 92%+ | Best compression, newer | | JPEG | 100% | Fallback for photos | | PNG | 100% | Graphics with transparency | | SVG | 100% | Icons, logos, illustrations |

Recommend WebP/AVIF over JPEG/PNG. Check for <picture> element with format fallbacks.

Recommended <picture> Element Pattern

Use progressive enhancement with the most efficient format first:

<picture>
  <source srcset="image.avif" type="image/avif">
  <source srcset="image.webp" type="image/webp">
  <img src="image.jpg" alt="Descriptive alt text" width="800" height="600" loading="lazy" decoding="async">
</picture>

The browser will use the first supported format. Current browser support: AVIF 93.8%, WebP 95.3%.

JPEG XL: Emerging Format

Third-party reporting and Wikipedia describe a Rust-based JPEG XL decoder as shipped in Chrome 145 stable (2026-02-10) behind the chrome://flags/#enable-jxl-image-format flag, not enabled by default; no Google-owned confirmation was retrieved in the fact pack. Because default support is not confirmed, it is not yet practical for production web delivery. Keep serving AVIF/WebP with JPEG fallback and monitor.

Responsive Images

  • srcset attribute for multiple sizes
  • sizes attribute matching layout breakpoints
  • Appropriate resolution for device pixel ratios
<img
  src="image-800.jpg"
  srcset="image-400.jpg 400w, image-800.jpg 800w, image-1200.jpg 1200w"
  sizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1200px"
  alt="Description"
>

Lazy Loading

  • loading="lazy" on below-fold images
  • Do NOT lazy-load above-fold/hero images (hurts LCP)
  • Check for native vs JavaScript-based lazy loading
<!-- Below fold - lazy load -->
<img src="photo.jpg" loading="lazy" alt="Description">

<!-- Above fold - eager load (default) -->
<img src="hero.jpg" alt="Hero image">

Detected lazy-loader methods (lazy_method field)

"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run parse_html.py classifies each image's lazy-loading mechanism via the lazy_method field on every image entry. Five values:

| lazy_method | Signal detected | Common stack | |---|---|---| | native | loading="lazy" HTML attribute | Modern browsers, plain HTML | | perfmatters | data-perfmatters-src/-srcset OR class perfmatters-lazy | WordPress + Perfmatters plugin | | ewww | data-ewww-src / data-eio OR class lazyload-eio | WordPress + EWWW Image Optimizer | | js-generic | data-src / data-lazy-src / data-original / data-srcset OR class lazyload/lazyloaded/lazy | Lazysizes, vanilla-lazyload, jQuery plugins | | none | Neither attribute nor class signal | Page is not lazy-loading this image |

When auditing image SEO, report lazy_method alongside loading so users know whether their site is using a JS-driven lazy-loader (in which case the native loading="lazy" attribute is intentionally absent, that is not a regression).

fetchpriority="high" for LCP Images

Add fetchpriority="high" to your hero/LCP image to prioritize its download in the browser's network queue:

<img src="hero.webp" fetchpriority="high" alt="Hero image description" width="1200" height="630">

Critical: Do NOT lazy-load above-the-fold/LCP images. Using loading="lazy" on LCP images directly harms LCP scores. Reserve loading="lazy" for below-the-fold images only.

decoding="async" for Non-LCP Images

Add decoding="async" to non-LCP images to prevent image decoding from blocking the main thread:

<img src="photo.webp" alt="Description" width="600" height="400" loading="lazy" decoding="async">

CLS Prevention

  • width and height attributes set on all <img> elements
  • aspect-ratio CSS as alternative
  • Flag images without dimensions
<!-- Good - dimensions set -->
<img src="photo.jpg" width="800" height="600" alt="Description">

<!-- Good - CSS aspect ratio -->
<img src="photo.jpg" style="aspect-ratio: 4/3" alt="Description">

<!-- Bad - no dimensions -->
<img src="photo.jpg" alt="Description">

File Names

  • Descriptive: blue-running-shoes.webp not IMG_1234.jpg
  • Hyphenated, lowercase, no special characters
  • Include relevant keywords

CDN Usage

  • Check if images served from CDN (different domain, CDN headers)
  • Recommend CDN for image-heavy sites
  • Check for edge caching headers

Output

Image Audit Summary

| Metric | Status | Count | |--------|--------|-------| | Total Images | - | XX | | Missing Alt Text | ❌ | XX | | Oversized (>200KB) | ⚠️ | XX | | Wrong Format | ⚠️ | XX | | No Dimensions | ⚠️ | XX | | Not Lazy Loaded | ⚠️ | XX |

Prioritized Optimization List

Sorted by file size impact (largest savings first):

| Image | Current Size | Format | Issues | Est. Savings | |-------|--------------|--------|--------|--------------| | ... | ... | ... | ... | ... |

Recommendations

  1. Convert X images to WebP format (est. XX KB savings)
  2. Add alt text to X images
  3. Add dimensions to X images
  4. Enable lazy loading on X below-fold images
  5. Compress X oversized images

Image SERP Analysis

When DataForSEO MCP is available, enhance the image audit with competitive data.

/seo images serp <keyword>

Cross-reference on-page images with the image results visible in the Google SERP.

Workflow:

  1. The pinned DataForSEO MCP server (2.8.10) has no Google Images SERP tool. Use the images element of serp_organic_live_advanced (depth=100) when the SERP has one, and say plainly when no image SERP data is available
  2. Extract: top domains, image types, alt text patterns
  3. Output competitor image SERP landscape

Output:

| Rank | Domain | Title/Alt | Image URL | Page URL | |------|--------|-----------|-----------|----------| | 1 | example.com | "Blue running shoes..." | .../shoes.webp | /products/... |

Analysis includes:

  • Domain dominance: which sites own the most image positions (top 10 by count)
  • Alt text patterns: common title/alt patterns in top-ranking images
  • Format distribution: WebP vs JPEG vs PNG in top results
  • Opportunity score: keywords where you have page rankings but no image presence

If DataForSEO MCP is not available, inform user and suggest installing the extension.


Image File Optimization

Optimize image files for SEO: format conversion, metadata injection, compression.

/seo images optimize <path>

Optimize image file(s) for web and SEO. Converts to WebP/AVIF, injects IPTC metadata, compresses, and generates responsive variants.

Tools used (in order of preference):

  • exiftool -- EXIF/IPTC/XMP read/write (install: sudo apt install libimage-exiftool-perl)
  • cwebp -- WebP conversion (install: sudo apt install webp)
  • ImageMagick convert -- Format conversion, resizing (pre-installed on most systems)
  • FFmpeg -- Fallback for format conversion (pre-installed)

Before running: Check which tools are available with which exiftool cwebp convert ffmpeg.

Format Conversion

Convert images to modern formats with metadata preservation:

# WebP (recommended default) - with metadata preserved
cwebp -q 82 -metadata all input.jpg -o output.webp

# WebP via ImageMagick (fallback if cwebp not installed)
convert input.jpg -quality 82 output.webp

# AVIF via FFmpeg (slower encode, best compression)
ffmpeg -i input.jpg -c:v libaom-av1 -crf 30 -still-picture 1 output.avif

# Responsive variants (400w, 800w, 1200w)
convert input.jpg -resize 400x -quality 82 image-400.webp
convert input.jpg -resize 800x -quality 82 image-800.webp
convert input.jpg -resize 1200x -quality 82 image-1200.webp

Metadata Injection (IPTC for Google Images Display)

Google Images displays IPTC Creator, Credit Line, and Copyright in search results. This is NOT a ranking factor but can improve Google Images display and brand attribution.

With exiftool (preferred):

# Read all metadata
exiftool image.jpg

# Inject IPTC + XMP metadata for Google Images rich results
exiftool \
  -IPTC:ObjectName="Product Photo Description" \
  -IPTC:Caption-Abstract="Detailed image description" \
  -IPTC:By-line="Brand Name Photography" \
  -IPTC:Credit="Brand Name" \
  -IPTC:CopyrightNotice="Copyright 2026 Brand Name" \
  -IPTC:Source="brandname.com" \
  -XMP:Title="Product Photo Description" \
  -XMP:Description="Detailed image description" \
  -XMP:Creator="Brand Name Photography" \
  -XMP:Rights="Copyright 2026 Brand Name" \
  image.jpg

# Batch inject to all images in directory
exiftool -overwrite_original \
  -IPTC:By-line="Brand Name" \
  -IPTC:CopyrightNotice="Copyright 2026 Brand Name" \
  *.jpg *.webp *.png

With ImageMagick (fallback):

identify -verbose image.jpg | head -50

convert input.jpg \
  -set comment "Product Photo Description" \
  -set IPTC:2:80 "Brand Name Photography" \
  -set IPTC:2:116 "Copyright 2026 Brand Name" \
  output.jpg

Note: WebP supports EXIF and XMP but not IPTC natively. For WebP files, use XMP fields instead of IPTC. exiftool handles this conversion automatically.

AI-Generated Images: DigitalSourceType (Merchant Center requirement)

For product images produced by generative AI, Google Merchant Center requires IPTC DigitalSourceType: TrainedAlgorithmicMedia metadata. This is an operational policy requirement, not a ranking factor: feeds missing this label on AI-generated imagery can be disapproved.

Primary source (Merchant Center AI-generated content policy): https://support.google.com/merchants/answer/14743464 (the ai-optimization-guide does not document DigitalSourceType/IPTC/Merchant labeling.)

Audit command:

# Audit a directory for the IPTC label (counts: missing, ai, captured, etc.)
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run iptc_ai_label.py audit ./images/ --json

# Audit a single image
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run iptc_ai_label.py audit ./hero.webp --json

# Inject the AI label into an image
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run iptc_ai_label.py inject ./ai-hero.webp \
    --source-type trainedAlgorithmicMedia

# Other vocabulary values:
#   compositeSynthetic               (mix of captured + AI elements)
#   algorithmicMedia         

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars17.7k
CategoryMarketing
Updated4d ago
Forks2.6k

Languages

Python

Trust signals

100/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

No cautions