iframe without a title (frame-title)

The frame-title rule flags an <iframe> (or <frame>) that has no accessible name. A screen reader then has nothing reliable to announce – depending on the software, people hear just "frame", a web address or whatever title the embedded document happens to have – and cannot tell a map from a video from an advert before they enter it. The fix is a short, descriptive title attribute: <iframe title="Map: our office in Berlin" …>.

What the rule means

An iframe is a separate document inside the page. Assistive technology treats it as its own region and needs a name to announce it. WCAG 4.1.2 Name, Role, Value requires that user interface components have a name that software can determine; axe-core maps this rule to 4.1.2.

The rule passes when the frame has any of these:

  • a non-empty title attribute – the usual way;
  • aria-label, or aria-labelledby pointing to visible text;
  • role="presentation" or role="none".

Not checked: frames with a negative tabindex and frames hidden with CSS, such as display: none.

What the rule does not check: whether the name describes the content. title="iframe", title="Embedded content" or the generic "YouTube video player" from a copied embed code all pass, but none tells people which video or map they are about to enter.

Who is affected

Mainly blind people using a screen reader. When they reach an iframe, the screen reader announces its name; some screen readers also offer a list of frames on the page. Without a name, every embed sounds the same, and the only way to find out what is inside is to go in and explore. A missing name costs time on every page with an embed.

Why the check fails

  • Embed codes copied from map, calendar, booking or form services that come without a title.
  • CMS embed blocks and page builders that strip or never output the attribute.
  • Third-party widgets – chat, reviews, social feeds, adverts – that inject their own iframes.
  • Tracking and consent iframes that show nothing but are still exposed to assistive technology.
  • Legacy framesets in old intranets and archives.
  • JavaScript that creates iframes, for example lazy-loaded video players, without setting a name.

How to fix it

  1. Give every visible iframe a title that says what is inside: "Map: our office in Berlin", "Video: installing the wall bracket (3 min)".
  2. Change the generic names from embed codes – "YouTube video player" – to something specific.
  3. For frames that hold nothing for people, such as tracking pixels, hide them from everyone (hidden or display: none) instead of inventing a name.
  4. For third-party widgets you cannot change, raise it with the vendor and log the finding with a reason.
<!-- Before: an embedded map with no name -->
<h2>How to find us</h2>
<iframe class="office-map" src="/embed/office-map.html"
        width="600" height="400" loading="lazy"></iframe>
<!-- After: the title says what the frame contains -->
<h2>How to find us</h2>
<iframe class="office-map" src="/embed/office-map.html"
        title="Map: Example Ltd office, Berlin"
        width="600" height="400" loading="lazy"></iframe>

The title can repeat the visible heading, but should still make sense on its own, since screen readers may list frames out of context.

How to test it manually

  1. In the browser console, list every frame and its name: [...document.querySelectorAll('iframe')].map(f => f.title). An empty string means no title.
  2. Read each title and ask: would I know what is inside without seeing it?
  3. With a screen reader (NVDA on Windows, VoiceOver on macOS), tab or arrow to the embed and listen to what is announced.
  4. Check the content inside the frame too – a video player's own buttons need names, and those are checked inside the frame, not by this rule.

4.1.2 Name, Role, Value, Level A. Related: 2.4.1 Bypass Blocks, because named frames help people skip content blocks, and 1.3.1 Info and Relationships.

How Reviseberg reports it

Reviseberg runs frame-title on every crawled page at 1280px. Embeds in the header or footer – a map, a chat widget – show up on every page, so the page count tells you whether a template or a single article is the cause. The issue list shows the rule with its severity, WCAG criterion 4.1.2 and level, the number of elements and pages, and the points you get back by fixing it. The detail view shows the selector, the HTML snippet with the frame's src and every affected page. For a third-party widget you cannot change, you can mark the finding "can't fix" with a reason; "ignore" and "false positive" are there too, and every decision is logged.

Whether a title actually describes its frame is not something a crawl decides. With no findings, 4.1.2 shows as partly checked, not passed, until a person records a manual result.

  • undefined – the same idea for the page itself.
  • undefined – buttons with no accessible name, often inside embedded players.
  • undefined – links with no accessible name.

Check every embed on your site – get a free scan

Frequently asked questions

Is title on an iframe really enough?

Yes. For iframes, title is the established way to provide the name, and screen readers announce it. aria-label works too.

Does "YouTube video player" count as a good title?

It passes the rule, but it does not say which video. Replace it with the video's topic.

Do hidden iframes need a title?

Frames hidden with CSS are not checked, because nobody can reach them. If a tracking frame is visible to assistive technology, hide it properly instead of naming it.

Does this rule check the content inside the iframe?

No. axe-core checks the content of a frame separately, as its own document, where it can reach it.

Sources

  1. W3C, Understanding SC 4.1.2 Name, Role, Value – https://www.w3.org/WAI/WCAG22/Understanding/name-role-value
  2. Deque University, axe-core 4.13 rule frame-title – https://dequeuniversity.com/rules/axe/4.13/frame-title
  3. W3C, Technique H64: Using the title attribute of the iframe element – https://www.w3.org/WAI/WCAG22/Techniques/html/H64
  4. W3C, ACT rule: Iframe element has accessible name – https://www.w3.org/WAI/standards-guidelines/act/rules/cae760/

See what a scan finds on your site

One page in about thirty seconds, no email needed. The full report covers up to 100 pages and a keyboard journey.