Un enlace no es un botón, y un botón no es un enlace

Los enlaces y los botones pueden parecer idénticos en una página web, pero cumplen funciones diferentes y son interpretados de manera distinta por los navegadores, los lectores de pantalla y los usuarios que navegan con el teclado. Un enlace (<a>) está diseñado para la navegación. Un botón (<button>) está diseñado para ejecutar una acción.

Un enlace no es un botón, y un botón no es un enlace

Una de las formas más rápidas de identificar a un desarrollador front-end sin experiencia es observar cómo maneja los enlaces y los botones.

Parece algo trivial.

No lo es.

Muchos problemas de accesibilidad comienzan cuando los desarrolladores eligen el elemento HTML incorrecto y luego intentan obligarlo a comportarse como otra cosa.

Un enlace es para la navegación.

Un botón es para las acciones.

Estas dos cosas no son intercambiables.

Sin embargo, los sitios web modernos están llenos de enlaces que actúan como botones, botones que actúan como enlaces y elementos <div> clicables que pretenden ser ambas cosas.

La página puede verse bien.

La experiencia de accesibilidad suele ser un desastre.

La regla es simple

Si al hacer clic en un elemento el usuario es llevado a otro lugar, utilice un enlace.

<a href="/productos/rampa-para-silla-de-ruedas">
    Ver detalles del producto
</a>

Algunos ejemplos incluyen:

  • Abrir la página de un producto
  • Leer un artículo de blog
  • Descargar un PDF
  • Navegar a otra página
  • Saltar a otra sección de la misma página
  • Abrir un sitio web externo

Si al hacer clic en un elemento se realiza una acción en la página actual, utilice un botón.

<button type="button">
    Abrir menú
</button>

Algunos ejemplos incluyen:

  • Abrir una ventana modal
  • Enviar un formulario
  • Expandir un acordeón
  • Mostrar u ocultar un menú
  • Aplicar un filtro
  • Agregar un artículo al carrito de compras

Ese es todo el proceso de decisión.

Sin embargo, muchos sitios web lo hacen mal.

Por qué les importa a los usuarios de tecnologías de asistencia

La mayoría de los usuarios nunca piensa en la diferencia entre un enlace y un botón porque interactúan visualmente con la página.

Los usuarios de lectores de pantalla sí lo hacen.

Las tecnologías de asistencia presentan los enlaces y los botones de manera diferente porque cumplen funciones distintas.

Cuando un lector de pantalla anuncia "enlace", los usuarios esperan navegación.

Cuando anuncia "botón", esperan una acción.

Esas expectativas se forman después de años utilizando sitios web.

Cuando un desarrollador crea un enlace que abre una ventana modal en lugar de navegar a otra página, el usuario recibe un mensaje y experimenta algo completamente diferente.

El resultado es confusión.

Los problemas de accesibilidad suelen ser consecuencia de expectativas incumplidas más que de funcionalidades rotas.

El comportamiento con el teclado es diferente

Los enlaces y los botones también responden de forma diferente al teclado.

Un botón estándar puede activarse tanto con la tecla Enter como con la barra espaciadora.

Un enlace estándar normalmente se activa con Enter.

Muchos desarrolladores descubren esto solamente después de reemplazar controles nativos por componentes personalizados en JavaScript.

Crean un elemento <div> clicable, agregan un detector de eventos y asumen que el trabajo está terminado.

No lo está.

Ahora deben recrear:

  • Compatibilidad con teclado
  • Gestión del foco
  • Semántica para lectores de pantalla
  • Estados deshabilitados
  • Nombres accesibles
  • Comportamiento esperado del navegador

HTML nativo ya proporciona todo eso.

Descartarlo genera trabajo adicional y normalmente introduce errores de accesibilidad.

El problema de los enlaces falsos

Uno de los errores de accesibilidad más comunes es utilizar una etiqueta de anclaje sin un atributo href.

Por ejemplo:

<a onclick="openModal()">
    Abrir diálogo
</a>

Visualmente, esto puede parecer un enlace.

Semánticamente, muchas veces no lo es.

Muchas tecnologías de asistencia no tratarán el elemento como un enlace real porque carece de un destino válido.

El desarrollador ve un enlace.

El usuario del lector de pantalla puede no verlo así.

Esto crea experiencias inconsistentes entre navegadores y tecnologías de asistencia.

Un botón habría sido la solución correcta desde el principio.

El problema de los botones falsos

El error opuesto es igual de común.

Un desarrollador crea un botón y utiliza JavaScript para redirigir al usuario a otra página.

<button onclick="window.location='/contacto'">
    Contáctenos
</button>

El resultado visual funciona.

El significado semántico es incorrecto.

A los usuarios se les informa que están activando un botón. Sin embargo, son enviados a otra página.

Esa desconexión puede parecer menor para un desarrollador que prueba el sitio con un ratón, pero genera fricción innecesaria para los usuarios que dependen de comportamientos predecibles.

Si el propósito es navegar, utilice un enlace.

Los botones pueden hacer cosas que los enlaces no pueden

Otra razón por la que esta distinción es importante es que los botones y los enlaces tienen capacidades diferentes.

Los botones pueden deshabilitarse.

<button disabled>
    Enviar
</button>

Los enlaces no pueden.

Los botones participan de forma natural en los formularios.

Los enlaces no.

Los botones están diseñados para acciones del usuario.

Los enlaces están diseñados para destinos.

Intentar obligar a un elemento a comportarse como el otro suele generar código adicional y más problemas de accesibilidad.

Cómo navegan los usuarios de lectores de pantalla

Muchos desarrolladores se sorprenden al descubrir que los usuarios de lectores de pantalla suelen navegar por las páginas consultando listas de enlaces o listas de botones.

En lugar de leer cada palabra de una página, pueden saltar directamente entre elementos interactivos.

Imagine que un usuario abre una lista de enlaces y escucha:

  • Abrir menú
  • Expandir sección
  • Mostrar filtros
  • Cerrar diálogo

Esas son acciones, no destinos.

Deberían haber sido botones.

La estructura de la página ya no refleja la realidad.

El usuario debe dedicar tiempo adicional a descubrir qué hace realmente cada control.

Un ejemplo del mundo real

Recientemente, el sitio web de un bufete de abogados utilizaba etiquetas de anclaje para cada sección desplegable de su página de preguntas frecuentes.

Cada pregunta estaba programada como un enlace.

Al hacer clic en el enlace no se navegaba a ninguna parte. Simplemente se mostraba contenido oculto debajo de la pregunta.

El diseño funcionaba visualmente.

La experiencia de accesibilidad no.

Los lectores de pantalla anunciaban cada pregunta como un enlace. Los usuarios de teclado esperaban navegación. El código no proporcionaba ninguna de las dos cosas.

Reemplazar los enlaces por botones nativos requirió solo unos minutos de desarrollo y corrigió inmediatamente el problema semántico.

No fue necesario rediseñar nada.

No fue necesario instalar ningún widget de accesibilidad.

Solo fue necesario utilizar mejor HTML.

Lista práctica de verificación

Utilice un enlace cuando:

  • El usuario navega a otra página
  • El usuario abre un sitio web externo
  • El usuario descarga un archivo
  • El usuario salta a otra sección de una página
  • El usuario abre un documento o recurso

Utilice un botón cuando:

  • El usuario envía un formulario
  • El usuario abre o cierra una ventana modal
  • El usuario expande o contrae contenido
  • El usuario muestra u oculta un menú
  • El usuario cambia una configuración
  • El usuario filtra resultados de búsqueda
  • El usuario realiza una acción sin abandonar la página

La buena accesibilidad comienza con HTML

Muchas auditorías de accesibilidad se centran en atributos ARIA, contraste de color, indicadores de foco y herramientas automatizadas de prueba.

Esos aspectos son importantes.

Sin embargo, un número sorprendente de incumplimientos relacionados con la ADA tiene su origen en algo mucho más simple: elegir el elemento HTML equivocado.

Los desarrolladores suelen pasar horas escribiendo JavaScript para que controles personalizados se comporten correctamente cuando el navegador ya proporciona controles accesibles de forma gratuita.

Un enlace no es un botón.

Un botón no es un enlace.

El navegador conoce la diferencia. Los lectores de pantalla conocen la diferencia. Los usuarios de teclado conocen la diferencia.

Su HTML también debería conocerla.

Frequently Asked Questions

Use a link whenever the user is being taken somewhere else. Examples include opening another page, downloading a PDF, viewing a product page, visiting an external website, or jumping to an anchor location on the same page.
Use a button whenever the user is performing an action without leaving the current page. Examples include opening menus, submitting forms, applying filters, toggling settings, expanding accordions, and opening dialogs.
Screen readers announce links and buttons differently. Users rely on those announcements to understand what will happen when they interact with a control. Using the wrong element creates confusion and makes websites harder to use.
Technically yes, but it is generally considered poor semantic HTML. If clicking the control takes the user to a different page, a link is usually the correct element.
A link can be programmed to open a modal, but this is usually the wrong semantic choice. Opening a modal is an action, not navigation, so a button is generally more appropriate.
Often no. An anchor element without an href attribute may not be recognized as a true link by browsers and assistive technologies. If the control performs an action, use a button instead.
Native links and buttons include built-in keyboard support, focus behavior, and accessibility semantics. A clickable
requires developers to manually recreate all of these features, which often leads to accessibility failures.
Many do. Screen readers provide shortcuts that allow users to move through a page by jumping between links, buttons, headings, form controls, and other elements. Accurate semantics make this navigation more efficient.
No. HTML links do not support a native disabled state. Buttons can be disabled using the disabled attribute.
Buttons typically respond to both Enter and Space. Links are generally activated with Enter. This difference is one reason why replacing native elements with custom controls can create usability issues.
It can be. Using incorrect elements may affect keyboard accessibility, semantic structure, screen reader compatibility, and predictable behavior, all of which are covered by multiple WCAG success criteria.
While the ADA itself does not specify HTML elements, ADA-related accessibility evaluations often rely on WCAG standards. Using proper semantic HTML helps organizations meet accessibility expectations and reduces the risk of accessibility complaints.
Semantic HTML means using elements according to their intended purpose. Examples include using headings for headings, buttons for actions, forms for data collection, and links for navigation. Semantic HTML provides meaning that browsers and assistive technologies can understand.
One of the most common mistakes is using a link to trigger an action such as opening a modal, expanding an accordion, or toggling a menu. These interactions should typically be implemented with buttons rather than links.
Janeth

About Janeth

Comments (0)

No comments yet.

Get More Info