Sigo viendo bastantes proyectos (y algún hilo por aquí) donde toda la página es <div> tras <div>, aunque HTML5 lleva mucho tiempo trayendo etiquetas semánticas de sobra para casi cualquier estructura habitual:
<header> para la cabecera de la página o de una sección (no tiene por qué ser solo el de arriba del todo, un <article> también puede tener su propio <header>).
<nav> para bloques de navegación principal, no para cualquier lista de enlaces (un pie de página con dos enlaces sueltos no necesita un <nav>).
<main> para el contenido principal único de la página, solo debe haber uno por página.
<article> para contenido que tendría sentido por sí solo fuera de contexto (un post de blog, una noticia, un producto), frente a <section>, que es simplemente una agrupación temática dentro de la página, sin esa independencia.
<aside> para contenido relacionado pero secundario (una barra lateral, una nota relacionada), no un contenedor genérico más.
¿Por qué importa más allá de «ser correcto»? Accesibilidad real: los lectores de pantalla usan estas etiquetas para dejar saltar directamente a «el contenido principal» o «la navegación» sin tener que recorrer toda la página. Y SEO: los buscadores usan esta estructura como señal de qué parte de la página es contenido real y cuál es decoración o navegación repetida en todas las páginas del sitio.
No hace falta sustituir el 100% de los <div>, siguen siendo perfectamente válidos para agrupaciones puramente visuales sin significado propio. La regla que uso: si al describir esa parte de la página en voz alta usarías una de estas palabras («esto es la cabecera», «esto es la navegación»...), probablemente merece la etiqueta semántica correspondiente en vez de un <div> genérico.
Bruno C.
La que más veo, con diferencia, es <div class="nav"> en vez de <nav>, y lo mismo con <header>, <footer>, <article>, <section>... todo resuelto a base de <div> con clases CSS descriptivas, que visualmente da exactamente el mismo resultado pero pierde toda la información semántica que esas etiquetas aportan.
El problema no es solo académico. Los lectores de pantalla usan estas etiquetas para navegación rápida (saltar directamente a "navegación principal" o "contenido", por ejemplo), así que todo-a-base-de-div hace la web bastante peor para quien depende de esa tecnología. Y los motores de búsqueda también usan la semántica para entender qué parte de la página es contenido principal frente a navegación/relleno, así que hay un coste de SEO real, no solo de accesibilidad.
Lo que ayuda a acordarse: cada vez que vayas a poner un <div>, pregúntate si ese bloque tiene un rol semántico real en la página (es la navegación principal, es un artículo independiente, es contenido secundario relacionado). Si la respuesta es sí, casi seguro que HTML5 ya tiene una etiqueta pensada exactamente para eso.
Marta