Docker Mantenimiento Freelance Branding

Mejores IA: Accesibilidad: errores comunes en 2025

Pablo Alcalde García

Mejores IA: Accesibilidad: errores comunes en 2025

Las mejores prácticas de accesibilidad web en 2025, enfocadas en los errores más comunes que debes evitar. Guía práctica con ejemplos de código y soluciones inmediatas.

Los 7 errores de accesibilidad más críticos en 2025

1. Falta de texto alternativo descriptivo

Impacto: Alto - Afecta a usuarios con discapacidad visual

El error:

<img src="producto.jpg">
<!-- o -->
<img src="producto.jpg" alt="imagen">

Solución:

<!-- Para imágenes informativas -->
<img src="laptop-dell-xps.jpg" 
     alt="Laptop Dell XPS 13 con pantalla táctil de 13.3 pulgadas, procesador Intel i7, 16GB RAM, en color plata">

<!-- Para imágenes decorativas -->
<img src="separador.jpg" alt="">

<!-- Para imágenes con texto -->
<img src="logo-empresa.png" alt="TechSolutions - Soluciones tecnológicas innovadoras">

2. Contraste de color insuficiente

Impacto: Alto - Afecta legibilidad para todos los usuarios

Requisitos WCAG 2.1 AA:

  • Texto normal: mínimo 4.5:1
  • Texto grande (18pt+ o 14pt+ negrita): mínimo 3:1

Solución:

/* ❌ Incorrecto - Ratio: 2.1:1 */
.texto-secundario { color: #AAAAAA; }

/* ✅ Correcto - Ratio: 7.1:1 */
.texto-secundario { color: #333333; }

/* Para texto sobre imágenes */
.overlay-text {
  color: #FFFFFF;
  background: rgba(0, 0, 0, 0.7);
  padding: 8px;
}

3. Formularios sin etiquetas asociadas

Impacto: Crítico - Bloquea completamente el uso de formularios

El error:

<input type="email" placeholder="Email">
<input type="password" placeholder="Contraseña">

Solución:

<div class="form-group">
  <label for="email">Correo electrónico</label>
  <input 
    type="email" 
    id="email" 
    name="email"
    required
    aria-required="true">
</div>

<div class="form-group">
  <label for="password">Contraseña</label>
  <input 
    type="password" 
    id="password" 
    name="password"
    required
    aria-required="true"
    aria-describedby="password-help">
  <span id="password-help" class="help-text">
    Mínimo 8 caracteres, incluye mayúsculas y números
  </span>
</div>

4. Navegación que no funciona con teclado

Impacto: Crítico - Bloquea acceso completo al sitio

El error: Menús desplegables solo con hover, botones sin focus.

Solución:

<!-- Menú accesible -->
<nav aria-label="Navegación principal">
  <button 
    aria-expanded="false"
    aria-controls="submenu"
    id="menu-toggle">
    Productos
  </button>
  <ul id="submenu" hidden>
    <li><a href="/productos/web">Desarrollo Web</a></li>
    <li><a href="/productos/mobile">Apps Móviles</a></li>
  </ul>
</nav>

<style>
/* Focus visible */
button:focus-visible,
a:focus-visible {
  outline: 3px solid #0066cc;
  outline-offset: 2px;
}
</style>

5. Falta de jerarquía de encabezados

Impacto: Medio - Dificulta navegación con lectores de pantalla

El error:

<h1>Título</h1>
<h3>Subtítulo</h3> <!-- ❌ Saltó h2 -->
<h2>Otro</h2>

Solución:

<h1>Guía de Accesibilidad Web 2025</h1>
<h2>Introducción</h2>
<h3>¿Qué es la accesibilidad?</h3>
<h3>¿Por qué es importante?</h3>
<h2>Mejores Prácticas</h2>
<h3>Texto alternativo</h3>
<h3>Contraste de color</h3>

6. Información transmitida solo por color

Impacto: Alto - Excluye a usuarios daltónicos

El error: “Los campos en rojo son obligatorios” sin otro indicador.

Solución:

<label for="email">
  Correo electrónico
  <span class="required" aria-label="requerido">*</span>
</label>
<input 
  type="email" 
  id="email"
  required
  aria-required="true"
  class="required-field">

7. Contenido dinámico sin anuncios

Impacto: Medio - Los lectores de pantalla no detectan cambios

El error:

// Mensaje que aparece sin ser anunciado
document.getElementById('mensaje').textContent = 'Guardado correctamente';

Solución:

<div 
  id="mensaje-exito" 
  role="alert" 
  aria-live="polite"
  aria-atomic="true"
  class="sr-only">
  <!-- Se anunciará automáticamente cuando cambie -->
</div>

<script>
function mostrarMensaje(texto) {
  const mensaje = document.getElementById('mensaje-exito');
  mensaje.textContent = texto;
  mensaje.classList.remove('sr-only');
  setTimeout(() => {
    mensaje.classList.add('sr-only');
  }, 5000);
}
</script>

Checklist de implementación

Antes de publicar, verifica:

  • ✅ Todas las imágenes tienen alt descriptivo o vacío
  • ✅ Contraste de texto cumple WCAG AA (4.5:1 mínimo)
  • ✅ Todos los formularios tienen <label> asociados
  • ✅ Navegación completa funciona con teclado
  • ✅ Encabezados siguen jerarquía lógica
  • ✅ Información no depende solo del color
  • ✅ Contenido dinámico se anuncia con aria-live
  • ✅ Focus visible en todos los elementos interactivos
  • ✅ Probado con lector de pantalla (NVDA/JAWS/VoiceOver)

Herramientas de validación

Automáticas:

Manuales:

  • Navegación solo con teclado (Tab, Enter, Espacio)
  • Lectores de pantalla (NVDA, JAWS, VoiceOver)
  • Zoom al 200% para verificar legibilidad

Qué hacer ahora

  1. Ejecuta una auditoría con Lighthouse y identifica estos 7 errores en tu sitio
  2. Corrige los 3 más críticos esta semana (texto alternativo, contraste, etiquetas de formularios)
  3. Mide el impacto con GA4 y Search Console para validar mejoras en engagement, tiempo en sitio y conversiones

¿Te ha gustado este artículo?

Si tienes preguntas o quieres discutir sobre estos temas, no dudes en contactarme.

Contáctame
Escríbeme por WhatsApp