Page title, frames and zoom Rule

Frames must have a title frame-title

An iframe is a window onto another page: a map, a video, a booking form, a payment field. Screen readers announce it as a frame and read its title so the person knows whether to go in. With no title they hear frame and the address, or nothing. Add a title attribute that says what the frame holds.

Websight reports this as Frames must have an accessible name

Who it affects

Someone using a screen reader on the village hall's contact page hears frame, frame, frame, and has to enter each one to find out which is the map and which is the booking form.

Someone who jumps between frames with a screen reader's frame list sees three entries all called frame.

Someone who has blocked third-party content sees a grey box and no clue what was meant to be there.

Broken versus fixed

The broken markup is shown as code rather than rendered, because the effect is in how it is announced or handled, not how it looks.

Broken
<iframe src="https://maps.example/embed?q=village+hall" width="400" height="250"></iframe>

Announced: frame, maps.example/embed. A screen reader user has to go in to find out it is a map.

Fixed
<iframe src="https://maps.example/embed?q=village+hall" width="400" height="250" title="Map showing the village hall on Church Lane"></iframe>

Announced: frame, Map showing the village hall on Church Lane.

Test it by hand in two minutes

  1. In the Elements panel search for <iframe. Each one should have a title attribute with real words in it.
  2. With a screen reader, Tab to each frame or open its frame list (the VoiceOver rotor, or NVDA's elements list). Each name should say what is inside.
  3. Check embedded players and forms you did not write: YouTube, Google Maps, Stripe. Most let you add a title to the embed code.
  4. Read the titles together. If two say the same thing, see frame-title-unique.

The fix

Before
<iframe src="https://maps.example/embed?q=village+hall"></iframe>
After
<iframe src="https://maps.example/embed?q=village+hall" title="Map showing the village hall on Church Lane"></iframe>

Say what the frame contains, not that it is a frame. Map of the hall is better than Embedded iframe.

Video embed

Before
<iframe src="https://video.example/embed/8a2"></iframe>
After
<iframe src="https://video.example/embed/8a2" title="Video: setting up the hall for a wedding"></iframe>

The provider's embed code usually has an empty or generic title. Edit it.

Frame nobody should read

Before
<iframe src="/analytics.html"></iframe>
After
<iframe src="/analytics.html" title="Analytics" hidden></iframe>

Frames with nothing for a person in them can be hidden from everyone. Hidden frames are not flagged.

Common mistakes

  • title="iframe" or title="embed".
  • Relying on the title of the document inside the frame; some screen readers use it, but only once the frame has loaded, and not all do.
  • Using aria-label without a title. It works for screen readers, but title is simpler and also gives a tooltip.
  • Leaving the provider's default, such as YouTube video player, on every video.

WCAG criteria this rule maps to

axe-core tags this rule as WCAG 2.2 level A. It is one of the checks for:

The scanner checks each iframe and frame for an accessible name: a title attribute, aria-label or aria-labelledby. It cannot tell whether the words describe what is inside. Automated tools find only part of the accessibility problems on a page; a pass on this rule is not a pass on the criterion.

Scan your own page for this and 63 other checks

Open any page in Chrome, click Websight, and get a score out of 100 with every issue explained and a draft fix snippet per element.

Add Websight to Chrome

Free scans, no account, nothing leaves your computer. Automated tools find only part of the problems; the extension says so on every report.