og:image:alt is the one Open Graph tag that tells a screen reader what your share card shows. Almost nobody writes it. We fetched 45 well-known URLs, parsed the raw server HTML of the 32 that answered, and counted: 29 of those pages ship an og:image, and 3 of the 29 ship alt text for it. Two of the three typed the word logo.
That is not a plugin toggle people forgot. It is a blind spot in how the whole topic gets taught — every guide walks og:image, og:title, og:type and og:url, then files alt next to width and height as a formatting detail. The specification does not file it there.
What the Tag Is Actually For
The Open Graph protocol puts og:image:alt in its structured-properties list with a single sentence: a description of what is in the image (not a caption). If the page specifies an og:image it should specify og:image:alt. Should, not must. That one word is how 26 of our 29 pages talked themselves out of it.
The caption distinction carries the whole point. A caption is displayed to everyone who sees the image; alt text is spoken to the readers who cannot. So the string you write answers a question no other OG tag answers: what would you say about this card to someone on a phone with the screen off? og:image:width and og:image:height are hints to a layout engine. og:image:alt is the only property in the family written for a human who never gets pixels.
Real talk: this tag will not move a ranking. Nothing in our data hints that it does, and no platform documents it as a relevance signal. If rankings brought you here, go fix your image file size instead — that one has measurable effects. The reason to add alt text is narrower and less fashionable: a share card is the first thing a blind reader meets when your link lands in a group chat, and right now your card is silent.
What 32 Live Pages Ship
Method: plain GET with a desktop Safari user agent, nothing executed, meta tags parsed from the bytes the server actually sent. Nine of the 45 targets refused the fetcher with a 403 — reddit, medium, stackoverflow, nytimes, etsy, producthunt, npmjs, theatlantic, openai — one answered 202 with an empty body, and three answered 200 with no body at all. Thirty-two pages made it into the count.
| Check | Result | What it means |
|---|---|---|
| Returned parseable HTML | 32 of 45 | Nine 403s and four empty responses dropped |
| Ship an og:image | 29 of 32 (91%) | Image coverage is not the weak link |
| Ship og:image:alt | 3 of 32 (9%) | Ten percent of the pages that have an image |
| Ship twitter:image:alt | 1 of 32 | anthropic.com, the only page setting both |
| Alt text that describes the image | 0 of 3 | All three describe the brand instead |
| Alt shorter than 20 characters | 2 of 3 | Logo, twice, measured |
| 200 but no og:image in server HTML | 3 pages | spotify, digitalocean, microsoft — client-side rendering |
Three alt values across the entire sample. They are worth reading in full, because the failures are not random typos.
| Site | Length | What they wrote | What it reveals |
|---|---|---|---|
| github.com | 186 | The company mission statement | Byte-identical to its own meta description |
| www.anthropic.com | 14 | Anthropic logo | Brand name, no image, no detail |
| ogp.me | 19 | The Open Graph logo | Right instinct from the spec's own homepage |
GitHub is the instructive case. We diffed its alt string against the page's meta description and got an exact match, character for character — someone wired og:image:alt to the description template and never looked at the output. Expect your team to do the same, because the tag sits in the image block while the variable nearest to hand lives in the page block. The template connects them and nobody notices for years.
Where It Surfaces, and Where It Does Not
X documents twitter:image:alt as the accessibility route for cards, capped at 420 characters. The Open Graph twin carries no published ceiling at all; the practical one is far lower, since anything past 150 characters stops being a description and starts being a paragraph. Our sample reads that way too — the only long alt we found was pasted page copy.
The split inside the sample says something about how these get implemented. One page set both tags. Nobody set only the Twitter one. That is not a strategy, it is a memory: whoever built social cards at Anthropic knew X had an alt field, and the other 28 teams inherited a template that predates the tag. When coverage is 9 percent with zero partial failures, you are looking at copy-paste lineage rather than an informed decision.
Which is also the honest limit of the payoff. Some consumers of the tag speak it aloud; plenty render your card and never expose the string anywhere. You are not buying reach. You are buying one line of correctness for readers who navigate by voice, and the cost is a string you can write in two minutes.
How to Write One
- Describe the file, not the page. If your card renders a headline, say so: card reading og:image:alt with a spec line highlighted. That is alt text. The company mission is not.
- Drop the word logo. A screen reader announced the link title a second earlier, and og:title already carries the brand. Logo spends your one sentence on information the reader has.
- Aim at 100 to 150 characters. X stops at 420, and GitHub proved the ceiling is not the constraint — 186 characters of mission statement is inside the limit and still useless as a description.
- Do not leave it empty. Empty alt is correct for a decorative image. An og:image is the entire card, so an empty attribute throws away the only description a voice reader will get.
- Ship twitter:image:alt in the same commit. One page in our sample did both, which means the two tags get forgotten together. Write them as a pair.
- Assert it in CI. GitHub's bug was a variable binding, not a typo. A check that fails when og:image:alt equals your meta description catches the exact mistake that survived years in production.
In static HTML the whole job is two lines:
<meta property="og:image" content="https://example.com/card.png" />
<meta property="og:image:alt" content="Card reading og:image:alt, with the spec line about image descriptions highlighted" />
<meta name="twitter:image:alt" content="Card reading og:image:alt, spec line highlighted" />
In Next.js the Metadata API takes an alt field on each entry in openGraph.images, right beside url, width and height — the official docs for the installed version show it as alt: 'Next.js Logo', which is also a useful reminder of the ceiling we are talking about:
export const metadata = {
openGraph: {
images: [{
url: 'https://example.com/card.png',
width: 1200,
height: 630,
alt: 'Card reading og:image:alt, spec line highlighted',
}],
},
};
One Line
Twenty-six of the 29 pages in our sample that ship a share image leave its description empty, and the three that bothered wired the tag to a brand name or, in GitHub's case, the site description verbatim. The spec asks for a description of what is in the image. It is one line, it is the only accessibility property in the Open Graph family, and it is the most skipped tag we have measured on this site.
Paste your URL into the free OG checker to see whether og:image:alt comes back in the tags a scraper reads, then build the card itself at ogimgen.com. Related reading: the full Open Graph meta tag list covers every property including the ones marked optional, og:url shows the same measured treatment for the tag 11 of 40 pages omitted, and Apple's Messages rules explain the size limits that decide whether your card renders at all.