Enlaces y botones con semántica correcta

Diferenciar navegación y acción para evitar componentes confusos y mejorar la experiencia con teclado y lector.

Un enlace lleva a un destino; un botón ejecuta una acción en el contexto actual.

Cuando mezclas ambos roles, rompes expectativas de teclado, lector y hasta de UX visual.

La semántica correcta evita hacks de JavaScript y mejora mantenibilidad.

Tu regla rápida: si cambia URL, enlace; si cambia estado/UI, botón.

  • Criterios simples para elegir elemento y evitar ambigüedad funcional.
  • Cómo detectar rápido usos incorrectos en componentes compartidos.
  • Revisa menús, cards, CTAs y barras de acciones: ahí suele estar el mayor número de errores.
  • Si encuentras `onClick` en elementos no interactivos, probablemente hay deuda de accesibilidad.
  • Corrige primero componentes base para propagar mejora a todas las vistas.

Claves teóricas

Criterios simples para elegir elemento y evitar ambigüedad funcional.

Aplicación en proyectos reales

Cómo detectar rápido usos incorrectos en componentes compartidos.

Revisa menús, cards, CTAs y barras de acciones: ahí suele estar el mayor número de errores.

Si encuentras `onClick` en elementos no interactivos, probablemente hay deuda de accesibilidad.

Corrige primero componentes base para propagar mejora a todas las vistas.

  • Asegura `href` real en enlaces de navegación.
  • Evita simular botones con enlaces sin razón funcional.
  • Revisa foco visible y activación con Enter/Espacio según el elemento.
  • Unifica estilos visuales sin romper semántica del HTML.

Patrón de código

Dos casos correctos: navegar al perfil y ejecutar guardado local.

Accesibilidad Web
05

Enlaces y botones con semántica correcta

Diferenciar navegación y acción para evitar componentes confusos y mejorar la experiencia con teclado y lector.

Código del tema: links vs buttons

📘 Teoría

Claves teóricas

Criterios simples para elegir elemento y evitar ambigüedad funcional.

1

Cuándo usar enlace

Navegación interna o externa: usa `a` con `href` válido.

2

Cuándo usar botón

Abrir modal, guardar, filtrar o disparar lógica sin cambio de ruta.

3

Anti patrón común

Usar `div` clickable para acciones o navegación rompe semántica y accesibilidad.

4

Nombre accesible

El texto visible debe expresar acción o destino de forma clara.

5

Estados deshabilitados

Un botón deshabilitado debe comunicar estado; un enlace no tiene disabled nativo.

6

Impacto en QA

Con semántica correcta, las pruebas de teclado y lector son más predecibles.

Aplicación en proyectos reales

Cómo detectar rápido usos incorrectos en componentes compartidos.

Revisa menús, cards, CTAs y barras de acciones: ahí suele estar el mayor número de errores.

Si encuentras `onClick` en elementos no interactivos, probablemente hay deuda de accesibilidad.

Corrige primero componentes base para propagar mejora a todas las vistas.

  • Asegura `href` real en enlaces de navegación.
  • Evita simular botones con enlaces sin razón funcional.
  • Revisa foco visible y activación con Enter/Espacio según el elemento.
  • Unifica estilos visuales sin romper semántica del HTML.

Patrón de código

Dos casos correctos: navegar al perfil y ejecutar guardado local.

Elección semántica correcta
<a href="/perfil">Ver perfil</a>
<button type="button" id="guardar">Guardar cambios</button>

🧪 Aprende probando

Ejemplo Demo guiada Compara una implementación semántica correcta frente a una ambigua.

🏁 Retos

Reto Reto práctico Corrige un enlace usado indebidamente como botón de acción.

🧰 Recursos

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .