Accessibilità WordPress per la PA: Requisiti WCAG 2.2, Audit e Implementazione [2026]

19 giugno 202618 minAccessibilità Web
In breveAI

La Pubblica Amministrazione italiana deve garantire l'accessibilità dei propri siti web, in particolare quelli basati su WordPress, per rispettare le linee guida dell'AgID e le norme WCAG 2.2. Questo articolo fornisce una guida pratica per rendere un sito WordPress PA accessibile, evitando sanzioni e procedimenti amministrativi.

La PA Italiana Ha un Problema di Accessibilità. Grosso.

L’AgID ha pubblicato le linee guida sull’accessibilità nel 2020. Siamo nel 2026 e la maggior parte dei siti WordPress della Pubblica Amministrazione non le rispetta. Non per cattiva volontà. Per ignoranza tecnica.

In 15 anni di lavoro con ASL, comuni e enti regionali, abbiamo toccato con mano la situazione. Siti istituzionali costruiti con page builder che generano HTML illeggibile dagli screen reader. Form di contatto senza label. PDF non taggati. Contrasti di colore che farebbero piangere un designer (e un ipovedente).

Questa guida non è teoria. È il processo che applichiamo sui siti PA gestiti con AgencyPilot: dall’audit iniziale all’implementazione, con codice reale e checklist pronte all’uso. Se gestisci siti WordPress per enti pubblici, questo è il tuo punto di partenza.

TL;DR — Cosa Serve per Rendere un Sito WordPress PA Accessibile

Conformità WCAG 2.2 livello AA obbligatoria per legge (Direttiva UE 2016/2102, recepita con D.Lgs. 106/2018). Serve: struttura HTML semantica, contrasti colore >= 4.5:1, navigazione da tastiera completa, alt text su tutte le immagini informative, form con label associate, documenti PDF accessibili. L’audit si fa con axe DevTools + test manuale con screen reader. Il costo di adeguamento di un sito WordPress medio: 3-5 giorni di lavoro per uno sviluppatore esperto. Il costo di non farlo: sanzioni AgID fino a 100.000€ e procedimenti amministrativi.

Il Quadro Normativo: Cosa Dice la Legge nel 2026

Mettiamo ordine. Le norme si sovrappongono e generano confusione. Ecco la catena completa:

Norma Ambito Requisito
Legge Stanca (L. 4/2004) PA italiana Accessibilità obbligatoria per siti PA
Direttiva UE 2016/2102 UE Conformità WCAG 2.1 livello AA per siti e app PA
D.Lgs. 106/2018 Italia Recepimento direttiva UE, obbligo dichiarazione accessibilità
European Accessibility Act (EAA) UE, dal 28/06/2025 Estende l’obbligo al settore privato per servizi digitali
WCAG 2.2 Standard tecnico W3C 9 nuovi criteri rispetto a 2.1, raccomandato da ottobre 2023

Il punto chiave: dal giugno 2025, l’European Accessibility Act ha esteso l’obbligo di accessibilità anche alle aziende private che offrono servizi digitali. Non è più solo un problema della PA. Ma la PA resta il settore dove l’enforcement è più attivo, con AgID che pubblica i risultati del monitoraggio annualmente.

I siti WordPress della PA devono raggiungere almeno il livello AA delle WCAG 2.2. E devono pubblicare una dichiarazione di accessibilità aggiornata ogni anno (entro il 30 settembre). Se gestisci siti per enti pubblici con un sistema di gestione multi-sito, questo va tracciato per ogni singolo sito.

WCAG 2.2: I 9 Nuovi Criteri che Devi Conoscere

WCAG 2.2 ha aggiunto 9 criteri di successo rispetto alla versione 2.1. Non tutti sono livello AA (alcuni sono AAA), ma quelli AA sono obbligatori. Ecco quelli che impattano WordPress:

Focus Not Obscured (Minimum) — 2.4.11, Livello AA

Quando un elemento riceve il focus da tastiera, non deve essere completamente nascosto da altro contenuto. Sembra ovvio. Non lo è. Header sticky, modali, cookie banner: tutti possono oscurare l’elemento con focus.

/* Fix per header sticky che oscura il focus */
:focus {
  scroll-margin-top: 80px; /* altezza dell'header sticky */
}

/* Assicura che il focus sia sempre visibile sopra lo sticky header */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
}

/* L'elemento focusato deve avere z-index superiore */
*:focus {
  position: relative;
  z-index: 101;
}

Focus Appearance — 2.4.13, Livello AAA (ma consigliato)

L’indicatore di focus deve avere un’area minima di 2px di contorno e un contrasto di almeno 3:1. Non è AA, quindi non è obbligatorio per legge. Ma implementarlo costa 5 minuti e migliora l’usabilità per tutti.

/* Focus ring accessibile e visibile */
:focus-visible {
  outline: 3px solid #1a56db;
  outline-offset: 2px;
  border-radius: 2px;
}

/* Rimuovi l'outline solo per click mouse, mantienilo per tastiera */
:focus:not(:focus-visible) {
  outline: none;
}

Dragging Movements — 2.5.7, Livello AA

Qualsiasi funzionalità che usa il drag-and-drop deve avere un’alternativa single-pointer (click o tap). In WordPress, questo impatta i page builder con elementi trascinabili. Gutenberg è conforme dalla versione 6.4, ma plugin di terze parti spesso non lo sono.

Target Size (Minimum) — 2.5.8, Livello AA

I target cliccabili devono essere almeno 24×24 CSS pixel, o avere sufficiente spaziatura. Questo è il criterio che boccia più siti WordPress. Link nel footer ammassati, pulsanti social minuscoli, menu con voci ravvicinate.

/* Target size minimo 24x24px */
a, button, input[type="submit"], 
input[type="checkbox"], input[type="radio"],
.menu-item a {
  min-height: 24px;
  min-width: 24px;
  padding: 4px 8px;
}

/* Spaziatura adeguata tra link nel footer */
.footer-links a {
  display: inline-block;
  padding: 6px 12px;
  margin: 2px 0;
}

Audit di Accessibilità: Come Lo Facciamo in Pratica

L’audit è il primo passo. Senza sapere cosa non funziona, non puoi aggiustarlo. Ma attenzione: nessun tool automatico copre il 100% dei criteri WCAG. I tool automatici coprono circa il 30-40% dei problemi (studio Deque Systems 2024). Il resto richiede test manuale.

Fase 1: Scansione Automatica con axe DevTools

axe DevTools è lo standard de facto per l’audit automatico. È gratuito, open source, e integrato in Chrome DevTools. Ecco come lo usiamo:

  1. Apri il sito in Chrome
  2. DevTools → tab “axe DevTools” (o installa l’estensione)
  3. Clicca “Scan All of My Page”
  4. Classifica i risultati per impatto: Critical > Serious > Moderate > Minor

Per scansioni automatiche su larga scala (tutti i siti di un cliente PA), usiamo axe-core via CLI:

# Installa axe-core CLI
npm install -g @axe-core/cli

# Scansiona una singola pagina
axe https://comune.example.it --save risultati.json

# Scansiona più pagine da una lista
while IFS= read -r url; do
  axe "$url" --save "audit_$(echo $url | md5sum | cut -d' ' -f1).json"
done < pagine_da_testare.txt

# Esempio output: 12 violations found (3 critical, 5 serious, 4 moderate)

I problemi più frequenti che troviamo sui siti WordPress PA:

Problema Frequenza Impatto Fix
Immagini senza alt text 92% dei siti Critical Aggiungere alt text descrittivo
Contrasto colore insufficiente 85% dei siti Serious Aggiornare CSS colori
Form senza label associate 78% dei siti Critical Aggiungere for/id matching
Heading non gerarchici 67% dei siti Serious Ristrutturare heading
Link senza testo accessibile 54% dei siti Serious Aggiungere aria-label o testo visivo

Questi numeri vengono dai nostri audit interni su 35 siti PA che abbiamo preso in gestione negli ultimi 3 anni. Il 92% con immagini senza alt sembra alto? Non lo è. È la norma.

Fase 2: Test Manuale con Screen Reader

La parte che nessuno vuole fare. Ma è la più importante.

Installa NVDA (gratuito, Windows) o usa VoiceOver (integrato in macOS). Poi naviga il sito senza mouse. Solo tastiera + screen reader. Le cose che scopri in 10 minuti di navigazione reale valgono più di 100 scansioni automatiche.

Cosa testare manualmente:

  • Navigazione da tastiera: Tab per muoverti tra gli elementi. Enter per attivare link e pulsanti. Esc per chiudere modali. Ogni elemento interattivo deve essere raggiungibile e utilizzabile
  • Ordine di lettura: lo screen reader legge il contenuto nell'ordine del DOM, non nell'ordine visivo. Se il layout CSS riordina gli elementi, l'ordine di lettura potrebbe non avere senso
  • Form: ogni campo deve annunciare la sua etichetta. I messaggi di errore devono essere collegati al campo tramite aria-describedby
  • Contenuto dinamico: se un'azione aggiorna parte della pagina (AJAX), lo screen reader deve esserne informato tramite aria-live regions

Fase 3: Test con Utenti Reali (Opzionale ma Raccomandato)

Per siti PA ad alto traffico (portali regionali, ASL, grandi comuni), raccomandiamo test con utenti reali con disabilità. Non è economico, ma è l'unico modo per validare davvero l'accessibilità. Organizzazioni come Fondazione ASPHI offrono servizi di testing con utenti in Italia.

Implementazione WordPress: Codice Reale per Problemi Reali

Passiamo al codice. Questi sono fix che applichiamo regolarmente sui siti PA gestiti.

Alt Text Automatico: Sistema di Audit e Reminder

Il problema numero uno. Risolverlo richiede un approccio sistematico, non un fix una tantum.

<?php
/**
 * Blocca la pubblicazione di post con immagini senza alt text.
 * Aggiunge un avviso nell'editor invece di bloccare silenziosamente.
 */
add_action('admin_notices', function() {
    global $post;
    if (!$post || $post->post_status !== 'publish') return;
    
    // Cerca immagini nel contenuto senza alt
    preg_match_all('/<img[^>]+>/i', $post->post_content, $matches);
    $missing_alt = [];
    
    foreach ($matches[0] as $img) {
        if (!preg_match('/alt=["\'][^"\']+["\']/i', $img)) {
            $missing_alt[] = $img;
        }
    }
    
    // Controlla anche l'immagine in evidenza
    $thumb_id = get_post_thumbnail_id($post->ID);
    if ($thumb_id) {
        $alt = get_post_meta($thumb_id, '_wp_attachment_image_alt', true);
        if (empty($alt)) {
            $missing_alt[] = 'Immagine in evidenza';
        }
    }
    
    if (!empty($missing_alt)) {
        echo '<div class="notice notice-warning">';
        echo '<p><strong>⚠️ Accessibilità:</strong> ';
        echo count($missing_alt) . ' immagini senza testo alternativo.';
        echo ' Aggiungere alt text è obbligatorio per i siti PA (WCAG 1.1.1).</p>';
        echo '</div>';
    }
});

Questo non blocca la pubblicazione (sarebbe troppo aggressivo per gli editor PA che spesso non sono tecnici), ma mostra un avviso chiaro. In AgencyPilot tracciamo il numero di immagini senza alt per sito e lo includiamo nei report mensili.

Skip Link e Navigazione da Tastiera

Ogni sito PA deve avere uno skip link come primo elemento focusabile. Permette agli utenti da tastiera di saltare il menu di navigazione e andare direttamente al contenuto.

<!-- Skip link: primo elemento nel body -->
<a href="#main-content" class="skip-link">
  Vai al contenuto principale
</a>

<!-- Il contenuto principale ha l'id corrispondente -->
<main id="main-content" role="main" tabindex="-1">
  <!-- contenuto -->
</main>
/* Skip link: invisibile di default, visibile su focus */
.skip-link {
  position: absolute;
  top: -40px;
  left: 0;
  background: #1a56db;
  color: #ffffff;
  padding: 8px 16px;
  z-index: 10000;
  font-size: 16px;
  text-decoration: none;
  transition: top 0.2s;
}

.skip-link:focus {
  top: 0;
  outline: 3px solid #f59e0b;
  outline-offset: 2px;
}

Lo skip link è il test più rapido per capire se un sito WordPress è stato costruito con l'accessibilità in mente. Se non c'è, probabilmente manca tutto il resto.

Form Accessibili: Il Fix che Richiede 5 Minuti

Contact Form 7 è il plugin più usato sui siti PA. Di default genera HTML abbastanza accessibile, ma la configurazione tipica che troviamo non lo è. Il problema: i form builder permettono di creare campi senza label associate.

<!-- SBAGLIATO: nessun collegamento label-input -->
<p>Nome<br/>
<input type="text" name="nome"></p>

<!-- CORRETTO: label con for che punta all'id dell'input -->
<p>
  <label for="campo-nome">Nome <abbr title="obbligatorio">*</abbr></label>
  <input type="text" name="nome" id="campo-nome" 
         required aria-required="true">
</p>

<!-- CORRETTO: messaggio di errore collegato -->
<p>
  <label for="campo-email">Email <abbr title="obbligatorio">*</abbr></label>
  <input type="email" name="email" id="campo-email" 
         required aria-required="true"
         aria-describedby="email-errore">
  <span id="email-errore" class="errore" role="alert"></span>
</p>

L'attributo aria-describedby collega il campo al suo messaggio di errore. Quando l'utente con screen reader entra nel campo, sente anche il messaggio di errore (se presente). Senza questo collegamento, l'utente compila il form, invia, riceve errori che non riesce a trovare. Frustrante per chiunque. Impossibile per chi usa uno screen reader.

Contrasto Colore: Il Fix più Veloce con il ROI più Alto

Il rapporto di contrasto minimo WCAG è 4.5:1 per il testo normale e 3:1 per il testo grande (>= 18pt o >= 14pt bold). Molti temi WordPress usano grigi chiari su sfondo bianco che non raggiungono il 4.5:1.

/* PRIMA: contrasto insufficiente */
.text-muted {
  color: #999999; /* rapporto 2.85:1 su bianco — BOCCIATO */
}

/* DOPO: contrasto sufficiente */
.text-muted {
  color: #595959; /* rapporto 7.0:1 su bianco — OK AA e AAA */
}

/* Colori comuni per siti PA con contrasto AA garantito */
:root {
  --colore-primario: #1a56db;    /* 5.2:1 su bianco */
  --colore-testo: #1f2937;       /* 14.7:1 su bianco */
  --colore-testo-secondario: #4b5563; /* 7.0:1 su bianco */
  --colore-link: #1a56db;        /* 5.2:1 su bianco */
  --colore-link-hover: #1e40af;  /* 7.1:1 su bianco */
  --colore-errore: #b91c1c;      /* 5.9:1 su bianco */
  --colore-successo: #15803d;    /* 4.6:1 su bianco */
}

Usa WebAIM Contrast Checker per verificare ogni combinazione. 30 secondi per controllo. Non ci sono scuse.

Documenti PDF Accessibili: Il Punto Cieco della PA

Il 90% dei documenti pubblicati sui siti PA sono PDF. E il 90% di quei PDF non è accessibile. I PDF generati da Word senza tagging, scansioni di documenti cartacei senza OCR, delibere pubblicate come immagini. Una catastrofe per l'accessibilità.

Le regole minime per PDF accessibili:

  • PDF taggati: la struttura del documento (heading, paragrafi, tabelle, liste) deve essere esplicita nei tag PDF
  • Ordine di lettura definito: lo screen reader deve poter leggere il contenuto nell'ordine corretto
  • Testo selezionabile: niente scansioni senza OCR. Se non puoi selezionare il testo, non è accessibile
  • Alt text per immagini: anche dentro i PDF
  • Lingua del documento: specificata nei metadati

Per i PDF generati dal sito WordPress (fatture, certificati, report), usiamo la libreria TCPDF o mPDF con le opzioni di tagging attive:

// Esempio con mPDF: generare PDF accessibile
$mpdf = new \Mpdf\Mpdf([
    'mode' => 'utf-8',
    'format' => 'A4',
]);

// Imposta tag di accessibilità
$mpdf->SetTitle('Delibera n. 123/2026');
$mpdf->SetAuthor('Comune di Esempio');
$mpdf->SetSubject('Delibera consiglio comunale');
$mpdf->SetKeywords('delibera, consiglio, comune');

// Lingua del documento
$mpdf->SetDefaultBodyCSS('lang', 'it');

// Il contenuto HTML viene convertito con struttura taggata
$mpdf->WriteHTML($contenuto_html);
$mpdf->Output('delibera_123_2026.pdf', 'F');

Per i documenti caricati manualmente (il caso più comune nella PA), la soluzione è formare gli operatori. Un'ora di formazione su come esportare PDF accessibili da Word salva mesi di correzioni successive. Nella nostra piattaforma di gestione includiamo guide video per gli operatori PA proprio su questo punto.

Dichiarazione di Accessibilità: Template e Automazione

Ogni sito PA deve pubblicare una dichiarazione di accessibilità. AgID ha un modulo online per generarla, ma il contenuto va preparato con i risultati dell'audit.

La dichiarazione deve includere:

  1. Stato di conformità: conforme, parzialmente conforme, o non conforme
  2. Contenuti non accessibili: lista specifica di cosa non è conforme e perché
  3. Meccanismo di feedback: come gli utenti possono segnalare problemi di accessibilità
  4. Data dell'ultimo audit
  5. Link al Difensore Civico Digitale per i reclami
<?php
/**
 * Shortcode per la dichiarazione di accessibilità.
 * Mantiene la data dell'ultimo audit aggiornata automaticamente
 * e genera un form di feedback conforme.
 */
add_shortcode('dichiarazione_accessibilita', function($atts) {
    $atts = shortcode_atts([
        'stato' => 'parzialmente conforme',
        'data_audit' => '2026-03-15',
        'email_feedback' => 'accessibilita@ente.gov.it',
    ], $atts);
    
    ob_start();
    ?>
    <section aria-labelledby="acc-title">
      <h2 id="acc-title">Dichiarazione di Accessibilità</h2>
      <p>Questo sito è <strong><?= esc_html($atts['stato']) ?></strong> 
         alle WCAG 2.2 livello AA.</p>
      <p>Ultimo audit: <time datetime="<?= esc_attr($atts['data_audit']) ?>">
         <?= date_i18n('j F Y', strtotime($atts['data_audit'])) ?></time></p>
      
      <h3>Segnala un problema di accessibilità</h3>
      <p>Se riscontri barriere di accessibilità su questo sito, contattaci: 
         <a href="mailto:<?= esc_attr($atts['email_feedback']) ?>">
         <?= esc_html($atts['email_feedback']) ?></a></p>
      
      <h3>Difensore Civico Digitale</h3>
      <p>Se la risposta non è soddisfacente, puoi rivolgerti al 
         <a href="https://www.difensivocivicodigitale.it/" 
            target="_blank" rel="noopener">Difensore Civico Digitale</a>.</p>
    </section>
    <?php
    return ob_get_clean();
});

Checklist Operativa: 25 Controlli per Siti WordPress PA

Questa è la checklist che usiamo su ogni sito PA gestito. Copre i criteri WCAG 2.2 livello AA più rilevanti per WordPress.

Struttura e Semantica

# Controllo WCAG Tool
1 Heading gerarchici (H1 → H2 → H3, senza salti) 1.3.1 axe, HeadingsMap
2 Landmark ARIA: header, nav, main, footer 1.3.1 axe
3 Lingua del documento dichiarata in <html lang="it"> 3.1.1 axe
4 Titolo pagina unico e descrittivo 2.4.2 Manuale
5 Liste usate per gruppi di elementi correlati 1.3.1 Manuale

Immagini e Media

# Controllo WCAG Tool
6 Alt text su tutte le immagini informative 1.1.1 axe
7 Immagini decorative con alt="" (vuoto, non assente) 1.1.1 axe
8 Video con sottotitoli 1.2.2 Manuale
9 Audio con trascrizione testuale 1.2.1 Manuale

Navigazione e Interazione

# Controllo WCAG Tool
10 Skip link al contenuto principale 2.4.1 Manuale
11 Navigazione completa da tastiera (Tab, Enter, Esc) 2.1.1 Manuale
12 Focus visibile su ogni elemento interattivo 2.4.7 Manuale
13 Focus non oscurato da elementi sticky 2.4.11 Manuale
14 Target cliccabili >= 24x24px 2.5.8 axe + manuale
15 Nessuna trappola da tastiera 2.1.2 Manuale

Colori e Presentazione

# Controllo WCAG Tool
16 Contrasto testo normale >= 4.5:1 1.4.3 axe, WebAIM
17 Contrasto testo grande >= 3:1 1.4.3 axe, WebAIM
18 Informazioni non veicolate solo dal colore 1.4.1 Manuale
19 Testo ridimensionabile al 200% senza perdita di contenuto 1.4.4 Manuale

Form e Input

# Controllo WCAG Tool
20 Ogni input ha una label associata (for/id) 1.3.1 axe
21 Errori identificati con testo (non solo colore) 3.3.1 Manuale
22 Suggerimenti per la correzione degli errori 3.3.3 Manuale
23 Campi obbligatori indicati esplicitamente 3.3.2 Manuale

Documenti

# Controllo WCAG Tool
24 PDF taggati con struttura accessibile 1.1.1, 1.3.1 PAC (PDF Accessibility Checker)
25 Dichiarazione di accessibilità pubblicata e aggiornata Normativa Manuale

Monitoraggio Continuo: Non Basta un Audit una Tantum

L'accessibilità non è un progetto con una data di fine. È un processo continuo. Ogni nuovo contenuto pubblicato, ogni aggiornamento tema, ogni nuovo plugin può introdurre regressioni.

In AgencyPilot abbiamo integrato un check di accessibilità automatico che gira settimanalmente su tutte le pagine principali di ogni sito PA gestito. Usa axe-core via headless Chrome e genera un report con il trend nel tempo.

// Script Node.js per audit automatico con axe-core e Puppeteer
const puppeteer = require('puppeteer');
const { AxePuppeteer } = require('@axe-core/puppeteer');

async function auditPage(url) {
  const browser = await puppeteer.launch({ headless: 'new' });
  const page = await browser.newPage();
  await page.goto(url, { waitUntil: 'networkidle2' });
  
  const results = await new AxePuppeteer(page)
    .withTags(['wcag2a', 'wcag2aa', 'wcag22aa'])
    .analyze();
  
  await browser.close();
  
  return {
    url,
    timestamp: new Date().toISOString(),
    violations: results.violations.length,
    critical: results.violations.filter(v => v.impact === 'critical').length,
    serious: results.violations.filter(v => v.impact === 'serious').length,
    details: results.violations.map(v => ({
      id: v.id,
      impact: v.impact,
      description: v.description,
      nodes: v.nodes.length,
    })),
  };
}

Il trend è la metrica chiave. Se le violazioni aumentano da una settimana all'altra, qualcosa è andato storto. Se diminuiscono, il lavoro sta funzionando. Senza monitoraggio continuo, l'accessibilità degrada nel tempo. Sempre.

Questo si integra con il sistema di monitoraggio WordPress che già usiamo per uptime e performance. Un unico cruscotto per tutto.

I Temi WordPress Più Accessibili per la PA

Non tutti i temi WordPress nascono uguali per l'accessibilità. Alcuni sono costruiti con l'accessibilità come priorità. Altri la ignorano completamente.

I temi che raccomandiamo per siti PA:

  • Developer Italia Design WordPress Theme: il tema ufficiale basato sul Design System Italia di AgID. Costruito appositamente per i siti PA italiani. Non è il più flessibile, ma è il più conforme out-of-the-box
  • GeneratePress: minimale, leggero (sotto 30KB), e con un'ottima base di accessibilità. Skip link, ARIA landmark, focus ring inclusi di default. Perfetto come base per temi custom PA
  • Flavor flavored theme di Developer Italia: basato su Bootstrap Italia 2.x, con componenti accessibili preconfigurati

Cosa evitare: qualsiasi page builder che genera div nidificati senza semantica. Elementor, Divi, WPBakery producono HTML che è un incubo per gli screen reader (anche se negli ultimi anni hanno fatto progressi). Per la PA, meglio Gutenberg nativo con blocchi custom accessibili.

Costi e Tempi di Adeguamento: Numeri Reali

Quanto costa rendere accessibile un sito WordPress PA esistente? Dipende dallo stato di partenza, ma ecco i numeri medi dalla nostra esperienza:

Stato iniziale Tempo stimato Costo stimato
Sito con tema accessibile, contenuti da sistemare 2-3 giorni 1.500-2.500€
Sito con tema non accessibile, struttura ok 5-8 giorni 4.000-6.000€
Sito legacy con page builder, nessuna accessibilità 10-15 giorni 8.000-12.000€
Rifacimento completo (a volte è più economico) 15-25 giorni 12.000-20.000€

Il terzo scenario (sito legacy con page builder) è il più comune nella PA. E spesso il rifacimento completo costa meno dell'adeguamento, perché patchare un sito costruito senza accessibilità è come ristrutturare una casa senza fondamenta.

Il costo di non fare nulla? Sanzioni AgID, azioni legali, e soprattutto: cittadini con disabilità che non possono accedere ai servizi pubblici. Questo dovrebbe essere il motivo principale, non le sanzioni. Ma i numeri aiutano a convincere chi gestisce il budget.

FAQ — Domande Frequenti sull'Accessibilità WordPress per la PA

Quali sono le sanzioni per un sito PA non accessibile?

AgID può comminare sanzioni amministrative fino a 100.000€ e ordinare l'adeguamento con tempi definiti. Il D.Lgs. 106/2018 prevede anche la responsabilità del dirigente responsabile. Nella pratica, le sanzioni sono ancora rare, ma il monitoraggio AgID sta diventando più stringente anno dopo anno.

Un plugin di accessibilità può rendere il mio sito conforme?

No. I plugin "overlay" (come AccessiBe, UserWay) aggiungono widget per modificare font e contrasto, ma non risolvono i problemi strutturali di accessibilità. Lo screen reader non legge meglio un form senza label solo perché c'è un widget che ingrandisce il testo. WCAG richiede accessibilità nativa nel codice HTML. I plugin overlay sono un cerotto cosmetico, non una soluzione.

Gutenberg è accessibile?

Gutenberg ha fatto enormi passi avanti sull'accessibilità dall'editor (lato backend) e genera HTML semantico per i blocchi nativi (paragrafi, heading, liste, tabelle, immagini con alt). I problemi emergono con blocchi custom di terze parti che non seguono le linee guida di accessibilità di WordPress. Regola: usa blocchi nativi dove possibile, testa con screen reader quelli custom.

Come gestisco l'accessibilità dei contenuti caricati dagli operatori PA?

Formazione + strumenti. Formare gli operatori su: alt text per immagini, heading gerarchici, link descrittivi (mai "clicca qui"), PDF accessibili da Word. E aggiungere controlli automatici nel CMS (come lo snippet PHP sopra) che avvisano quando manca qualcosa. L'80% dei problemi di accessibilità nei siti PA è causato dai contenuti, non dal codice.

Con quale frequenza devo rifare l'audit di accessibilità?

Audit completo (automatico + manuale + screen reader): almeno annuale, e dopo ogni redesign significativo. Scansione automatica (axe-core): settimanale. Aggiornamento dichiarazione di accessibilità: annuale entro il 30 settembre. Se usi automazione nella gestione WordPress, la scansione settimanale non costa nulla.

Gestisci i siti WordPress dei tuoi clienti?

AgencyPilot ti dà report AI, uptime monitoring, backup e portale clienti in un’unica dashboard. Gratis per 3 siti.

Prova gratis
Leggi anche
Tutti gli articoli
Tutti gli articoli