Directory / plugin

Erdo Image Optimizer – Image SEO, AI Alt Text, Media Cleanup, WebP & AVIF

v3.0.0 · by Erdinc Bulat

Score every image for SEO, get AI alt text with your own provider key, quarantine unused media safely and serve WebP/AVIF without touching originals.

View on WordPress.org

About this plugin

Erdo Image Optimizer is an image SEO plugin for WordPress. It scores every image in your media library from 0 to 100 and helps you fix what holds it back in Google Images and on your pages: missing or weak alt text (written by you, taken from the file name, or suggested by AI), camera file names such as IMG_1234 (renamed safely, with 301 redirects), unused images (moved to a reversible quarantine), and heavy JPEG and PNG files (served as WebP or AVIF copies while the originals stay untouched).

Nothing is changed without a preview, and almost everything can be undone.

Image SEO score

  • Every image gets a score from 0 to 100: alt text (40 points), file name (20), format (10), file size (10), dimensions (5) and context (15).
  • Alt text is checked for quality, not just presence: file-name-like text, “image of…” phrases, keyword lists and overly long text lose points. Decorative images can be marked as such and pass with an empty alt.
  • Camera-style and generic file names (IMG_1234, DSC_0042, Screenshot, WhatsApp Image, hashes) are flagged.
  • Context checks whether the image appears on a published, indexable page. Noindex settings from Yoast SEO and Rank Math are respected.
  • Filter the library by issue (missing alt, weak alt, weak file name, no WebP/AVIF copy, oversized, not on an indexable page) and export the report as CSV.
  • Focus keywords from Yoast SEO, Rank Math, SEOPress and All in One SEO are used as hints.

AI alt text with your own key (WordPress 7.0+)

  • Uses the AI Client built into WordPress 7.0. You connect Anthropic, Google or OpenAI under Settings > Connectors; the plugin never stores or sees your API key.
  • One request per image returns alt text, a file name, a title and a caption, decides whether the image is decorative, and checks whether the current alt text fits the image.
  • The model sees the image together with the page it appears on, the text around it and the focus keyword, so suggestions describe the image in context.
  • Review first: suggestions wait in the “AI Suggestions” tab until you accept, edit or reject them, field by field or in bulk.
  • Bulk runs show an estimated provider cost before they start and can be stopped at any time.

Safe renaming

  • Rename a single image, fix weak names across the library (a camera name gets a new one from the AI suggestion, the alt text or the page the image is on), or use patterns such as {keyword}-{n}, {parent}, {title}, {original} and {alt}.
  • Every size, the original before scaling, edit backups and WebP/AVIF copies move together. Links in posts, page builder data, custom fields and options are updated, including serialized and JSON data.
  • Old image URLs redirect (301) to the new ones, so backlinks and Google Images traffic keep working.
  • Every rename shows a preview first and can be undone per image or per batch.

Unused media cleanup with quarantine

  • A usage index records where each image is used: post content, featured images, galleries, page builder data, custom fields (including ACF), WooCommerce product galleries, theme settings such as the logo and site icon, widgets and term images.
  • The detail panel shows every place an image is used, with links.
  • Unused images go to a quarantine instead of being deleted. Their files move to a folder with an unguessable name inside uploads, and the image disappears from the media library until you restore it with one click.
  • Before an image is moved in bulk, the plugin checks again whether its file name still appears anywhere on the site and skips it if it does.
  • Permanent deletion is a separate, explicit step. Automatic emptying of the quarantine is off by default.

WebP and AVIF without touching originals

  • WebP and AVIF copies are saved next to each image and each generated size (photo.jpg.webp, photo.jpg.avif). The original file is never modified or deleted.
  • A copy is kept only if it is smaller than the original.
  • Delivery through <picture> tags (works behind any CDN or page cache), or an Apache .htaccess rewrite. A ready-made nginx snippet is included.
  • Convert new uploads automatically, or convert the existing library in the background. Remove the copies of any image with one click.
  • WebP and AVIF support is measured with a real test encode on your server. Lossless WebP, smart quality and animated GIFs (with Imagick) are supported.

Also included

  • A first-run setup that tests your server, detects a CDN, an SEO plugin and an AI provider, and recommends settings.
  • An overview with an image health score, a “fix next” list sorted by impact and an activity log with undo.
  • Image sitemap inside the WordPress core sitemap (turned off automatically when Yoast SEO, Rank Math, All in One SEO or SEOPress handles image sitemaps).
  • Clean file names on upload, optional removal of camera data (EXIF/GPS), and a maximum image size that uses the WordPress “big image” threshold (the full-size original is kept).
  • Resize oversized images in the detail panel; the original is kept so you can undo it.
  • WP-CLI commands, REST endpoints for statistics, audit results and AI suggestions, and a dashboard widget.
  • A repair tool for images that were converted by version 2.x of this plugin.

What it does not do

  • It does not compress or overwrite your original files. Savings come from the WebP/AVIF copies.
  • It does not lazy-load images. WordPress already does this, including the right handling of the largest image above the fold.
  • It does not offer a CDN or a cloud compression service, and it has no server of its own.
  • AI features need WordPress 7.0 or newer and your own account with an AI provider. Without them, every other feature works.
  • The usage index cannot see images that are hard-coded in theme or plugin files, used only in CSS files, or linked from other websites. Check those before deleting anything permanently.

External services

This plugin connects to an external AI service only for the optional AI suggestions feature, on WordPress 7.0 or newer. It uses the WordPress AI Client and the provider you connect under Settings > Connectors with your own API key. The plugin does not store or see the key and has no server of its own; requests go from your site directly to your provider.

What the feature does: it asks the provider for alt text, a file name, a title and a caption for an image, whether the image is decorative, and whether the current alt text fits it.

When data is sent: only when a user clicks “Suggest with AI” for an image, starts a bulk run from the “AI Suggestions” tab, calls the plugin’s REST endpoint for a suggestion, or after an image upload if the “Suggest on upload” setting is turned on (off by default; it then runs once in the background for new images without alt text).

What is sent with each request:

  • The image, at most 1024 px on the long side. The file stored on your site is sent if it is already small enough (JPEG, PNG or WebP), otherwise a generated size between 512 and 1024 px, otherwise a temporary JPEG copy. Files sent as stored keep any embedded camera data unless “Remove camera data (EXIF)” was on when they were uploaded.
  • The title of the page the image appears on, the page’s SEO focus keyword, and up to 500 characters of text around the image on that page.
  • The image’s current alt text and title, and the content language.
  • For WooCommerce products: the product name and its categories.
  • Instructions that describe the expected answer.

No user names, e-mail addresses, IP addresses or other personal data are added by the plugin.

Providers and their terms:

Suggestions are stored on your site and never applied automatically. Each one waits for your review.

Plugin tags