Creando múltiples páginas HTML

Hasta ahora hemos trabajado con una sola página HTML, pero la mayoría de sitios web tienen múltiples páginas. En esta clase aprenderemos a crear y conectar diferentes páginas HTML.

Estructura de un sitio web con múltiples páginas

Un sitio web típico puede tener la siguiente estructura de archivos:

proyecto/
  ├── index.html        (página principal)
  ├── empleos.html      (página de empleos)
  ├── contacto.html     (página de contacto)
  ├── about.html        (página acerca de)
  └── styles.css

Creando una nueva página: empleos.html

Vamos a crear una nueva página empleos.html partiendo de nuestro index.html. Lo primero que debemos entender es qué partes del HTML se mantienen igual en todas las páginas y qué partes cambian.

Elementos que se repiten en todas las páginas

Los siguientes elementos normalmente son iguales en todas las páginas de un sitio web:

  1. <head>: Los metadatos, título base, enlaces a CSS, etc.
  2. <header>: La cabecera con el logo y la navegación
  3. <footer>: El pie de página con información de contacto, enlaces, etc.

Obviamente, dentro de los metadatos, vamos a cambiar el <title> y la descripción para que cada página tenga un título único.

Elemento que cambia en cada página

<main>: Esta es la etiqueta que contiene el contenido principal que cambia en cada página. Es el contenido único de cada página.

La etiqueta <main>: El contenido principal

La etiqueta <main> es fundamental porque:

  • Identifica el contenido principal de la página
  • Es el contenido que cambia de una página a otra
  • Solo debe haber una etiqueta <main> por página
  • No debe contener contenido que se repita (como navegación, logos, footer, etc.)
<!-- ❌ MAL: El footer no debe estar dentro de main -->
<main>
  <h2>Contenido de la página</h2>
  <footer>Pie de página</footer>
</main>

<!-- ✅ BIEN: Main solo contiene el contenido único de esta página -->
<main>
  <h2>Contenido de la página</h2>
  <p>Este contenido es específico de esta página.</p>
</main>
<footer>Pie de página</footer>

Enlaces relativos entre páginas

Cuando las páginas están en la misma carpeta, los enlaces son simples:

<!-- Ambos archivos están en la misma carpeta -->
<nav>
  <a href="index.html">Inicio</a>
  <a href="empleos.html">Empleos</a>
  <a href="contacto.html">Contacto</a>
</nav>

Rutas relativas en diferentes estructuras

Páginas en la misma carpeta

proyecto/
  ├── index.html
  └── empleos.html

Desde index.html a empleos.html:

<a href="empleos.html">Empleos</a>

Páginas en subcarpetas

proyecto/
  ├── index.html
  └── pages/
      └── empleos.html

Desde index.html a empleos.html:

<a href="pages/empleos.html">Empleos</a>

Desde empleos.html a index.html:

<a href="../index.html">Inicio</a>

.. significa “subir un nivel” en la estructura de carpetas.

Estructura más compleja

proyecto/
  ├── index.html
  ├── pages/
  │   ├── empleos.html
  │   └── contacto.html
  └── blog/
      └── articulo.html

Desde empleos.html a articulo.html:

<a href="../blog/articulo.html">Artículo</a>

Desde articulo.html a empleos.html:

<a href="../pages/empleos.html">Empleos</a>

Ruta absoluta vs relativa

Ruta relativa

<!-- Relativa a la ubicación actual del archivo -->
<a href="empleos.html">Empleos</a>
<a href="../index.html">Inicio</a>
<a href="pages/contacto.html">Contacto</a>

Ruta absoluta desde la raíz del sitio

<!-- Comienza con / = desde la raíz del sitio -->
<a href="/index.html">Inicio</a>
<a href="/pages/empleos.html">Empleos</a>
<a href="/blog/articulo.html">Artículo</a>

Ruta absoluta completa (URL externa)

<!-- URL completa con dominio -->
<a href="https://www.ejemplo.com/empleos.html">Empleos</a>

Buenas prácticas

1. Consistencia en la navegación

Asegúrate de que la navegación sea idéntica en todas las páginas:

<!-- Esta navegación debe ser IGUAL en todas las páginas -->
<nav>
  <a href="index.html">Inicio</a>
  <a href="empleos.html">Empleos</a>
  <a href="contacto.html">Contacto</a>
</nav>

2. Indicar la página actual

Es buena práctica indicar visualmente en qué página está el usuario:

<!-- En index.html -->
<nav>
  <a href="index.html" class="active">Inicio</a>
  <a href="empleos.html">Empleos</a>
  <a href="contacto.html">Contacto</a>
</nav>

<!-- En empleos.html -->
<nav>
  <a href="index.html">Inicio</a>
  <a href="empleos.html" class="active">Empleos</a>
  <a href="contacto.html">Contacto</a>
</nav>

3. Títulos descriptivos

Cada página debe tener un título único y descriptivo:

<!-- index.html -->
<title>Mi Sitio Web - Inicio</title>

<!-- empleos.html -->
<title>Mi Sitio Web - Ofertas de Empleo</title>

<!-- contacto.html -->
<title>Mi Sitio Web - Contacto</title>

4. Reutilizar estilos

Todas las páginas deben enlazar al mismo archivo CSS:

<!-- En todas las páginas -->
<link rel="stylesheet" href="styles.css" />

Si las páginas están en subcarpetas, ajusta la ruta:

<!-- En pages/empleos.html -->
<link rel="stylesheet" href="../styles.css" />

El problema de la repetición

Como has notado, estamos copiando y pegando el <head>, <header> y <footer> en cada página. Esto tiene un problema: si queremos cambiar algo en la navegación, tenemos que editarlo en todas las páginas.

En el futuro, aprenderemos a usar:

  • Frameworks como Astro, Next.js o similares que permiten crear componentes reutilizables
  • Server Side Includes (SSI) en servidores
  • JavaScript para cargar contenido dinámicamente

Pero por ahora, trabajando con HTML puro, la repetición es necesaria.

¡Con esto ya puedes crear sitios web con múltiples páginas conectadas entre sí!