Cada paso acumula lo anterior. Lee la explicación, observa el
resultado y prueba una modificación. El laboratorio adapta los
archivos separados a un marco aislado.
Qué añadimos
Dónde va y en qué orden
Qué deberías ver
Consola y comportamiento
Ver código usado en la variante
El navegador normaliza el HTML al analizarlo. La vista previa
incrusta CSS y JavaScript; en tus archivos mantendrás sus
enlaces externos.
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mi primera página</title>
<meta name="description" content="Mi primera página de estudio: estructura, textos, enlaces y ejemplos de HTML.">
</head>
<body>
<h1>Mi diario de aprendizaje</h1>
<p>Estoy aprendiendo a construir una página con sentido.</p>
</body>
</html>
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mi primera página</title>
<meta name="description" content="Mi primera página de estudio: estructura, textos, enlaces y ejemplos de HTML.">
</head>
<body>
<header>
<h1>Mi diario de aprendizaje</h1>
<p>Estoy aprendiendo a construir una página con sentido.</p>
</header>
<main>
<section id="temas">
<h2>Lo que quiero aprender</h2>
<p>Primero estructura, después estilo y finalmente interacción.</p>
</section>
</main>
<footer id="contacto">
<p>Un proyecto para practicar cada día.</p>
</footer>
</body>
</html>
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mi primera página</title>
<meta name="description" content="Mi primera página de estudio: estructura, textos, enlaces y ejemplos de HTML.">
</head>
<body>
<header>
<h1>Mi diario de aprendizaje</h1>
<p>Estoy aprendiendo a construir una página con sentido.</p>
</header>
<nav aria-label="Principal">
<a href="#temas">Temas</a>
<a href="#contacto">Contacto</a>
</nav>
<main>
<section id="temas">
<h2>Lo que quiero aprender</h2>
<p>Primero estructura, después estilo y finalmente interacción.</p>
</section>
</main>
<footer id="contacto">
<p>Un proyecto para practicar cada día.</p>
</footer>
</body>
</html>
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mi primera página</title>
<meta name="description" content="Mi primera página de estudio: estructura, textos, enlaces y ejemplos de HTML.">
</head>
<body>
<header>
<h1>Mi diario de aprendizaje</h1>
<p>Estoy aprendiendo a construir una página con sentido.</p>
</header>
<nav aria-label="Principal">
<a href="#temas">Temas</a>
<a href="#contacto">Contacto</a>
</nav>
<main>
<section id="temas">
<h2>Lo que quiero aprender</h2>
<p>Primero estructura, después estilo y finalmente interacción.</p>
<ol>
<li>HTML: contenido</li>
<li>CSS: presentación</li>
<li>JavaScript: interacción</li>
</ol>
<article class="lesson-card">
<h3>Mi primera ficha</h3>
<p>Una idea que puedo consultar de forma independiente.</p>
</article>
</section>
</main>
<footer id="contacto">
<p>Un proyecto para practicar cada día.</p>
</footer>
</body>
</html>
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mi primera página</title>
<meta name="description" content="Mi primera página de estudio: estructura, textos, enlaces y ejemplos de HTML.">
</head>
<body>
<header>
<h1>Mi diario de aprendizaje</h1>
<p>Estoy aprendiendo a construir una página con sentido.</p>
</header>
<nav aria-label="Principal">
<a href="#temas">Temas</a>
<a href="#contacto">Contacto</a>
</nav>
<main>
<section id="temas">
<h2>Lo que quiero aprender</h2>
<p>Primero estructura, después estilo y finalmente interacción.</p>
<ol>
<li>HTML: contenido</li>
<li>CSS: presentación</li>
<li>JavaScript: interacción</li>
</ol>
<figure>
<img src="assets/tutorial-grid.svg" alt="Diagrama con tres áreas iguales" width="360" height="120">
<figcaption>Tres áreas que se pueden distribuir.</figcaption>
</figure>
<article class="lesson-card">
<h3>Mi primera ficha</h3>
<p>Una idea que puedo consultar de forma independiente.</p>
</article>
</section>
</main>
<footer id="contacto">
<p>Un proyecto para practicar cada día.</p>
</footer>
</body>
</html>
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mi primera página</title>
<meta name="description" content="Mi primera página de estudio: estructura, textos, enlaces y ejemplos de HTML.">
</head>
<body>
<header>
<h1>Mi diario de aprendizaje</h1>
<p>Estoy aprendiendo a construir una página con sentido.</p>
</header>
<nav aria-label="Principal">
<a href="#temas">Temas</a>
<a href="#contacto">Contacto</a>
</nav>
<main>
<section id="temas">
<h2>Lo que quiero aprender</h2>
<p>Primero estructura, después estilo y finalmente interacción.</p>
<ol>
<li>HTML: contenido</li>
<li>CSS: presentación</li>
<li>JavaScript: interacción</li>
</ol>
<figure>
<img src="assets/tutorial-grid.svg" alt="Diagrama con tres áreas iguales" width="360" height="120">
<figcaption>Tres áreas que se pueden distribuir.</figcaption>
</figure>
<article class="lesson-card">
<h3>Mi primera ficha</h3>
<p>Una idea que puedo consultar de forma independiente.</p>
</article>
<table>
<caption>Qué aporta cada lenguaje</caption>
<thead><tr><th scope="col">Lenguaje</th><th scope="col">Función</th></tr></thead>
<tbody><tr><td>HTML</td><td>Estructura</td></tr><tr><td>CSS</td><td>Presentación</td></tr></tbody>
</table>
</section>
</main>
<footer id="contacto">
<p>Un proyecto para practicar cada día.</p>
</footer>
</body>
</html>
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mi primera página</title>
<meta name="description" content="Mi primera página de estudio: estructura, textos, enlaces y ejemplos de HTML.">
</head>
<body>
<header>
<h1>Mi diario de aprendizaje</h1>
<p>Estoy aprendiendo a construir una página con sentido.</p>
</header>
<nav aria-label="Principal">
<a href="#temas">Temas</a>
<a href="#contacto">Contacto</a>
</nav>
<main>
<section id="temas">
<h2>Lo que quiero aprender</h2>
<p>Primero estructura, después estilo y finalmente interacción.</p>
<ol>
<li>HTML: contenido</li>
<li>CSS: presentación</li>
<li>JavaScript: interacción</li>
</ol>
<figure>
<img src="assets/tutorial-grid.svg" alt="Diagrama con tres áreas iguales" width="360" height="120">
<figcaption>Tres áreas que se pueden distribuir.</figcaption>
</figure>
<article class="lesson-card">
<h3>Mi primera ficha</h3>
<p>Una idea que puedo consultar de forma independiente.</p>
</article>
<table>
<caption>Qué aporta cada lenguaje</caption>
<thead><tr><th scope="col">Lenguaje</th><th scope="col">Función</th></tr></thead>
<tbody><tr><td>HTML</td><td>Estructura</td></tr><tr><td>CSS</td><td>Presentación</td></tr></tbody>
</table>
</section>
<section id="practica">
<h2>Mi práctica</h2>
<form>
<label for="nombre">Nombre</label>
<input id="nombre" name="nombre" required>
<button type="submit">Comprobar</button>
</form>
</section>
</main>
<footer id="contacto">
<p>Un proyecto para practicar cada día.</p>
</footer>
</body>
</html>
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mi primera página</title>
<meta name="description" content="Mi primera página de estudio: estructura, textos, enlaces y ejemplos de HTML.">
</head>
<body>
<header>
<h1>Mi diario de aprendizaje</h1>
<p>Estoy aprendiendo a construir una página con sentido.</p>
</header>
<nav aria-label="Principal">
<a href="#temas">Temas</a>
<a href="#contacto">Contacto</a>
</nav>
<main>
<section id="temas">
<h2>Lo que quiero aprender</h2>
<p>Primero estructura, después estilo y finalmente interacción.</p>
<ol>
<li>HTML: contenido</li>
<li>CSS: presentación</li>
<li>JavaScript: interacción</li>
</ol>
<figure>
<img src="assets/tutorial-grid.svg" alt="Diagrama con tres áreas iguales" width="360" height="120">
<figcaption>Tres áreas que se pueden distribuir.</figcaption>
</figure>
<article class="lesson-card">
<h3>Mi primera ficha</h3>
<p>Una idea que puedo consultar de forma independiente.</p>
</article>
<table>
<caption>Qué aporta cada lenguaje</caption>
<thead><tr><th scope="col">Lenguaje</th><th scope="col">Función</th></tr></thead>
<tbody><tr><td>HTML</td><td>Estructura</td></tr><tr><td>CSS</td><td>Presentación</td></tr></tbody>
</table>
</section>
<section id="practica">
<h2>Mi práctica</h2>
<form>
<label for="nombre">Nombre</label>
<input id="nombre" name="nombre" required>
<button type="submit">Comprobar</button>
</form>
<details>
<summary>Ver una pista</summary>
<p>Empieza por la estructura; después añade estilos.</p>
</details>
</section>
</main>
<footer id="contacto">
<p>Un proyecto para practicar cada día.</p>
</footer>
</body>
</html>
HyperText Markup Language es un lenguaje de marcado. No calcula ni
controla por sí solo la lógica de un programa: estructura
contenido y conecta documentos mediante enlaces.
Cómo se construye un elemento
<a href="css.html">Aprender CSS</a>
<a>
Etiqueta de apertura.
href
Atributo que define el destino.
Aprender CSS
Contenido del enlace.
</a>
Etiqueta de cierre.
Los elementos vacíos, como img, input y meta, no tienen etiqueta
de cierre. En HTML no necesitan una barra final.
Tu primer documento
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mi primera página</title>
<meta name="description" content="Mi primera página de estudio: estructura, textos, enlaces y ejemplos de HTML.">
</head>
<body>
<header><h1>Hola, mundo</h1></header>
<main><p>Estoy aprendiendo HTML.</p></main>
<footer><p>Mi proyecto</p></footer>
</body>
</html>
DOCTYPE activa el modo estándar; no es una etiqueta de contenido.
La sangría facilita la lectura, pero no cambia la jerarquía real
de elementos.
Buenas prácticas desde el principio
Usa encabezados en orden lógico, etiquetas asociadas a controles,
alt útil en imágenes e identificadores únicos. Un div es válido para
agrupar sin significado específico; evita usarlo como sustituto de
un botón o una sección.
Atributos que verás a menudo
id y class
Identifican un elemento único o agrupan elementos para estilos y
consultas.
lang y dir
Indican idioma y dirección del texto.
data-*
Guarda datos propios; JavaScript accede mediante dataset.
hidden
Oculta contenido que no corresponde mostrar en ese estado.
aria-*
Describe estados o relaciones cuando la semántica nativa no basta;
no sustituye un elemento correcto.
name, value y required
Participan en la captura, envío y validación de formularios.
HTML PARA PERSONAS Y BUSCADORES
Metadatos y buenas prácticas de SEO
Empieza por el documento HTML: describe la página en el head y
organiza su contenido en el body.
1. Completa el head
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Gimnasios de Kanto y medallas | PokéAtlas</title>
<meta name="description" content="Consulta los ocho líderes de Kanto, sus ciudades y las medallas de Rojo Fuego y Verde Hoja.">
</head>
<body>
<main>
<h1>Gimnasios de Kanto</h1>
</main>
</body>
</html>
charset indica la codificación;
viewport adapta el área de visualización;
title identifica el documento;
description resume su contenido.
Este orden es una base de trabajo legible. La descripción
pertenece al head, no al cuerpo visible.
2. Entiende meta description
name="description"
Identifica el tipo de metadato.
content="…"
Contiene el resumen de esa página. Escribe una descripción
específica, legible y coherente con el contenido.
Qué ve la persona
No añade un párrafo al body. Google puede usarla para el
fragmento de un resultado o elegir texto de la página según la
consulta.
Si la quitas
La página sigue mostrando su contenido; se pierde ese resumen
propuesto. Google puede generar otro fragmento.
Si la cambias
Cambias los metadatos, no el título visible ni los párrafos. El
resultado de Google no se actualiza instantáneamente.
No existe una longitud que garantice que Google muestre todo el
texto. No conviertas la descripción en una lista de palabras clave
ni copies la misma en todas las páginas.
Comparación: «Pokémon, Kanto, gimnasio, medalla»
dice menos que «Consulta los ocho líderes de Kanto, sus ciudades y
las medallas que otorgan».
3. Organiza el body con significado
<main>
<h1>Gimnasios de Kanto</h1>
<section aria-labelledby="lideres">
<h2 id="lideres">Líderes y medallas</h2>
<article>
<h3>Brock: Ciudad Plateada</h3>
<img src="images/leader-brock.png"
alt="Brock, líder del gimnasio de Ciudad Plateada"
width="128" height="128">
<p>Otorga la Medalla Roca.</p>
<a href="tipos.html">Consultar las ventajas de los tipos</a>
</article>
</section>
</main>
El ejemplo muestra un orden h1 → h2 → h3. El nivel expresa jerarquía;
CSS controla su tamaño. Las rutas de este ejemplo corresponden a un
proyecto ficticio, no a archivos de WebLab.
Usa un título principal claro y encabezados que expliquen cada
apartado.
Elige elementos semánticos por su significado. Un div sigue siendo
válido para agrupar sin un significado específico.
Escribe enlaces con href y textos que expliquen el destino.
Describe imágenes informativas con alt y usa alt vacío para imágenes
decorativas.
Mantén el contenido principal accesible y las rutas y recursos
funcionando.
Estas prácticas ayudan a comprender y utilizar la página. Cambiar div
por section no garantiza mejores posiciones.
4. Prueba y comprueba
En el paso 2 del tutorial, localiza la descripción en el head.
Cambia su content, quítala y aplica tus cambios: el body debería
seguir igual. Para estudiar la propuesta de título y fragmento, abre
el
editor de SEO.
Al publicar, revisa canonical, indexación y recursos con la
lista de SEO. Las
etiquetas Open Graph para compartir enlaces tienen otra función y no
sustituyen la descripción HTML.
Tim Berners-Lee desarrolló la idea de documentos conectados
mediante hipertexto en CERN; HTML nació como una de sus piezas.
1995
HTML 2.0
Se formalizó una especificación temprana que incluía las
capacidades básicas de la web de la época.
1997–1999
HTML 3.2 y 4
La estructura de documentos se amplió. La separación entre
contenido y presentación ganó importancia con CSS.
2014–hoy
HTML5 y Living Standard
Elementos semánticos, multimedia y APIs modernas. WHATWG mantiene
un estándar vivo que sigue evolucionando.
CONSULTA CUANDO LO NECESITES
Referencia de elementos HTML
Elementos agrupados por función. Abre una ficha para ver
descripción, uso, errores frecuentes y un ejemplo. SVG y MathML son
lenguajes integrados, no elementos HTML ordinarios.
Define metadatos como codificación, viewport y descripción de
la página.
Cuándo usarlo
Para charset, descripción y adaptación móvil.
Cuándo evitarlo
No uses etiquetas de palabras clave esperando mejorar el
posicionamiento.
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Aprende HTML con explicaciones y ejemplos paso a paso.">
Prefiere CSS para la presentación, iframe con cuidado para
documentos incrustados, abbr para abreviaciones y los controles
modernos de formulario. Revisa la alternativa de cada elemento en la
referencia oficial antes de migrar código.
CAMBIA · EJECUTA · OBSERVA
Tu laboratorio de HTML
Edita el ejemplo y pulsa Ejecutar. El resultado y el código
permanecen separados.
Código editable
Resultado en el navegador
Vista previa
Consola del ejemplo
Solo ejecuta código que entiendas. La vista previa está aislada del
sitio. Los cambios del editor no se guardan al cerrar la página.