Warning Enlace con atributo href vacío

Por qué href="" enlaza a la propia URL de la página y la recarga, y en qué se diferencia de un enlace sin ningún href.

El validador marca cualquier <a href=""> — un ancla con el atributo href presente pero definido como una cadena vacía.

Ejemplo

<!-- Incorrecto: recarga la página actual al hacer clic -->
<a href="" onclick="hacerAlgo()">Clic</a>

<!-- Correcto, si se pretende navegar -->
<a href="/destino">Clic</a>

<!-- Correcto, si se pretende un control que no navega -->
<button type="button" onclick="hacerAlgo()">Clic</button>

Por qué importa

Un href vacío no es lo mismo que no tener ningún href. Una URL relativa de "" se resuelve a la propia URL de la página actual, así que hacer clic en el enlace navega hacia sí mismo — en la práctica, una recarga completa de página, que descarta cualquier estado de JavaScript en la página e interrumpe lo que sea que el manejador de clic estuviera intentando hacer. Este patrón aparece sobre todo en enlaces que solo debían ser controles manejados por JavaScript, donde se agregó href="" únicamente para que el elemento se viera clicable o focusable. Un <button> es el elemento correcto para un control que no navega a ningún lado; un <a> sin ningún href también es sintaxis válida y no va a disparar una recarga, pero pierde la semántica de enlace por defecto, como la posibilidad de recibir foco por teclado.

Frequently asked questions

¿Por qué no usar simplemente href="#" en su lugar?

href="#" evita la recarga completa pero igual salta al inicio de la página (o mueve la posición de scroll) a menos que el manejador de clic llame a preventDefault(). Ni href="" ni href="#" son la herramienta correcta para un control que no navega — usa un <button> en su lugar.

¿Es un problema un <a> sin ningún atributo href?

No — eso es válido y esta revisión no lo marca. Un <a> sin href simplemente no es un hipervínculo; se renderiza como texto en línea normal sin comportamiento de navegación por defecto, lo cual es una elección legítima (aunque inusual) para un enlace de relleno.