SVG y accesibilidad: validar title, desc y estructura sin romper la optimización

SVG y accesibilidad: validar title, desc y estructura sin romper la optimización

Iconos decorativos vs informativos: reglas WCAG, etiquetas title/desc y validación en línea sin romper la optimización SVG.

23.07.2026
9 min de lectura
Compartir este artículo:
SVG
accessibility
a11y
wcag
validation
Tutorial

Por qué la accesibilidad SVG importa antes de la optimización

Un SVG optimizado al −60 % no sirve de nada si un lector de pantalla anuncia «imagen» sin contexto, o si un icono decorativo contamina la navegación por voz. Las reglas WCAG distinguen los SVG decorativos (ocultos a las tecnologías de asistencia) de los SVG informativos (título o descripción requeridos). El validador SVG en línea de FastMinify comprueba la sintaxis, la presencia de viewBox y la ausencia de <title> / <desc> — con avisos recomendados, no una auditoría WCAG completa. Todo se ejecuta en el navegador en el hub de herramientas SVG, antes o después de optimize SVG. Para el contexto de los presets SVGO, consulta el artículo SVGO presets explicados.

Distinción clara decorativo vs informativo (WCAG 1.1.1)
Validación de sintaxis + viewBox + title/desc en tiempo real
Avisos recomendados — sin falsa sensación de conformidad total
Compatible con optimize-svg (title/desc conservados en los presets)
Procesamiento 100 % local — ideal antes de entregar un design system

Ejemplos concretos: iconos UI e inline

Icono de botón con etiqueta (decorativo)

Un botón «Eliminar» con una papelera SVG a la izquierda del texto: el SVG recibe aria-hidden="true", sin title. validate-svg mostrará un warning title/desc — esperado. La accesibilidad recae en el texto del botón, no en el icono.

Before optimization

Tamaño de archivos
SVG con title exportado de Figma (~2,1 KB)

After optimization

Tamaño de archivos
aria-hidden + optimize default (~0,9 KB)
Estado solo, sin texto (informativo)

Un badge «éxito» o «error» representado únicamente por un SVG debe tener <title>Éxito</title> o un aria-label explícito en el componente. validate-svg confirma la presencia del texto; prueba después con teclado y lector de pantalla.

Buenas prácticas: WCAG, optimize y design system

Checklist antes de producción

Integra validate-svg en tu revisión de assets — sobre todo para iconos entregados por diseñadores sin prueba AT.

Clasificar cada icono: decorativo o informativo (doc del design system)
validate-svg: sintaxis + viewBox + title/desc si es informativo
Prueba de lector de pantalla en 2–3 iconos representativos
optimize y luego re-validate en la muestra informativa
Versionar el SVG fuente con sus metadatos a11y
Trampas después de SVGO o conversión JSX

El preset aggressive puede fusionar paths o quitar IDs — rara vez title/desc, pero siempre compara visualmente. svg-to-jsx conserva el markup; comprueba que title/desc siguen siendo los primeros hijos del <svg> en el componente React.

No eliminar title «para aligerar» — optimize ya lo hace
aria-hidden + title: el title lo ignoran las AT — OK
Duplicar el mismo title en 50 iconos: preferir aria-label contextual
SVG inline en HTML: minify-html no sustituye a validate-svg
Hub SVG para encadenar validate, optimize, jsx
Límites honestos del validador del navegador

FastMinify validate-svg es una red de seguridad estructural, no un sustituto de una auditoría de accesibilidad de página completa. Contrastes, foco de teclado, orden de tabulación y alternativas largas siguen siendo tu responsabilidad o la de herramientas dedicadas.

Warnings ≠ fallo WCAG automático
Decorativo sin title: warning aceptable si hay aria-hidden
Sin detección de aria-hidden en la herramienta v1
Complementar con pruebas de usuarios o axe/WAVE
Documentar la decisión decorativo/informativo en el PR

Cuándo basta la herramienta del navegador

Casos de uso frecuentes

No hace falta instalar svgo-cli ni un linter a11y pesado para comprobar una exportación de Figma antes del merge.

Revisión de PR de design system: lote de iconos pegados uno a uno
Depuración de un SVG inline que rompe el parser XML
Control de viewBox antes de responsive o resize-svg
Verificación de title/desc antes de svg-to-jsx
Formación de diseñadores sobre title vs aria-hidden

Complementar con la CI y las auditorías AT

Lo que el navegador no sustituye

Las pruebas automatizadas de página (Pa11y, axe-core en CI, Lighthouse accessibility) cubren el DOM renderizado — no solo el archivo SVG fuente. Mantén validate-svg aguas arriba sobre los assets; añade pruebas E2E con lector de pantalla en los recorridos críticos.

CI: svgo + snapshot visual en la carpeta icons/
Addon a11y de Storybook en los componentes de iconos
eslint-plugin-jsx-a11y para aria-hidden / aria-label
Auditoría trimestral WCAG nivel AA en las plantillas
Sin batch validate-svg en FastMinify v1 — un icono cada vez
Alinear optimize y validación

Usa el mismo preset SVGO en la preview del navegador y en CI. Tras optimize en el pipeline, extrae una muestra y pásala por validate-svg a mano — consulta SVGO presets y la guía de optimización SVG.

Preset safe/default para assets con title/desc
Re-validate tras aggressive en iconos informativos
Documentar la política a11y del design system
Enlace al artículo SVG → React si hay componentes
Hub SVG como referencia de herramientas para el equipo

Herramientas complementarias

Validador estructural vs auditoría completa

FastMinify validate-svg se centra en el markup SVG fuente. Otras herramientas cubren la página renderizada o normas más amplias.

FastMinify validate-svg

Sintaxis XML, viewBox, title/desc — navegador, sin cuenta.

Ventajas:
Feedback inmediato durante la edición
Stats SVG integradas
Privacy-local
Inconvenientes:
Sin auditoría WCAG de página completa
Sin simulación de lector de pantalla

axe DevTools / WAVE

Extensiones de navegador para auditoría de accesibilidad DOM.

Ventajas:
Contrastes, ARIA, landmarks
Informe WCAG orientado a la página
Inconvenientes:
No valida un archivo .svg aislado de forma tan directa
Posibles falsos positivos en SVG inline complejo

SVGO + validación manual

Pipeline CLI clásico sin validate-svg.

Ventajas:
Batch sobre cientos de iconos
Config versionada svgo.config.js
Inconvenientes:
Sin warning title/desc de serie
Instalación Node requerida

Decorativo vs informativo: las reglas básicas

Cuándo el SVG es decorativo

Un icono junto a una etiqueta visible («Guardar», «Cerrar») no aporta información extra: es puramente visual. WCAG recomienda ocultarlo a los lectores de pantalla con aria-hidden="true" en el <svg>, o un role="presentation" equivalente. En ese caso, <title> y <desc> son innecesarios — e incluso contraproducentes si duplican el texto adyacente.

Icono + texto visible → aria-hidden en el SVG
No hace falta title/desc si el sentido ya está en el DOM
validate-svg puede señalar la ausencia de title — normal en decorativo
No confundir «sin title» con «SVG roto»
Probar con VoiceOver / NVDA: el icono no debe leerse
Cuándo el SVG es informativo

Un pictograma solo (estado de error sin texto, gráfico inline, logo enlace sin texto alt) debe transmitir su sentido. Opciones: <title> y opcionalmente <desc> como primeros hijos del <svg>, o role="img" + aria-label / aria-labelledby en el elemento SVG o su wrapper React.

title corto (nombre del icono); desc para el detalle si hace falta
Primeros hijos directos de svg — orden recomendado por la spec
aria-labelledby apuntando a un id en title
Gráficos de datos: title + desc o alternativa textual larga
validate-svg avisa si title y desc están ausentes o vacíos
Qué comprueba validate-svg (y qué no comprueba)

La herramienta parsea el markup XML, exige una raíz <svg>, señala un viewBox ausente (warning) y la ausencia de texto en <title> o <desc> (warning). Son controles estructurales básicos — no una simulación de lector de pantalla, ni contraste de color, ni validación ARIA compleja. Para una auditoría completa, complementa con axe DevTools o WAVE además del validador del navegador.

Errores: XML mal formado, sin raíz svg, entrada demasiado grande
Warnings: viewBox ausente, title/desc ausentes o vacíos
Estado valid_with_warnings: sintaxis OK, puntos a11y por decidir
Panel de stats: dimensiones, viewBox, presencia de title/desc
Sin juicio «decorativo o informativo» — tú decides el tratamiento

Workflow FastMinify: validar, corregir, optimizar

Paso 1 — Pegar y leer los diagnósticos

Abre la herramienta validate SVG, pega tu markup o carga un archivo .svg. Los errores bloquean la entrega (XML inválido); los warnings te invitan a añadir viewBox o texto descriptivo según el caso de uso.

Pegar, subir archivo o cargar el ejemplo integrado
Leer el panel de resultados: errores vs avisos
Stats: viewBox, title, desc, tamaño
Copiar o descargar el SVG corregido a mano
Editor Monaco para editar title/desc in situ
Paso 2 — Corregir title, desc y viewBox

Para un icono informativo, añade por ejemplo <title>Error</title> justo después de la apertura del <svg>. Si existen width/height sin viewBox, deduce uno (viewBox="0 0 24 24") o pasa por resize-svg en el hub. El embellecedor SVG ayuda a releer la estructura tras la edición.

title: etiqueta corta para lectores de pantalla
desc: contexto extra si el icono es ambiguo
viewBox: requerido para el escalado responsive (warning si falta)
Decorativo: aria-hidden en lugar de un title ficticio
Revalidar después de cada modificación
Paso 3 — Optimizar sin eliminar la accesibilidad

Una vez validada la estructura, pasa al optimizador SVGO (preset safe o default para iconos UI). FastMinify conserva <title> y <desc> en los tres presets — vuelve a lanzar validate-svg después de optimize para confirmar. El minificador SVG rápido solo toca espacios y comentarios.

optimize safe/default: iconos con title/desc
aggressive: evitar si title/desc son críticos o hay IDs referenciados
Cadena validate → optimize → validate
Artículo SVGO presets para elegir el nivel adecuado
svg-to-jsx: comprobar que title/desc sobreviven a la conversión React

Conclusión

La accesibilidad SVG empieza por una decisión clara: decorativo (aria-hidden, sin title) o informativo (title/desc o aria-label). validate-svg te ayuda a asegurar la sintaxis y la estructura antes de optimize SVGO — sin pretender sustituir una auditoría completa. Encadena validación, optimización y revalidación en el hub SVG para entregar iconos ligeros y usables por todos.

Clasificar decorativo vs informativo antes de interpretar los warnings title/desc
validate → optimize (safe/default) → validate en los iconos informativos
aria-hidden en los iconos redundantes con texto visible
Complementar con pruebas de lector de pantalla en los recorridos críticos
Hub SVG + artículo SVGO presets para la cadena completa
Compartir este artículo
Compartir este artículo: