Ver contenido
Hub de Cumplimiento WCAG 2.2: Guía Completa de Accesibilidad Web
Introducción
La accesibilidad web asegura que los sitios web y aplicaciones puedan ser utilizados por todos, incluyendo personas con discapacidades. Las Pautas de Accesibilidad para el Contenido Web (WCAG) 2.2 son el estándar internacional para accesibilidad web, proporcionando un marco completo para hacer el contenido web perceptible, operable, comprensible y robusto.
Más allá de la responsabilidad ética, el cumplimiento de WCAG es cada vez más un requisito legal en muchas jurisdicciones y proporciona beneficios significativos de SEO—los sitios web accesibles tienden a posicionar mejor porque tienen mejor estructura, contenido más claro y mejor experiencia de usuario para todos los visitantes.
Esta página hub reúne todos los recursos para lograr y mantener el cumplimiento de WCAG 2.2.
Por Qué Importa el Cumplimiento de WCAG
El Caso de Negocio
Impacto de la Accesibilidad:
┌─────────────────────────────────────────────────────────┐
│ 15% de la población mundial tiene alguna discapacidad │
│ Más de 1 billón de personas se benefician │
│ $8 trillones en poder adquisitivo anual │
│ 71% de usuarios discapacitados abandonan sitios │
└─────────────────────────────────────────────────────────┘
Beneficios Clave
| Beneficio | Impacto |
|---|---|
| Cumplimiento Legal | Evitar demandas y penalidades regulatorias |
| Mayor Audiencia | Alcanzar 15%+ más usuarios potenciales |
| Mejor SEO | Los motores de búsqueda favorecen sitios accesibles |
| Mejor UX | Beneficia a todos los usuarios |
| Reputación de Marca | Demuestra responsabilidad corporativa |
Requisitos Legales
- ADA (EEUU): Ley de Americanos con Discapacidades
- Section 508 (EEUU): Requisitos federales de accesibilidad
- EU Accessibility Act: Directiva de la Unión Europea
- Ley 20.422 (Chile): Ley de Igualdad de Oportunidades
- EN 301 549 (UE): Estándar europeo de accesibilidad
Estructura de WCAG 2.2
Los Cuatro Principios (POUR)
WCAG se construye alrededor de cuatro principios fundamentales:
PERCEPTIBLE
├── Los usuarios deben poder percibir la información
├── El contenido debe ser presentable de formas accesibles
└── Ejemplos: Texto alternativo, subtítulos, contraste
OPERABLE
├── Los usuarios deben poder operar la interfaz
├── La navegación debe ser accesible por todos los métodos
└── Ejemplos: Acceso por teclado, sin límites de tiempo
COMPRENSIBLE
├── Los usuarios deben entender la información e interfaz
├── El contenido debe ser legible y predecible
└── Ejemplos: Etiquetas claras, identificación de errores
ROBUSTO
├── El contenido debe ser robusto para varias tecnologías
├── Debe funcionar con tecnologías de asistencia
└── Ejemplos: HTML válido, compatibilidad ARIA
Niveles de Conformidad
WCAG tiene tres niveles de conformidad:
| Nivel | Significado | Requisitos |
|---|---|---|
| Nivel A | Accesibilidad mínima | Requisitos esenciales |
| Nivel AA | Accesibilidad aceptable | Estándar para mayoría de leyes |
| Nivel AAA | Accesibilidad óptima | Estándar más alto |
Recomendación: Apuntar a Nivel AA como estándar para la mayoría de sitios web—equilibra accesibilidad con implementación práctica.
Criterios de Éxito por Principio
Principio 1: Perceptible (29 criterios)
Criterios clave:
- 1.1.1 Contenido No Textual (A): Texto alternativo para imágenes
- 1.3.1 Información y Relaciones (A): Estructura semántica
- 1.4.3 Contraste Mínimo (AA): Contraste de texto 4.5:1
- 1.4.11 Contraste No Textual (AA): Contraste UI 3:1
- 1.4.13 Contenido en Hover/Focus (AA): Overlays descartables
Principio 2: Operable (29 criterios)
Criterios clave:
- 2.1.1 Teclado (A): Toda funcionalidad vía teclado
- 2.4.1 Saltar Bloques (A): Enlaces para saltar navegación
- 2.4.4 Propósito del Enlace (A): Texto de enlace descriptivo
- 2.4.7 Foco Visible (AA): Indicadores de foco visibles
- 2.5.5 Tamaño del Objetivo (AAA): Mínimo táctil 44×44px
Principio 3: Comprensible (17 criterios)
Criterios clave:
- 3.1.1 Idioma de la Página (A): Atributo HTML lang
- 3.2.1 Al Recibir Foco (A): Sin cambios inesperados
- 3.3.1 Identificación de Errores (A): Mensajes de error claros
- 3.3.2 Etiquetas o Instrucciones (A): Etiquetas de formulario
Principio 4: Robusto (3 criterios)
Criterios clave:
- 4.1.1 Análisis (A): HTML válido (obsoleto en 2.2)
- 4.1.2 Nombre, Rol, Valor (A): Componentes accesibles
- 4.1.3 Mensajes de Estado (AA): Anunciar cambios de estado
Hoja de Ruta de Implementación
Fase 1: Victorias Rápidas (Semana 1-2)
Enfócate en correcciones de alto impacto y bajo esfuerzo:
-
Agregar texto alternativo a todas las imágenes
<img src="producto.jpg" alt="Zapatillas running azules, talla 42"> -
Corregir problemas de contraste de color
- Texto: mínimo 4.5:1
- Texto grande: mínimo 3:1
-
Agregar atributo HTML lang
<html lang="es"> -
Asegurar etiquetas de formulario
<label for="email">Correo Electrónico</label> <input type="email" id="email" name="email"> -
Agregar enlace de salto
<a href="#main" class="skip-link">Saltar al contenido principal</a>
Fase 2: Mejoras Estructurales (Semana 3-4)
-
Implementar HTML semántico
<header>...</header> <nav>...</nav> <main> <article> <h1>...</h1> <section>...</section> </article> </main> <footer>...</footer> -
Corregir jerarquía de encabezados
- Un H1 por página
- Encabezados secuenciales (sin saltar niveles)
-
Agregar landmarks ARIA
<nav aria-label="Navegación principal">...</nav> <main aria-label="Contenido principal">...</main> -
Implementar gestión de foco
:focus { outline: 2px solid #005fcc; outline-offset: 2px; }
Fase 3: Elementos Interactivos (Semana 5-6)
-
Navegación por teclado
- Todos los elementos interactivos enfocables
- Orden de tab lógico
- Sin trampas de teclado
-
Accesibilidad de formularios
- Identificación de errores
- Indicadores de campos requeridos
- Mensajes de validación de entrada
-
Componentes personalizados
- Roles ARIA apropiados
- Soporte de teclado
- Gestión de foco
Fase 4: Media y Avanzado (Semana 7-8)
-
Subtítulos de video
<video> <track kind="captions" src="subtitulos.vtt" srclang="es"> </video> -
Transcripciones de audio
-
Imágenes complejas
- Gráficos con tablas de datos
- Infografías con descripciones
-
Consideraciones de movimiento
@media (prefers-reduced-motion: reduce) { * { animation: none !important; } }
Pruebas de Cumplimiento WCAG
Herramientas de Pruebas Automatizadas
| Herramienta | Tipo | Mejor Para |
|---|---|---|
| axe DevTools | Extensión de navegador | Escaneos rápidos |
| WAVE | Extensión de navegador | Feedback visual |
| Lighthouse | Chrome DevTools | Rendimiento + a11y |
| Pa11y | Herramienta CLI | Integración CI/CD |
| axe-core | Paquete npm | Testing automatizado |
Lista de Verificación Manual
Pruebas de Teclado:
- [ ] Navegar toda la página con Tab
- [ ] Usar Enter/Espacio para activar
- [ ] Escape para cerrar modales
- [ ] Sin trampas de foco
Pruebas con Lector de Pantalla:
- [ ] Probar con NVDA (Windows)
- [ ] Probar con VoiceOver (Mac/iOS)
- [ ] Probar con TalkBack (Android)
Pruebas Visuales:
- [ ] Zoom al 200%
- [ ] Probar modo alto contraste
- [ ] Verificar con simuladores de daltonismo
Ejemplo de Código de Pruebas
// Usando axe-core para testing automatizado
const { AxeBuilder } = require('@axe-core/playwright');
test('no debe tener violaciones de accesibilidad', async ({ page }) => {
await page.goto('/');
const results = await new AxeBuilder({ page })
.withTags(['wcag2a', 'wcag2aa', 'wcag22aa'])
.analyze();
expect(results.violations).toEqual([]);
});
Violaciones Comunes de WCAG
Top 10 Problemas Más Comunes
-
Falta texto alternativo (1.1.1)
- 58% de imágenes carecen de alt text apropiado
-
Bajo contraste de color (1.4.3)
- Texto gris claro sobre fondos blancos
-
Falta etiquetas de formulario (1.3.1, 3.3.2)
- Texto placeholder no es una etiqueta
-
Falta idioma del documento (3.1.1)
- Sin
<html lang="es">
- Sin
-
Enlaces vacíos (2.4.4)
- Enlaces sin texto o aria-label
-
Falta indicadores de foco (2.4.7)
outline: nonesin alternativa
-
Estructura de encabezados incorrecta (1.3.1)
- Saltar niveles de encabezado
-
Inaccesible por teclado (2.1.1)
- Controles personalizados no enfocables
-
Falta enlaces de salto (2.4.1)
- Sin forma de saltar navegación
-
Enlaces no descriptivos (2.4.4)
- “Haz clic aquí” o “Leer más”
Correcciones Rápidas
<!-- Mal: Sin alt -->
<img src="foto.jpg">
<!-- Bien: Alt descriptivo -->
<img src="foto.jpg" alt="Reunión de equipo en sala de conferencias">
<!-- Mal: Placeholder como etiqueta -->
<input placeholder="Email">
<!-- Bien: Etiqueta apropiada -->
<label for="email">Correo Electrónico</label>
<input type="email" id="email">
<!-- Mal: Enlace no descriptivo -->
<a href="/informe.pdf">Haz clic aquí</a>
<!-- Bien: Enlace descriptivo -->
<a href="/informe.pdf">Descargar Informe Financiero Q4 (PDF)</a>
Nuevos Criterios de Éxito de WCAG 2.2
WCAG 2.2 (publicado 2023) agrega 9 nuevos criterios de éxito:
Nivel A (Nuevos)
- 2.4.11 Foco No Oscurecido (Mínimo): Elemento enfocado debe ser al menos parcialmente visible
- 3.2.6 Ayuda Consistente: Mecanismos de ayuda en ubicación consistente
- 3.3.7 Entrada Redundante: No requerir reingreso de misma información
Nivel AA (Nuevos)
- 2.4.12 Foco No Oscurecido (Mejorado): Elemento enfocado completamente visible
- 2.4.13 Apariencia del Foco: Requisitos mejorados de indicador de foco
- 2.5.7 Movimientos de Arrastre: Alternativa a drag-and-drop
- 2.5.8 Tamaño del Objetivo (Mínimo): Mínimo táctil 24×24px
- 3.3.8 Autenticación Accesible (Mínimo): Login sin test de función cognitiva
Nivel AAA (Nuevo)
- 3.3.9 Autenticación Accesible (Mejorado): Sin reconocimiento de objetos/imágenes requerido
Recursos por Tema
Perceptible (Principio WCAG 1)
Color y Contraste (7.1)
- Contraste de Color Explicado - Requisitos WCAG 1.4.3
- Guía de Optimización de Contraste de Color - Patrones de implementación
Imágenes y Texto Alternativo (7.2)
- Texto Alternativo Explicado - Requisitos WCAG 1.1.1
- Guía de Implementación de Texto Alternativo - Escribir texto alternativo efectivo
Imágenes de Texto (7.14)
- Imágenes de Texto Explicado - Requisitos WCAG 1.4.5
- Guía de Implementación de Imágenes de Texto - Alternativas CSS
Redimensionar Texto (7.13)
- Redimensionar Texto Explicado - Requisitos WCAG 1.4.4
- Guía de Implementación de Redimensionar Texto - Tipografía responsive
Operable (Principio WCAG 2)
Navegación por Teclado (7.5)
- Navegación por Teclado Explicado - Requisitos WCAG 2.1.1
- Guía de Implementación de Navegación por Teclado - Soporte completo de teclado
Indicadores de Foco (7.6)
- Indicadores de Foco Explicado - Requisitos WCAG 2.4.7
- Guía de Implementación de Indicadores de Foco - Estados de foco visibles
Enlaces de Salto (7.7)
- Enlaces de Salto Explicado - Requisitos WCAG 2.4.1
- Guía de Implementación de Enlaces de Salto - Omitir bloques
Objetivos Táctiles (7.8)
- Objetivos Táctiles Explicado - Requisitos WCAG 2.5.5 y 2.5.8
- Guía de Implementación de Objetivos Táctiles - Tamaños mínimos
Propósito de Enlaces (7.9)
- Propósito de Enlaces Explicado - Requisitos WCAG 2.4.4
- Guía de Implementación de Propósito de Enlaces - Enlaces descriptivos
Navegación Consistente (7.15)
- Navegación Consistente Explicado - Requisitos WCAG 3.2.3
- Guía de Implementación de Navegación Consistente - Menús predecibles
Comprensible (Principio WCAG 3)
Atributos de Idioma (7.12)
- Atributos de Idioma Explicado - Requisitos WCAG 3.1.1 y 3.1.2
- Guía de Implementación de Atributos de Idioma - Uso de HTML lang
Formularios y Etiquetas (7.3)
- Etiquetas de Formulario Explicado - Requisitos WCAG 1.3.1 y 3.3.2
- Guía de Implementación de Etiquetas de Formulario - Patrones de formularios accesibles
Identificación de Errores (7.11)
- Identificación de Errores Explicado - Requisitos WCAG 3.3.1
- Guía de Implementación de Identificación de Errores - Patrones de manejo de errores
Robusto (Principio WCAG 4)
Cumplimiento ARIA (7.4)
- Etiquetas ARIA Explicado - Requisitos WCAG 4.1.2
- Guía de Implementación de Etiquetas ARIA - Mejores prácticas de ARIA
HTML Semántico (7.10)
- HTML Semántico Explicado - Requisitos de estructura HTML
- Guía de Implementación de HTML Semántico - Patrones de marcado semántico
Hubs Relacionados
- Hub de Componentes Accesibles - Componentes ARIA
- Hub de SEO Técnico - Optimizaciones técnicas
- Hub de Fundamentos SEO Básico - SEO fundamental
Plantilla de Declaración de Accesibilidad
<h1>Declaración de Accesibilidad</h1>
<p>[Nombre de Empresa] está comprometido con asegurar la accesibilidad
digital para personas con discapacidades. Mejoramos continuamente la
experiencia de usuario para todos y aplicamos estándares de accesibilidad
relevantes.</p>
<h2>Estado de Conformidad</h2>
<p>Este sitio web cumple con WCAG 2.2 Nivel AA. Probamos regularmente
nuestro sitio usando herramientas automatizadas y testing manual.</p>
<h2>Comentarios</h2>
<p>Agradecemos tus comentarios sobre accesibilidad. Contáctanos:</p>
<ul>
<li>Email: [email protected]</li>
<li>Teléfono: +56 X XXXX XXXX</li>
</ul>
<h2>Especificaciones Técnicas</h2>
<p>Este sitio utiliza HTML, CSS, JavaScript y WAI-ARIA.</p>
<p>Última actualización: [Fecha]</p>
Monitoreo y Mantenimiento
Tareas Continuas
- Escaneos automatizados: Ejecutar axe-core en pipeline CI/CD
- Feedback de usuarios: Proporcionar contacto de accesibilidad
- Auditorías regulares: Testing manual trimestral
- Capacitación: Educar al equipo de desarrollo
- Documentación: Mantener declaración de accesibilidad
Métricas de Accesibilidad
Métricas a Rastrear:
├── Número de violaciones WCAG (por severidad)
├── Cobertura de tests automatizados
├── Feedback/quejas de usuarios
├── Compatibilidad con lectores de pantalla
└── Tasa de completación de navegación por teclado
Referencia Rápida
Verificaciones Esenciales
| Verificación | WCAG | Nivel | Prueba Rápida |
|---|---|---|---|
| Texto alt | 1.1.1 | A | Revisar todas las imágenes |
| Contraste | 1.4.3 | AA | Usar verificador de contraste |
| Etiquetas | 1.3.1 | A | Inspeccionar inputs |
| Lang | 3.1.1 | A | Revisar <html lang> |
| Teclado | 2.1.1 | A | Navegar con Tab |
| Foco | 2.4.7 | AA | Tab y observar foco |
| Encabezados | 1.3.1 | A | Verificar jerarquía |
Bookmarklets Útiles
// Resaltar imágenes sin alt
javascript:(function(){document.querySelectorAll('img:not([alt])').forEach(img=>img.style.border='5px solid red')})();
// Mostrar esquema de encabezados
javascript:(function(){document.querySelectorAll('h1,h2,h3,h4,h5,h6').forEach((h,i)=>h.style.outline='2px solid hsl('+i*60+',100%,50%)')})();
Referencias
- W3C - Especificación WCAG 2.2
- WebAIM - Checklist WCAG 2
- W3C - Entendiendo WCAG 2.2
- W3C - Iniciativa de Accesibilidad Web
- A11Y Project - Checklist
- Deque - axe DevTools
- US Access Board - Section 508