Most arguments about alt text start in the wrong place. Someone asks whether it helps rankings, gets told yes, and writes a keyword into a field that a person is going to hear read out loud. Alt text SEO is real, and it is a byproduct of getting the first job right rather than a job of its own.
The first job is the text alternative. A screen reader announces alt text in place of the image, so the sentence has to carry whatever the picture was carrying. Google reads the same string for a different reason, and asks for the same qualities.
What follows is what each side documents, where WordPress keeps the field and why an edit sometimes never reaches the page, how to add alt text to images in WordPress, and where a generated description earns its place.
What alt text SEO is worth, in Google’s own words
Google’s image documentation is specific about alt text and unusually blunt about the failure mode. It says alt text is read together with computer vision output and the content of the page, then names the abuse case outright.
Avoid filling alt attributes with keywords (also known as keyword stuffing) as it results in a negative user experience and may cause your site to be seen as spam.
The same page grades four versions of one photograph. A missing alt attribute is bad, a stuffed one is bad, alt="puppy" is better, and alt="Dalmatian puppy playing fetch" is best. The version Google calls best is the one a person would want read to them.
Nothing in that documentation promises a ranking. The alt attribute is one of four inputs the same page names, beside the filename, the text around the image, and structured data, and nobody outside Google can measure one signal’s share. How the four fit together is in the wider image SEO picture.
The accessibility objection, stated properly
The strongest argument against automated alt text is published by a competitor, and it deserves quoting rather than paraphrasing. Yoast lists automated image titles and alt text among the things it deliberately does not build.
we think automated alt text is bad for accessibility and don’t recommend it
The reasoning underneath it is sound. A model describes what sits inside the frame, and the frame does not contain the reason the image is on the page. Their sharpest example is the decorative divider that gets a careful description it should never have received.
I agree with the mechanism and not with the conclusion, for one reason. That argument compares generated alt text against alt text written by a person who understands the page. On most libraries the real comparison is generated alt text against an empty attribute, and it has been empty for four years.
A generated description is a draft: accurate about the frame, silent about intent. That is exactly where a review pass earns its time, and it is why decorative images have to be excluded before anything writes to them rather than corrected afterwards. Nothing generated makes a page conform to WCAG, and any tool implying otherwise is selling a compliance claim it cannot support.
Why stuffed alt text costs you on both sides
Keyword-stuffed alt text is the one failure worse than an empty field, because somebody hears it. A sighted visitor never encounters the string at all. A person using a screen reader gets every word of it, in order, in place of the picture.
| What the attribute holds | What a screen reader announces | What a crawler gets |
|---|---|---|
| No alt attribute at all | Often the filename, read out character group by character group | The filename and the page text, with nothing from you |
| An empty attribute on a real photo | Nothing. The image is passed over silently | Nothing. The information in the picture is simply absent |
| A row of keywords | Every keyword, in order, instead of a description | The pattern Google’s documentation names as a spam signal |
| One word, such as puppy | One word. Accurate, and thinner than the picture | The subject with no context around it |
| A short descriptive sentence | A sentence that stands in for the picture | Subject and action, matching the page it sits on |
The bottom row is where both readers land on the same string, and that is the argument of this whole article in one line. A description good enough to replace the picture for one person is the description a crawler reads best.
Alt text in WordPress: where the value actually lives
WordPress stores alt text in the _wp_attachment_image_alt post meta on the attachment. That is the field behind Alternative Text in the Media Library, and it holds one value per image for the whole site.
The rendered page works differently. The core image block declares its alt attribute with a source of attribute on the img tag, so the value is copied into the post content when you insert the image and read back out of that saved markup at render time (wp-includes/blocks/image/block.json, WordPress 7.0.4).
Insert an image with an empty alt attribute, write good alt text into the Media Library a month later, and the published page still renders the empty one. The library value applies to future insertions and to templates that read the attachment directly. Existing blocks keep the copy they were handed, so an audit has to read pages and not only the library.
That single behavior explains most of the alt text audits that come back disagreeing with themselves. The library reports the work as done and the HTML reports otherwise, and the HTML is the one people use.
The filename is the other field on the same image, read in a different context, and repeating one inside the other buys nothing. What a rename costs once the URL is live is the filename half of the same problem.
How to add alt text to images in WordPress
Adding alt text to an image in WordPress
Steps one and three write to two different places. Doing only the first is the reason a fixed library still renders empty attributes.
-
1
Open the image in the Media Library
Go to Media, then Library, and click the image. The Alternative Text field in the attachment details writes to _wp_attachment_image_alt. This is the value every future insertion of that image starts from. -
2
Describe the picture in one sentence
Lead with the subject, then what it is doing or where it is. Drop Image of and Photo of, since screen readers announce the element already. Read the sentence back with the picture out of view and see whether it still tells you anything. -
3
Fix the copies already sitting in posts
Open each post where the image appears, select the image block, and edit Alternative text in the block sidebar. That writes into the post content, which is what the page renders. The Media Library edit does not reach it. -
4
Decide the decorative ones deliberately
A divider, a background texture, an icon beside text that already says the same thing: each takes an empty alt attribute rather than a description. This is a judgment about the page, so it happens before any bulk pass, not after. -
5
Check the rendered HTML rather than the editor
View source on the published page and search for the filename. The alt attribute you find there is the one people actually get, and on a site with a page builder or a caching layer it is occasionally not the one you just saved.
Decorative images and the empty alt attribute
WCAG covers decoration explicitly. Success criterion 1.1.1 says non-text content that is pure decoration, used only for visual formatting, or not presented to users has to be implemented so it can be ignored by assistive technology (W3C, Understanding SC 1.1.1, checked 2026-08-14). An empty alt attribute is how that is done in HTML.
<!-- Decorative: assistive technology passes over it -->
<img src="section-divider.svg" alt="">
<!-- No alt attribute: many screen readers announce the filename -->
<img src="section-divider.svg">
The distinction is not cosmetic: an empty attribute is a statement that there is nothing here to announce. A missing attribute is an omission, and what happens next belongs to the screen reader rather than to you.
Doing this on a library nobody has time for
Count first. Two numbers decide everything after: how many attachments are missing alt text entirely, and how many published pages render an img with an empty or missing attribute. The first is a meta query. The second needs a crawl, because of the copy-at-insert behavior above.
Under about 50 images, write them by hand. You are looking at each picture and deciding what matters about it, and that judgment is the part no tool supplies. The output is better and the setup time is zero.
The arithmetic breaks somewhere in the hundreds. A minute per image is a full day at 400 images and a fortnight at 4,000, which is why the field stays empty on exactly the libraries that need it most.
That gap is what I built Image SEO Optimizer for. It sends the image to a provider you hold the key for — Anthropic, Google or OpenAI — and writes the result into the same _wp_attachment_image_alt meta the Media Library edits. There is no separate store and no proprietary field.
The limits are the part worth reading. The free plugin handles one image at a time and the bulk runner is Pro. AI calls are capped at 100 per user per hour. Alt text is scored against 50 to 125 characters and 10 to 16 words by default, which is a convention rather than a standard, and the range is editable. It describes every image you point it at, decorative ones included.
Every generated string lands in an editor before it lands on the site — editing generated alt text before it saves — and each write is recorded with the old value, the new value and the model that produced it in the change history for every field. There is no undo button — reverting means pasting the old value back by hand.
Output varies between runs, so two near-identical photographs come back worded differently. If the site publishes in German or Spanish, setting the language the AI writes in belongs before the first batch rather than after it.
check_circle Where a generated draft is the right call
- check Thousands of empty attributes, where an accurate description of the frame beats silence
- check A product catalog that needs one house style across images nobody will re-read
- check Literal photographs — objects, places, people doing something identifiable
- check A first pass to edit, which most people work through faster than a blank field
cancel Where it is not
- close Decorative images, which need an empty attribute and get a full description instead unless you exclude them first
- close Charts and diagrams, where the meaning is in the data rather than in the frame
- close Anything where a wrong description is worse than none, such as medical or legal material
- close Images whose point is the pairing — a before-and-after shot reads as two unrelated photographs
Frequently asked questions
One thing to do after reading this: open the three highest-traffic pages on the site, view source, and search for alt="". Whether the count is near zero or near the image count tells you which of the two problems you have, and almost nobody has looked.
Image SEO Optimizer Pro
Write the field once, where WordPress reads it
Image SEO Optimizer generates alt text on your own Anthropic, Google or OpenAI key and saves it to the standard WordPress alt field, with the old and new value logged. One image at a time in the free plugin; the bulk runner is Pro.
Personal
Single-site license – ideal for personal blogs or small websites.
- check_circle 1 Site License
- check_circle Bulk Processing
- check_circle Image Context Generation
- check_circle Real-time Upload Optimization
- check_circle Best-in-Class AI Models
Freelancer
License for up to 10 sites – ideal for freelancers and developers.
- check_circle 10 Sites License
- check_circle Bulk Processing
- check_circle Image Context Generation
- check_circle Real-time Upload Optimization
- check_circle Best-in-Class AI Models
Agency
Unlimited Sites – ideal for digital agencies and corporations.
- check_circle Unlimited Sites
- check_circle Bulk Processing
- check_circle Image Context Generation
- check_circle Real-time Upload Optimization
- check_circle Best-in-Class AI Models