Informe de ejemplo. Es un escaneo real, para que veas el nivel de detalle. Analiza tu web en 1 minuto en rampascanner.com.
RampaScannerInforme de accesibilidad25/8/2026

prueba.kriminis.com

https://prueba.kriminis.com

Descargas y documentos

Elige qué necesitas: un documento formal de conformidad, material para tu equipo o el informe en bruto.

Nota E🔁 Reproducible

Tu web incumple la accesibilidad obligatoria: 36 elementos afectados, 8 de gravedad alta. Hay riesgo legal y de perder clientes con discapacidad.

30

Te faltan 50 puntos para la zona verde (80+).

evolución del score
no conforme▲ +0 vs escaneo anterior (25/8/2026)1 páginasmóvil + escritorioWCAG 2.2 AA · EN 301 54925/8/2026
Cómo calculamos tu nota🔁 reproducible

La nota de cada página parte de 100 y baja según la gravedad de cada barrera y cuántos elementos afecta, con rendimientos decrecientes (100 fallos no penalizan 100× uno). Tu nota final es la media de las páginas auditadas.

Crítica ×10Grave ×6Moderada ×3Leve ×1
PáginaBarrerasNota
prueba.kriminis.com/1030

Media de 1 página = 30/100.

🔁 Reproducible: el análisis es determinista — el mismo contenido produce siempre esta misma nota y los mismos hallazgos, en cualquier momento y servidor. Huella del informe: b6d4fb613ddb — vuelve a escanear el mismo contenido y obtendrás esta misma huella. Motor v0.7.0 · 22ae472.

12
Tipos de barrera
36
Elementos afectados
2
Críticos
6
Graves
Reparto por gravedad
2 Críticas6 Graves3 Moderadas1 Leves
Deuda de accesibilidad
66▲ 9 desde el análisis anterior

Suma ponderada de barreras (crítica ×10 · grave ×6 · moderada ×3 · leve ×1). Como la deuda técnica: bájala en cada sprint.

evolución de la deuda
🎯 Próximo hito de deuda

Empieza por las de mayor peso: resolviendo estas 3 bajarías tu deuda de 66 a 40.

  1. −10Form elements must have labelsCrítico
  2. −10Trampa de teclado: el foco se queda atascado y no se puede avanzarCrítico
  3. −6Elements must meet minimum color contrast ratio thresholdsGrave

Cambios desde el informe anterior

= Tu nota se mantiene: 0 resueltas y 2 nuevas.

✓ Resueltas (0)

Ninguna barrera resuelta todavía.

⚠ Nuevas (2)
  • moderada Texto alternativo de baja calidad (no describe bien la imagen)
  • grave Información transmitida solo por color o forma (sin alternativa textual)
🔴 Riesgo alto

Resumen ejecutivo

Tu web es «no conforme» con la WCAG 2.2 AA (EN 301 549). Se han detectado 12 tipos de barrera en 36 elementos a lo largo de 1 páginas.

Exposición legal 100/100
  • Faltan etiquetas en campos de formulario — impide comprar, registrarse o contactar con lector de pantalla.
  • Hay texto con contraste insuficiente — ilegible para muchas personas con baja visión.
  • El contenido no se adapta al móvil sin scroll horizontal — donde está la mayoría del tráfico.
Esfuerzo estimado de corrección≈ 7 h 30 mincoste orientativo 260–450 €
Empieza por estas 3 acciones
  1. Form elements must have labelsRápido2 elem.
  2. Trampa de teclado: el foco se queda atascado y no se puede avanzarMedio1 elem.
  3. Elements must meet minimum color contrast ratio thresholdsMedio12 elem.
5 rápidos · 2 h7 medios · 6 h0 proyecto · 0 min

Mezcla de arreglos rápidos y otros que requieren algo más de trabajo; empieza por los quick wins.

13 de cada 100 visitantes

A quién estás dejando fuera

Aproximadamente 13 de cada 100 visitantes se topan con barreras que les dificultan o impiden completar acciones clave (comprar, registrarse, contactar). Es pérdida directa de clientes, además del riesgo legal (Ley 11/2023, sanciones de hasta 1.000.000 €).

Las barreras más graves afectan sobre todo a personas ciegas o con baja visión, y a personas que navegan solo con teclado o con movilidad reducida.

En España viven unos 4,3 millones de personas con discapacidad (INE) y cerca de 1 de cada 4 personas en la UE declara alguna limitación (Eurostat). Las barreras detectadas afectan sobre todo a quienes usan lector de pantalla, navegan solo con teclado o tienen baja visión.

El caso de negocio

Corregir la accesibilidad es una inversión única y acotada. No hacerlo es un riesgo recurrente: legal y comercial, mientras las barreras sigan ahí.

✓ Corregirlo — inversión única
260–450 €
pago único · ≈ 7 h 30 min de trabajo técnico
  • 12 barreras corregidas de raíz (en el código)
  • Conformidad EAA · Ley 11/2023 · EN 301 549
  • Recuperas ~13 de cada 100 visitantes bloqueados
⚠ No hacer nada — riesgo recurrente
hasta 1.000.000 €
sanción máxima · Ley 11/2023 / EAA
  • Exposición legal 100/100 según este análisis
  • 13 de cada 100 visitantes topan con barreras, cada día
  • Pérdida de clientes, contratos públicos y reputación

Cumplir cuesta una fracción de lo que arriesgas — y solo se paga una vez.

Cómo estás situado

Tu web está por delante del 13% de las 70 webs que hemos analizado.

El 96% de las webs incumplen la accesibilidad (estudio WebAIM Million). Te comparamos con una web típica sin optimizar y con el umbral de conformidad:

Tu web
30
Web típica
~50
Umbral legal
90

Te faltan 60 puntos para el umbral de conformidad (90). Empieza por las victorias rápidas del informe.

Accesibilidad por principio (POUR)

Las 4 dimensiones de la WCAG. El principio con menor puntuación es donde se concentran las barreras.

Perceptible48/100
8 barreras · 27 elem. · 5 h
La información debe poder percibirse (texto alternativo, contraste, subtítulos).
Operable66/100
3 barreras · 7 elem. · 2 h 30 min
La interfaz debe poder manejarse (teclado, foco, tiempo, tamaño de objetivos).
Comprensible100/100
Sin barreras 👍
El contenido y el manejo deben ser comprensibles (idioma, etiquetas, errores claros).
Robusto82/100
1 barrera · 2 elem. · 30 min
El código debe funcionar con productos de apoyo (nombres, roles y valores correctos).

Plan de acción — en este orden

Ordenado por gravedad. Pulsa una fila para ir a la ficha con el detalle y el arreglo.

Por dónde empezar — esfuerzo vs impacto

Prioriza las victorias rápidas (mucho impacto, poco esfuerzo): arréglalas primero.

Roadmap de remediación

Plan por fases para llegar al cumplimiento. Cada fase agrupa las barreras por urgencia, con tiempo y coste orientativo (35–60 €/h).

Fase 1 — Urgente2 barreras

Barreras críticas que bloquean por completo a algunos usuarios. Empieza por aquí.

  • Form elements must have labels
  • Trampa de teclado: el foco se queda atascado y no se puede avanzar
≈ 1 h40–60 €
Fase 2 — Prioritario6 barreras

Barreras graves que hay que subsanar para acercarte al cumplimiento.

  • Elements must meet minimum color contrast ratio thresholds
  • El contenido no se adapta a pantallas estrechas sin scroll horizontal
  • <marquee> elements are deprecated and must not be used
  • Contenido en movimiento o reproducción automática sin control para pausarlo
  • <ul> and <ol> must only directly contain <li>, <script> or <template> elements
  • Información transmitida solo por color o forma (sin alternativa textual)
≈ 4 h 30 min160–270 €
Fase 3 — Mejoras4 barreras

Barreras moderadas o leves y pulido final para la conformidad plena.

  • Estructura de encabezados con saltos de nivel
  • La página no tiene una región principal (<main>) para saltar al contenido
  • Texto sobre imagen de fondo: revisa el contraste a mano
  • Texto alternativo de baja calidad (no describe bien la imagen)
≈ 2 h70–120 €

A un paso del sello de accesibilidad

Para conseguir el sello: sube la puntuación a 90 (ahora 30); resuelve las 2 barreras críticas; resuelve las 6 barreras graves. En cuanto lo logres, tu informe podrá mostrar el sello de accesibilidad verificada.

Ver la página de verificación →

Qué hay que arreglar — en detalle

Cada ficha indica dónde está el problema en tu web (con captura), cómo corregirlo, alternativas y cómo verificarlo.

✓ Verificado comprobación determinista ·🔍 IA · confirmar detectado por IA ·⚠ Requiere revisión indeterminado, revísalo
Gravedad
Esfuerzo
Principio
Buscar
0 de 0
Crítico✓ VerificadoRápidoRobusto2 elem · 1 pág4.1.2 Nombre, función y valor, nivel A

1Form elements must have labels

Los campos de formulario de tu web no tienen etiquetas asociadas que expliquen para qué sirven. Esto significa que los usuarios con lectores de pantalla no saben qué información deben introducir en cada campo. Afecta a cualquier persona ciega o con baja visión que use tu sitio.

Sin etiquetas, los usuarios con discapacidad visual no pueden rellenar formularios correctamente, lo que les impide completar compras, registros o contactos. Además, incumples la normativa WCAG 2.1 nivel A y la Ley 11/2023 de España, lo que expone tu negocio a reclamaciones legales.

En tu web: En tu formulario tienes un campo de texto (input type="text") y un área de texto (textarea) sin etiqueta asociada ni atributos descriptivos; debes añadir un elemento <label> vinculado con el atributo "for", o como mínimo un atributo aria-label o placeholder que identifique claramente el propósito de cada campo para usuarios de lectores de pantalla.

Dónde está en tu web2 elementos afectados
/ (inicio)input[type="text"]📱 móvil + 🖥 escritorio
Captura del elemento afectado (input[type="text"])
<input type="text" style="width: 10px; background: black; color: black;">

Fix any of the following: Element does not have an implicit (wrapped) <label> Element does not have an explicit <label> aria-label attribute does not exist or is empty aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty Element has no title attribute Element has no placeholder attribute Element's default semantics were not overridden with role="none" or role="presentation"

/ (inicio)textarea📱 móvil + 🖥 escritorio
Captura del elemento afectado (textarea)
<textarea rows="2" cols="100" style="background: yellow; color: yellow;"></textarea>

Fix any of the following: Element does not have an implicit (wrapped) <label> Element does not have an explicit <label> aria-label attribute does not exist or is empty aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty Element has no title attribute Element has no placeholder attribute Element's default semantics were not overridden with role="none" or role="presentation"

Cómo se corrige

1) Identifica todos los campos de entrada (input, textarea, select) en tu formulario. 2) Añade un elemento <label> con atributo 'for' que coincida con el 'id' del campo, o envuelve el campo dentro del <label>. 3) Asegúrate de que el texto de la etiqueta describe claramente qué debe introducir el usuario.

Antes:
<input type="email" name="email" placeholder="tu@email.com">

Después:
<label for="email-input">Correo electrónico</label>
<input type="email" id="email-input" name="email" placeholder="tu@email.com">

O alternativa (envolviendo):
<label>
  Correo electrónico
  <input type="email" name="email" placeholder="tu@email.com">
</label>

Alternativas: Si usas un atributo aria-label o aria-labelledby en lugar de <label>, asegúrate de que el texto sea descriptivo y coincida con lo que ve el usuario vidente. Para campos con iconos o símbolos, combina la etiqueta visible con aria-label si es necesario para mayor claridad.

Cómo comprobar que quedó bien: Abre tu navegador con un lector de pantalla (NVDA, JAWS o VoiceOver) y navega por el formulario: cada campo debe anunciarse con su etiqueta clara. Alternativamente, usa la herramienta axe DevTools y confirma que desaparece el error 'label'.

Según tu plataforma

WordPressCon Contact Form 7 / WPForms, asegúrate de que cada campo tiene su etiqueta asociada (no solo placeholder).

ShopifyEn los formularios .liquid, asocia cada <label for> con el id del <input>.

React / Next.jsAsocia <label htmlFor> con el id del input, o envuelve el input en el label.

Guía técnica con más ejemplos ↗
Crítico✓ VerificadoMedioOperable1 elem · 1 pág2.1.2 Sin trampa de teclado, nivel A

2Trampa de teclado: el foco se queda atascado y no se puede avanzar

Los usuarios que navegan con teclado (por discapacidad motora o preferencia) quedan atrapados en ciertas zonas de la página sin poder salir usando Tab o Escape. Esto impide que completen tareas como rellenar formularios o acceder a otras secciones.

Afecta gravemente a personas con discapacidad motora que dependen del teclado para navegar. Genera una experiencia imposible de usar y puede violar la Ley 11/2023 de España, exponiendo a demandas y pérdida de usuarios.

En tu web: El reproductor de audio en la página tiene una trampa de teclado: cuando navegas con Tab, el foco se queda atascado dentro del elemento `<audio>` y no puedes avanzar a otros elementos de la página. Necesitas añadir un atributo `tabindex="-1"` al audio o envolverlo en un contenedor con gestión de eventos de teclado para que los usuarios que navegan sin ratón puedan continuar.

Dónde está en tu web1 elemento afectado
/ (inicio)audio📱 móvil + 🖥 escritorio
<audio src="https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3" autoplay="" loop="" controls="" style="width: 50px; opacity: 0.5;"></audio>

Al tabular con el teclado, el foco deja de avanzar y queda atrapado. Quien navega sin ratón no puede continuar.

Cómo se corrige

1) Identifica dónde el foco se queda atrapado (habitualmente en modales, menús desplegables o widgets personalizados). 2) Asegura que Tab siempre avanza al siguiente elemento enfocable y Shift+Tab retrocede. 3) Implementa una gestión de foco que permita salir: en modales, Tab en el último elemento enfocable debe llevar al primero (o cerrar el modal con Escape); en menús, Escape debe cerrar y devolver el foco al disparador. 4) Prueba la navegación completa sin usar el ratón.

// Antes: Modal sin salida de teclado
<div class="modal">
  <button>Cerrar</button>
  <input type="text" />
</div>

// Después: Modal con gestión de foco circular y Escape
<div class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-title">
  <h2 id="modal-title">Título del modal</h2>
  <input type="text" id="first-input" />
  <button id="close-btn">Cerrar</button>
</div>

<script>
const modal = document.querySelector('.modal');
const focusableElements = modal.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
const firstElement = focusableElements[0];
const lastElement = focusableElements[focusableElements.length - 1];

modal.addEventListener('keydown', (e) => {
  if (e.key === 'Escape') {
    modal.close();
    return;
  }
  if (e.key === 'Tab') {
    if (e.shiftKey && document.activeElement === firstElement) {
      e.preventDefault();
      lastElement.focus();
    } else if (!e.shiftKey && document.activeElement === lastElement) {
      e.preventDefault();
      firstElement.focus();
    }
  }
});
firstElement.focus();
</script>

Alternativas: Si usas una librería como Bootstrap, Material UI o Headless UI, verifica que sus componentes de modal/diálogo ya incluyen gestión de foco. Para menús desplegables, considera cerrar automáticamente cuando el usuario presiona Escape. En widgets complejos, evalúa usar aria-live para anunciar cambios de foco a lectores de pantalla.

Cómo comprobar que quedó bien: Navega la página solo con Tab y Shift+Tab sin usar el ratón; comprueba que el foco nunca queda atrapado y que puedes acceder a todas las funciones y secciones. Prueba también que Escape cierra cualquier modal, menú o widget que lo requiera.

Grave✓ VerificadoMedioPerceptible12 elem · 1 pág1.4.3 Contraste (mínimo), nivel AA

3Elements must meet minimum color contrast ratio thresholds

El contraste entre el color del texto y el fondo no cumple el mínimo requerido, lo que dificulta la lectura para personas con baja visión o daltonismo. Esto afecta principalmente a textos, botones e iconos en tu página.

Un contraste insuficiente impide que muchas personas lean tu contenido, reduciendo conversiones y accesibilidad. Además, incumplir WCAG 2.1 nivel AA expone tu negocio a reclamaciones legales en virtud de la Ley 11/2023 de España.

En tu web: El banner de construcción en la parte superior tiene texto amarillo (#ffff00) sobre fondo magenta (#ff00ff) con contraste insuficiente de 2.92:1, necesitando al menos 3:1. Los enlaces del menú de navegación (Home, Sobre Mí, Fotos de vacaciones, Links Favoritos y Webring HTML 3.2) tienen texto azul marino (#000080) sobre fondo gris oscuro (#333333) con contraste crítico de solo 1.26:1, muy por debajo del mínimo requerido de 4.5:1 para texto pequeño.

Dónde está en tu web12 elementos afectados
/ (inicio)marquee[behavior="alternate"]📱 móvil + 🖥 escritorio
Captura del elemento afectado (marquee[behavior="alternate"])
<marquee behavior="alternate" scrollamount="30" bgcolor="#FF00FF" style="font-size: 40px; color: yellow; border-bottom: 5px solid white;"> 🚧 🚧 🚧 ¡¡¡ PÁGINA EN CONSTRUCCIÓN !!! 🚧 🚧 🚧 </marquee>

Fix any of the following: Element has insufficient color contrast of 2.92 (foreground color: #ffff00, background color: #ff00ff, font size: 30.0pt (40px), font weight: normal). Expected contrast ratio of 3:1

/ (inicio)li:nth-child(1) > a📱 móvil + 🖥 escritorio
Captura del elemento afectado (li:nth-child(1) > a)
<a href="#">Ir a Home</a>

Fix any of the following: Element has insufficient color contrast of 1.26 (foreground color: #000080, background color: #333333, font size: 6.0pt (8px), font weight: normal). Expected contrast ratio of 4.5:1

/ (inicio)li:nth-child(4) > a📱 móvil + 🖥 escritorio
Captura del elemento afectado (li:nth-child(4) > a)
<a href="#">Sobre Mí (Toda mi vida)</a>

Fix any of the following: Element has insufficient color contrast of 1.26 (foreground color: #000080, background color: #333333, font size: 6.0pt (8px), font weight: normal). Expected contrast ratio of 4.5:1

/ (inicio)li:nth-child(7) > a📱 móvil + 🖥 escritorio
<a href="#">Fotos de mis vacaciones (Pesadas)</a>

Fix any of the following: Element has insufficient color contrast of 1.26 (foreground color: #000080, background color: #333333, font size: 6.0pt (8px), font weight: normal). Expected contrast ratio of 4.5:1

/ (inicio)li:nth-child(10) > a📱 móvil + 🖥 escritorio
<a href="#">Mis Links Favoritos</a>

Fix any of the following: Element has insufficient color contrast of 1.26 (foreground color: #000080, background color: #333333, font size: 6.0pt (8px), font weight: normal). Expected contrast ratio of 4.5:1

/ (inicio)li:nth-child(13) > a📱 móvil + 🖥 escritorio
<a href="#">Webring HTML 3.2</a>

Fix any of the following: Element has insufficient color contrast of 1.26 (foreground color: #000080, background color: #333333, font size: 6.0pt (8px), font weight: normal). Expected contrast ratio of 4.5:1

/ (inicio).texto-justificado-horrible📱 móvil + 🖥 escritorio
<p class="texto-justificado-horrible">

Fix any of the following: Element has insufficient color contrast of 3.94 (foreground color: #808080, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1

/ (inicio)table[border="1"] > tbody > tr > td:nth-child(1)📱 móvil + 🖥 escritorio
<td>

Fix any of the following: Element has insufficient color contrast of 2.03 (foreground color: #ff00ff, background color: #ffc0cb, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1

…y 4 elementos más con este mismo fallo (mismo arreglo).

Cómo se corrige

1) Identifica todos los elementos con bajo contraste usando un analizador (axe DevTools, WAVE o similar). 2) Aumenta la luminosidad del texto (hazlo más oscuro) o reduce la del fondo (hazlo más claro). 3) Verifica que el ratio de contraste sea mínimo 4.5:1 para textos pequeños (< 18pt) o 3:1 para textos grandes (≥ 18pt). 4) Prueba con herramientas de simulación de daltonismo para garantizar que el color no sea el único diferenciador.

/* Antes: contraste insuficiente */
.texto-bajo-contraste {
  color: #999999;  /* gris medio */
  background-color: #f5f5f5;  /* gris muy claro */
  /* Ratio: ~2.5:1 — INCUMPLE */
}

/* Después: contraste mínimo AA cumplido */
.texto-alto-contraste {
  color: #333333;  /* gris oscuro */
  background-color: #ffffff;  /* blanco */
  /* Ratio: ~12.6:1 — CUMPLE */
}

/* Botón: ejemplo alternativo */
.boton-antes {
  color: #888888;
  background-color: #eeeeee;
}

.boton-despues {
  color: #ffffff;
  background-color: #0052cc;  /* azul oscuro */
  /* Ratio: ~8.3:1 — CUMPLE */
}

Alternativas: Si no puedes cambiar los colores de marca, considera aumentar el tamaño de fuente (textos ≥18pt solo necesitan 3:1). Otra opción es usar bordes, subrayados u otros indicadores visuales además del color. Para iconos, asegúrate de que tengan suficiente grosor o tamaño para cumplir el contraste.

Cómo comprobar que quedó bien: Ejecuta axe DevTools nuevamente o usa la herramienta Contrast Checker de WebAIM (https://webaim.org/resources/contrastchecker/) con los colores finales. Comprueba también en modo oscuro del navegador si tu sitio lo soporta y simula daltonismo (protanopia, deuteranopia) con herramientas como Color Oracle.

Según tu plataforma

WordPressEn Apariencia → Editor → Estilos, ajusta los colores del tema para alcanzar 4,5:1. Si usas un page builder (Elementor/Divi), cambia el color del texto en el widget.

ShopifyEn Personalizar tema → Configuración → Colores, oscurece el texto o aclara el fondo hasta 4,5:1.

React / Next.jsAjusta las variables de color en tu CSS/tokens (o tu librería de UI) para que el texto cumpla 4,5:1 con su fondo.

Guía técnica con más ejemplos ↗
Grave✓ VerificadoMedioPerceptible4 elem · 1 pág1.4.10 Reflow, nivel AA

4El contenido no se adapta a pantallas estrechas sin scroll horizontal

El contenido de tu web requiere desplazamiento horizontal para verse completamente en pantallas estrechas (como móviles o tablets en orientación vertical). Esto afecta principalmente a usuarios con dispositivos móviles y a personas con discapacidades visuales que amplían la pantalla al máximo.

Los usuarios no deberían tener que hacer scroll en dos direcciones para leer contenido. Es especialmente problemático para personas con baja visión que necesitan zoom. Además, incumple la normativa WCAG 2.1 nivel AA y la Ley 11/2023 española, exponiendo tu negocio a reclamaciones legales.

En tu web: Tu tabla principal (class="tabla-principal") tiene un ancho fijo de 975px que provoca scroll horizontal en pantallas menores de 945px; debes cambiar el atributo width por CSS con max-width:100% y ancho relativo, y hacer lo mismo con las celdas td que usan width="15%" y width="85%" para que se adapten fluidamente al ancho disponible.

Dónde está en tu web4 elementos afectados
/ (inicio)table.tabla-principal📱 móvil + 🖥 escritorio
<table class="tabla-principal"> <tbody><tr> <!-- Barra lateral de navegación --> <td width="15%" bgcolor="#3

desborda hasta 975px — ancho fijo de 975px (usa max-width:100% o unidades relativas)

/ (inicio)tbody📱 móvil + 🖥 escritorio
<tbody><tr> <!-- Barra lateral de navegación --> <td width="15%" bgcolor="#333333" valign="top"> <ce

desborda hasta 945px — ancho fijo de 915px (usa max-width:100% o unidades relativas)

/ (inicio)tr📱 móvil + 🖥 escritorio
<tr> <!-- Barra lateral de navegación --> <td width="15%" bgcolor="#333333" valign="top"> <center>

desborda hasta 945px — ancho fijo de 915px (usa max-width:100% o unidades relativas)

/ (inicio)td📱 móvil + 🖥 escritorio
<td width="85%" bgcolor="#ffffff" valign="top"> <h2>¡Bienvenidos a mi Homepage!</h2> <p cla

desborda hasta 945px — ancho fijo de 787px (usa max-width:100% o unidades relativas)

Cómo se corrige

1) Revisa el diseño responsivo: asegúrate de que todos los elementos se adapten a un ancho mínimo de 320px sin requerir scroll horizontal. 2) Ajusta el contenido que sobresale: elimina márgenes fijos, amplía contenedores flexibles (usa width: 100% en lugar de valores px fijos) y evita overflow-x hidden que oculte contenido. 3) Prueba en navegador a 320px de ancho (puedes usar DevTools del navegador) y verifica que se puede leer todo con desplazamiento solo vertical.

/* Antes */
.contenedor {
  width: 1200px;
  margin: 0 auto;
  overflow: hidden;
}

.columna {
  width: 400px;
  float: left;
}

/* Después */
.contenedor {
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 16px;
  box-sizing: border-box;
}

.columna {
  width: 100%;
  float: none;
}

@media (min-width: 768px) {
  .columna {
    width: 48%;
    float: left;
    margin-right: 2%;
  }
}

Alternativas: Si usas una librería CSS (Bootstrap, Tailwind, etc.), asegúrate de que las clases responsivas están bien aplicadas. En casos de tablas o contenido muy complejo, considera usar overflow horizontal solo en contenedores específicos con scroll visible, etiquetados apropiadamente para lectores de pantalla. Para gráficos o imágenes grandes, usa técnicas como picture o srcset para servir versiones optimizadas según el dispositivo.

Cómo comprobar que quedó bien: Redimensiona la ventana del navegador a 320px de ancho o usa el modo móvil de DevTools (Chrome/Firefox) y comprueba que todo el contenido es legible sin scroll horizontal. Prueba también con zoom al 200% para confirmar que sigue siendo accesible sin desplazamiento lateral.

Grave✓ VerificadoMedioOperable3 elem · 1 pág2.2.2 Pausa, detención u ocultación, nivel A

5<marquee> elements are deprecated and must not be used

Tu sitio web utiliza etiquetas <marquee>, que son elementos obsoletos de HTML que hacen desplazarse el contenido automáticamente de forma continua. Este tipo de contenido en movimiento constante es problemático para personas con discapacidades cognitivas, visuales o motoras, y además no se puede pausar ni controlar fácilmente.

El contenido que se mueve sin pausa distrae y confunde a muchos usuarios, especialmente aquellos con TDAH, autismo o problemas de seguimiento visual. Además, incumples la normativa WCAG 2.1 nivel A y la Ley 11/2023 de España, lo que expone tu negocio a posibles reclamaciones legales y reduce la experiencia de usuario para una parte significativa de tu audiencia.

En tu web: Tienes tres elementos `<marquee>` obsoletos y visibles en tu web que debes eliminar: uno con texto "HAZ CLIC AQUÍ PARA RECLAMAR TU PREMIO" que se desplaza hacia arriba en fondo negro, otro con "PÁGINA EN CONSTRUCCIÓN" que alterna su movimiento en magenta, y un tercero con caracteres decorativos que se desplaza hacia la derecha. Reemplázalos con animaciones CSS modernas o contenido estático, ya que estos elementos están deprecados y afectan la accesibilidad.

Dónde está en tu web3 elementos afectados
/ (inicio)marquee[direction="up"]📱 móvil + 🖥 escritorio
Captura del elemento afectado (marquee[direction="up"])
<marquee direction="up" scrollamount="20" style="height: 150px; background: black; color: lime;"> HAZ CLIC AQUÍ PARA RECLAMAR TU PREMIO<br><br>HAZ CLIC AQUÍ<br><br>HAZ CLIC AQUÍ </marquee>

Fix all of the following: Element is visible

/ (inicio)marquee[behavior="alternate"]📱 móvil + 🖥 escritorio
<marquee behavior="alternate" scrollamount="30" bgcolor="#FF00FF" style="font-size: 40px; color: yellow; border-bottom: 5px solid white;"> 🚧 🚧 🚧 ¡¡¡ PÁGINA EN CONSTRUCCIÓN !!! 🚧 🚧 🚧 </marquee>

Fix all of the following: Element is visible

/ (inicio)marquee[scrollamount="50"]📱 móvil + 🖥 escritorio
Captura del elemento afectado (marquee[scrollamount="50"])
<marquee scrollamount="50" direction="right">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</marquee>

Fix all of the following: Element is visible

Cómo se corrige

1) Localiza todas las etiquetas <marquee> en tu código HTML. 2) Sustituye cada <marquee> por una alternativa accesible: un contenedor <div> con CSS (scroll horizontal opcional, pero pausable) o mejor aún, contenido estático o un carrusel controlado por el usuario con botones de pausa. 3) Si necesitas animación, utiliza CSS animations o JavaScript con controles accesibles para pausar/reanudar. 4) Prueba que el contenido sea legible y controlable sin requierir que se mueva automáticamente.

// ANTES (incorrecto)
<marquee direction="left" scrollamount="5">
  ¡Oferta especial: descuento del 20% este fin de semana!
</marquee>

// DESPUÉS (correcto)
<div role="region" aria-label="Anuncio especial">
  <p>¡Oferta especial: descuento del 20% este fin de semana!</p>
</div>

// O si necesitas scroll horizontal controlado:
<div class="carousel-container" role="region" aria-label="Carrusel de ofertas">
  <button id="pauseBtn" aria-pressed="false">Pausar</button>
  <div id="carouselContent" class="carousel-scroll">
    ¡Oferta especial: descuento del 20% este fin de semana!
  </div>
  <button id="playBtn" aria-pressed="true">Reanudar</button>
</div>

<style>
.carousel-scroll {
  overflow-x: auto;
  /* Animación pausable mediante JavaScript */
}
.carousel-scroll.paused {
  animation-play-state: paused;
}
</style>

Alternativas: 1) Si el contenido es informativo pero no crítico, considera simplemente mostrarlo estático sin movimiento. 2) Para promociones o avisos importantes, usa un diseño destacado pero fijo (banner, alerta) que el usuario pueda cerrar. 3) Si requieres efectos visuales, implementa un carrusel HTML/CSS/JavaScript estándar con controles accesibles (botones prev/next, indicadores, pausa automática si el usuario no interactúa).

Cómo comprobar que quedó bien: Ejecuta axe DevTools o similar en tu navegador y confirma que desaparece el fallo "marquee". Verifica manualmente que cualquier contenido que antes se desplazaba ahora es legible, estático o controlable mediante botones de pausa/reanudación, y que los usuarios de teclado pueden acceder a todos los controles.

Guía técnica con más ejemplos ↗
Grave✓ VerificadoRápidoOperable3 elem · 1 pág2.2.2 Pausa, detención, ocultación, nivel A

6Contenido en movimiento o reproducción automática sin control para pausarlo

Tu sitio web tiene contenido que se mueve o reproduce automáticamente (como vídeos, carruseles o animaciones) sin ofrecer un control fácil para pausarlo o detenerlo. Esto es especialmente problemático para personas con discapacidades cognitivas, de atención o visuales, que pueden sentirse abrumadas o desorientadas por el movimiento constante.

El movimiento autoplay sin control distrae, desoriente y puede causar mareos o ataques en personas con epilepsia fotosensible. Además, viola la ley de accesibilidad española (Ley 11/2023) y puede exponer tu negocio a reclamaciones legales. Legalmente estás obligado a ofrecer controles visibles.

En tu web: Tienes tres marquesinas (elementos `<marquee>`) en tu web que se desplazan automáticamente sin pausa: una vertical con fondo negro y texto lima en la zona de llamada a la acción, otra horizontal con fondo magenta y texto amarillo de gran tamaño, y una tercera con caracteres decorativos que se mueven hacia la derecha. Debes eliminar estas marquesinas o reemplazarlas con contenido estático, ya que las animaciones automáticas sin control de pausa son inaceptables para la accesibilidad.

Dónde está en tu web3 elementos afectados
/ (inicio)marquee📱 móvil + 🖥 escritorio
<marquee direction="up" scrollamount="20" style="height: 150px; background: black; color: lime;"> HAZ CLIC AQUÍ PARA RECLAMAR TU

Hay contenido que se mueve o suena automáticamente (autoplay, marquesina o animación en bucle) sin un control claro para pausarlo o detenerlo. Distrae y puede impedir el uso a personas con discapacidad cognitiva o de atención.

/ (inicio)marquee📱 móvil + 🖥 escritorio
<marquee behavior="alternate" scrollamount="30" bgcolor="#FF00FF" style="font-size: 40px; color: yellow; border-bottom: 5px solid white;">

Hay contenido que se mueve o suena automáticamente (autoplay, marquesina o animación en bucle) sin un control claro para pausarlo o detenerlo. Distrae y puede impedir el uso a personas con discapacidad cognitiva o de atención.

/ (inicio)marquee📱 móvil + 🖥 escritorio
<marquee scrollamount="50" direction="right">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</marquee>

Hay contenido que se mueve o suena automáticamente (autoplay, marquesina o animación en bucle) sin un control claro para pausarlo o detenerlo. Distrae y puede impedir el uso a personas con discapacidad cognitiva o de atención.

Cómo se corrige

1) Identifica todo contenido que se mueve o reproduce automáticamente (carruseles, vídeos, gifs animados, animaciones CSS). 2) Añade controles visibles y fáciles de usar (botones de pausa/reanudar, claramente etiquetados). 3) Asegúrate de que el contenido pause automáticamente cuando el usuario no interactúa, o proporciona un control para hacerlo. 4) Si es un vídeo, implementa controles nativos del navegador (play/pause). 5) Prueba que todos los controles funcionan con teclado y lector de pantallas.

Antes:
<div class="carousel" autoplay>
  <img src="slide1.jpg" />
  <img src="slide2.jpg" />
</div>

Después:
<div class="carousel" role="region" aria-label="Carrusel de imágenes">
  <div class="carousel-slides">
    <img src="slide1.jpg" alt="Slide 1" />
    <img src="slide2.jpg" alt="Slide 2" />
  </div>
  <button id="pause-btn" aria-pressed="false">Pausar</button>
  <button id="play-btn" aria-pressed="true">Reanudar</button>
</div>

<script>
let isPlaying = true;
const pauseBtn = document.getElementById('pause-btn');
const playBtn = document.getElementById('play-btn');

pauseBtn.addEventListener('click', () => {
  isPlaying = false;
  pauseBtn.setAttribute('aria-pressed', 'true');
  playBtn.setAttribute('aria-pressed', 'false');
  // Detener animación del carrusel
});

playBtn.addEventListener('click', () => {
  isPlaying = true;
  playBtn.setAttribute('aria-pressed', 'true');
  pauseBtn.setAttribute('aria-pressed', 'false');
  // Reanudar animación del carrusel
});
</script>

Alternativas: Si el contenido es decorativo, considera eliminarlo directamente en lugar de añadir controles. Para vídeos embebidos (YouTube, Vimeo), usa el parámetro autoplay=0 en la URL. Las animaciones CSS pueden usar prefers-reduced-motion para respetar las preferencias del usuario del sistema operativo.

Cómo comprobar que quedó bien: Abre el sitio en navegador y comprueba que el contenido en movimiento tiene botones de pausa claramente visibles y etiquetados. Navega usando solo teclado (Tab) para verificar que los controles son accesibles y funcionales, y prueba con un lector de pantallas para confirmar que los controles se anuncian correctamente.

Grave✓ VerificadoMedioPerceptible1 elem · 1 pág1.3.1 Información y relaciones, nivel A

7<ul> and <ol> must only directly contain <li>, <script> or <template> elements

Las listas (ul, ol) contienen elementos que no son elementos de lista (li), script o template. Esto confunde a los lectores de pantalla y usuarios con discapacidad visual, que esperan una estructura clara de lista. El navegador y las tecnologías de asistencia no pueden interpretar correctamente la jerarquía del contenido.

Los usuarios con discapacidad visual dependen de que las listas estén correctamente marcadas para navegar y comprender la estructura del contenido. Un marcado incorrecto genera frustración, desorientación y acceso deficiente a la información. Además, incumple la normativa WCAG 2.1 nivel A, obligatoria en España según la Ley 11/2023.

En tu web: En tu web, la lista sin ordenar (ul) que tiene viñetas cuadradas contiene elementos `<br>` directamente dentro, lo que rompe la estructura HTML válida; debes mover esos saltos de línea fuera de la lista o restructurar el contenido para que solo haya elementos `<li>` como hijos directos del `<ul>`.

Dónde está en tu web1 elemento afectado
/ (inicio)ul📱 móvil + 🖥 escritorio
Captura del elemento afectado (ul)
<ul style="list-style-type: square; padding: 0;">

Fix all of the following: List element has direct children that are not allowed: br

Cómo se corrige

1) Identifica todos los elementos <ul> y <ol> en tu código. 2) Revisa qué elementos hijo contienen directamente (div, p, span, etc.). 3) Envuelve el contenido de texto o elementos no-li dentro de elementos <li>. 4) Si hay scripts o templates, déjalos como están (son permitidos). 5) Prueba con un lector de pantalla para confirmar que la lista se anuncia correctamente.

Antes:
<ul>
  <div>Elemento 1</div>
  <p>Elemento 2</p>
  <li>Elemento 3</li>
</ul>

Después:
<ul>
  <li>Elemento 1</li>
  <li>Elemento 2</li>
  <li>Elemento 3</li>
</ul>

O si necesitas estructura compleja:
<ul>
  <li>
    <div>Elemento 1</div>
  </li>
  <li>
    <p>Elemento 2</p>
  </li>
  <li>Elemento 3</li>
</ul>

Alternativas: Si el contenido no es realmente una lista, considera usar un <div> con rol="list" y elementos con rol="listitem" (menos recomendado). Si tienes contenido muy complejo, asegúrate de que cada <li> contenga la estructura interna que necesites, pero siempre respetando que solo <li>, <script> y <template> sean hijos directos de <ul>/<ol>.

Cómo comprobar que quedó bien: Ejecuta axe DevTools o axe Playwright nuevamente sobre el elemento <ul>/<ol> y confirma que la regla 'list' no genera errores. Abre el navegador con un lector de pantalla (NVDA, JAWS o VoiceOver) y verifica que la lista se anuncia como tal con el número correcto de elementos.

Guía técnica con más ejemplos ↗
Moderado✓ VerificadoMedioPerceptible1 elem · 1 pág1.3.1 Información y relaciones, nivel A

8Estructura de encabezados con saltos de nivel

Los encabezados de tu web no siguen una estructura lógica: hay saltos de nivel (por ejemplo, pasar de H1 directamente a H3, sin H2). Esto confunde a los usuarios de lectores de pantalla, que dependen de estos saltos para entender la jerarquía del contenido y navegar por la página de forma eficiente.

Los usuarios con discapacidad visual pierden la capacidad de comprender cómo se organiza tu contenido. Además, Google y otros buscadores utilizan la estructura de encabezados para indexar correctamente tu página. Una estructura rota reduce la accesibilidad y el posicionamiento SEO.

En tu web: En tu web, el encabezado ":: MENÚ ::" está marcado como h3 pero no hay un h2 anterior que lo preceda, lo que rompe la jerarquía de títulos que necesitan los lectores de pantalla para navegar correctamente. Deberías revisar si antes de este h3 hay un h2, o cambiar el h3 a h2 si es el primer encabezado principal de esa sección.

Dónde está en tu web1 elemento afectado
/ (inicio)h3📱 móvil + 🖥 escritorio
<h3 style="color: white; border-bottom: 2px solid red;">:: MENÚ ::</h3>

Los niveles de encabezado saltan (p. ej. de h2 a h4), lo que rompe el esquema que usan los lectores de pantalla.

Cómo se corrige

1) Audita todos los encabezados de la página e identifica dónde hay saltos (H1→H3, H2→H4, etc.). 2) Reorganiza los encabezados para que sigan una secuencia lógica sin saltos: H1 → H2 → H3 en orden. 3) Asegúrate de que hay un único H1 por página y que los niveles inferiores descienden gradualmente. 4) Valida los cambios con una herramienta de accesibilidad.

<h1>Título principal de la página</h1>
<h2>Sección 1</h2>
<h3>Subsección 1.1</h3>
<h2>Sección 2</h2>

<!-- ❌ Antes (incorrecto): salto de H1 a H3 -->
<!-- <h1>Título principal</h1>
<h3>Contenido sin H2</h3> -->

<!-- ✅ Después (correcto): estructura coherente sin saltos -->

Alternativas: Si necesitas ajustes visuales sin cambiar los niveles HTML, usa CSS para estilizar los encabezados (tamaño, color, etc.). En casos excepcionales, puedes ocultar un encabezado visualmente pero mantenerlo en el DOM con `clip-path` o propiedades similares, aunque es mejor revisar la estructura en lugar de recurrir a esto.

Cómo comprobar que quedó bien: Usa la herramienta axe DevTools, WAVE o el validador HTML del W3C para confirmar que la estructura de encabezados es continua sin saltos. Abre tu página con un lector de pantalla (NVDA, JAWS) y verifica que puedes navegar por los encabezados de forma lógica con las teclas de atajo (H en NVDA).

Moderado✓ VerificadoRápidoPerceptible1 elem · 1 pág1.3.1 Información y relaciones, nivel A

9La página no tiene una región principal (<main>) para saltar al contenido

Tu página no tiene una región principal (<main>) que identifique el contenido central. Esto significa que los usuarios que navegan con teclado o lectores de pantalla no pueden saltar directamente al contenido principal, viéndose obligados a recorrer todos los elementos de encabezado, menú y navegación cada vez que entran en una página.

Sin una región <main> clara, los usuarios con discapacidad pierden tiempo y se frustran navegando sitios grandes. Además, es un requisito de accesibilidad fundamental en estándares internacionales (WCAG, EN 301 549) y españoles (Ley 11/2023), por lo que su ausencia genera riesgo legal y vulnera derechos de acceso.

Dónde está en tu web1 elemento afectado
/ (inicio)(documento)📱 móvil + 🖥 escritorio

Sin un <main> (o role="main"), quien usa lector de pantalla no puede saltar directamente al contenido y tiene que recorrer todo el menú cada vez.

Cómo se corrige

1) Identifica el bloque de contenido principal de tu página (no el encabezado, menú o pie). 2) Envuelve ese contenido dentro de una etiqueta <main>. 3) Asegúrate de que solo haya un <main> por página. 4) Verifica que esté colocado después de los elementos de navegación principal (header, nav).

Antes:
<body>
  <header>Logo y menú</header>
  <nav>Navegación</nav>
  <section>Contenido principal aquí</section>
  <footer>Pie</footer>
</body>

Después:
<body>
  <header>Logo y menú</header>
  <nav>Navegación</nav>
  <main>
    <section>Contenido principal aquí</section>
  </main>
  <footer>Pie</footer>
</body>

Alternativas: Si tu página tiene múltiples áreas de contenido distintas, solo la principal debe estar en <main>; las secundarias pueden usar <section> o <aside>. También puedes añadir un enlace 'Ir al contenido principal' al inicio de la página como complemento, aunque no sustituye al <main>.

Cómo comprobar que quedó bien: Abre tu página en un navegador, pulsa la tecla S (NVDA/JAWS) o Ctrl+Alt+M (en algunos lectores) para saltar a la región main: debe llevarte directamente al contenido, no al menú. También inspecciona el HTML y confirma que existe un único <main> que envuelve el contenido central.

Leve⚠ Requiere revisiónMedioPerceptible5 elem · 1 pág1.4.3 Contraste (mínimo), nivel AA

10Texto sobre imagen de fondo: revisa el contraste a mano

El texto que aparece sobre una imagen o degradado de fondo no tiene un contraste suficiente para ser legible. Esto afecta especialmente a personas con baja visión o daltonismo, que no pueden leer el contenido con claridad.

Un contraste insuficiente impide que hasta el 8% de los hombres (daltonismo) y muchas personas mayores lean el texto. Además, incumple la norma de accesibilidad española (Ley 11/2023) y expone tu negocio a reclamaciones legales.

En tu web: Tienes texto superpuesto directamente sobre imágenes de fondo en cinco elementos clave: el botón "X (Cerrar)", el título "¡HAS SIDO SELECCIONADO!", el párrafo rojo "ERES EL VISITANTE 9.999.999", el encabezado principal "~* Mi RiNcÓn pErSoNaL eN La WeB *~" y el banner parpadeante "¡¡¡ NUEVA ACTUALIZACIÓN 12/05/1998 !!!". Para garantizar que sean legibles para todos, añade una sombra de texto, un fondo semitransparente o un contorno oscuro que mantenga un contraste mínimo de 4,5:1 en toda la superficie de cada texto.

Dónde está en tu web5 elementos afectados
/ (inicio)span📱 móvil + 🖥 escritorio
<span class="cerrar-falso">X (Cerrar)</span>

Hay texto sobre una imagen de fondo. El contraste depende del píxel exacto detrás de cada letra y no puede medirse de forma fiable en automático. Revísalo o añade una capa/sombra que garantice 4,5:1 en toda la superficie del texto.

/ (inicio)h2📱 móvil + 🖥 escritorio
<h2 style="color: black; background: none; border: none; font-family: 'Arial';">¡HAS SIDO SELECCIONADO!</h2>

Hay texto sobre una imagen de fondo. El contraste depende del píxel exacto detrás de cada letra y no puede medirse de forma fiable en automático. Revísalo o añade una capa/sombra que garantice 4,5:1 en toda la superficie del texto.

/ (inicio)p📱 móvil + 🖥 escritorio
<p style="color: red; font-size: 24px; font-weight: bold; text-decoration: blink;">ERES EL VISITANTE 9.999.999</p>

Hay texto sobre una imagen de fondo. El contraste depende del píxel exacto detrás de cada letra y no puede medirse de forma fiable en automático. Revísalo o añade una capa/sombra que garantice 4,5:1 en toda la superficie del texto.

/ (inicio)h1📱 móvil + 🖥 escritorio
<h1>~* Mi RiNcÓn pErSoNaL eN La WeB *~</h1>

Hay texto sobre una imagen de fondo. El contraste depende del píxel exacto detrás de cada letra y no puede medirse de forma fiable en automático. Revísalo o añade una capa/sombra que garantice 4,5:1 en toda la superficie del texto.

/ (inicio)span📱 móvil + 🖥 escritorio
<span class="blink-extremo">¡¡¡ NUEVA ACTUALIZACIÓN 12/05/1998 !!!</span>

Hay texto sobre una imagen de fondo. El contraste depende del píxel exacto detrás de cada letra y no puede medirse de forma fiable en automático. Revísalo o añade una capa/sombra que garantice 4,5:1 en toda la superficie del texto.

Cómo se corrige

1) Identifica todo texto que se superpone sobre imágenes o degradados. 2) Añade un fondo semisólido (overlay) detrás del texto con opacidad suficiente para garantizar contraste (mínimo ratio 4.5:1 para texto normal, 3:1 para texto grande). 3) Alternativamente, aplica una sombra de texto o borde que mejore la legibilidad. 4) Verifica el contraste real con una herramienta como WebAIM Contrast Checker.

/* Antes: texto sobre imagen sin garantía de contraste */
.hero-text {
  position: absolute;
  color: #ffffff;
  font-size: 18px;
  background: transparent;
}

/* Después: overlay semisólido para garantizar contraste */
.hero-text {
  position: absolute;
  color: #ffffff;
  font-size: 18px;
  background: rgba(0, 0, 0, 0.6);
  padding: 12px 16px;
  border-radius: 4px;
}

/* Alternativa: sombra de texto */
.hero-text {
  color: #ffffff;
  text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}

Alternativas: Si el overlay afecta el diseño, usa un gradiente semitransparente que oscurezca solo la zona del texto. Otra opción es mover el texto a una zona de la imagen con suficiente contraste natural. Para textos pequeños (menos de 14px), el ratio mínimo requerido es 4.5:1; para textos grandes (18px o más), basta 3:1.

Cómo comprobar que quedó bien: Usa herramientas como axe DevTools, WAVE o WebAIM Contrast Checker para confirmar que el ratio de contraste es al menos 4.5:1. Comprueba visualmente en diferentes dispositivos y condiciones de luz que el texto es legible sobre la imagen.

Moderado🔍 IA · confirmarRápidoPerceptible2 elem · 1 pág1.1.1 Contenido no textual, nivel A

11Texto alternativo de baja calidad (no describe bien la imagen)

Las imágenes de tu web tienen texto alternativo (atributo alt), pero es de mala calidad: muy vago, genérico o no describe lo que realmente muestra la imagen. Esto impide que personas ciegas o con baja visión que usan lectores de pantalla entiendan el contenido de esas imágenes.

Un texto alternativo pobre es casi como no tener ninguno: el usuario no accede a la información. Además, incumple la normativa WCAG 2.1 nivel A, lo que expone tu negocio a reclamaciones legales en España conforme a la Ley 11/2023 de accesibilidad.

En tu web: En tu web tienes dos imágenes con textos alternativos insuficientes: la primera es una animación de fuego que solo dice "Fuego animado molesto" cuando debería describir "Animación de fuego con partículas brillantes sobre fondo oscuro", y la segunda es una ventana emergente con mensaje de selección que está etiquetada genéricamente como "Imagen de código" cuando en realidad contiene "Ventana emergente con fondo amarillo y borde rojo que dice '¡HAS SIDO SELECCIONADO!' en negro y 'ERES EL VISITANTE 9.999.999' en rojo, superpuesta sobre una foto de personas".

Dónde está en tu web2 elementos afectados
/ (inicio)img (Fuego animado molesto)📱 móvil + 🖥 escritorio
<img alt="Fuego animado molesto">

El texto alternativo no coincide con la imagen (IA de visión · confianza 85%). Sugerencia: Animación de fuego con partículas brillantes sobre fondo oscuro.

✅ Listo para pegar
<img src="https://media.giphy.com/media/111O3s9Fm55LhC/giphy.gif" alt="Animación de fuego con partículas brillantes sobre fondo oscuro">
/ (inicio)img (Imagen de código)📱 móvil + 🖥 escritorio
<img alt="Imagen de código">

El texto alternativo no coincide con la imagen (IA de visión · confianza 95%). Sugerencia: Ventana emergente con fondo amarillo y borde rojo que dice '¡HAS SIDO SELECCIONADO!' en negro y 'ERES EL VISITANTE 9.999.999' en rojo, superpuesta sobre una foto de personas.

✅ Listo para pegar
<img src="https://picsum.photos/200/300" alt="Ventana emergente con fondo amarillo y borde rojo que dice '¡HAS SIDO SELECCIONADO!' en negro y 'ERES EL VISITANTE 9.999.999' en rojo, superpuesta sobre una foto de personas">
Cómo se corrige

1) Identifica todas las imágenes con alt deficiente (genérico como 'imagen', 'foto', números, etc.). 2) Reescribe cada alt de forma clara, concisa y descriptiva: incluye qué es, qué muestra y, si es relevante, su propósito en la página. 3) Evita repetir palabras clave innecesariamente y no escribas 'imagen de...' al inicio. 4) Prueba con un lector de pantalla para verificar que la descripción tiene sentido sin ver la imagen.

<img src="producto.jpg" alt="Silla de oficina negra con ruedas y reposabrazos regulables" />
<!-- Antes: alt="producto" o alt="" -->
<!-- Después: el alt describe claramente qué es y sus características relevantes -->

Alternativas: Si la imagen es decorativa, usa alt vacío (alt="") y asegúrate de que no lleva rol ARIA. Para imágenes complejas (gráficos, diagramas), considera añadir una descripción larga con aria-describedby o un enlace a una página con más detalles.

Cómo comprobar que quedó bien: Ejecuta axe DevTools o WAVE nuevamente: no debe haber avisos de 'alt-quality'. Luego, desactiva la carga de imágenes en tu navegador o usa un lector de pantalla (NVDA, JAWS) para confirmar que cada alt transmite la información esencial de la imagen.

Grave🔍 IA · confirmarRápidoPerceptible1 elem · 1 pág1.4.1 Uso del color, nivel A

12Información transmitida solo por color o forma (sin alternativa textual)

En tu web hay información que se comunica únicamente por color o forma sin texto que la acompañe. Por ejemplo, un botón rojo que significa 'error' o un icono de estrella que indica 'favorito'. Las personas con daltonismo o que usan lectores de pantalla no pueden entender este mensaje porque no hay texto alternativo que lo explique.

Afecta a personas con discapacidad visual (daltonismo, baja visión) y a usuarios de tecnologías de asistencia. Legalmente, incumples la Ley 11/2023 de España y WCAG 2.1 nivel A. Además, perjudica la usabilidad general: en dispositivos monocromos o con mala iluminación, tu contenido resulta incomprensible.

Dónde está en tu web1 elemento afectado
/ (inicio)(página)📱 móvil + 🖥 escritorio

El texto 'HAZ CLIC AQUÍ PARA RECLAMAR TU PREMIO' en verde cian sobre fondo negro es prácticamente ilegible y se distingue principalmente por el color. Sin contraste suficiente, usuarios con daltonismo o baja visión no podrían identificar es (IA de visión · confianza 95%) · Enlace/botón 'HAZ CLIC AQUÍ PARA RECLAMAR TU PREMIO' en color verde cian (#00FF00 aproximadamente) sobre fondo negro (#000000). Contraste insuficiente. — Arréglalo: Cambiar el color del texto a blanco o amarillo con suficiente contraste (mínimo 4.5:1 para texto normal). Añadir un borde o subrayado visible para reforzar que es un elemento interactivo, independientemente del color..

Cómo se corrige

1) Identifica todos los elementos donde el color o la forma son el único medio de transmitir información (estados de formulario, iconos de estado, gráficos, etc.). 2) Añade texto complementario visible o etiquetas ARIA que describan claramente el significado (por ejemplo: 'error', 'completado', 'favorito'). 3) Si prefieres ocultar el texto, usa clases CSS como 'sr-only' para que solo lo lea el lector de pantalla, pero siempre debe estar presente en el código.

<!-- Antes: solo color/forma -->
<button style="background-color: red;">Enviar</button>
<i class="star-icon"></i>

<!-- Después: color + texto -->
<button style="background-color: red;" aria-label="Enviar (campo obligatorio)">Enviar</button>
<i class="star-icon" aria-label="Añadido a favoritos"></i>

<!-- Alternativa: texto visible + icono -->
<button style="background-color: red;"><span class="error-icon">⚠</span> Enviar</button>
<span><i class="star-icon"></i> Favorito</span>

/* Clase sr-only para ocultar texto visualmente pero mantenerlo accesible */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
}

Alternativas: 1) Combina color con patrones, líneas o texturas adicionales en gráficos (además de color rojo/verde, usa rellenos diferentes). 2) Usa iconos + etiquetas de texto siempre visibles para máxima claridad. 3) En formularios, añade mensajes de validación explícitos debajo del campo, no solo cambio de color del borde.

Cómo comprobar que quedó bien: Recorre tu web con un simulador de daltonismo (herramienta Coblis o similar) y comprueba que entiendas la información sin color. Ejecuta un lector de pantalla (NVDA, JAWS o VoiceOver) y verifica que describe correctamente cada estado o acción: debe decir 'error', 'favorito', 'completado', etc., no solo 'botón rojo'.

Para tu desarrollador — resumen técnico

Copia esto y envíaselo a quien mantiene tu web. Lleva cada criterio WCAG, los selectores afectados y el arreglo, sin la parte comercial.

ACCESIBILIDAD — https://prueba.kriminis.com
Puntuación: 30/100 (nota E) · WCAG 2.2 AA / EN 301 549
12 tipos de barrera · 36 elementos · generado por RampaScanner el 25/8/2026
Riesgo legal: alto · exposición 100/100
  - faltan etiquetas en campos de formulario — impide comprar, registrarse o contactar con lector de pantalla
  - hay texto con contraste insuficiente — ilegible para muchas personas con baja visión
  - el contenido no se adapta al móvil sin scroll horizontal — donde está la mayoría del tráfico

## 1. Form elements must have labels  [Crítico · Rápido · ~15 min]
Criterio: 4.1.2 Nombre, función y valor, nivel A
Elementos (2): input[type="text"]  ;  textarea
Arreglo: 1) Identifica todos los campos de entrada (input, textarea, select) en tu formulario. 2) Añade un elemento <label> con atributo 'for' que coincida con el 'id' del campo, o envuelve el campo dentro del <label>. 3) Asegúrate de que el texto de la etiqueta describe claramente qué debe introducir el usuario.
Código:
Antes:
<input type="email" name="email" placeholder="tu@email.com">

Después:
<label for="email-input">Correo electrónico</label>
<input type="email" id="email-input" name="email" placeholder="tu@email.com">

O alternativa (envolviendo):
<label>
  Correo electrónico
  <input type="email" name="email" placeholder="tu@email.com">
</label>

## 2. Trampa de teclado: el foco se queda atascado y no se puede avanzar  [Crítico · Medio · ~45 min]
Criterio: 2.1.2 Sin trampa de teclado, nivel A
Elementos (1): audio
Arreglo: 1) Identifica dónde el foco se queda atrapado (habitualmente en modales, menús desplegables o widgets personalizados). 2) Asegura que Tab siempre avanza al siguiente elemento enfocable y Shift+Tab retrocede. 3) Implementa una gestión de foco que permita salir: en modales, Tab en el último elemento enfocable debe llevar al primero (o cerrar el modal con Escape); en menús, Escape debe cerrar y devolver el foco al disparador. 4) Prueba la navegación completa sin usar el ratón.
Código:
// Antes: Modal sin salida de teclado
<div class="modal">
  <button>Cerrar</button>
  <input type="text" />
</div>

// Después: Modal con gestión de foco circular y Escape
<div class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-title">
  <h2 id="modal-title">Título del modal</h2>
  <input type="text" id="first-input" />
  <button id="close-btn">Cerrar</button>
</div>

<script>
const modal = document.querySelector('.modal');
const focusableElements = modal.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
const firstElement = focusableElements[0];
const lastElement = focusableElements[focusableElements.length - 1];

modal.addEventListener('keydown', (e) => {
  if (e.key === 'Escape') {
    modal.close();
    return;
  }
  if (e.key === 'Tab') {
    if (e.shiftKey && document.activeElement === firstElement) {
      e.preventDefault();
      lastElement.focus();
    } else if (!e.shiftKey && document.activeElement === lastElement) {
      e.preventDefault();
      firstElement.focus();
    }
  }
});
firstElement.focus();
</script>

## 3. Elements must meet minimum color contrast ratio thresholds  [Grave · Medio · ~1 h]
Criterio: 1.4.3 Contraste (mínimo), nivel AA
Elementos (12): marquee[behavior="alternate"]  ;  li:nth-child(1) > a  ;  li:nth-child(4) > a  ;  li:nth-child(7) > a  ;  li:nth-child(10) > a  ;  li:nth-child(13) > a  ;  …
Arreglo: 1) Identifica todos los elementos con bajo contraste usando un analizador (axe DevTools, WAVE o similar). 2) Aumenta la luminosidad del texto (hazlo más oscuro) o reduce la del fondo (hazlo más claro). 3) Verifica que el ratio de contraste sea mínimo 4.5:1 para textos pequeños (< 18pt) o 3:1 para textos grandes (≥ 18pt). 4) Prueba con herramientas de simulación de daltonismo para garantizar que el color no sea el único diferenciador.
Código:
/* Antes: contraste insuficiente */
.texto-bajo-contraste {
  color: #999999;  /* gris medio */
  background-color: #f5f5f5;  /* gris muy claro */
  /* Ratio: ~2.5:1 — INCUMPLE */
}

/* Después: contraste mínimo AA cumplido */
.texto-alto-contraste {
  color: #333333;  /* gris oscuro */
  background-color: #ffffff;  /* blanco */
  /* Ratio: ~12.6:1 — CUMPLE */
}

/* Botón: ejemplo alternativo */
.boton-antes {
  color: #888888;
  background-color: #eeeeee;
}

.boton-despues {
  color: #ffffff;
  background-color: #0052cc;  /* azul oscuro */
  /* Ratio: ~8.3:1 — CUMPLE */
}

## 4. El contenido no se adapta a pantallas estrechas sin scroll horizontal  [Grave · Medio · ~45 min]
Criterio: 1.4.10 Reflow, nivel AA
Elementos (4): table.tabla-principal  ;  tbody  ;  tr  ;  td
Arreglo: 1) Revisa el diseño responsivo: asegúrate de que todos los elementos se adapten a un ancho mínimo de 320px sin requerir scroll horizontal. 2) Ajusta el contenido que sobresale: elimina márgenes fijos, amplía contenedores flexibles (usa width: 100% en lugar de valores px fijos) y evita overflow-x hidden que oculte contenido. 3) Prueba en navegador a 320px de ancho (puedes usar DevTools del navegador) y verifica que se puede leer todo con desplazamiento solo vertical.
Código:
/* Antes */
.contenedor {
  width: 1200px;
  margin: 0 auto;
  overflow: hidden;
}

.columna {
  width: 400px;
  float: left;
}

/* Después */
.contenedor {
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 16px;
  box-sizing: border-box;
}

.columna {
  width: 100%;
  float: none;
}

@media (min-width: 768px) {
  .columna {
    width: 48%;
    float: left;
    margin-right: 2%;
  }
}

## 5. <marquee> elements are deprecated and must not be used  [Grave · Medio · ~1 h]
Criterio: 2.2.2 Pausa, detención u ocultación, nivel A
Elementos (3): marquee[direction="up"]  ;  marquee[behavior="alternate"]  ;  marquee[scrollamount="50"]
Arreglo: 1) Localiza todas las etiquetas <marquee> en tu código HTML. 2) Sustituye cada <marquee> por una alternativa accesible: un contenedor <div> con CSS (scroll horizontal opcional, pero pausable) o mejor aún, contenido estático o un carrusel controlado por el usuario con botones de pausa. 3) Si necesitas animación, utiliza CSS animations o JavaScript con controles accesibles para pausar/reanudar. 4) Prueba que el contenido sea legible y controlable sin requierir que se mueva automáticamente.
Código:
// ANTES (incorrecto)
<marquee direction="left" scrollamount="5">
  ¡Oferta especial: descuento del 20% este fin de semana!
</marquee>

// DESPUÉS (correcto)
<div role="region" aria-label="Anuncio especial">
  <p>¡Oferta especial: descuento del 20% este fin de semana!</p>
</div>

// O si necesitas scroll horizontal controlado:
<div class="carousel-container" role="region" aria-label="Carrusel de ofertas">
  <button id="pauseBtn" aria-pressed="false">Pausar</button>
  <div id="carouselContent" class="carousel-scroll">
    ¡Oferta especial: descuento del 20% este fin de semana!
  </div>
  <button id="playBtn" aria-pressed="true">Reanudar</button>
</div>

<style>
.carousel-scroll {
  overflow-x: auto;
  /* Animación pausable mediante JavaScript */
}
.carousel-scroll.paused {
  animation-play-state: paused;
}
</style>

## 6. Contenido en movimiento o reproducción automática sin control para pausarlo  [Grave · Rápido · ~30 min]
Criterio: 2.2.2 Pausa, detención, ocultación, nivel A
Elementos (3): marquee  ;  marquee  ;  marquee
Arreglo: 1) Identifica todo contenido que se mueve o reproduce automáticamente (carruseles, vídeos, gifs animados, animaciones CSS). 2) Añade controles visibles y fáciles de usar (botones de pausa/reanudar, claramente etiquetados). 3) Asegúrate de que el contenido pause automáticamente cuando el usuario no interactúa, o proporciona un control para hacerlo. 4) Si es un vídeo, implementa controles nativos del navegador (play/pause). 5) Prueba que todos los controles funcionan con teclado y lector de pantallas.
Código:
Antes:
<div class="carousel" autoplay>
  <img src="slide1.jpg" />
  <img src="slide2.jpg" />
</div>

Después:
<div class="carousel" role="region" aria-label="Carrusel de imágenes">
  <div class="carousel-slides">
    <img src="slide1.jpg" alt="Slide 1" />
    <img src="slide2.jpg" alt="Slide 2" />
  </div>
  <button id="pause-btn" aria-pressed="false">Pausar</button>
  <button id="play-btn" aria-pressed="true">Reanudar</button>
</div>

<script>
let isPlaying = true;
const pauseBtn = document.getElementById('pause-btn');
const playBtn = document.getElementById('play-btn');

pauseBtn.addEventListener('click', () => {
  isPlaying = false;
  pauseBtn.setAttribute('aria-pressed', 'true');
  playBtn.setAttribute('aria-pressed', 'false');
  // Detener animación del carrusel
});

playBtn.addEventListener('click', () => {
  isPlaying = true;
  playBtn.setAttribute('aria-pressed', 'true');
  pauseBtn.setAttribute('aria-pressed', 'false');
  // Reanudar animación del carrusel
});
</script>

## 7. <ul> and <ol> must only directly contain <li>, <script> or <template> elements  [Grave · Medio · ~45 min]
Criterio: 1.3.1 Información y relaciones, nivel A
Elementos (1): ul
Arreglo: 1) Identifica todos los elementos <ul> y <ol> en tu código. 2) Revisa qué elementos hijo contienen directamente (div, p, span, etc.). 3) Envuelve el contenido de texto o elementos no-li dentro de elementos <li>. 4) Si hay scripts o templates, déjalos como están (son permitidos). 5) Prueba con un lector de pantalla para confirmar que la lista se anuncia correctamente.
Código:
Antes:
<ul>
  <div>Elemento 1</div>
  <p>Elemento 2</p>
  <li>Elemento 3</li>
</ul>

Después:
<ul>
  <li>Elemento 1</li>
  <li>Elemento 2</li>
  <li>Elemento 3</li>
</ul>

O si necesitas estructura compleja:
<ul>
  <li>
    <div>Elemento 1</div>
  </li>
  <li>
    <p>Elemento 2</p>
  </li>
  <li>Elemento 3</li>
</ul>

## 8. Estructura de encabezados con saltos de nivel  [Moderado · Medio · ~45 min]
Criterio: 1.3.1 Información y relaciones, nivel A
Elementos (1): h3
Arreglo: 1) Audita todos los encabezados de la página e identifica dónde hay saltos (H1→H3, H2→H4, etc.). 2) Reorganiza los encabezados para que sigan una secuencia lógica sin saltos: H1 → H2 → H3 en orden. 3) Asegúrate de que hay un único H1 por página y que los niveles inferiores descienden gradualmente. 4) Valida los cambios con una herramienta de accesibilidad.
Código:
<h1>Título principal de la página</h1>
<h2>Sección 1</h2>
<h3>Subsección 1.1</h3>
<h2>Sección 2</h2>

<!-- ❌ Antes (incorrecto): salto de H1 a H3 -->
<!-- <h1>Título principal</h1>
<h3>Contenido sin H2</h3> -->

<!-- ✅ Después (correcto): estructura coherente sin saltos -->

## 9. La página no tiene una región principal (<main>) para saltar al contenido  [Moderado · Rápido · ~15 min]
Criterio: 1.3.1 Información y relaciones, nivel A
Arreglo: 1) Identifica el bloque de contenido principal de tu página (no el encabezado, menú o pie). 2) Envuelve ese contenido dentro de una etiqueta <main>. 3) Asegúrate de que solo haya un <main> por página. 4) Verifica que esté colocado después de los elementos de navegación principal (header, nav).
Código:
Antes:
<body>
  <header>Logo y menú</header>
  <nav>Navegación</nav>
  <section>Contenido principal aquí</section>
  <footer>Pie</footer>
</body>

Después:
<body>
  <header>Logo y menú</header>
  <nav>Navegación</nav>
  <main>
    <section>Contenido principal aquí</section>
  </main>
  <footer>Pie</footer>
</body>

## 10. Texto sobre imagen de fondo: revisa el contraste a mano  [Leve · Medio · ~45 min]
Criterio: 1.4.3 Contraste (mínimo), nivel AA
Elementos (5): span  ;  h2  ;  p  ;  h1  ;  span
Arreglo: 1) Identifica todo texto que se superpone sobre imágenes o degradados. 2) Añade un fondo semisólido (overlay) detrás del texto con opacidad suficiente para garantizar contraste (mínimo ratio 4.5:1 para texto normal, 3:1 para texto grande). 3) Alternativamente, aplica una sombra de texto o borde que mejore la legibilidad. 4) Verifica el contraste real con una herramienta como WebAIM Contrast Checker.
Código:
/* Antes: texto sobre imagen sin garantía de contraste */
.hero-text {
  position: absolute;
  color: #ffffff;
  font-size: 18px;
  background: transparent;
}

/* Después: overlay semisólido para garantizar contraste */
.hero-text {
  position: absolute;
  color: #ffffff;
  font-size: 18px;
  background: rgba(0, 0, 0, 0.6);
  padding: 12px 16px;
  border-radius: 4px;
}

/* Alternativa: sombra de texto */
.hero-text {
  color: #ffffff;
  text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}

## 11. Texto alternativo de baja calidad (no describe bien la imagen)  [Moderado · Rápido · ~15 min]
Criterio: 1.1.1 Contenido no textual, nivel A
Elementos (2): img (Fuego animado molesto)  ;  img (Imagen de código)
Arreglo: 1) Identifica todas las imágenes con alt deficiente (genérico como 'imagen', 'foto', números, etc.). 2) Reescribe cada alt de forma clara, concisa y descriptiva: incluye qué es, qué muestra y, si es relevante, su propósito en la página. 3) Evita repetir palabras clave innecesariamente y no escribas 'imagen de...' al inicio. 4) Prueba con un lector de pantalla para verificar que la descripción tiene sentido sin ver la imagen.
Código:
<img src="producto.jpg" alt="Silla de oficina negra con ruedas y reposabrazos regulables" />
<!-- Antes: alt="producto" o alt="" -->
<!-- Después: el alt describe claramente qué es y sus características relevantes -->

## 12. Información transmitida solo por color o forma (sin alternativa textual)  [Grave · Rápido · ~30 min]
Criterio: 1.4.1 Uso del color, nivel A
Elementos (1): (página)
Arreglo: 1) Identifica todos los elementos donde el color o la forma son el único medio de transmitir información (estados de formulario, iconos de estado, gráficos, etc.). 2) Añade texto complementario visible o etiquetas ARIA que describan claramente el significado (por ejemplo: 'error', 'completado', 'favorito'). 3) Si prefieres ocultar el texto, usa clases CSS como 'sr-only' para que solo lo lea el lector de pantalla, pero siempre debe estar presente en el código.
Código:
<!-- Antes: solo color/forma -->
<button style="background-color: red;">Enviar</button>
<i class="star-icon"></i>

<!-- Después: color + texto -->
<button style="background-color: red;" aria-label="Enviar (campo obligatorio)">Enviar</button>
<i class="star-icon" aria-label="Añadido a favoritos"></i>

<!-- Alternativa: texto visible + icono -->
<button style="background-color: red;"><span class="error-icon">⚠</span> Enviar</button>
<span><i class="star-icon"></i> Favorito</span>

/* Clase sr-only para ocultar texto visualmente pero mantenerlo accesible */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
}

Comprobaciones manuales pendientes

El análisis automático cubre gran parte de la WCAG, pero no todo se puede detectar con una máquina. Nuestra IA de visión ya adelanta algunas (marcadas 🔍); el resto necesita una persona para confirmar la conformidad plena:

  • Navegación con lector de pantallaRecorre las páginas clave con NVDA (Windows) o VoiceOver (Mac): ¿se entiende el orden, los enlaces y los formularios sin ver la pantalla?
  • Solo con tecladoCompleta tareas importantes (comprar, contactar, buscar) sin ratón: todo debe ser alcanzable y el foco visible en cada paso.
  • Textos alternativos con sentido · la IA de visión detectó algo (ver arriba)El análisis detecta imágenes SIN alt, pero no si el alt es útil. Revisa que describan la información, no 'imagen1.jpg'.
  • Subtítulos y transcripciones realesComprueba que los subtítulos son correctos y sincronizados, no solo que existen.
  • Mensajes de error claros · relevante en tu webProvoca errores en tus formularios: ¿explican qué pasó y cómo corregirlo, y se anuncian al lector de pantalla?
  • La información no depende solo del color · la IA de visión detectó algo (ver arriba)Estados, errores y enlaces deben distinguirse también por texto o forma, no solo por color.
  • Zoom al 200% y 400%Amplía el navegador: el contenido debe seguir usable sin que se pierda ni se solape.
  • Lenguaje claro (cognitivo)Instrucciones y textos comprensibles; evita jerga innecesaria y pasos ambiguos.
Tabla de conformidad WCAG 2.2 AA8 fallan · 18 sin fallos · 29 manual

Estado de los 55 criterios A y AA. «Cumple (auto)» = el análisis automático no detectó fallos (no garantiza conformidad plena); «Revisión manual» = criterio no verificable por máquina.

CriterioNombreNivelEstado
1.1.1Contenido no textualAFalla
1.3.1Información y relacionesAFalla
1.4.1Uso del colorAFalla
1.4.3Contraste (mínimo)AAFalla
1.4.10Reajuste (reflow)AAFalla
2.1.2Sin trampas para el foco del tecladoAFalla
2.2.2Poner en pausa, detener, ocultarAFalla
4.1.2Nombre, función, valorAFalla
1.2.1Solo audio y solo vídeo (grabado)ARevisión manual
1.2.3Audiodescripción o alternativa (grabado)ARevisión manual
1.2.4Subtítulos (en directo)AARevisión manual
1.2.5Audiodescripción (grabado)AARevisión manual
1.3.3Características sensorialesARevisión manual
1.4.5Imágenes de textoAARevisión manual
1.4.12Espaciado del textoAARevisión manual
1.4.13Contenido al pasar el cursor o al enfocarAARevisión manual
2.1.4Atajos de teclado de carácterARevisión manual
2.2.1Tiempo ajustableARevisión manual
2.3.1Umbral de tres destellosARevisión manual
2.4.5Múltiples formasAARevisión manual
2.4.6Encabezados y etiquetasAARevisión manual
2.4.11Foco no oculto (mínimo)AARevisión manual
2.5.1Gestos del punteroARevisión manual
2.5.2Cancelación del punteroARevisión manual
2.5.4Actuación por movimientoARevisión manual
2.5.7Movimientos de arrastreAARevisión manual
3.2.1Al recibir el focoARevisión manual
3.2.2Al recibir entradasARevisión manual
3.2.3Navegación consistenteAARevisión manual
3.2.4Identificación consistenteAARevisión manual
3.2.6Ayuda consistenteARevisión manual
3.3.1Identificación de erroresARevisión manual
3.3.3Sugerencias ante erroresAARevisión manual
3.3.4Prevención de errores (legal, financiero, datos)AARevisión manual
3.3.7Entrada redundanteARevisión manual
3.3.8Autenticación accesible (mínimo)AARevisión manual
4.1.3Mensajes de estadoAARevisión manual
1.2.2Subtítulos (grabados)ASin fallos (auto)
1.3.2Secuencia significativaASin fallos (auto)
1.3.4OrientaciónAASin fallos (auto)
1.3.5Identificar el propósito de la entradaAASin fallos (auto)
1.4.2Control del audioASin fallos (auto)
1.4.4Cambio de tamaño del textoAASin fallos (auto)
1.4.11Contraste no textualAASin fallos (auto)
2.1.1TecladoASin fallos (auto)
2.4.1Evitar bloquesASin fallos (auto)
2.4.2Titulado de páginasASin fallos (auto)
2.4.3Orden del focoASin fallos (auto)
2.4.4Propósito de los enlaces (en contexto)ASin fallos (auto)
2.4.7Foco visibleAASin fallos (auto)
2.5.3Etiqueta en el nombreASin fallos (auto)
2.5.8Tamaño del objetivo (mínimo)AASin fallos (auto)
3.1.1Idioma de la páginaASin fallos (auto)
3.1.2Idioma de las partesAASin fallos (auto)
3.3.2Etiquetas o instruccionesASin fallos (auto)

Recomendaciones adicionales

Buenas prácticas de accesibilidad (no obligatorias por WCAG) que mejorarían la experiencia. No cuentan como incumplimiento legal.

  • All page content should be contained by landmarks16 elem.
  • Heading levels should only increase by one1 elem.
  • Document should have one main landmark1 elem.

¿Quieres que tu web cumpla la ley?

La accesibilidad web es obligatoria desde junio de 2025 (Ley 11/2023), con multas de hasta 1.000.000 €. Te ayudamos a corregir estas barreras y a mantener tu web conforme.

Hablemos →
Declaración de Accesibilidad — borrador autocompletado (modelo oficial)

Generada según la estructura oficial (Ley 11/2023 / EN 301 549), con los criterios que fallan ya rellenados. Solo tienes que completar los campos entre corchetes ([RAZÓN SOCIAL], [CANAL DE CONTACTO]…) antes de publicarla.

DECLARACIÓN DE ACCESIBILIDAD

Campos a completar antes de publicar: [RAZÓN SOCIAL], [CANAL DE CONTACTO] y, si procede, [DIRECCIÓN POSTAL] y los contenidos exentos del apartado 2.c).

[RAZÓN SOCIAL] (en adelante, «la entidad») se ha comprometido a hacer accesible su sitio web prueba.kriminis.com, de conformidad con la Ley 11/2023, de 8 de mayo, por la que se incorpora al ordenamiento español la Directiva (UE) 2019/882 (European Accessibility Act), y con la norma UNE-EN 301 549, que remite a las Pautas WCAG 2.2 en su nivel AA.
La presente declaración se aplica al sitio web https://prueba.kriminis.com.

1. SITUACIÓN DE CUMPLIMIENTO
Este sitio web es «NO CONFORME» con la norma UNE-EN 301 549 y las WCAG 2.2 nivel AA. Se han detectado incumplimientos, que se recogen en el apartado 2 y en el informe técnico adjunto, y que se encuentran en proceso de subsanación.

2. CONTENIDO NO ACCESIBLE
El contenido que se recoge a continuación no es accesible por los siguientes motivos:

a) Falta de conformidad con la Ley 11/2023.
El diagnóstico automático detectó incumplimientos de los siguientes criterios WCAG 2.2 AA:
   • 4.1.2 Nombre, función y valor, nivel A — afecta a: Form elements must have labels (2 elemento[s]).
   • 2.1.2 Sin trampa de teclado, nivel A — afecta a: Trampa de teclado: el foco se queda atascado y no se puede avanzar (1 elemento[s]).
   • 1.4.3 Contraste (mínimo), nivel AA — afecta a: Elements must meet minimum color contrast ratio thresholds (12 elemento[s]).
   • 1.4.10 Reflow, nivel AA — afecta a: El contenido no se adapta a pantallas estrechas sin scroll horizontal (4 elemento[s]).
   • 2.2.2 Pausa, detención u ocultación, nivel A — afecta a: <marquee> elements are deprecated and must not be used (3 elemento[s]).
   • 1.3.1 Información y relaciones, nivel A — afecta a: <ul> and <ol> must only directly contain <li>, <script> or <template> elements (1 elemento[s]).
   • 1.1.1 Contenido no textual, nivel A — afecta a: Texto alternativo de baja calidad (no describe bien la imagen) (2 elemento[s]).
   • 1.4.1 Uso del color, nivel A — afecta a: Información transmitida solo por color o forma (sin alternativa textual) (1 elemento[s]).

b) Carga desproporcionada.
   No se ha alegado carga desproporcionada respecto de los contenidos anteriores.

c) Contenido no incluido en el ámbito de la legislación aplicable.
   [Indique aquí, si procede, contenidos exentos: documentos ofimáticos publicados antes del 20/09/2018, mapas en línea, contenido de terceros no financiado ni desarrollado ni controlado por la entidad, o retransmisiones en directo, entre otros.]

3. PREPARACIÓN DE LA PRESENTE DECLARACIÓN
Esta declaración se preparó el 2026-08-25.
El método empleado fue una autoevaluación asistida por herramienta automática (motor axe-core, WCAG 2.2 nivel AA) sobre una muestra de 1 página[s] del sitio, auditada en versiones de escritorio y móvil. Se detectaron 12 tipo[s] de incumplimiento que afectan a 36 elemento[s]. Una evaluación completa requiere, además, pruebas manuales con productos de apoyo (lectores de pantalla y navegación por teclado).
Última revisión de la declaración: 2026-08-25.

4. OBSERVACIONES Y DATOS DE CONTACTO
Puede realizar comunicaciones sobre requisitos de accesibilidad (por ejemplo, notificar incumplimientos o solicitar información de contenidos excluidos) a través de [CANAL DE CONTACTO: dirección de correo electrónico o formulario].
[DIRECCIÓN POSTAL DE LA ENTIDAD] (opcional).
La entidad atenderá dichas comunicaciones conforme a la normativa vigente.

— Borrador orientativo generado automáticamente por RampaScanner. Complete los campos entre corchetes y revise el texto antes de publicarlo. No sustituye al asesoramiento legal.