Estructura de un documento HTML
Table of Contents
De la misma manera que una novela, como documento que es, tiene una estructura reconocible: portada, índice, capítulos, párrafos, bibliografía y contraportada, los documentos HTML también poseen una estructura aunque es más rígida.
A lo largo de este tema hablaremos de documentos HTML o páginas web indistintamente.
Hay que tener claro que cuando hablamos de página web nos referimos a un documento HTML. Y dado que, lo habitual en este contexto de la Web, es hablar de páginas web creo que es necesario que quede calro desde el principio.
Además, cabe señalar desde el principio que la función principal de un documento HTML es dar al texto estructura y significado (también conocido como semántica), de forma que el navegador web pueda mostrarlo correctamente. De esta función principal y sus etiquetas hablaremos en el apartado siguiente.
En este apartado nos centramos en la estructura de un documento HTML.
Secciones de un documento HTML
Para entrar de lleno en la estructura de un documento HTML vamos a analizar directamente el siguiente documento mínimo escrito en HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Mi primer documento HTML</title>
</head>
<body>
<h1>Documentos HTML</h1>
<p>
Este es el primer documento HTML: básico pero en él se aprecia la estructura básica de un documento HTML.
</p>
</body>
</html>
En él se pueden ver las tres secciones básicas. La sección principal, etiqueta padre de todas, <html>, y las que están contenidas en ella, a saber: <head> y <body>.
La sección <head> se utiliza para añadir metainformación que será interpretado por los navegadores web y que los ayuda a renderizar la página correctamente. En el ejemplo se puede ver que se ha indicado en esta sección el juego de caracteres, la codificación, con la que ha sido escrito el documento.
La sección <body> es donde se incluyen los contenidos del documento, lo que se visualizará en el navegador web.
Figure 1: Estructura de un documento HTML
Como ya estudiamos en el tema anterior lo que tenemos es una jerarquía de etiquetas, que en este caso sería:
<html> (Elemento raíz / Padre de todos)
│
├── <head> (Metadatos e información para el navegador)
│ ├── <meta charset="utf-8"> (Codificación de caracteres)
│ └── <title>...</title> (Título de la pestaña)
│
└── <body> (Contenido visible de la página web)
├── <h1>...</h1> (Cabecera principal)
└── <p>...</p> (Párrafos de texto)
Cabecera (<head>)
Como he adelantado en esta sección se añaden metadatos o metainformación. Son muy pocas las etiquetas que solemos encontrar aquí. Aquí se señalan las habituales:
<title>
Título del documento, normalmente aparece en la parte superior del navegador, en la barra de título o pestaña.
<link>
Sirve para vincular otros documentos o recursos externos con la página actual, siendo su uso más habitual la incorporación de hojas de estilo CSS o iconos para la pestaña (favicon). Posee varios atributos, destacando href que indica la dirección del recurso a vincular, y rel que especifica la relación existente entre el documento actual y el recurso enlazado.
Un ejemplo de uso de link:
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<style>
Esta etiqueta se usa para añadir estilos CSS en el mismo documento HTML, lo que se conoce como estilos internos o incrustados.
Aunque es válida, se recomienda encarecidamente evitar su uso y mantener los estilos en ficheros CSS independientes vinculados mediante la etiqueta <link>, reservando <style> únicamente para casos muy excepcionales o pruebas rápidas.
Un ejemplo:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Ejemplo sencillo con style</title>
<style>
body {
background-color: #eef2f3;
font-family: sans-serif;
text-align: center;
padding-top: 50px;
}
.tarjeta {
background-color: #ffffff;
padding: 20px;
border-radius: 8px;
display: inline-block;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
h2 {
color: #2c3e50;
}
</style>
</head>
<body>
<div class="tarjeta">
<h2>¡Hola, mundo!</h2>
<p>Esta página utiliza estilos internos gracias a la etiqueta style.</p>
</div>
</body>
</html>
<meta>
Esta etiqueta sirve para aportar información sobre el documento. Estos son los atributos disponibles:
| Atributo | Descripción | Valor |
|---|---|---|
lang |
Información sobre el idioma del contenido del elemento y del valor de sus atributos. | Un código de idioma. Por defecto: "desconocido". Lo fija el navegador. |
dir |
Indica la dirección de texto y tablas. | Uno de los siguientes: 'ltr' o 'rtl'. Por defecto: En castellano 'ltr'. Lo fija el navegador. |
name |
Nombre al que se asocia la metainformación | Un 'nombre'. Sensible a mayúsculas/minúsculas. Por defecto: Lo fija el navegador. |
content |
Los datos que se quieren asociar a name. | Texto. Sensible a mayúsculas/minúsculas. |
http-equiv |
Aporta información sobre los encabezado de respuesta HTTP, puede usarse en lugar de name. | Un 'nombre'. Por defecto: Lo fija el navegador. |
charset |
Aporta información sobre la codificación a usar (el juego de caracteres). | Por ejemplo: 'UTF-8'. |
scheme |
Indica un esquema de interpretación para los metadatos. | Texto. Sensible a mayúsculas/minúsculas. Por defecto: Lo fija el navegador. |
Ejemplos:
- Con name y content:
<meta name="copyright" content="© 2026 Román Martínez">
- Con http-equiv:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- Con charset:
<meta charset="UTF-8">
Cuerpo
El contenido del documento aparece dentro de la etiqueta <body>. Todo el contenido, a su vez, se encuentra dentro de una etiqueta HTML. Llegados aquí es importante conocer las funciones principales de HTML. En el siguiente apartado se profundiza en estas funciones y se dan a conocer las etiquetas que podemos usar en el cuerpo de todo documento HTML.
Pero antes, para terminar con la estructura de un documento HTML necesitamos definir los bloques en que se divide el <body> de una página web (estos bloques son opcionales: pueden o no aparecer en función del contenido).
Las páginas web pueden y se deben diferenciar las unas de las otras, pero todas tienden a contener elementos comunes parecidos, a menos que estén destinadas a mostrar un vídeo o un juego a pantalla completa, o que formen parte de un proyecto artístico concreto o, simplemente, que estén mal estructuradas; estos elementos comunes son:
Encabezado
<header>Normalmente formado por una gran franja que cruza la parte superior de la página con un gran título, un logotipo y quizás un lema. Esta parte suele permanecer invariable mientras navegas entre las páginas de un mismo sitio web.
Barra de navegación
<nav>Son los enlaces a las secciones principales del sitio web. Normalmente está formada por un menú con botones, enlaces o pestañas.
Contenido principal
<main>Es la gran parte central de la página y contiene la mayor parte del contenido particular de una página web concreta; por ejemplo, el video que quieres ver, la narración que quieres leer, el mapa que quieres consultar, los titulares de las noticias, etc. ¡Esta es la parte que definitivamente debe variar mucho de una página a otra de tu sitio web!
Barra lateral
<aside>Suele incluir algún tipo de información adicional, enlaces, citas, publicidad, etc. Normalmente está relacionada con el contenido principal de la página, pero en otras ocasiones encontraras elementos recurrentes como un menú de navegación secundario.
Pie de página
<footer>Es la parte inferior de la página, que generalmente contiene la letra pequeña, el copyright o la información de contacto. Es el sitio donde se coloca la información común (al igual que en el encabezado), pero esta información no suele ser tan importante o es secundaria con respecto a la página en sí misma. El pie también se suele usar para propósitos SEO, e incluye enlaces de acceso rápido al contenido más popular.
Aquí vemos una página típica (sacada de la documentación de Mozilla):
Figure 2: Página web típica con las partes anteriormente mencionadas
Y aquí, para terminar, el código de una página web con todas las parte arriba mencionadas:
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>El título de mi página</title>
<link
href="https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300|Sonsie+One"
rel="stylesheet"
type="text/css" />
</head>
<body>
<!-- Encabezado -->
<header>
<h1>Encabezado</h1>
</header>
<!-- Barra de navegación -->
<nav>
<ul>
<li><a href="#">Inicio</a></li>
<li><a href="#">Nuestro equipo</a></li>
<li><a href="#">Proyectos</a></li>
<li><a href="#">Contacto</a></li>
</ul>
<form>
<input type="search" name="q" placeholder="Buscar" />
<input type="submit" value="¡Vamos!" />
</form>
</nav>
<!-- Contenido principal -->
<main>
<article>
<h2>Título del artículo</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Donec a diam
lectus. Set sit amet ipsum mauris. Maecenas congue ligula as quam
viverra nec consectetur ant hendrerit. Donec et mollis dolor. Praesent
et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt
congue enim, ut porta lorem lacinia consectetur.
</p>
<h3>Subsección</h3>
<p>
Donec ut librero sed accu vehicula ultricies a non tortor. Lorem ipsum
dolor sit amet, consectetur adipisicing elit. Aenean ut gravida lorem.
Ut turpis felis, pulvinar a semper sed, adipiscing id dolor.
</p>
<p>
Pelientesque auctor nisi id magna consequat sagittis. Curabitur
dapibus, enim sit amet elit pharetra tincidunt feugiat nist imperdiet.
Ut convallis libero in urna ultrices accumsan. Donec sed odio eros.
</p>
<h3>Otra subsección</h3>
<p>
Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum
soclis natoque penatibus et manis dis parturient montes, nascetur
ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem
facilisis semper ac in est.
</p>
<p>
Vivamus fermentum semper porta. Nunc diam velit, adipscing ut
tristique vitae sagittis vel odio. Maecenas convallis ullamcorper
ultricied. Curabitur ornare, ligula semper consectetur sagittis, nisi
diam iaculis velit, is fringille sem nunc vet mi.
</p>
</article>
<!-- Barra lateral (se puede anidar dentro del contenido principal) -->
<aside>
<h2>Relacionado</h2>
<ul>
<li><a href="#">Oh, me gusta estar junto al mar</a></li>
<li><a href="#">Oh, me gusta estar junto al mar</a></li>
<li><a href="#">Aunque en el norte de Inglaterra</a></li>
<li><a href="#">Nunca deja de llover</a></li>
<li><a href="#">Oh, bueno...</a></li>
</ul>
</aside>
</main>
<!-- Pie de página -->
<footer>
<p>©Copyright 2050 de nadie. Todos los derechos revertidos.</p>
</footer>
</body>
</html>