</>
ValidateHTML

iframe Without an Accessible Name

Screen readers treat frames as landmarks you can jump between, and many offer a list of every frame on the page. That list is built from each frame's accessible name. An iframe with no title, no aria-label and no aria-labelledby has none, so it appears as "frame", or as the raw embed URL, and the user has to enter it to find out what is inside.

Find this error in your own code. Paste your HTML or enter a URL, free and instant.Open the checker
27.2%
of sites tested

How common is this error?

We ran this validator over the home page of the Tranco top 5,000 websites in August 2026. 722 of the 2,656 sites we could reach hit it. That makes it the 5th most common accessibility problem we found, across 915 occurrences. See the full study.

Most frequent wording: The <iframe> has no "title" attribute. It is valid HTML, but a screen reader announces the frame with no name, which fails WCAG 4.1.2.

Why It Matters

This is the most common accessibility defect we find on real sites, and it comes almost entirely from copy-pasted embed snippets: YouTube, Google Maps, payment widgets and consent banners all ship without a title. It fails WCAG 4.1.2 (Name, Role, Value) at Level A. It is not, however, invalid HTML: the standard does not require the attribute, which is why we report it as a warning and not an error.

Common Causes

  • Pasting an embed snippet from YouTube, Vimeo, Google Maps or a payment provider, none of which include a title attribute in the code they hand you.
  • Ad, analytics and consent-management scripts that write frames into the page.
  • A component wrapper where the title prop was made optional and then never passed at any call site.
  • Assuming that aria-hidden on the frame removes the obligation, when it does not and creates a worse problem.

Code Examples

Inaccessible
<!-- Nothing names this frame -->
<iframe src="https://www.youtube.com/embed/abc123"></iframe>

<!-- An empty title names nothing either -->
<iframe src="https://maps.example.com/embed" title=""></iframe>

<!-- Two frames, one name: the frame list is useless again -->
<iframe src="/ad/top" title="Advertisement"></iframe>
<iframe src="/ad/side" title="Advertisement"></iframe>
Accessible
<!-- Describe what is inside -->
<iframe src="https://www.youtube.com/embed/abc123" title="Video: installing the widget in three minutes"></iframe>

<!-- aria-label names it just as well -->
<iframe src="https://maps.example.com/embed" aria-label="Map of our Amsterdam office"></iframe>

<!-- Point at a visible heading so the two stay in sync -->
<h2 id="pricing-table">Pricing comparison</h2>
<iframe src="/embed/pricing" aria-labelledby="pricing-table"></iframe>

<!-- Distinct names when frames repeat -->
<iframe src="/ad/top" title="Advertisement, top of page"></iframe>
<iframe src="/ad/side" title="Advertisement, sidebar"></iframe>

How to Fix

  • 1Add a title that describes the content of the frame, not the frame itself. "Map of our Amsterdam office" beats "Google Maps iframe": the screen reader already announces that it is a frame.
  • 2aria-label and aria-labelledby give an accessible name just as well as title does. Use aria-labelledby when a visible heading already describes the embed, so the two cannot drift apart.
  • 3Make the name unique on the page. Several frames sharing one title rebuilds exactly the problem the name was meant to solve.
  • 4Check every third-party embed snippet you paste. None of the major providers include a title, so this is almost always inherited rather than written.
  • 5For a frame with nothing in it for the user, such as a tracking beacon, the real fix is to keep it out of the initial HTML and inject it from script. If it has to stay in the markup, name it anyway.

Frequently Asked Questions

Is a missing iframe title invalid HTML?
No, and it is worth being precise about this because tools disagree. title is a global attribute and the HTML standard does not require it on iframe. It is a WCAG 4.1.2 failure, not a conformance failure, so our HTML validator reports it as a warning that does not affect validity, and the Accessibility Checker lists it as a real defect. Any validator calling it an error is stating something the specification does not say.
Does aria-label count instead of title?
Yes. WCAG asks for an accessible name, not for one particular attribute. aria-label, aria-labelledby and title all provide one, and if more than one is present, aria-labelledby wins, then aria-label, then title. Our checker accepts all three.
What about ad and tracking frames nobody interacts with?
They still land in the frame list, so they still need a name, and a generic one is fine: "Advertisement, sidebar" is honest and useful. If the frame genuinely has no user-facing purpose, the better answer is not to ship it in the server-rendered HTML at all.
Can I use aria-hidden to skip the frame instead?
No. An iframe is focusable, and aria-hidden on a focusable element strands keyboard users on a control their screen reader refuses to announce. That is a worse failure than the missing name. Name the frame, or remove it from the document.
Is title="" enough to satisfy the check?
No. An empty title, or one containing only spaces, provides no accessible name, so nothing has been fixed. We report it exactly like a missing attribute, which some validators do not, because the outcome for the user is identical.

Check Your Accessibility Now

Our accessibility checker detects this issue automatically.

Open Accessibility Checker

Related Accessibility Errors

View all accessibility errors