Enlaces e imágenes
La web se llama web porque es una red de páginas conectadas entre sí. Sin enlaces no hay navegación. Sin imágenes no hay experiencia visual. Estas dos etiquetas — <a> y <img> — son de las más usadas de todo HTML.
Enlaces con <a>
La etiqueta <a> (anchor) crea un enlace. Su atributo principal es href (hypertext reference), que indica a dónde lleva:
<!-- Enlace a otra web -->
<a href="https://github.com">Ir a GitHub</a>
<!-- Enlace a otra página de tu sitio -->
<a href="contacto.html">Página de contacto</a>
<!-- Enlace que abre en pestaña nueva -->
<a href="https://developer.mozilla.org" target="_blank" rel="noopener">Documentación MDN</a>
El atributo target
target="_self": abre en la misma pestaña (es el valor por defecto).target="_blank": abre en una pestaña nueva.
Cuando usas target="_blank", siempre añade rel="noopener". Es una medida de seguridad que evita que la página enlazada pueda manipular tu ventana original. Los navegadores modernos lo hacen automáticamente, pero es buena práctica ponerlo explícitamente.
Tipos de enlaces
<!-- Enlace a email -->
<a href="mailto:[email protected]">Escríbenos un email</a>
<!-- Enlace a teléfono (útil en móviles) -->
<a href="tel:+34912345678">Llámanos: 912 345 678</a>
<!-- Enlace a una sección de la misma página (ancla) -->
<a href="#precios">Ver precios</a>
<!-- La sección de destino necesita un id -->
<h2 id="precios">Nuestros precios</h2>
Los enlaces con #id son enlaces ancla: hacen scroll hasta el elemento que tenga ese id. Son perfectos para tablas de contenido y navegación dentro de una misma página.
Buenas prácticas en enlaces
| Mal | Bien | Por qué |
|---|---|---|
<a>Haz clic aquí</a> |
<a>Ver el catálogo completo</a> |
El texto del enlace debe describir el destino |
<a>Enlace</a> |
<a>Documentación de CSS Grid</a> |
Un lector de pantalla lee los enlaces fuera de contexto |
Imágenes con <img>
La etiqueta <img> inserta una imagen. Es una etiqueta vacía (no tiene cierre):
<img
src="gato-astronauta.jpg"
alt="Gato naranja con casco de astronauta flotando entre estrellas"
width="800"
height="600"
loading="lazy"
>
Atributos esenciales
| Atributo | Qué hace | ¿Obligatorio? |
|---|---|---|
src |
Ruta o URL de la imagen | Sí |
alt |
Texto alternativo (accesibilidad + SEO) | Sí |
width / height |
Dimensiones en píxeles (evita saltos de layout) | Muy recomendado |
loading="lazy" |
Carga la imagen solo cuando está cerca del viewport | Recomendado |
decoding="async" |
Decodifica la imagen sin bloquear el renderizado | Recomendado |
fetchpriority="high" |
Prioriza la descarga (para la imagen principal/hero) | Solo para la imagen hero |
El atributo
altno es opcional. Es lo que ve un usuario con lector de pantalla. Es lo que muestra el navegador si la imagen no carga. Es lo que lee Google para entender la imagen. Describe la imagen como se la explicarías a alguien por teléfono.
width y height: evita el CLS
Si no pones width y height, cuando la imagen carga, el contenido "salta" para hacerle sitio. Eso se llama CLS (Cumulative Layout Shift) y Google lo penaliza en el posicionamiento.
<!-- Bien: el navegador reserva el espacio antes de cargar la imagen -->
<img src="hero.jpg" alt="Vista panorámica de Barcelona" width="1200" height="600">
<!-- Mal: el contenido salta cuando la imagen carga -->
<img src="hero.jpg" alt="Vista panorámica de Barcelona">
Aunque luego redimensiones la imagen con CSS, pon siempre width y height en el HTML. El navegador calcula la proporción (aspect ratio) y reserva el espacio correcto.
Rutas relativas vs absolutas
Entender las rutas es fundamental para que tus enlaces e imágenes funcionen. Hay dos tipos:
Rutas absolutas
La URL completa, empezando por https://. Apuntan a un recurso en otro servidor:
<a href="https://github.com/torvalds">Perfil de Linus Torvalds</a>
<img src="https://picsum.photos/800/400" alt="Imagen aleatoria de Picsum">
Rutas relativas
Relativas a la ubicación del archivo actual. Son las que usas para archivos dentro de tu proyecto:
<!-- Archivo en la misma carpeta -->
<a href="contacto.html">Contacto</a>
<img src="logo.png" alt="Logo">
<!-- Archivo en una subcarpeta -->
<img src="imagenes/equipo/ana.jpg" alt="Ana García, diseñadora UX">
<!-- Archivo una carpeta arriba -->
<a href="../index.html">Volver al inicio</a>
Estructura de ejemplo:
mi-proyecto/
├── index.html
├── contacto.html
├── imagenes/
│ ├── logo.png
│ └── equipo/
│ ├── ana.jpg
│ └── carlos.jpg
└── paginas/
└── servicios.html
Desde paginas/servicios.html:
- Para ir a
index.html:href="../index.html"(subes un nivel) - Para usar
logo.png:src="../imagenes/logo.png"(subes un nivel, entras a imagenes)
Envolver imágenes en enlaces
Un patrón muy común: hacer que una imagen sea clicable. Solo envuelves <img> con <a>:
<a href="proyecto-detalle.html">
<img
src="imagenes/proyecto-ecommerce.jpg"
alt="Captura del proyecto e-commerce: tienda de vinilos con diseño retro"
width="600"
height="400"
loading="lazy"
decoding="async"
>
</a>
La etiqueta <figure>
Cuando una imagen necesita una leyenda o pie de foto, usa <figure> con <figcaption>:
<figure>
<img
src="grafico-ventas-q1.png"
alt="Gráfico de barras mostrando ventas del Q1: enero 45k, febrero 52k, marzo 61k"
width="800"
height="450"
loading="lazy"
>
<figcaption>Ventas del primer trimestre de 2026. Fuente: departamento comercial.</figcaption>
</figure>
<figure> no es solo para imágenes. También se usa para gráficos, diagramas, fragmentos de código o cualquier contenido que necesite una leyenda.
Crea un portfolio con enlaces e imágenes
Crea un archivo portfolio.html que simule un portfolio de desarrollador con:
- Un
<h1>con tu nombre (real o inventado) - Un párrafo de presentación
- Una sección "Proyectos" con al menos 3 proyectos, cada uno con:
- Una imagen (usa picsum.photos para imágenes placeholder, por ejemplo:
https://picsum.photos/600/400) - El nombre del proyecto como enlace (puede llevar a
#por ahora) - Una breve descripción
- Una imagen (usa picsum.photos para imágenes placeholder, por ejemplo:
- Una sección "Contacto" con enlaces
mailto:y a tu perfil de GitHub - Todas las imágenes con
alt,width,heightyloading="lazy"
lightbulb Pistas
Usa <figure> + <figcaption> para cada proyecto. Para las URLs de las imágenes de Picsum, puedes variar el tamaño: https://picsum.photos/600/400?random=1, ?random=2, etc.