HTML semántico

Dentro del <main>

En la lección anterior armaste el esqueleto de la página: <header>, <nav>, <main>, <footer>. Ahora vas a ver los elementos que van dentro del <main> para organizar su contenido: <section>, <article> y <aside>.

Estos tres elementos suelen confundirse entre sí. Lo más importante es que sus definiciones se iluminan mutuamente — tiene sentido aprenderlos juntos.


<section>: agrupación temática

<section> agrupa contenido relacionado bajo un mismo tema. Normalmente lleva un heading (<h2>, <h3>, etc.) que anuncia el tema de esa sección.

<main>
  <section>
    <h2>Últimas noticias</h2>
    <!-- artículos de noticias -->
  </section>

  <section>
    <h2>Categorías</h2>
    <!-- lista de categorías -->
  </section>
</main>

La señal práctica: si quitás el heading, la sección pierde su identidad temática. Si eso pasa, probablemente no debería ser <section> — debería ser un <div>. <section> sin heading temático es el antipatrón más común de este elemento.

<section> genera el landmark region en accesibilidad, pero solo cuando tiene un nombre accesible. Con un heading visible dentro ya alcanza para comunicar el tema; los detalles de accesibilidad avanzada quedan para la sección de Referencia.


<article>: contenido autónomo

<article> representa contenido autónomo y redistribuible — una pieza que tiene sentido por sí sola fuera de la página, que podría aparecer en un feed RSS, en un widget de “artículos relacionados” o ser compartida como unidad independiente.

Ejemplos clásicos de <article>:

  • Un post de blog.
  • Un artículo de noticias.
  • Una tarjeta de producto.
  • Un comentario de usuario.
  • Un widget del clima.
<section>
  <h2>Últimas noticias</h2>

  <article>
    <h3>HTML5 es el estándar vigente</h3>
    <p>El W3C y la WHATWG acordaron en 2019 que el Living Standard...</p>
  </article>

  <article>
    <h3>Por qué usar HTML semántico</h3>
    <p>Los elementos semánticos mejoran la accesibilidad y el SEO...</p>
  </article>
</section>

<article> genera el landmark article — los lectores de pantalla pueden navegar entre artículos con un atajo de teclado.

<article> puede estar anidado. Un <article> puede contener <section> internas (un artículo largo dividido en partes), y una <section> puede contener varios <article> (un listado de posts). El anidado puede ir en ambas direcciones:

<article>
  <header>
    <h2>Guía completa de HTML</h2>
  </header>
  <section>
    <h3>¿Qué es HTML?</h3>
    <p>...</p>
  </section>
  <section>
    <h3>Elementos básicos</h3>
    <p>...</p>
  </section>
  <footer>
    <p>Publicado por Ejemplo</p>
  </footer>
</article>

La distinción más difícil: <section> vs <article>

Esta es la pregunta que más confunde en todo el módulo. La clave está en la autonomía:

Criterio<article><section>
¿Tiene sentido solo, fuera de esta página?Sí (RSS, compartido, embebido)No — solo en el contexto de la página
¿Es redistribuible?No
¿Requiere heading?No obligatorio, pero recomendadoSí — sin heading temático, probablemente debería ser <div>
AnidadoPuede estar dentro de <section> o de otro <article>Puede estar dentro de <article> o de otro <section>

La heurística práctica: preguntate “¿tiene sentido esta pieza sola, fuera de esta página?”.

  • Un post de blog → <article>. Podría aparecer en un feed RSS sin el contexto del sitio. ✅
  • Una sección “Artículos recientes” dentro del main → <section>. Solo tiene sentido en el contexto de esa página. ✅
<!-- ❌ MAL: usar <section> para contenido autónomo -->
<section>
  <h3>Cómo aprender HTML</h3>
  <p>Este artículo explica los pasos para aprender HTML desde cero.</p>
</section>

<!-- ✅ BIEN: el post tiene sentido solo → <article> -->
<article>
  <h3>Cómo aprender HTML</h3>
  <p>Este artículo explica los pasos para aprender HTML desde cero.</p>
</article>
<!-- ❌ MAL: usar <article> para una agrupación temática sin autonomía -->
<article>
  <h2>Artículos recientes</h2>
  <!-- listado de posts — esto es una sección de la página, no un artículo -->
</article>

<!-- ✅ BIEN: agrupación temática del main → <section> con <article> adentro -->
<section>
  <h2>Artículos recientes</h2>
  <article>...</article>
  <article>...</article>
</section>

<aside>: contenido complementario

<aside> representa contenido complementario o tangencial al contenido que lo rodea. No es esencial para entender el contenido principal — si lo quitaras, el lector no perdería la idea central.

Ejemplos de contenido en <aside>:

  • Barra lateral con artículos relacionados.
  • Publicidad.
  • Glosario lateral o definiciones.
  • Información biográfica del autor dentro de un artículo.
  • Call-to-action de suscripción.
<main>
  <article>
    <h2>CSS Flexbox en profundidad</h2>
    <p>Flexbox es un método de layout unidimensional...</p>
  </article>
</main>

<aside>
  <h2>Artículos relacionados</h2>
  <ul>
    <li><a href="grid.html">CSS Grid: guía completa</a></li>
    <li><a href="responsive.html">Diseño responsive con media queries</a></li>
  </ul>
</aside>

<aside> puede estar dentro de un <article>. Una nota al margen dentro de un artículo largo puede ser <aside> interno:

<article>
  <p>La propuesta de Berners-Lee en 1989 cambió la historia de la comunicación.</p>
  <aside>
    <p>Tim Berners-Lee también creó el primer navegador web y el primer servidor web.</p>
  </aside>
  <p>El primer sitio web todavía existe en info.cern.ch...</p>
</article>

TRAMPA importante: <aside> no significa “la columna de la derecha” en la pantalla. El nombre “aside” se refiere al rol del contenido (tangencial, complementario), no a su posición visual. Sin CSS, un <aside> se apila verticalmente debajo del <main> — eso no es un bug. Colocarlo visualmente a la derecha es trabajo de CSS (Bloque II). Esta es una de las confusiones más comunes del módulo, y en la siguiente lección vas a ver por qué la semántica y el layout son ejes completamente independientes.

<aside> genera el landmark complementary en accesibilidad cuando está al nivel de la página.

<div class="sidebar"> o <div id="aside">LEGACY.


Todo junto

Con los elementos de L-1 y L-2, una página de blog ficticio puede verse así:

<body>
  <header>
    <img src="logo.svg" alt="TechBlog">
    <nav>
      <ul>
        <li><a href="inicio.html">Inicio</a></li>
        <li><a href="articulos.html">Artículos</a></li>
      </ul>
    </nav>
  </header>

  <main>
    <section>
      <h2>Últimas publicaciones</h2>
      <article>
        <h3>Qué es el HTML semántico</h3>
        <p>El HTML semántico usa elementos que comunican significado...</p>
      </article>
      <article>
        <h3>Por qué usar `<main>` correctamente</h3>
        <p>Un solo `<main>` por página mejora la accesibilidad...</p>
      </article>
    </section>
  </main>

  <aside>
    <h2>Sobre este blog</h2>
    <p>Aprendé desarrollo web desde cero.</p>
  </aside>

  <footer>
    <p>© 2026 TechBlog</p>
  </footer>
</body>
TechBlog Inicio · Artículos
Últimas publicaciones
Qué es el HTML semántico
El HTML semántico usa elementos que comunican significado...
Por qué usar <main> correctamente
Un solo <main> por página mejora la accesibilidad...
Sobre este blog
Aprendé desarrollo web desde cero.
© 2026 TechBlog

En la siguiente lección vas a ver los contenedores genéricos <div> y <span>, entender cuándo usarlos (y cuándo no), y cerrar el módulo con el concepto de semántica vs layout.

Sandbox libre — probá lo que aprendiste:

Preview

En la referencia