Screen reader users rely on frame titles to understand embedded content. Without titles, iframes become mysterious black boxes that users must enter to understand.
Your page has <iframe> or <frame> elements without a title attribute. Screen readers announce frames as navigation landmarks, but without titles, users hear only "frame" with no indication of what's inside. They must enter the frame, explore it, and exit to continue, which wastes time and causes confusion.
document.querySelectorAll('iframe, frame').forEach((el) => {
if (!el.title || el.title.trim() === '') {
console.log('Missing title:', el)
}
})
Give each frame a title describing its purpose:
<!-- Before -->
<iframe src="https://www.youtube.com/embed/dQw4w9WgXcQ"></iframe>
<!-- After -->
<iframe
src="https://www.youtube.com/embed/dQw4w9WgXcQ"
title="Product demonstration video">
</iframe>
<!-- Google Maps -->
<iframe
src="https://www.google.com/maps/embed?..."
title="Map showing our office location in San Francisco">
</iframe>
<!-- Social media embeds -->
<iframe
src="https://platform.twitter.com/embed/..."
title="Twitter post from @company about product launch">
</iframe>
<!-- Third-party widgets -->
<iframe
src="https://calendly.com/embed/..."
title="Schedule a meeting with our sales team">
</iframe>
<!-- Advertising (if unavoidable) -->
<iframe
src="https://ads.example.com/..."
title="Advertisement">
</iframe>
For iframes that provide no user content (tracking pixels, technical embeds):
<iframe
src="https://tracking.example.com/pixel"
title=""
aria-hidden="true"
style="display: none">
</iframe>
Note: Empty title with aria-hidden="true" hides the frame from assistive technology entirely.
<template>
<iframe
:src="videoUrl"
title="Customer testimonial video from John Smith"
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media"
/>
</template>
@nuxt/youtube, check that the component passes through title attributes.For React, ensure title is a required prop or add ESLint rules:
// Good pattern: require title prop
function VideoEmbed({ src, title }) {
if (!title) {
console.warn('VideoEmbed requires a title for accessibility')
}
return (
<iframe
src={src}
title={title}
loading="lazy"
/>
)
}
title="https://youtube.com/..." tells users nothing. Describe what they'll find.Frame title issues often appear alongside:
Iframes often appear on specific page types like blog posts with videos or contact pages with maps. Unlighthouse crawls your entire site running Lighthouse on each page, catching frame title issues wherever they appear so you can fix embed patterns at the source.
Document Title
Learn how to fix missing document title in Lighthouse accessibility audits. The title gives screen reader users an overview of the page.
Heading Order
Learn how to fix heading order issues in Lighthouse accessibility audits. Properly ordered headings convey semantic structure for easier navigation.