Accessibilità Web
Un sito accessibile funziona per tutti: utenti con disabilità visive o motorie, persone anziane, chi usa una connessione lenta o uno schermo piccolo. In Italia e in Europa, per i siti delle pubbliche amministrazioni è anche un obbligo di legge. Ma anche per i siti privati, l’accessibilità migliora la SEO, riduce i contenziosi legali e allarga il pubblico raggiungibile.
Le WCAG 2.1: i quattro principi
Le Web Content Accessibility Guidelines del W3C organizzano i requisiti intorno a quattro principi fondamentali, spesso abbreviati come POUR:
- Percepibile — i contenuti devono essere presentati in modi che l’utente possa percepire (testo alternativo per le immagini, sottotitoli per i video, contrasto sufficiente)
- Utilizzabile — l’interfaccia deve funzionare con tastiera, non solo con il mouse; niente barriere temporali non gestibili dall’utente
- Comprensibile — testo leggibile, comportamento prevedibile, aiuto per evitare e correggere gli errori nei form
- Robusto — il codice deve essere interpretato correttamente dagli assistive technology attuali e futuri
Il livello AA è lo standard richiesto dalla normativa europea (EN 301 549) e dalla maggior parte dei capitolati pubblici italiani. Il livello AAA è più restrittivo e non è richiesto per conformità, ma alcune sue linee guida sono utili da conoscere.
HTML semantico come base
Il 70% dei problemi di accessibilità si risolve scrivendo HTML semantico corretto. Gli screen reader navigano il documento attraverso i landmark ARIA impliciti degli elementi HTML5:
<header> → role="banner" <nav> → role="navigation" <main> → role="main" <aside> → role="complementary" <footer> → role="contentinfo"
Usare un <div> dove servirebbe un <button> è uno degli errori più comuni: il <div> non riceve il focus da tastiera, non comunica il suo ruolo agli screen reader, non risponde a Invio o Spazio. La stessa logica vale per <h1>...<h6>: la gerarchia dei titoli è la struttura di navigazione principale per chi usa uno screen reader.
Testo alternativo per le immagini
L’attributo alt non va mai omesso. Ma va anche compilato in modo sensato:
- Immagini informative: descrivere il contenuto rilevante, non l’aspetto estetico (“Grafico a barre: vendite Q1 2026 per regione” non “immagine”)
- Immagini decorative:
alt=""(stringa vuota) per far sì che lo screen reader la ignori - Icone funzionali: il
altdescrive la funzione, non l’icona (“Cerca” non “lente di ingrandimento”)
ARIA: quando usarlo
WAI-ARIA aggiunge semantica agli elementi HTML quando quella nativa non basta. La prima regola di ARIA è: non usarlo se esiste un elemento HTML nativo equivalente. Un <button> è sempre meglio di un <div role="button">.
I casi d’uso più comuni:
aria-label— etichetta visibile non sufficiente (bottone con solo icona)aria-labelledby— associa un elemento a un titolo già presente nella paginaaria-describedby— aggiunge una descrizione estesa (messaggio di errore in un form)aria-live— notifica lo screen reader di aggiornamenti dinamici della paginaaria-expanded/aria-controls— per menu, accordion, dropdown
Contrasto e colori
WCAG 2.1 AA richiede un rapporto di contrasto minimo di 4.5:1 per il testo normale e 3:1 per il testo grande (18pt o 14pt grassetto). Non affidarsi mai al solo colore per trasmettere un’informazione: un messaggio di errore in rosso senza icona o testo esplicativo non è accessibile per gli utenti daltonici.
Strumenti utili per verificare il contrasto: WebAIM Contrast Checker, il devtools di Chrome/Firefox (sezione Accessibilità nell’inspector degli elementi).
Form e messaggi di errore
Ogni campo di un form deve avere un <label> associato tramite for/id, non solo un placeholder. Il placeholder sparisce alla digitazione e non è sufficiente come etichetta. I messaggi di errore vanno collegati al campo tramite aria-describedby e devono spiegare cosa correggere, non solo che c’è un errore:
<label for="email">Email</label> <input id="email" type="email" aria-describedby="email-err"> <span id="email-err" role="alert"> Inserisci un indirizzo email valido (es. [email protected]) </span>
Navigazione da tastiera
Tutta la funzionalità di un sito deve essere raggiungibile e utilizzabile con la sola tastiera (Tab, Invio, Spazio, Frecce). Verificare:
- Il focus è visibile in ogni momento? (
:focusnon deve essereoutline: nonesenza un’alternativa visibile) - I modal bloccano il focus all’interno finché sono aperti?
- Dopo la chiusura di un modal, il focus torna all’elemento che l’ha aperto?
- I menu a dropdown sono navigabili con le frecce?
Un skip link all’inizio della pagina (“Vai al contenuto principale”) evita che gli utenti da tastiera debbano attraversare l’intera navigazione a ogni pagina.
Testing pratico
Nessuno strumento automatico rileva più del 30-40% dei problemi di accessibilità. Il testing manuale è indispensabile:
- WAVE — estensione browser, segnala errori e avvisi nella pagina
- axe DevTools — integrazione nei devtools del browser
- NVDA (Windows, gratuito) o VoiceOver (macOS/iOS, integrato) — test reale con screen reader
- Lighthouse — audit accessibilità integrato in Chrome DevTools
Normativa italiana ed europea
Per i siti della pubblica amministrazione, la Direttiva UE 2016/2102 e il D.Lgs. 106/2018 impongono:
- Conformità WCAG 2.1 livello AA
- Dichiarazione di accessibilità pubblicata sul sito
- Meccanismo di feedback per segnalare barriere
- Rendicontazione periodica all’AGID
Per i siti privati non esiste un obbligo generico di accessibilità, ma la Legge Stanca (L. 4/2004) si applica alle aziende con più di 15 dipendenti che offrono servizi al pubblico.