HTML semántico es la base de cualquier interfaz web bien estructurada. Antes de pensar en estilos o JavaScript, necesitas entender cómo representar correctamente el contenido y la jerarquía de una página.
Usar las etiquetas correctas no es solo cuestión de orden: afecta directamente a la accesibilidad (lectores de pantalla), al SEO (cómo los buscadores entienden tu página) y a la mantenibilidad del código.
header, main, section, article, nav, aside y footer.h1–h6.alt, aria-label y roles implícitos.div y span son el último recurso, no el primero.<div> y HTML semánticoCualquier página puede construirse solo con <div>. De hecho, muchos proyectos lo hacen. Pero un <div> no dice nada sobre su contenido: no le dice al navegador si es navegación, si es el contenido principal o si es un artículo independiente.
Cuando usas <nav>, el navegador y los lectores de pantalla entienden que ese bloque es navegación. Cuando usas <main>, los usuarios con tecnologías de asistencia pueden saltar directamente al contenido principal. Cuando usas <article>, el contenido tiene sentido por sí solo fuera de contexto.
La semántica es comunicación: entre tu código, el navegador y el usuario.
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Título descriptivo de la página</title>
<meta name="description" content="Resumen de 150–160 caracteres para SEO." />
</head>
<body>
<header>
<a href="/" aria-label="Ir a inicio">Mi sitio</a>
<nav aria-label="Navegación principal">
<ul>
<li><a href="/sobre-mi">Sobre mí</a></li>
<li><a href="/proyectos">Proyectos</a></li>
<li><a href="/contacto">Contacto</a></li>
</ul>
</nav>
</header>
<main>
<section aria-labelledby="intro-title">
<h1 id="intro-title">Bienvenido a mi portafolio</h1>
<p>Desarrollador frontend apasionado por las interfaces limpias.</p>
</section>
<section aria-labelledby="proyectos-title">
<h2 id="proyectos-title">Proyectos destacados</h2>
<article>
<h3>Proyecto Alpha</h3>
<p>Descripción del proyecto.</p>
</article>
<article>
<h3>Proyecto Beta</h3>
<p>Descripción del proyecto.</p>
</article>
</section>
</main>
<aside aria-label="Información adicional">
<h2>Tecnologías que uso</h2>
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
</aside>
<footer>
<p><small>© 2026 Mi sitio. Todos los derechos reservados.</small></p>
</footer>
</body>
</html> Una sola <h1> por página. El h1 es el título principal del documento. Si tienes varios, los buscadores y lectores de pantalla se confunden. Los subtítulos van en h2, los apartados dentro de esos subtítulos en h3, y así sucesivamente sin saltarte niveles.
<section> agrupa contenido temático; <article> es contenido independiente. Un artículo de blog es un <article> porque tiene sentido leído solo. Una sección de “Nuestros servicios” dentro de la home es un <section> porque depende del contexto de la página.
<header> y <footer> no son exclusivos del documento. Pueden aparecer dentro de un <article> o <section> para indicar la cabecera o pie de ese bloque concreto.
Siempre pon alt en las imágenes. Si la imagen transmite información, el alt describe esa información. Si es decorativa, alt="" vacío indica a los lectores de pantalla que la ignoren.
<!-- Imagen informativa -->
<img src="grafica-ventas.png" alt="Gráfica de ventas del Q1 2026: crecimiento del 32%" />
<!-- Imagen decorativa -->
<img src="patron-fondo.svg" alt="" aria-hidden="true" /> Un formulario sin <label> es inaccesible. La relación entre etiqueta y campo debe ser explícita:
<form>
<div>
<label for="email">Correo electrónico</label>
<input
type="email"
id="email"
name="email"
placeholder="tu@correo.com"
autocomplete="email"
required
/>
</div>
<fieldset>
<legend>Tipo de consulta</legend>
<label><input type="radio" name="tipo" value="general" /> General</label>
<label><input type="radio" name="tipo" value="soporte" /> Soporte</label>
</fieldset>
<button type="submit">Enviar mensaje</button>
</form> Una web profesional no empieza por el color ni por las animaciones. Empieza por una estructura limpia, entendible y mantenible. Si el HTML está bien, el CSS y el JavaScript tienen una base sólida sobre la que trabajar. Si el HTML es un laberinto de <div>, todo lo que construyas encima hereda ese caos.
Hazte esta pregunta antes de escribir cualquier etiqueta: ¿expresa esta etiqueta lo que es este contenido, o solo cómo quiero que se vea? Si la respuesta es lo segundo, busca una etiqueta mejor.