<object> elements must have alternate text
An embedded <object> has no text alternative, so its content is invisible to screen readers (WCAG 1.1.1).
What you see
<object> elements must have alternate text (object-alt) Fix any of the following: Element has no inner text aria-label attribute does not exist or is empty aria-labelledby does not reference a valid element Element has no title attribute <object data="/brochure.pdf" type="application/pdf"></object>
What’s actually happening
axe flags an <object> — an embedded PDF, an SVG, a legacy plug-in widget — that exposes no text alternative through any of its allowed channels: inner fallback text, title, aria-label, or aria-labelledby. To a screen reader the embed is a black box; it either announces nothing or a bare "object" or "embedded content," so the user can't tell what's there or whether it matters. axe maps this to WCAG 1.1.1 Non-text Content, Level A. It also fires when the inner text exists but is junk like "This object has no alternative text," which is worse than empty because it sounds intentional.
Common causes
- A PDF or document embedded with <object data="...pdf"> and an empty body — no fallback text, no title
- An <object>-embedded SVG with no title or aria-label, so the graphic's meaning never reaches AT
- A leftover plug-in/Flash-era <object> from old markup that predates anyone caring about alternatives
- The fallback slot filled with placeholder text ("alternative text here") that was never replaced
- A meaningful diagram embedded as an object where the takeaway lives only in the visual, with no equivalent in text
How to fix it
- Put fallback text between the <object> tagsContent inside <object>…</object> is the alternative shown when the object can't render and read by AT. Use it for a real equivalent: <object data="/brochure.pdf" type="application/pdf">Spring 2026 product brochure (PDF) — <a href="/brochure.pdf">download</a>.</object>. For a document, a link to the file is a good fallback so the content is reachable either way.
- Or name it with title / aria-labelWhen inner content doesn't fit, give the object an accessible name directly: title="Spring 2026 product brochure" or aria-label="Office location map". If a visible caption already describes it, point aria-labelledby at that element's id rather than retyping the text.
- For embedded SVG, add a real descriptionAn <object>-loaded SVG that carries meaning needs more than a name — give the source SVG a <title> (and <desc> for detail) referenced via aria-labelledby, or set aria-label on the object. A decorative SVG that adds nothing can take aria-hidden="true" instead so AT skips it cleanly.
- Reconsider <object> for documentsEmbedding a PDF in <object> is often more trouble than it's worth for accessibility. A plain link to the file (with the source PDF tagged for accessibility) is frequently the better answer — the user opens it in a real PDF reader with full AT support, and there's no embed to caption.
- Re-scan and listenRe-run axe to clear object-alt, then navigate to the embed with VoiceOver or NVDA and confirm it announces the name or fallback you set — not "object" and not the placeholder string. The tool checks an alternative exists; only a screen reader confirms it actually describes the thing.
Stop it recurring
Treat every <object> like an <img>: require a meaningful inner text or title at insert time, and prefer a direct link for embedded documents.