Menu

HTML semantico: tag, struttura della pagina e accessibilità

HTML semantico significa scegliere i tag in base a cosa è il contenuto, non a come appare. Scopri i tag semantici di layout (header, nav, main, article, aside, footer), cosa danno a screen reader e motori di ricerca e come controllare la struttura della pagina.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Cos'è l'HTML semantico

HTML semantico significa scegliere ogni tag in base a cosa è il contenuto: la navigazione va in <nav>, il contenuto principale in <main>, un post di un blog in <article>. I tag sembrano semplici riquadri, ma dicono a browser, screen reader e motori di ricerca cosa fa ogni parte della pagina. Ecco una pagina completa costruita con i tag semantici di layout, ognuno con un bordo e un'etichetta:

Cancella l'elemento <style> e la pagina sembra testo semplice, ma la struttura resta lì per chi legge il codice e per il software che lo legge senza guardare i pixel.

I tag semantici di layout

TagUsalo perLandmark per lo screen reader
<header>L'introduzione della pagina o di un articolo: logo, titolo, autorebanner (solo quando non è dentro article, aside, main, nav o section)
<nav>Un blocco di link di navigazione principalinavigation
<main>Il contenuto specifico di questa pagina, una volta per paginamain
<article>Un pezzo autonomo che ha senso da solo: un post, un commento, la scheda di un prodottonessuno per impostazione predefinita
<section>Un gruppo tematico di contenuti con un proprio titoloregion, solo quando ha un nome accessibile
<aside>Contenuti correlati accanto al flusso principale: una barra laterale, una notacomplementary
<footer>Informazioni di chiusura della pagina o di un articolo: copyright, autore, linkcontentinfo (solo a livello di pagina)

Ogni tag ha una sua pagina con più dettagli: header, nav, section e footer. Questa pagina spiega come si combinano.

Perché non usare solo div

Una pagina fatta solo di elementi <div> può sembrare identica a una semantica. La differenza è ciò che dice il markup. Premi i pulsanti per evidenziare gli elementi che hanno un significato in ciascuna versione:

La versione con i div ne trova 0, quella semantica ne trova 4. È ciò che vedono le tecnologie assistive: chi usa uno screen reader può saltare direttamente alla navigazione o al contenuto principale nella pagina semantica, e deve leggere tutto nella pagina fatta di div. Nomi di classe come class="nav" per il browser non significano niente.

<div> resta la scelta giusta per i riquadri che esistono solo per lo stile o il layout, come il contenitore flex .cols del primo esempio.

main, article e aside

<main> racchiude ciò che è specifico di questa pagina e compare una volta sola. Al suo interno, <article> indica un contenuto che avrebbe senso copiato da solo su un altro sito, e <aside> indica un contenuto correlato che si potrebbe togliere senza rovinare l'articolo:

L'articolo ha il suo <header> e il suo <footer>. Non sono limitati al livello della pagina: ognuno introduce o chiude l'article o la section più vicina. L'elemento <time datetime> dà la data in una forma leggibile dalle macchine mentre la mostra in una forma leggibile dalle persone.

Controllare la struttura dei titoli

I titoli sono l'altra metà della struttura. Chi usa uno screen reader spesso si muove nella pagina di titolo in titolo, quindi i livelli devono leggersi come un indice senza livelli saltati. Questo script stampa la struttura della pagina in cui viene eseguito:

L'h4 sotto "Brewing" salta un livello. Cambialo in h3 e la struttura si legge in modo pulito. Scegli i livelli dei titoli in base alla struttura, e cambiane la dimensione con il CSS se li vuoi più grandi o più piccoli.

Altri tag semantici

La semantica non riguarda solo il layout. Anche questi tag di testo hanno un significato:

TagSignificato
<strong>Testo importante (in grassetto per impostazione predefinita)
<em>Enfasi (in corsivo per impostazione predefinita)
<figure> e <figcaption>Un'immagine, un grafico o un esempio di codice con la sua didascalia
<time datetime="...">Una data o un orario in forma leggibile dalle macchine
<address>I recapiti dell'autore della pagina o dell'articolo
<mark>Testo evidenziato, come un risultato di ricerca
<abbr title="...">Un'abbreviazione con la sua forma estesa
<button>Qualcosa che esegue un'azione

Passa il mouse sull'abbreviazione "W3C" per vedere la forma estesa in un tooltip.

Errori comuni

  • Usare un tag per il suo aspetto. <blockquote> serve per le citazioni, non per il rientro; <h3> serve per un livello di titolo, non per un testo in grassetto di media grandezza. Dai lo stile con il CSS.
  • Racchiudere tutto in <section>. Una section dovrebbe avere un titolo e un tema. Se ti serve un contenitore per lo stile, usa <div>.
  • Più di un <main> visibile. Tienine uno per pagina, e non annidarlo mai dentro <article>, <aside>, <header>, <nav> o <footer>.
  • Mettere ogni lista di link in <nav>. Riservalo ai blocchi di navigazione principali, come il menu del sito o un indice. Qualche link in un footer non ne ha bisogno.
  • Elementi <div> cliccabili. Un <div onclick> non si raggiunge con la tastiera. Usa <button> per le azioni e <a href> per la navigazione.

Domande frequenti

Cos'è l'HTML semantico?

L'HTML semantico è un markup in cui ogni tag descrive il significato del suo contenuto: <nav> per la navigazione, <article> per un pezzo autonomo, <button> per un pulsante. Browser, screen reader e motori di ricerca possono così capire la pagina senza tirare a indovinare da nomi di classi o stili.

Quali sono i tag semantici in HTML?

I tag di layout sono <header>, <nav>, <main>, <article>, <section>, <aside> e <footer>. Altri tag semantici comuni sono <figure>, <figcaption>, <time>, <address>, <strong>, <em> e i titoli da <h1> a <h6>.

Il div è un elemento semantico?

No. <div> non ha un significato proprio; è un contenitore generico per lo stile e il layout. Usalo quando nessun tag semantico è adatto, e usa <header>, <main>, <nav> e gli altri quando uno lo è.

A cosa serve il tag aside?

<aside> contiene contenuti legati al contenuto principale ma che non fanno parte del suo flusso: una barra laterale, un riquadro di link correlati, una nota di glossario o una citazione in evidenza. A livello di pagina, gli screen reader lo elencano come landmark complementare.

Quanti elementi main può avere una pagina?

Un solo <main> visibile per pagina. Racchiude il contenuto specifico di quella pagina, e non deve stare dentro <header>, <nav>, <article>, <aside> o <footer>.

L'HTML semantico aiuta la SEO?

Aiuta i motori di ricerca a capire quale parte della pagina è il contenuto principale, quale è la navigazione e come sono collegati i titoli. Da solo non è una scorciatoia per il posizionamento, ma elimina le ambiguità e migliora l'accessibilità, che vale comunque la pena curare.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA