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
| Tag | Usalo per | Landmark per lo screen reader |
|---|---|---|
<header> | L'introduzione della pagina o di un articolo: logo, titolo, autore | banner (solo quando non è dentro article, aside, main, nav o section) |
<nav> | Un blocco di link di navigazione principali | navigation |
<main> | Il contenuto specifico di questa pagina, una volta per pagina | main |
<article> | Un pezzo autonomo che ha senso da solo: un post, un commento, la scheda di un prodotto | nessuno per impostazione predefinita |
<section> | Un gruppo tematico di contenuti con un proprio titolo | region, solo quando ha un nome accessibile |
<aside> | Contenuti correlati accanto al flusso principale: una barra laterale, una nota | complementary |
<footer> | Informazioni di chiusura della pagina o di un articolo: copyright, autore, link | contentinfo (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:
| Tag | Significato |
|---|---|
<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.