Does each frame have a frame title?

A screen reader user navigating a page encounters an <iframe>. Without a title attribute, their tool announces the source URL or nothing useful. They don't know if this frame contains a video, a map, a payment form, or an ad banner. They must enter blindly to find out.

The title attribute on an <iframe> solves this problem: it allows the user to read the nature of the content before deciding to enter it. It's the only signal available at this stage. Criterion 2.1 checks one specific thing: is the title attribute present on each frame? No judgment on text quality — that's the role of criterion 2.2. Here, we're checking presence.

In practice, HTML4 <frame> elements from 2000s framesets have disappeared from nearly all websites. It's modern <iframe> elements that matter: YouTube videos, Google Maps, chat widgets, Typeform forms, podcast players. Each must carry a non-empty title. No exceptions.

Un test to verify that each inline frame has a title

Presence of title on <iframe> and <frame>

  1. Identify all <iframe> and <frame> elements in the rendered DOM (including those dynamically injected by JavaScript).
  2. For each frame found, verify that the title attribute is present.
  3. Verify that the value of this attribute is not empty (title="" does not constitute a frame title).
  4. If each frame has a non-empty title, the test is validated. A single frame without title, or with an empty title, causes the test to fail.

Examples

❌ Non-compliant : YouTube iframe without title attribute

<iframe
  width="560"
  height="315"
  src="https://www.youtube.com/embed/dQw4w9WgXcQ"
  allowfullscreen>
</iframe>

Without title, NVDA or JAWS announces the iframe URL when focus reaches it. The user hears something like « youtube.com embed dQw4w9WgXcQ frame », which doesn't allow them to decide whether to enter this frame or skip it.

✅ Compliant : YouTube iframe with descriptive title

<iframe
  width="560"
  height="315"
  src="https://www.youtube.com/embed/dQw4w9WgXcQ"
  title="YouTube video: presentation of our accessibility audit method"
  allowfullscreen>
</iframe>

The screen reader announces the title when focus reaches the frame. The user immediately knows this is a YouTube video on a specific topic. They can choose to enter it or continue browsing.

Tips and pitfalls

⚠️ title="" : present in the DOM, not compliant with the criterion

An empty title attribute is technically present but does not constitute a frame title. The RGAA definition of « frame title » implies descriptive text. In an audit, title="" is flagged as non-compliant with criterion 2.1, just as a total absence of the attribute would be.

⚠️ Iframes injected by third-party scripts are also in scope

<iframe> elements created dynamically by analytics scripts, ads, chat (Intercom, Drift), or via Google Tag Manager are subject to the same criterion. In an audit, they are flagged even if you didn't write the code. If you don't control the script, document the defect and pass it on to the relevant service provider.

💡 Criterion 2.1 and criterion 2.2 : two separate checks

Criterion 2.1 checks only the presence of title. Criterion 2.2 checks its relevance. In an audit, treat them in two separate passes. A title="frame" is compliant with 2.1, non-compliant with 2.2. This separation prevents classification errors in the compliance report.

⚠️ An iframe can trigger two audits in one

When an <iframe> loads an entire page — third-party form, booking module, configuration tool — that page must itself be RGAA-compliant. A single non-compliant frame in the sample can disproportionately drop the overall compliance rate. This is a known limitation of compliance rate calculations.

⚠️ HTML4 <frame> tags are nearly gone

The <frame> tag belonged to HTML4 framesets, abundantly used in the 1990s-2000s and formally obsolete in HTML5. You'll still find them in old intranets or legacy applications. If you encounter them, the rule is identical: a non-empty title attribute is required.

Frequently asked questions

Why doesn't the default YouTube title always satisfy RGAA criterion 2.1?

For criterion 2.1, it does: the value is non-empty, the presence criterion is met. For criterion 2.2, however, the question is debated in the RGAA community. Some auditors accept a generic title like « YouTube », others require a title describing the video's specific content. To cover both criteria without ambiguity, customize the title with the actual topic of the video.

How do you detect dynamically injected iframes during a RGAA audit?

Inspect the rendered DOM in DevTools (Elements tab or Inspector), not the initial HTML source. Iframes injected by JavaScript don't appear in the source but are visible in the DOM. Includdy detects them and automatically reports the absence or emptiness of title.

How do you handle the title of an iframe hidden with display:none under criterion 2.1?

The RGAA does not explicitly exempt CSS-hidden elements. Auditors typically don't flag iframes with permanent display:none, as they are inaccessible to assistive technologies. However, if the iframe can become visible dynamically (widget that opens, modal), it must carry a title when initially rendered.

How do you choose between internal content and frame nature for an iframe RGAA title?

It describes the nature of the content the user will find if they enter the frame. The title does not label elements inside the iframe, but gives an overview of what the frame contains. The RGAA glossary specifies that the title must indicate the « nature of the content ». Example: title="Google Maps: location of our Paris 11e office".

References