TL;DR (Too Long; Didn’t Read... o básicamente: mucho texto, dame el resumen rápido)
Todo elemento <iframe> debe poseer obligatoriamente un atributo title que describa su contenido. Sin él, la persona usuaria de lector de pantalla será lanzado a un "agujero negro" de contenido externo sin saber si está entrando a un video de YouTube, un mapa de Google o publicidad.
La barrera de los Marcos sin Nombre
Los iframes son mininavegadores incrustados. Al encontrarse con uno, el lector de pantalla anuncia la entrada a un nuevo documento. Si carece de contexto, incumple el Criterio WCAG 4.1.2 (Nombre, Función, Valor), generando ansiedad y desorientación en la persona usuaria.
El patrón erróneo: Código Accesible Deficiente
Un iframe inyectado directamente desde servicios de terceros sin sanear la accesibilidad.
<!-- MAL: La persona usuaria no sabrá qué hay adentro -->
<iframe src="https://www.google.com/maps/embed?..." width="600" height="450"></iframe>
La Solución Accesible: Código Recomendado
Inyectar un title descriptivo, evitando redundancias como "Iframe de..." o "Marco de...".
<!-- BIEN: Título claro y funcional -->
<iframe
title="Mapa de ubicación de la sede central"
src="https://www.google.com/maps/embed?..."
width="600"
height="450">
</iframe>Metodología de Verificación y Testing
Pruebas Manuales con Lectores de Pantalla
Con NVDA, al navegar a un iframe, el lector anunciará "Marco" seguido del título si existe. Sin title, solo dirá "Marco" y la persona usuaria deberá explorar su contenido para descubrir qué es. Verificar que el anuncio sea descriptivo (ej: "Mapa de ubicación de la sede central, marco").
Inspección del Árbol de Accesibilidad
En Chrome DevTools, seleccionar el iframe y verificar en el panel Accessibility que el Name no esté vacío y sea descriptivo. El rol debe ser Iframe con un nombre que no contenga "iframe de..." o redundancias.
Herramientas Automatizadas
Axe DevTools: la regla frame-title detecta iframes sin atributo title. WAVE también marca este error. Limitación: Las herramientas no pueden verificar si el contenido interno del iframe es accesible (depende del dominio externo).