Addaw, ir a inicio Donar

Técnica ARIA WCAG 2.2

ARIA22Usar role=status para presentar mensajes de estado

En resumen

Cuando una página muestra un aviso que no recibe el foco (resultados de una búsqueda, número de artículos del carrito...), quien usa un lector de pantalla puede no enterarse. Esta técnica coloca ese texto en un contenedor con role="status", ya presente en la página, para que la tecnología de asistencia lo anuncie de forma educada, sin interrumpir. Es la vía habitual para cumplir el criterio 4.1.3 Mensajes de estado.

Ejemplo práctico

Ficha de producto de una tienda online con un indicador de la cesta que se actualiza al pulsar «Añadir a la cesta», sin recargar la página ni mover el foco.

Así no: Contador de la cesta que cambia en silencio

El número de productos se actualiza en pantalla, pero el contenedor no es una región activa: el lector de pantalla no dice nada al pulsar el botón y no hay confirmación de que el producto se haya añadido. Para notarlo, active NVDA o VoiceOver y pulse el botón.

<p id="cesta" class="cesta">Cesta: 0 productos</p>
<h2>Aceite de oliva virgen extra, 1 l</h2>
<p>8,95 €</p>
<button type="button" id="anadir">Añadir a la cesta</button>
<style>
  .cesta { font-weight: bold; color: #412c56; }
  h2 { font-size: 1.1em; margin: .5em 0 .2em; }
</style>
<script>
var n = 0;
document.getElementById('anadir').addEventListener('click', function () {
  n++;
  document.getElementById('cesta').textContent = 'Cesta: ' + n + (n === 1 ? ' producto' : ' productos');
});
</script>
Captura de pantalla del ejemplo incorrecto: Contador de la cesta que cambia en silencio
Así se ve el ejemplo incorrecto.

La demostración contiene, a propósito, el error de accesibilidad que se explica.

Así sí: Mensaje de estado con role="status"

El contenedor lleva role="status" y aria-atomic="true" desde la carga: cada cambio se anuncia de forma educada, sin interrumpir ni mover el foco, y se lee el texto completo («Cesta: …»), no solo el número que cambia.

<p id="cesta" class="cesta" role="status" aria-atomic="true">Cesta: 0 productos</p>
<h2>Aceite de oliva virgen extra, 1 l</h2>
<p>8,95 €</p>
<button type="button" id="anadir">Añadir a la cesta</button>
<style>
  .cesta { font-weight: bold; color: #412c56; }
  h2 { font-size: 1.1em; margin: .5em 0 .2em; }
</style>
<script>
var n = 0;
document.getElementById('anadir').addEventListener('click', function () {
  n++;
  document.getElementById('cesta').textContent = 'Cesta: ' + n + (n === 1 ? ' producto' : ' productos');
});
</script>

Pruébelo aquí:

Cómo comprobarlo

Lector de pantalla (NVDA o VoiceOver)

  1. Situar el foco en «Añadir a la cesta» y pulsarlo con Intro o Espacio.
  2. Comprobar que, sin mover el foco, se anuncia el nuevo estado de la cesta después de leer el botón.
  3. Pulsar de nuevo y verificar que el anuncio se repite con el número actualizado.

Debería anunciar: «Cesta: 1 producto»

Herramientas del navegador

  1. Abrir las herramientas de desarrollo (F12), pestaña Elementos, y comprobar que el contenedor del mensaje tiene role="status" en el HTML inicial, antes de pulsar el botón.
  2. En la pestaña Accesibilidad, verificar que la función es «status» y que todo el texto del mensaje (incluido el contexto, como «Cesta:» o el texto alternativo de un icono) está dentro de ese contenedor.

Teclado

  1. Pulsar el botón con el teclado y comprobar que el foco permanece en él: un mensaje de estado no debe mover el foco (criterio 4.1.3).

Validación automática

  1. Las herramientas automáticas no detectan que un mensaje de estado se actualiza sin región activa: el análisis del criterio 4.1.3 es manual.
  2. axe DevTools sí avisa de valores ARIA inválidos (aria-valid-attr-value) o de funciones inexistentes (aria-roles) si el atributo está mal escrito.

Errores frecuentes en auditorías

  • Añadir role="status" al contenedor en el mismo momento en que se escribe el mensaje, cuando ya es tarde para que se anuncie.
  • Poner role="status" a un contenedor que incluye toda la lista de resultados, de modo que se lee entera en cada actualización.
  • Usar role="alert" para confirmaciones rutinarias («Producto añadido»), que interrumpe lo que se esté leyendo.
  • Dejar fuera del contenedor el contexto visual (icono de la cesta, etiqueta «Cesta:») y anunciar solo un número sin significado.

Técnica completa: traducción al español del texto del W3C

Descripción

Esta técnica usa la función (role) status de la especificación ARIA para notificar a las tecnologías de asistencia cuando el contenido se ha actualizado con información sobre el estado del usuario o de la aplicación. Esto se hace añadiendo role="status" al elemento que contiene el mensaje de estado. La función de región activa (live region) de ARIA status tiene un valor implícito de aria-live igual a polite, lo que permite que el usuario sea notificado a través de la tecnología de asistencia (como un lector de pantalla) cuando se añaden mensajes de estado. La función status también tiene un valor predeterminado de aria-atomic igual a true, de modo que las actualizaciones del contenedor marcado con la función status harán que la tecnología de asistencia presente al usuario todo el contenido del contenedor, incluidas las etiquetas definidas por el autor (o los elementos anidados adicionales). Este contexto adicional puede ser fundamental cuando el texto del mensaje de estado por sí solo no proporciona un equivalente a la experiencia visual. El contenido del contenedor aria-live es leído automáticamente por la tecnología de asistencia, sin que esta tenga que situar el foco en el lugar donde se muestra el texto. Consulte WAI-ARIA status (role) para más detalles.

Tenga en cuenta que, dado que actualmente role="status" no se trata como atómico de forma predeterminada en algunos entornos, es recomendable añadir un aria-atomic="true" explícito si debe anunciarse todo el contenido del contenedor.

Ejemplos

Incluir un mensaje con los resultados de una búsqueda

Después de que el usuario pulse un botón de búsqueda, el contenido de la página se actualiza para incluir los resultados de la búsqueda, que se muestran en una sección debajo del botón. El cambio de contenido también incluye el mensaje "5 results returned" (se han devuelto 5 resultados) cerca de la parte superior de este nuevo contenido. A este texto se le asigna una función apropiada para un mensaje de estado. Un lector de pantalla anunciará "5 results returned".

<div role="status" aria-atomic="true">5 results returned.</div>

Ejemplo funcional: role=status en resultados de búsqueda

Actualizar el estado del carrito de la compra

Después de que el usuario pulse un botón de añadir al carrito de la compra, el contenido situado junto al icono del carrito se actualiza para mostrar "1 items" (1 artículos). El contenedor de este texto (en este caso un <p>) está marcado con role="status". Como aporta contexto visual, la imagen del carrito de la compra, con un texto alt breve y preciso, también se coloca dentro del contenedor. Gracias al valor de aria-atomic, un lector de pantalla anunciará "Shopping cart, six items" (carrito de la compra, seis artículos).

<p role="status" aria-atomic="true">
  <img src="shopping-cart.png" alt="Shopping Cart">
  <span id="cart">0</span> items
</p>

Ejemplo funcional: role=status en un carrito de la compra

Pruebas

Procedimiento

Para cada mensaje de estado:

  1. Comprobar que el contenedor destinado a albergar el mensaje de estado tiene un atributo role con el valor status antes de que se produzca el mensaje de estado.
  2. Comprobar que, cuando se desencadena el mensaje de estado, este se encuentra dentro del contenedor.
  3. Comprobar que los elementos o atributos que proporcionan información equivalente a la experiencia visual del mensaje de estado (como una imagen de carrito de la compra con un texto alt adecuado) también residen en el contenedor.

Resultados esperados

  • Las comprobaciones n.º 1, n.º 2 y n.º 3 son verdaderas.

Cómo lo comprobamos en ADDAW

En las auditorías de accesibilidad de ADDAW revisamos cada criterio de conformidad siguiendo este catálogo de técnicas: comprobamos si la web aplica una técnica suficiente y documentamos cada fallo común con capturas y el código afectado, para que el equipo de desarrollo sepa exactamente qué corregir. Los informes siguen la metodología del Observatorio de Accesibilidad y la norma UNE-EN 301 549.

Solicitar una auditoría

Fuente y licencia

Traducción al español, no oficial, realizada por ADDAW a partir de la técnica ARIA22 del documento «Techniques for WCAG 2.2» del W3C (versión del repositorio público del W3C a 22/10/2026). Copyright © W3C® (MIT, ERCIM, Keio, Beihang). Se publica conforme a la licencia de documentos del W3C. El texto normativo de referencia es el original en inglés; si detecta un error en la traducción, escríbanos.

Financiado por la unión europea Gobierno de españa red.es Plan de recuperación transformación y resilencia kit digital