HTML. Enlaces de hipertexto

Qué es un enlace web

Los enlaces de hipertexto (o hiperenlaces) son el elemento característico de la web porque permiten que las páginas se relacionen entre sí. La sencillez y libertad con que se pueden enlazar páginas situadas en servidores distintos son el motivo del éxito de la web.

Un enlace de hipertexto tiene dos partes:

El autor de una página decide qué enlaces quiere poner en cada página, pero no puede elegir qué enlaces enlazan con sus páginas web.

Un enlace sólo puede llevar a un destino, pero enlaces diferentes pueden llevar al mismo destino.

El destino de un enlace puede ser un directorio, un archivo o un elemento (texto o imagen) situado en una página web:

La etiqueta <a>

Enlaces

En el código fuente HTML los enlaces se identifican mediante la etiqueta <a> y su atributo href, que contiene el URI del destino al que conduce el enlace. Los URI del destino pueden ser absolutos (http://www....) o relativos (con respecto al directorio actual).

Los enlaces de texto se muestran en los navegadores de color azul y subrayados.

<p>Enlace a la <a href="https://www.cdlibre.org/">página principal de cdlibre</a>.</p>
Enlace externo
<p>Logotipo de cdlibre: <a href="https://www.cdlibre.org/"><img src="../img/cdlibre-logo.png" alt="Logotipo de cdlibre" title="Logotipo de cdlibre" width="118" height="70"></a></p>

Logotipo de cdlibre: Logotipo de cdlibre

Enlace externo

Si en el atributo href se escribe simplemente el carácter almohadilla (#), casi todos los navegadores se desplazan al principio de la página (aunque creo que este comportamiento no está definido en ninguna recomendación).

<p>Este es un <a href="#">enlace al principio de esta página</a>.</p>

Destinos

Con relación a los destinos de los enlaces, podemos distinguir tres tipos de destinos:

En cada caso, la situación es ligeramente distinta:

Enlaces no HTTP

Los navegadores son capaces de gestionar algunos tipos de enlaces no HTTP, aunque normalmente lo que hacen es redirigir la petición a otra aplicación del sistema operativo, por lo que se necesita configurar el navegador.

Un enlace con el atributo href con el valor mailto:dirección_de_correo_electrónico abre automáticamente el cliente de correo electrónico (Outlook, Thunderbird, Evolution, etc.) con un correo dirigido a la dirección indicada. El uso cada vez más extendido del correo web hace que esta opción sea un engorro más que una ayuda.

<p>Haciendo clic en este enlace se abrirá el cliente de correo para <a href="mailto:fulanito@example.org">enviar un correo a fulanito@example.org</a> (dirección ficticia).</p>

Haciendo clic en este enlace se abrirá el cliente de correo para enviar un correo a fulanito@example.org (dirección ficticia).

Enlace externo

Contexto de navegación: Atributo target

El atributo target permite especificar el contexto en el que se resuelve el enlace. Los valores posibles son:

<p>Esta página contiene un <a href="https://mclibre.org/" target="_blank">enlace a mclibre.org</a> que se abre en una nueva pestaña.</p>
ERROR (no puede mostrarse el objeto)
Enlace externo
<p>Esta página contiene un <a href="https://www.w3.org/" target="_self">enlace a w3.org</a> que se abre en el elemento que contiene esta página.</p>
<p>Como el sitio web w3.org está configurado para poderse abrir en este tipo de elementos, la página web SÍ que se mostrará.</p>
ERROR (no puede mostrarse el objeto)
Enlace externo
<p>Esta página contiene un <a href="https://mclibre.org/" target="_self">enlace a mclibre.org</a> que se abre en el elemento que contiene esta página.</p>
  <p>Como se trata del mismo dominio, aunque el sitio web mclibre.org NO está configurado para poderse abrir en este tipo de elementos, la página web SÍ que se mostrará.</p>
ERROR (no puede mostrarse el objeto)
Enlace externo
<p>Esta página contiene un <a href="https://www.cdlibre.org/" target="_self">enlace a cdlibre.org</a> que se abre en el elemento que contiene esta página.</p>
  <p>Como se trata de otro dominio y el sitio web cdlibre.org NO está configurado para poderse abrir en este tipo de elementos, la página web NO se mostrará.</p>
ERROR (no puede mostrarse el objeto)
Enlace externo
<p>Esta página contiene un <a href="https://www.w3.org/" target="_parent">enlace a w3.org</a> que se abre en el elemento que contiene el elemento que contiene esta página.</p>
<p>Como el sitio web w3.org está configurado para poderse abrir en este tipo de elementos, la página web SÍ que se mostrará.</p>
ERROR (no puede mostrarse el objeto)
Enlace externo
<p>Esta página contiene un <a href="https://www.w3.org/" target="_top">enlace a w3.org</a> que se abre en el elemento de nivel más alto al elemento que contiene esta página.</p>
<p>Como el sitio web w3.org está configurado para poderse abrir en este tipo de elementos, la página web SÍ que se mostrará.</p>
ERROR (no puede mostrarse el objeto)
Enlace externo

El comportamiento predeterminado de los navegadores es abrir los enlaces en el mismo nivel en que se encuentra el enlace (es decir, el valor _self):

<p>Esta página contiene un <a href="http://www.example.com/">enlace a example.com</a> que se abre en el elemento predeterminado.</p>
ERROR (no puede mostrarse el objeto)
Enlace externo

¡Atención!El atributo target con el valor _blank provoca que el navegador abra el enlace en una nueva pestaña. Por desgracia, desde esa nueva pestaña se puede cambiar la página que muestra la pestaña inicial, lo que permite engañar al usuario (como explica Mathias Bynens). Esta posibilidad se puede controlar mediante el atributo rel="noopener", que impide que la nueva pestaña pueda manejar la primera. Por ese motivo, para proteger a nuestros visitantes, se recomendaba añadir siempre este atributo a cualquier enlace a una página externa que se abriera en una nueva pestaña.

En 2018 los navegadores empezaron a tratar de impedir este tipo de ataque, aplicando automáticamente el atributo rel="noopener" a cualquier página que contenga target="_blank". Safari lo hace desde Safari 12.1 (octubre de 2018). Firefox lo hace desde Firefox 79 (julio de 2020). Google Chrome lo hace desde Chrome 88 (enero de 2021).