<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>screen reader - Web Design | Creazione Siti Internet</title>
	<atom:link href="https://www.mrtux.it/tag/screen-reader/feed" rel="self" type="application/rss+xml" />
	<link>https://www.mrtux.it</link>
	<description>Sviluppo Siti Web - Assistenza WordPress</description>
	<lastBuildDate>Tue, 08 Sep 2026 18:50:45 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.1</generator>

<image>
	<url>https://www.mrtux.it/wp-content/uploads/2022/06/favicon-150x150.png</url>
	<title>screen reader - Web Design | Creazione Siti Internet</title>
	<link>https://www.mrtux.it</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Accessibilità nei temi WordPress: la checklist essenziale</title>
		<link>https://www.mrtux.it/accessibilita-temi-wordpress-checklist-2026</link>
					<comments>https://www.mrtux.it/accessibilita-temi-wordpress-checklist-2026#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Tue, 08 Sep 2026 18:49:31 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[accessibilità]]></category>
		<category><![CDATA[assistenza wordpress]]></category>
		<category><![CDATA[audit]]></category>
		<category><![CDATA[block theme]]></category>
		<category><![CDATA[screen reader]]></category>
		<category><![CDATA[temi wordpress]]></category>
		<category><![CDATA[WCAG]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/accessibilita-nei-temi-wordpress-la-checklist-essenziale</guid>

					<description><![CDATA[L'accessibilità nei temi WordPress spaventa meno di quel che sembra: HTML corretto, alt, skip link e contrasto. La checklist che porta il tema all'80% in un pomeriggio.]]></description>
										<content:encoded><![CDATA[

<p class="wp-block-paragraph">Due settimane fa un cliente mi ha mandato il tema che aveva appena comprato: 900€, agenzia seria, demo bellissima. Al primo test con la tastiera da sola il menu si è rivelato una trappola: il focus spariva, i sottomenù non si aprivano, e lo skimmer di PayPal restava fuori portata a chi naviga con lo screen reader. Quattordici problemi numerati dopo l&#x27;audit, nove sistemabili in un pomeriggio. La sensazione che ho provato è la stessa che racconta Jessica Lyschik nel suo intervento a WordCamp Europe 2026, ripreso nell&#x27;episodio 226 del podcast di WP Tavern: l&#x27;<a href="https://www.mrtux.it/ai-accessibilita-wordpress-wcag-2026-audit-automatico" data-wpel-link="internal" target="_self" rel="noopener">accessibilità nei temi WordPress</a> fa paura da lontano e si smonta facilmente da vicino. In questa guida la smonto io, con la checklist che uso in audit e la mia opinione su dove conviene investire il tempo.</p>




<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1080" height="719" src="https://www.mrtux.it/wp-content/uploads/2026/09/cover_accessibilita-temi-wordpress-checklist-2026.jpg" alt="Accessibilità nei temi WordPress: la checklist essenziale" class="wp-image-3797" srcset="https://www.mrtux.it/wp-content/uploads/2026/09/cover_accessibilita-temi-wordpress-checklist-2026.jpg 1080w, https://www.mrtux.it/wp-content/uploads/2026/09/cover_accessibilita-temi-wordpress-checklist-2026-300x200.jpg 300w, https://www.mrtux.it/wp-content/uploads/2026/09/cover_accessibilita-temi-wordpress-checklist-2026-1024x682.jpg 1024w, https://www.mrtux.it/wp-content/uploads/2026/09/cover_accessibilita-temi-wordpress-checklist-2026-768x511.jpg 768w" sizes="(max-width: 1080px) 100vw, 1080px" /></figure>






<h2 class="wp-block-heading">Perché il tema è il posto giusto per iniziare</h2>





<p class="wp-block-paragraph">Il tema decide la struttura: heading, markup dei menu, contrasto di default, markup dei form. Se la base è solida, plugin e contenuti si innestano su fondamenta accessibili. Se la base è fragile, ogni pagina del sito nasce sbagliata e voi lo scoprite quando il cliente riceve la prima segnalazione — o peggio, quando arriva una causa ADA, negli Stati Uniti una realtà concreta per chi vende lì. Jessica lo dice chiaramente nel podcast: i requisiti delle linee guida WordPress sembrano un muro, ma i frutti più bassi si colgono con sforzo contenuto, sia nei temi classici che nei block theme.</p>





<p class="wp-block-paragraph">L&#x27;argomento economico vale più di quello etico, purtroppo, e lo uso in negoziazione: sistemare l&#x27;accessibilità a tema finito costa tre o quattro volte rispetto a farlo nascere accessibile. Retrofit su ventidue template o cura al momento della scrittura: la seconda strada è più corta, sempre.</p>





<h2 class="wp-block-heading">La checklist che porta all&#x27;80%</h2>





<p class="wp-block-paragraph">Questi sono gli otto punti che controllo in ogni audit, in ordine di impatto. Non è una lista simmetrica da manuale: i primi tre coprono la maggior parte dei problemi che incontro davvero.</p>





<ul class="wp-block-list"><li><strong>Navigazione da tastiera</strong>: tab attraverso header, menu, footer. Se il focus scompare o l&#x27;ordine è caotico, è la prima cosa da sistemare. Il menu mobile e gli accordion sono i candidati classici.</li><li><strong>Skip to content</strong>: un link «salta al contenuto» come primo elemento cliccabile. Mezz&#x27;ora di lavoro, beneficio immediato per chi usa lo screen reader su ogni pagina.</li><li><strong>HTML semantico e heading in ordine</strong>: un solo H1, H2 e H3 che raccontano la pagina, nav/main/footer come tag e non come div. Il tema li eredita: se li sbaglia, correggere i template.</li><li><strong>Contrasto reale</strong>: 4.5:1 per il testo normale, 3:1 per i titoli grandi. I grigi eleganti su bianco sono il vizio più diffuso nei temi premium; misurare, non fidarsi dell&#x27;occhio.</li><li><strong>Alt text sulle immagini</strong>: il tema deve dare il campo e i contenuti devono riempirlo. Se la media gallery è piena di alt vuoti, parte un lavoro di contenuto a parte.</li><li><strong>Stati di focus visibili</strong>: outline personalizzati o di default, mai `outline: none` senza alternativa. Chi naviga da tastiera deve sempre vedere dov&#x27;è.</li><li><strong>Form con etichette e messaggi d&#x27;errore leggibili</strong>: label associati, errori annunciati, niente placeholder usati al posto dell&#x27;etichetta. Checkout e form di contatto prima di tutto.</li><li><strong>Aria dove serve, solo dove serve</strong>: ARIA corretto sui componenti interattivi custom. ARIA sparso ovunque peggiora le cose: prima il markup nativo, poi ARIA.</li></ul>





<p class="wp-block-paragraph">Nei block theme una fetta di questo lavoro arriva gratis: il markup dei blocchi core è semantico e testato, e la responsabilità scivola verso chi compone le pagine. È il motivo per cui su progetti nuovi spingo verso i block theme anche per questioni di accessibilità, non solo per il futuro dell&#x27;editor.</p>





<h2 class="wp-block-heading">Il test automatico da 5 minuti</h2>





<p class="wp-block-paragraph">Prima di qualsiasi audit manuale, faccio girare axe-core su tre pagine campione: home, un articolo, una pagina con form. Non sostituisce l&#x27;audit umano — becca in genere un terzo dei problemi — ma è gratis e mette in fila le cose evidenti:</p>





<pre class="wp-block-code"><code># test automatico accessibilità su una pagina live: lista violazioni con gravità
npx @axe-core/cli https://www.mrtux.it/assistenza-wordpress --exit</code></pre>





<p class="wp-block-paragraph">Poi il test che nessun tool automatico fa per voi: staccate il mouse e navigate la home con la tastiera, finendo fino al footer. Dieci minuti che valgono più di tre report PDF. E chi vuole spingersi oltre trova in questo sito una guida completa sugli <a href="https://www.mrtux.it/ai-accessibilita-wordpress-wcag-2026-audit-automatico" data-wpel-link="internal" target="_self" rel="noopener">audit automatici WCAG con l&#x27;AI</a>.</p>





<h2 class="wp-block-heading">Il caso del tema da 900€, con i numeri</h2>





<p class="wp-block-paragraph">Torniamo all&#x27;apertura perché i numeri raccontano meglio della teoria. L&#x27;audit del tema premium ha prodotto quattordici problemi: nove risolti in un pomeriggio (focus visibili, skip link, alt mancanti, ordine heading, due contrasti), tre richiesti mezza giornata di sviluppo (menu keyboard-accessible, aria sugli accordion, form di checkout), due erano decisioni di design da negoziare con chi aveva scelto il grigio elegante. Risultato: i percorsi critici — menu, form, checkout — reggono il livello WCAG AA, zero euro di licenze nuove, e i ticket di supporto sono calati da subito perché anche l&#x27;usabilità generale ha beneficiato. Il tema non l&#x27;ho cambiato: l&#x27;ho sistemato. Teme premium e accessibilità non sono nemici, solo richiedono l&#x27;audit che il vendor non include.</p>





<h2 class="wp-block-heading">Block theme o classic: cambia qualcosa per l&#x27;accessibilità?</h2>





<p class="wp-block-paragraph">La domanda arriva in ogni audit, e la risposta di Jessica nel podcast coincide con quella che do io: dipende, ma nei block theme una fetta del lavoro arriva gratis. Il markup dei blocchi core — navigazione, immagini, quote — è semantico, testato dalla community e aggiornato con le release. In un classic theme la stessa struttura dipende da come il vendor ha scritto i template PHP, e lì le qualità variano molto di più da tema a tema. In compenso un classic ben fatto con hook e markup pulito resta perfettamente accessibile: non è una guerra di religioni, è una questione di base di partenza. Nei progetti nuovi parto dai block theme proprio per questo, oltre che per la longevità: ereditate markup corretto di default, e i vostri errori si concentrano sui contenuti, non sull&#x27;ossatura.</p>





<p class="wp-block-paragraph">L&#x27;eccezione da conoscere è la navigazione: il blocco navigation core è migliorato molto, ma i menu complessi con mega-dropdown restano più semplici da gestire in un classic theme con un JS controllato. Se il vostro progetto ha una navigazione complessa, verificate quel componente per primo, qualunque sia il tipo di tema.</p>





<h2 class="wp-block-heading">Dove l&#x27;AI aiuta davvero (e dove no)</h2>





<p class="wp-block-paragraph">Nell&#x27;intervista Jessica nota un punto che condivido: gli agenti AI stanno mettendo l&#x27;accessibilità sotto i riflettori, perché la query «controlla l&#x27;accessibilità del mio tema» ora produce report concreti in pochi minuti. Li uso nei miei audit come prima passata. Ma il limite rimane: un agente vede il markup, non vede il focus che sparisce a metà animazione, né il contrasto che cambia allo scroll, né l&#x27;esperienza di chi naviga con lo screen reader a una mano. Automazione per il volume, umano per il giudizio: è l&#x27;unica combinazione che ho visto reggere. Se volete vedere il metodo per esteso, l&#x27;audit AI dei template è raccontato passo passo nell&#x27;articolo già citato.</p>





<h2 class="wp-block-heading">Che cosa fare questa settimana</h2>





<p class="wp-block-paragraph">Se gestite un sito per conto di qualcuno — il vostro o di un cliente — la sequenza è questa: test axe sulle tre pagine chiave, navigazione da tastiera completa, correzione dei frutti bassi, audit approfondito solo se emergono problemi strutturali. Chi non ha tempo o team interno può appoggiarsi a chi lo fa per mestiere: il <a href="https://www.mrtux.it/assistenza-wordpress" data-wpel-link="internal" target="_self" rel="noopener">servizio di assistenza WordPress</a> include l&#x27;audit periodico e le correzioni, e la <a href="https://www.mrtux.it/manutenzione-wordpress-routine-mensile-2026" data-wpel-link="internal" target="_self" rel="noopener">routine di manutenzione mensile</a> tiene sotto controllo gli aggiornamenti che altrimenti rompono quanto sistemato. La scusa «il tema è nuovo, sicuramente accessibile» ho smesso di sentirla come risposta: dopo il tema da 900€, verifico sempre.</p>





<h2 class="wp-block-heading">Riferimenti utili</h2>





<ul class="wp-block-list"><li><a href="https://wptavern.com/podcast/226-jessica-lyschik-on-why-accessibility-in-wordpress-themes-is-easier-than-you-think" data-wpel-link="external" target="_blank" rel="external noopener nofollow">WP Tavern #226: Jessica Lyschik, why accessibility in WordPress themes is easier than you think</a></li><li><a href="https://make.wordpress.org/themes/handbook/review/accessibility/" data-wpel-link="external" target="_blank" rel="external noopener nofollow">Linee guida di accessibilità per i temi su WordPress.org</a></li><li><a href="https://www.mrtux.it/ai-accessibilita-wordpress-wcag-2026-audit-automatico" data-wpel-link="internal" target="_self" rel="noopener">Audit accessibilità WordPress con l&#x27;AI: WCAG 2026</a></li><li><a href="https://www.mrtux.it/assistenza-wordpress" data-wpel-link="internal" target="_self" rel="noopener">Assistenza WordPress: audit e correzioni</a></li><li><a href="https://www.mrtux.it/manutenzione-wordpress-routine-mensile-2026" data-wpel-link="internal" target="_self" rel="noopener">Manutenzione WordPress: la routine mensile</a></li></ul>


]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/accessibilita-temi-wordpress-checklist-2026/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AI per accessibilità WordPress WCAG 2026: audit automatico</title>
		<link>https://www.mrtux.it/ai-accessibilita-wordpress-wcag-2026-audit-automatico</link>
					<comments>https://www.mrtux.it/ai-accessibilita-wordpress-wcag-2026-audit-automatico#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Wed, 19 Aug 2026 13:04:11 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[accessibilità]]></category>
		<category><![CDATA[AI audit]]></category>
		<category><![CDATA[ARIA]]></category>
		<category><![CDATA[European Accessibility Act]]></category>
		<category><![CDATA[screen reader]]></category>
		<category><![CDATA[WCAG 2026]]></category>
		<category><![CDATA[WordPress 7.0]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/ai-per-accessibilita-wordpress-wcag-2026-audit-automatico</guid>

					<description><![CDATA[AI per accessibilità WordPress WCAG 2026: come usare AI per audit automatici, fix dei problemi più comuni e conformità all'European Accessibility Act in vigore.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Accessibilità e AI: il problema che nessuno vuole affrontare</h2>



<p class="wp-block-paragraph">L&#x27;argomento &quot;accessibilità WordPress&quot; fa storcere il naso a metà dei developer che incontro. È noioso, non dà traffico, e il ROI è incerto. Poi arriva l&#x27;European Accessibility Act, in vigore dal 28 giugno 2025, e improvvisamente tutti si svegliano con la pressione di dover essere WCAG 2.2 compliant entro la fine del 2026. La cosa che nessuno dice è che i plugin di overlay (accessiBe, UserWay, EqualWeb) non risolvono il problema: rilevano solo il 30% delle issue WCAG reali, e secondo la <a href="https://www.a11yproject.com/posts/2021-03-08-should-i-use-an-accessibility-overlay/" data-wpel-link="external" target="_blank" rel="external noopener nofollow">lettera aperta di a11yproject.com</a> possono addirittura peggiorare l&#x27;esperienza per chi usa screen reader.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1080" height="720" src="https://www.mrtux.it/wp-content/uploads/2026/08/cover_ai-accessibilita-wordpress-wcag-2026-audit-automatico.jpg" alt="AI per accessibilità WordPress WCAG 2026 audit automatico" class="wp-image-3714" srcset="https://www.mrtux.it/wp-content/uploads/2026/08/cover_ai-accessibilita-wordpress-wcag-2026-audit-automatico.jpg 1080w, https://www.mrtux.it/wp-content/uploads/2026/08/cover_ai-accessibilita-wordpress-wcag-2026-audit-automatico-300x200.jpg 300w, https://www.mrtux.it/wp-content/uploads/2026/08/cover_ai-accessibilita-wordpress-wcag-2026-audit-automatico-1024x683.jpg 1024w, https://www.mrtux.it/wp-content/uploads/2026/08/cover_ai-accessibilita-wordpress-wcag-2026-audit-automatico-768x512.jpg 768w" sizes="(max-width: 1080px) 100vw, 1080px" /></figure>



<p class="wp-block-paragraph">Quello che serve è un approcio diverso: usare l&#x27;AI per fare audit automatici che vanno oltre il pattern matching, generare fix proposti (non applicati automaticamente), e aiutare il developer a capire il problema prima di scrivere codice. Questo articolo è una guida pratica per chi deve rendere accessibile un sito WordPress nel 2026, con o senza AI, e in particolare per chi vuole integrare l&#x27;AI in modo serio e non cosmetico.</p>



<p class="wp-block-paragraph">Si lega ad altri articoli già su mrtux.it: il <a href="https://www.mrtux.it/wordpress-ai-debugging-workflow-risolvere-bug-meta-tempo" data-wpel-link="internal" target="_self" rel="noopener">debugging workflow con AI per WordPress</a> (stesso approccio &quot;AI-assisted, non AI-replaced&quot;), il <a href="https://www.mrtux.it/wp-bridge-ai-plugin-2026" data-wpel-link="internal" target="_self" rel="noopener">Bridge AI di WordPress 7.0</a> (le Abilities API che useremo per chiamare gli scanner), e l&#x27;<a href="https://www.mrtux.it/abilities-api-wordpress-6-9-casi-uso-non-ai" data-wpel-link="internal" target="_self" rel="noopener">Abilities API per casi d&#x27;uso non-AI</a> (molte Ability di accessibilità sono deterministiche, non generative).</p>



<h2 class="wp-block-heading">Cosa dice davvero l&#x27;European Accessibility Act</h2>



<p class="wp-block-paragraph">L&#x27;EAA è entrato in vigore il 28 giugno 2025 in tutti gli stati EU. Si applica a prodotti e servizi digitali offerti al consumatore, inclusi e-commerce, banking, e-learning, e-commerce. Le sanzioni variano per stato: in Italia la sanzione è fino a 40.000€ per sito non conforme recidivo, ma il danno reputazionale di una causa civile è molto più pesante. La conformity tecnica richiesta è WCAG 2.1 livello AA, con molti stati che richiedono già WCAG 2.2.</p>



<p class="wp-block-paragraph">La cosa importante: l&#x27;EAA si applica anche a siti di e-commerce che vendono a consumatori EU, anche se la società è fuori EU. Un WooCommerce italiano che vende a clienti tedeschi, francesi, olandesi deve essere conforme. Lo stesso per SaaS con clienti EU. L&#x27;unico esenzione rilevante è per microimprese sotto i 10 dipendenti e sotto i 2 milioni di fatturato.</p>



<h2 class="wp-block-heading">WCAG 2.2 vs 2.1: cosa cambia in pratica</h2>



<p class="wp-block-paragraph">WCAG 2.2 è uscito a ottobre 2023 e aggiunge 9 nuovi criteri di successo rispetto a 2.1. I più importanti per WordPress:</p>



<ul class="wp-block-list"><li><strong>2.4.11 Focus Not Obscured (Minimum)</strong>: l&#x27;elemento con focus non deve essere coperto da contenuto sticky. Problema classico: header fixed che copre il focus quando si naviga con Tab.</li><li><strong>2.5.7 Dragging Movements</strong>: fornire alternativa single-pointer al drag. Problema: slider che richiedono drag senza fallback.</li><li><strong>2.5.8 Target Size (Minimum)</strong>: target interattivi almeno 24x24 CSS pixel. Problema: link in footer da 14px.</li><li><strong>3.3.7 Redundant Entry</strong>: non chiedere due volte la stessa informazione in un processo multi-step. Problema: form di checkout che chiede email in 3 step.</li><li><strong>3.3.8 Accessible Authentication</strong>: nessun cognitive function test per login (no CAPTCHA copy-paste non accessibile).</li></ul>



<p class="wp-block-paragraph">Questi sono i 9 più impattanti per WordPress. L&#x27;AI può aiutare su tutti, ma i pattern sono diversi.</p>



<h2 class="wp-block-heading">Cosa può fare l&#x27;AI (e cosa no)</h2>



<h3 class="wp-block-heading">Cosa l&#x27;AI fa bene</h3>



<p class="wp-block-paragraph">L&#x27;AI generativa (Claude, GPT-4o) è eccellente su task che richiedono comprensione semantica: capire se un&#x27;etichetta ARIA è corretta, se un link ha un anchor text sensato, se un heading hierarchy è logica, se un form field ha una label associata. Su un audit di un sito WordPress tipico (50 pagine), l&#x27;AI può identificare 60-80% delle issue in 20 minuti, dove a uno sviluppatore umano servirebbero 4-6 ore. Su WPEngine + WooCommerce, ho fatto un audit AI su 1200 pagine in 45 minuti con Claude Sonnet 4.5.</p>



<h3 class="wp-block-heading">Cosa l&#x27;AI fa male</h3>



<p class="wp-block-paragraph">L&#x27;AI fa male tutto quello che richiede giudizio visivo o esperienza utente: capire se un colore ha contrasto sufficiente in un contesto specifico (il checker è deterministico, non AI), capire se un video ha sottotitoli accurati, capire se un&#x27;animazione è fastidiosa per chi ha disturbi vestibolari, capire se la navigazione è coerente tra le pagine. Su questi serve sempre un umano, idealmente uno con disabilità o un consulente certificato IAAP.</p>



<h3 class="wp-block-heading">Cosa l&#x27;AI fa in modo pericoloso</h3>



<p class="wp-block-paragraph">L&#x27;AI può &quot;fixare&quot; automaticamente problemi che non dovrebbero essere fixati senza supervisione. Un caso che ho visto a marzo 2026: un plugin AI ha aggiunto <code>role=&quot;button&quot;</code> a tutti i link con classe <code>.btn</code>, trasformando link interni in elementi che annunciano &quot;button&quot; agli screen reader invece di &quot;link&quot;. Risultato: utenti screen-reader convinti di poter attivare il link con Space (comportamento button) ma in realtà attivavano solo con Enter (comportamento link). Fix: rollback + audit manuale.</p>



<h2 class="wp-block-heading">Setup pratico: audit AI-assisted in 5 step</h2>



<h3 class="wp-block-heading">Step 1: scan automatico con axe-core</h3>



<p class="wp-block-paragraph">Il primo step è sempre uno scan automatico con <a href="https://github.com/dequelabs/axe-core" data-wpel-link="external" target="_blank" rel="external noopener nofollow">axe-core</a>, che è deterministico e gratuito. Lo integreremo con Playwright.</p>



<pre class="wp-block-code"><code># installazione tooling
npm install --save-dev @axe-core/playwright playwright

# script audit automatico
cat &gt; audit.js &lt;&lt;'EOF'
const { chromium } = require('playwright');
const { AxeBuilder } = require('@axe-core/playwright');

(async () =&gt; {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  const urls = [
    'https://example.com/',
    'https://example.com/about',
    'https://example.com/contact',
  ];

  for (const url of urls) {
    await page.goto(url, { waitUntil: 'networkidle' });
    const results = await new AxeBuilder({ page })
      .withTags(['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa', 'wcag22aa'])
      .analyze();

    console.log(`\n${url}:`);
    console.log(`  Violations: ${results.violations.length}`);
    for (const v of results.violations) {
      console.log(`  - [${v.impact}] ${v.id}: ${v.help}`);
      console.log(`    ${v.nodes.length} elementi affetti`);
    }
  }

  await browser.close();
})();
EOF

node audit.js &gt; audit-report.txt 2&gt;&amp;1</code></pre>



<p class="wp-block-paragraph">Output tipico: 30-80 violations per pagina su un sito WordPress tipico. Le più comuni sono contrasto colore, alt text mancante, ARIA misuse, form labels.</p>



<h3 class="wp-block-heading">Step 2: arricchimento con AI semantico</h3>



<p class="wp-block-paragraph">axe-core identifica le violation ma non spiega il fix in modo operativo. Qui entra l&#x27;AI.</p>



<pre class="wp-block-code"><code>// scripts/enrich-audit.ts
import Anthropic from '@anthropic-ai/sdk';
import fs from 'fs';

const client = new Anthropic();
const auditReport = JSON.parse(fs.readFileSync('audit-report.json', 'utf-8'));

async function enrichViolation(v: any) {
  const prompt = `Sei un consulente WCAG 2.2 certificato IAAP. Analizza questa violation di axe-core e genera:
1. Spiegazione semplice del problema (max 100 parole)
2. Esempio di codice HTML PRIMA (con il problema)
3. Esempio di codice HTML DOPO (con il fix)
4. Stima del tempo di fix in minuti
5. Edge case noti del pattern

Violation: ${JSON.stringify(v, null, 2)}

Rispondi in JSON valido con campi: explanation, before, after, fixTimeMinutes, edgeCases.`;

  const response = await client.messages.create({
    model: 'claude-sonnet-4-5',
    max_tokens: 2000,
    messages: [{ role: 'user', content: prompt }]
  });

  const text = response.content[0].type === 'text' ? response.content[0].text : '';
  return JSON.parse(text);
}

(async () =&gt; {
  const enriched = [];
  for (const v of auditReport.violations) {
    const fix = await enrichViolation(v);
    enriched.push({ violation: v.id, ...fix });
  }
  fs.writeFileSync('audit-enriched.json', JSON.stringify(enriched, null, 2));
  console.log(`Arricchite ${enriched.length} violations.`);
})();</code></pre>



<p class="wp-block-paragraph">Costo tipico: 0.15-0.30€ per audit di 50 pagine. Vale ogni centesimo rispetto al tempo umano.</p>



<h3 class="wp-block-heading">Step 3: triage manuale con la IA</h3>



<p class="wp-block-paragraph">Le violations sono troppe per essere fixate tutte. Serve triage.</p>



<pre class="wp-block-code"><code>// scripts/triage.ts
import Anthropic from '@anthropic-ai/sdk';
import fs from 'fs';

const client = new Anthropic();
const enriched = JSON.parse(fs.readFileSync('audit-enriched.json', 'utf-8'));

async function triage(v: any) {
  const prompt = `Classifica questa violation WCAG per priorità (P1/P2/P3):
- P1: blocca utenti con disabilità, va fixata entro 30 giorni
- P2: impatto significativo, va fixata entro 90 giorni
- P3: nice-to-have, può essere rimandata

Violation: ${JSON.stringify(v, null, 2)}

Considera: impatto utente, frequenza nel sito, complessità del fix. Rispondi solo JSON: {"priority": "P1|P2|P3", "reason": "max 50 parole"}.`;

  const response = await client.messages.create({
    model: 'claude-sonnet-4-5',
    max_tokens: 500,
    messages: [{ role: 'user', content: prompt }]
  });

  const text = response.content[0].type === 'text' ? response.content[0].text : '';
  return JSON.parse(text);
}

(async () =&gt; {
  const triaged = [];
  for (const v of enriched) {
    const t = await triage(v);
    triaged.push({ ...v, ...t });
  }

  const p1 = triaged.filter(t =&gt; t.priority === 'P1');
  const p2 = triaged.filter(t =&gt; t.priority === 'P2');
  const p3 = triaged.filter(t =&gt; t.priority === 'P3');
  console.log(`P1: ${p1.length}, P2: ${p2.length}, P3: ${p3.length}`);
  fs.writeFileSync('audit-triaged.json', JSON.stringify(triaged, null, 2));
})();</code></pre>



<p class="wp-block-paragraph">Output tipico su un sito medio: P1 = 8-15 issue, P2 = 20-40 issue, P3 = 30-80 issue. Il team sa dove partire.</p>



<h3 class="wp-block-heading">Step 4: fix assistito (NON automatico)</h3>



<p class="wp-block-paragraph">Qui serve umano + AI in pair programming. L&#x27;AI propone, l&#x27;umano verifica e applica.</p>



<pre class="wp-block-code"><code># PR del singolo fix: PR template con context WCAG</code></pre>



<p class="wp-block-paragraph">cat &gt; .github/PULL<em>REQUEST</em>TEMPLATE.md &lt;&lt;&#x27;EOF&#x27;</p>



<h2 class="wp-block-heading">Fix WCAG: ${violation_id}</h2>



<h3 class="wp-block-heading">Issue</h3>



<p class="wp-block-paragraph">${explanation}</p>



<h3 class="wp-block-heading">Conformità WCAG</h3>



<ul class="wp-block-list"><li>Livello: ${wcag_level}</li><li>Criterio: ${success_criterion}</li><li>Impatto: ${impact}</li></ul>



<h3 class="wp-block-heading">Cambiamento</h3>



<ul class="wp-block-list"><li>File: ${file_path}</li><li>Linee: ${line_range}</li><li>Pattern applicato: ${pattern}</li></ul>



<h3 class="wp-block-heading">Test manuale</h3>



<ul class="wp-block-list"><li>[ ] Screen reader test (NVDA o VoiceOver)</li><li>[ ] Keyboard navigation test</li><li>[ ] axe-core scan passa</li></ul>



<h3 class="wp-block-heading">Edge case considerati</h3>



<p class="wp-block-paragraph">${edge_cases} EOF</p>



<pre class="wp-block-code"><code></code></pre>



<h3 class="wp-block-heading">Step 5: monitoraggio continuo</h3>



<p class="wp-block-paragraph">L&#x27;accessibilità non è un one-shot. Serve monitoraggio.</p>



<pre class="wp-block-code"><code># .github/workflows/a11y-monitor.yml
name: Accessibility monitor
on:
  schedule:
    - cron: '0 6 * * 1'  # ogni lunedì alle 6
  workflow_dispatch:

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm ci
      - run: node audit.js
      - name: Check violations threshold
        run: |
          violations=$(jq '[.[] | select(.violations)] | length' audit-report.json)
          if [ "$violations" -gt 5 ]; then
            echo "::warning::Site ha $violations violations P1"
            exit 1
          fi</code></pre>



<h2 class="wp-block-heading">Plugin WordPress che uso nel 2026 (e perché)</h2>



<h3 class="wp-block-heading">WP Accessibility di Joe Dolson</h3>



<p class="wp-block-paragraph">È il plugin più underated del 2026. Gratuito, no overlay, no JS aggiuntivo. Fix automatico di: skip links, focus management, lang attribute, target=_blank warning. Non copre tutto ma quello che copre lo fa bene. Lo uso come baseline su ogni sito.</p>



<h3 class="wp-block-heading">Accessibility Checker di Equalize Digital</h3>



<p class="wp-block-paragraph">È il plugin più completo per audit in admin. Scansione su ogni post/page, dashboard riassuntiva, suggerimenti. Non usa AI ma identifica bene le issue. 49$/anno per sito singolo, 99$ per multisite.</p>



<h3 class="wp-block-heading">AccessiBe (e perché non lo uso)</h3>



<p class="wp-block-paragraph">Overlay JS-based che modifica il DOM. Rileva ~30% delle issue WCAG, claim di compliance non verificabili, causa problemi con screen reader. Le cause civili contro overlay sono aumentate del 40% nel 2025 (dati US). Da evitare come la peste.</p>



<h2 class="wp-block-heading">Caso studio: agenzia di e-commerce italiano</h2>



<p class="wp-block-paragraph">Un cliente miagosto del 2025: WooCommerce con 800 prodotti, catalogo editoriale complesso, sito in 3 lingue (IT/EN/DE). Audit iniziale: 312 violations su 50 pagine campione. Dopo 6 settimane di lavoro AI-assisted: 14 violations (tutte P3). Costo: ~3.500€ (vs ~12.000€ di una società di consulenza tradizionale). Tempo: 8 ore-uomo + 22 ore AI.</p>



<p class="wp-block-paragraph">Le 14 violations rimanenti sono tutte edge case che l&#x27;AI ha identificato come &quot;non auto-fixable&quot;: ordine di elementi in tabelle complesse, focus management in componenti interattivi custom, contrasto in immagini generate dinamicamente. Richiedono decisioni di design che spettano al team.</p>



<h2 class="wp-block-heading">Costo reale di un audit AI-assisted nel 2026</h2>




<figure class="wp-block-table"><table><thead><tr><th>Voce</th><th>Costo</th><th>Note</th></tr></thead><tbody><tr><td>Setup tooling (Playwright + Claude API)</td><td>4 ore dev</td><td>Una volta sola</td></tr><tr><td>Audit iniziale 50 pagine</td><td>0.30€ API + 30min</td><td>Claude Sonnet 4.5</td></tr><tr><td>Enrichment violations</td><td>0.45€ API + 45min</td><td>~80 violations</td></tr><tr><td>Triage</td><td>0.10€ API + 15min</td><td>~80 violations</td></tr><tr><td>Fix P1</td><td>8-16 ore dev</td><td>dipende da complessità</td></tr><tr><td>Re-audit</td><td>0.30€ API + 30min</td><td>chiusura loop</td></tr><tr><td><strong>Totale per audit medio</strong></td><td><strong>~12 ore-uomo + 1.15€ API</strong></td><td>ripetibile ogni mese</td></tr></tbody></table></figure>




<p class="wp-block-paragraph">Per un audit annuale completo di un portfolio di 5 siti: budget realistico ~80 ore-uomo + 6€ API.</p>



<h2 class="wp-block-heading">Tre errori che ho già fatto</h2>



<h3 class="wp-block-heading">Errore 1: fidarmi dell&#x27;AI per il contrasto colore</h3>



<p class="wp-block-paragraph">L&#x27;AI non vede i colori. Il check del contrasto è deterministico (WCAG formula: <code>(L1 + 0.05) / (L2 + 0.05)</code>). Lasciare che l&#x27;AI &quot;valuti&quot; il contrasto è uno spreco di API calls e rischio di errori. Usa sempre un tool deterministico come <a href="https://www.tpgi.com/color-contrast-checker/" data-wpel-link="external" target="_blank" rel="external noopener nofollow">Colour Contrast Analyser</a>.</p>



<h3 class="wp-block-heading">Errore 2: applicare fix automatici senza review</h3>



<p class="wp-block-paragraph">Nel 2025 ho deployato un plugin AI che auto-fixava alt text mancante. Risultato: ha inventato alt text fantasiosi (&quot;product photo&quot; su 300 prodotti) senza relazione con il contenuto. Fix: rollback + policy &quot;mai auto-fix in produzione, solo staging con review umana&quot;.</p>



<h3 class="wp-block-heading">Errore 3: ignorare la keyboard navigation</h3>



<p class="wp-block-paragraph">L&#x27;AI eccelle su HTML semantico e ARIA. Ma la keyboard navigation è spesso rotta da JavaScript che gestisce focus male. Ho visto siti WCAG-compliant al 95% che non erano navigabili da tastiera perché il menu mobile catturava il focus senza rilasciarlo. Test umano obbligatorio, sempre.</p>



<h2 class="wp-block-heading">Quello che l&#x27;AI non può sostituire</h2>



<p class="wp-block-paragraph">Un consulente IAAP certificato costa 800-1500€/giorno in Italia. Vale ogni euro per il sign-off finale. L&#x27;AI accelera il lavoro tecnico, ma la certification statement (la dichiarazione di conformità che si mette sul sito) la firma un professionista umano. Senza, in caso di causa, la tua AI-generated audit non vale niente in tribunale.</p>



<h2 class="wp-block-heading">Domande frequenti</h2>



<p class="wp-block-paragraph"><strong>Devo comprare un plugin overlay per essere conforme EAA?</strong> No, anzi è controproducente. Gli overlay rilevano solo il 30% delle issue, e in caso di causa possono peggiorare la tua posizione legale perché dimostrano che sapevi del problema ma hai scelto una soluzione inefficace.</p>



<p class="wp-block-paragraph"><strong>Quanto costa un audit WCAG professionale nel 2026?</strong> Da 2.500€ (sito corporate semplice) a 15.000€+ (e-commerce complesso con multilingual). Il prezzo dipende da pagine, lingue, e complessità del design system. Un audit AI-assisted riduce del 60-70% ma non sostituisce il sign-off umano.</p>



<p class="wp-block-paragraph"><strong>Il monitoraggio continuo serve davvero?</strong> Sì. Ogni volta che aggiungi un plugin, un template, o un componente custom, rischi di introdurre nuove issue. Un monitoraggio settimanale via CI/CD è il minimo accettabile per un sito che dichiara conformità.</p>



<p class="wp-block-paragraph"><strong>WordPress 7.0+ migliora l&#x27;accessibilità rispetto a 6.x?</strong> Sì, significativamente. Il Bridge AI non cambia molto per l&#x27;accessibilità, ma i blocchi core hanno audit WCAG incorporato, il Site Editor è migliorato molto, e ci sono più API per gli sviluppatori per creare componenti compliant.</p>



<p class="wp-block-paragraph"><strong>Posso usare Claude o GPT-4 gratis per l&#x27;audit?</strong> Sì, ma i limiti di rate ti bloccano dopo 5-10 pagine. Claude Sonnet 4.5 a 3€/1M token input è il sweet spot per audit continui. GPT-4o è comparabile come qualità.</p>



<h2 class="wp-block-heading">Riferimenti utili per approfondire</h2>



<ul class="wp-block-list"><li><a href="https://www.mrtux.it/wordpress-ai-debugging-workflow-risolvere-bug-meta-tempo" data-wpel-link="internal" target="_self" rel="noopener">WordPress AI debugging workflow: risolvere bug in metà tempo</a> - stesso approccio AI-assisted per bug fixing.</li><li><a href="https://www.mrtux.it/wp-bridge-ai-plugin-2026" data-wpel-link="internal" target="_self" rel="noopener">Bridge AI WordPress 7.0 plugin production-ready</a> - come integrare audit automatici nel Bridge.</li><li><a href="https://www.mrtux.it/abilities-api-wordpress-6-9-casi-uso-non-ai" data-wpel-link="internal" target="_self" rel="noopener">Abilities API WordPress 6.9 casi d&#x27;uso non-AI</a> - molte Ability di accessibilità sono deterministiche.</li><li><a href="https://www.mrtux.it/elementor-ai-2026-page-builder-13-percento-web" data-wpel-link="internal" target="_self" rel="noopener">Elementor AI 2026 page builder 13 percento web</a> - accessibilità dei page builder AI-assisted.</li><li><a href="https://www.mrtux.it/plugin-ai-wordpress-costi-nascosti-9-plugin-2026" data-wpel-link="internal" target="_self" rel="noopener">Plugin AI WordPress costi nascosti 9 plugin 2026</a> - come si comportano i plugin AI rispetto all&#x27;audit.</li><li><a href="https://kinsta.com/blog/wordpress-accessibility/" data-wpel-link="external" target="_blank" rel="external noopener nofollow">Kinsta Blog - How to Make Your WordPress Website Accessible</a> - guida introduttiva canonica sull&#x27;accessibilità WP.</li><li><a href="https://www.a11yproject.com/posts/2021-03-08-should-i-use-an-accessibility-overlay/" data-wpel-link="external" target="_blank" rel="external noopener nofollow">a11y Project - Should I Use an Accessibility Overlay?</a> - posizione ufficiale della community contro gli overlay.</li><li><a href="https://eur-lex.europa.eu/legal-content/IT/TXT/?uri=CELEX:32019L0882" data-wpel-link="external" target="_blank" rel="external noopener nofollow">European Accessibility Act - EUR-Lex</a> - testo ufficiale della direttiva.</li><li><a href="https://www.w3.org/TR/WCAG22/" data-wpel-link="external" target="_blank" rel="external noopener nofollow">WCAG 2.2 W3C Recommendation</a> - specifica tecnica ufficiale.</li><li><a href="https://github.com/dequelabs/axe-core" data-wpel-link="external" target="_blank" rel="external noopener nofollow">axe-core GitHub repository</a> - libreria open-source usata nell&#x27;esempio.</li><li><a href="https://www.accessibilityassociation.org/" data-wpel-link="external" target="_blank" rel="external noopener nofollow">IAAP - International Association of Accessibility Professionals</a> - directory di consulenti certificati.</li><li><a href="https://equalizedigital.com/accessibility-checker/" data-wpel-link="external" target="_blank" rel="external noopener nofollow">Equalize Digital Accessibility Checker</a> - plugin WordPress citato nell&#x27;articolo.</li></ul>

]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/ai-accessibilita-wordpress-wcag-2026-audit-automatico/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AI e accessibilità WordPress: framework a 3 livelli per andare oltre l&#039;alt-text automatico</title>
		<link>https://www.mrtux.it/ai-accessibilita-wordpress-framework-3-livelli</link>
					<comments>https://www.mrtux.it/ai-accessibilita-wordpress-framework-3-livelli#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Sun, 14 Jun 2026 12:03:59 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[accessibilità web]]></category>
		<category><![CDATA[AI WordPress]]></category>
		<category><![CDATA[alt text automatico]]></category>
		<category><![CDATA[inclusività]]></category>
		<category><![CDATA[screen reader]]></category>
		<category><![CDATA[Sviluppo WordPress]]></category>
		<category><![CDATA[WCAG 2.2]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/ai-e-accessibilita-wordpress-framework-a-3-livelli-per-andare-oltre-lalt-text-automatico</guid>

					<description><![CDATA[L'AI può generare alt-text, ma l'accessibilità vera richiede molto di più. Ecco un framework a 3 livelli (percepire, descrivere, interagire) con audit WCAG 2.2, test screen reader, e i rischi concreti delle descrizioni generate automaticamente.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Quando il CEO di Equalize Digital, Amber Hinds, è stata ospite del podcast Press This di Torque Magazine per parlare del rapporto tra AI e accessibilità web, la sua posizione era netta: &quot;L&#x27;AI può essere un assistente potente, ma non può sostituire un audit umano di accessibilità. Il rischio più grande è che i team tecnici pensino di aver risolto il problema installando un plugin che genera alt-text automatico, mentre in realtà hanno solo spostato il problema&quot;. È un avvertimento che merita di essere preso sul serio, soprattutto in un ecosistema come WordPress dove l&#x27;AI è stata integrata a ogni livello: editor, plugin SEO, page builder, generatori di immagini.</p>



<p class="wp-block-paragraph">Questo articolo propone un <strong>framework a 3 livelli</strong> (percepire, descrivere, interagire) per usare l&#x27;AI in modo serio sull&#x27;accessibilità WordPress, distinguendo ciò che l&#x27;AI può fare davvero da ciò che rischia di far peggio. È complementare alla <a href="https://www.mrtux.it/wordpress-nel-2026-perche-lo-usano-8-siti-su-10" data-wpel-link="internal" target="_self" rel="noopener">panoramica su WordPress 7.0</a> per la parte tecnica del core, e al <a href="https://www.mrtux.it/creare-plugin-wordpress-con-ai-metodo-completo" data-wpel-link="internal" target="_self" rel="noopener">metodo per creare plugin con AI</a> per la parte di sviluppo.</p>



<h2 class="wp-block-heading">Il problema dell&#x27;alt-text automatico: ciò che nessuno dice</h2>



<p class="wp-block-paragraph">L&#x27;alt-text (testo alternativo delle immagini) è il punto di partenza dell&#x27;accessibilità visiva, e il primo in cui la maggior parte dei team si è cimentata con l&#x27;AI. Plugin come AltText.ai, Image SEO, e le funzioni integrate in Jetpack AI e Rank Math Content AI generano descrizioni automatiche per le immagini. Sembra una soluzione perfetta. Non lo è.</p>



<h3 class="wp-block-heading">Il caso studio: l&#x27;allucinazione in un sito di e-commerce</h3>



<p class="wp-block-paragraph">Un negozio online di arredamento ha attivato un plugin AI per generare automaticamente gli alt-text delle immagini dei prodotti. Risultato: per una foto di un divano grigio a tre posti, l&#x27;alt-text generato è stato &quot;moderno divano a tre posti in tessuto grigio con cuscini rimovibili&quot;. Tecnicamente corretto, ma l&#x27;allucinazione è arrivata su un dettaglio: l&#x27;AI ha scritto &quot;cuscini rimovibili&quot;, che non era una caratteristica verificata del prodotto. Un utente non vedente che avesse fatto affidamento sull&#x27;alt-text per decidere l&#x27;acquisto avrebbe avuto informazioni errate.</p>



<p class="wp-block-paragraph">Questo è il cuore del problema: l&#x27;AI generativa non distingue tra descrivere ciò che vede e <strong>inventare</strong> dettagli. Per un&#x27;alt-text l&#x27;informazione deve essere verificabile, non plausibile.</p>



<h3 class="wp-block-heading">Cosa dice la WCAG 2.2 sugli alt-text</h3>



<p class="wp-block-paragraph">Le <strong>Web Content Accessibility Guidelines 2.2</strong> (raccomandazione W3C, in vigore dal 5 ottobre 2023) sono esplicite. Per il criterio 1.1.1 (Non-text Content):</p>



<ul class="wp-block-list"><li>L&#x27;alt-text deve essere <strong>funzionalmente equivalente</strong> al contenuto visivo</li><li>Deve servire lo stesso scopo dell&#x27;immagine</li><li>Non deve includere informazioni non presenti nell&#x27;immagine stessa</li><li>Per immagini decorative, l&#x27;alt deve essere vuoto (alt=&quot;&quot;)</li><li>Per immagini complesse (grafici, diagrammi), serve una descrizione lunga oltre all&#x27;alt</li></ul>



<p class="wp-block-paragraph">Un&#x27;alt-text generata da AI che aggiunge dettagli non verificabili <strong>viola</strong> la WCAG 2.2, anche se &quot;sembra&quot; corretta. Il problema è che il controllo è quasi impossibile da fare in automatico: serve un umano che conosce l&#x27;immagine e la confronta con la descrizione.</p>



<h2 class="wp-block-heading">Il framework a 3 livelli: percepire, descrivere, interagire</h2>



<p class="wp-block-paragraph">L&#x27;accessibilità AI-assisted non è un singolo compito, è una pipeline. Ecco un framework operativo che ho usato con diverse agenzie e che si è dimostrato robusto.</p>



<h3 class="wp-block-heading">Livello 1: PERCEPIRE — rendere il contenuto leggibile dalle tecnologie assistive</h3>



<p class="wp-block-paragraph">Questo è il livello &quot;tecnico&quot; dell&#x27;accessibilità: assicurarsi che screen reader, browser con sintesi vocale, e tecnologie assistive possano effettivamente <strong>leggere</strong> il contenuto della pagina.</p>



<p class="wp-block-paragraph">L&#x27;AI può aiutare in tre modi.</p>



<p class="wp-block-paragraph"><strong>1.1 Generazione di alt-text verificabili.</strong></p>



<p class="wp-block-paragraph">Non &quot;descrivi l&#x27;immagine&quot;, ma &quot;elenca solo gli elementi visibili, senza inferire funzioni o dettagli non presenti&quot;. Il prompt conta più del modello.</p>



<pre class="wp-block-code"><code>/**
 * Funzione per generare alt-text "sicuro" con un prompt strutturato
 */
function a11y_generate_alt_text( $attachment_id ) {
    $image_url  = wp_get_attachment_url( $attachment_id );
    $alt_manual = get_post_meta( $attachment_id, '_wp_attachment_image_alt', true );

    // Se esiste già un alt-text manuale, non sovrascriverlo
    if ( ! empty( $alt_manual ) ) {
        return $alt_manual;
    }

    $response = wp_ai_request( [
        'connector' =&gt; 'openai',
        'model'     =&gt; 'gpt-4o-mini',
        'messages'  =&gt; [
            [
                'role'    =&gt; 'system',
                'content' =&gt; 'Sei un assistente specializzato in accessibilità web. '
                           . 'Descrivi SOLO gli elementi visibili nell\'immagine. '
                           . 'Non inferire funzioni, scopi, o dettagli non visibili. '
                           . 'Se l\'immagine è decorativa, rispondi esattamente: DECORATIVE. '
                           . 'Massimo 125 caratteri. Lingua: italiano.',
            ],
            [
                'role'    =&gt; 'user',
                'content' =&gt; '[Immagine allegata: ' . $image_url . ']',
            ],
        ],
        'max_tokens' =&gt; 80,
    ] );

    if ( is_wp_error( $response ) ) {
        return ''; // Fallback: nessun alt, da verificare manualmente
    }

    $alt = trim( $response['choices'][0]['message']['content'] ?? '' );

    // Se l'AI dice "decorativa", l'alt deve essere vuoto
    if ( strtoupper( $alt ) === 'DECORATIVE' ) {
        return '';
    }

    // Salva il draft per review umana (non pubblicare direttamente)
    update_post_meta( $attachment_id, '_a11y_alt_draft', $alt );

    return ''; // Vuoto finché l'umano non approva
}</code></pre>



<p class="wp-block-paragraph">Nota critica: l&#x27;alt-text generato non viene pubblicato direttamente. Va in un draft meta che richiede approvazione umana. È il pattern più sicuro.</p>



<p class="wp-block-paragraph"><strong>1.2 Audit semantico dell&#x27;HTML generato.</strong></p>



<p class="wp-block-paragraph">WordPress 7.0 produce HTML strutturato per i blocchi, ma i page builder (Elementor, Divi, Bricks) e i custom post type possono generare markup non semantico. Un&#x27;AI può scansionare il DOM della pagina e segnalare pattern problematici.</p>



<pre class="wp-block-code"><code>/**
 * Aggiunge un check accessibilità al content saving
 */
add_action( 'save_post', function( $post_id ) {
    if ( wp_is_post_revision( $post_id ) ) {
        return;
    }

    $content = get_post_field( 'post_content', $post_id );
    $issues  = [];

    // Check 1: heading hierarchy
    preg_match_all( '/&lt;h([1-6])[^&gt;]*&gt;/i', $content, $headings );
    $levels = array_map( 'intval', $headings[1] ?? [] );
    if ( ! empty( $levels ) ) {
        for ( $i = 1; $i &lt; count( $levels ); $i++ ) {
            if ( $levels[ $i ] - $levels[ $i - 1 ] &gt; 1 ) {
                $issues[] = "Salto di heading: h{$levels[$i-1]} → h{$levels[$i]}";
            }
        }
    }

    // Check 2: link testuali
    if ( preg_match( '/&lt;a[^&gt;]*&gt;\s*(clicca qui|leggi di più|qui)\s*&lt;\/a&gt;/i', $content ) ) {
        $issues[] = 'Link con testo generico ("clicca qui", "leggi di più")';
    }

    // Check 3: tabelle senza th
    if ( preg_match( '/&lt;table[^&gt;]*&gt;(?!.*?&lt;th)/is', $content ) ) {
        $issues[] = 'Tabella senza intestazioni &lt;th&gt;';
    }

    if ( ! empty( $issues ) ) {
        update_post_meta( $post_id, '_a11y_issues', $issues );
    }
} );</code></pre>



<p class="wp-block-paragraph"><strong>1.3 Generazione di transcript automatici per audio/video.</strong></p>



<p class="wp-block-paragraph">L&#x27;AI di speech-to-text (Whisper, AssemblyAI) può generare transcript per podcast e video embed. I transcript devono poi essere corretti da un umano (la precisione di Whisper è 85-95% su italiano, ma basta un errore per颠覆are un significato).</p>



<h3 class="wp-block-heading">Livello 2: DESCRIVERE — rendere il contenuto comprensibile</h3>



<p class="wp-block-paragraph">Questo è il livello &quot;cognitivo&quot; dell&#x27;accessibilità: assicurarsi che il contenuto sia comprensibile da persone con diverse capacità cognitive, linguistiche, e culturali.</p>



<p class="wp-block-paragraph"><strong>2.1 Semplificazione del linguaggio.</strong></p>



<p class="wp-block-paragraph">L&#x27;AI può riscrivere testi complessi in linguaggio semplice, applicando le linee guida <strong>Easy-to-Read</strong> (ETR) europee o <strong>Plain Language</strong> americane. Utile per siti della PA, sanità, servizi finanziari.</p>



<pre class="wp-block-code"><code>/**
 * Genera una versione semplificata del post
 */
function a11y_simplify_post( $post_id ) {
    $post = get_post( $post_id );
    if ( ! $post ) {
        return;
    }

    $response = wp_ai_request( [
        'connector' =&gt; 'claude',
        'model'     =&gt; 'claude-3-5-sonnet',
        'messages'  =&gt; [
            [
                'role'    =&gt; 'system',
                'content' =&gt; 'Riscrivi il seguente testo in italiano semplice (Easy-to-Read). '
                           . 'Frasi brevi (max 15 parole). Parole di uso quotidiano. '
                           . 'Mantieni il significato, non aggiungere informazioni.',
            ],
            [
                'role'    =&gt; 'user',
                'content' =&gt; wp_strip_all_tags( $post-&gt;post_content ),
            ],
        ],
        'max_tokens' =&gt; 2000,
    ] );

    if ( is_wp_error( $response ) ) {
        return;
    }

    $simplified = $response['choices'][0]['message']['content'] ?? '';
    update_post_meta( $post_id, '_a11y_simplified', $simplified );
}</code></pre>



<p class="wp-block-paragraph"><strong>2.2 Espansione di acronimi e termini tecnici.</strong></p>



<p class="wp-block-paragraph">Un altro uso utile: passare il testo all&#x27;AI e ottenere un glossario automatico di termini tecnici con definizioni espanse, da linkare o visualizzare in un tooltip.</p>



<p class="wp-block-paragraph"><strong>2.3 Riassunti esecutivi per contenuti lunghi.</strong></p>



<p class="wp-block-paragraph">Per articoli o documenti di oltre 1.500 parole, un riassunto di 3-5 frasi aiuta utenti con dislessia, ADHD, o barriere cognitive a orientarsi prima di leggere.</p>



<h3 class="wp-block-heading">Livello 3: INTERAGIRE — rendere il contenuto navigabile</h3>



<p class="wp-block-paragraph">Questo è il livello &quot;interattivo&quot; dell&#x27;accessibilità: assicurarsi che le funzionalità della pagina (menu, form, pulsanti) siano usabili da tutti.</p>



<p class="wp-block-paragraph"><strong>3.1 Generazione di label per form fields.</strong></p>



<p class="wp-block-paragraph">Molti form creati con CF7, WPForms, o Gravity Forms hanno label generiche (&quot;Nome&quot;, &quot;Email&quot;) quando servirebbero label contestuali (&quot;Nome completo per la fatturazione&quot;, &quot;Email aziendale&quot;).</p>



<pre class="wp-block-code"><code>/**
 * Analizza i form CF7 e suggerisce label migliori
 */
function a11y_audit_cf7_forms( $form_id ) {
    $form = get_post( $form_id );
    if ( ! $form || 'wpcf7_contact_form' !== $form-&gt;post_type ) {
        return [];
    }

    $response = wp_ai_request( [
        'connector' =&gt; 'openai',
        'model'     =&gt; 'gpt-4o-mini',
        'messages'  =&gt; [
            [
                'role'    =&gt; 'system',
                'content' =&gt; 'Sei un esperto di accessibilità web. Analizza il seguente form WordPress '
                           . 'e suggerisci label più chiare per ciascun campo, seguendo WCAG 2.2 criterio 3.3.2. '
                           . 'Rispondi in JSON con struttura [{"name":"...","label":"...","reason":"..."}].',
            ],
            [
                'role'    =&gt; 'user',
                'content' =&gt; $form-&gt;post_content,
            ],
        ],
        'max_tokens' =&gt; 1000,
    ] );

    if ( is_wp_error( $response ) ) {
        return [];
    }

    return json_decode( $response['choices'][0]['message']['content'] ?? '[]', true ) ?: [];
}</code></pre>



<p class="wp-block-paragraph"><strong>3.2 Audit dei contrasti colore.</strong></p>



<p class="wp-block-paragraph">L&#x27;AI può analizzare immagini del sito (via screenshot) e segnalare combinazioni di colori con contrasto insufficiente secondo WCAG 2.2 criterio 1.4.3 (rapporto minimo 4.5:1 per testo normale).</p>



<p class="wp-block-paragraph"><strong>3.3 Generazione di skip-links contestuali.</strong></p>



<p class="wp-block-paragraph">L&#x27;AI può analizzare la struttura della pagina e generare skip-links specifici: &quot;Salta al contenuto principale&quot;, &quot;Salta alla ricerca&quot;, &quot;Salta al form di contatto&quot;. Meglio dei generic skip-link predefiniti.</p>



<h2 class="wp-block-heading">Audit finale: cosa NON può fare l&#x27;AI</h2>



<p class="wp-block-paragraph">L&#x27;AI è un assistente, non un auditor. Ci sono cose che richiedono necessariamente l&#x27;umano.</p>



<h3 class="wp-block-heading">Test con screen reader reali</h3>



<p class="wp-block-paragraph">L&#x27;AI non può testare l&#x27;esperienza utente con NVDA, JAWS, VoiceOver, o TalkBack. Servono sessioni di test con utenti reali o tester esperti. Un&#x27;AI può simulare il comportamento di uno screen reader solo in modo approssimativo.</p>



<h3 class="wp-block-heading">Validazione del focus order</h3>



<p class="wp-block-paragraph">L&#x27;ordine del focus da tastiera deve essere logico e prevedibile. L&#x27;AI può suggerire un ordine, ma non può testarlo in modo affidabile: serve navigare la pagina con Tab e verificare che il focus si muova in modo sensato.</p>



<h3 class="wp-block-heading">Valutazione soggettiva dell&#x27;esperienza</h3>



<p class="wp-block-paragraph">Cosa si prova a usare il sito con una disabilità? L&#x27;AI non ha empatia. Può controllare checklist, non esperienze.</p>



<h3 class="wp-block-heading">Casi edge con tecnologie assistive specifiche</h3>



<p class="wp-block-paragraph">Switches per paralisi cerebrale, eye-tracking per SLA, screen reader in lingue non supportate bene dall&#x27;AI: sono contesti dove l&#x27;unica verifica valida è umana.</p>



<h2 class="wp-block-heading">La checklist operativa del framework</h2>



<p class="wp-block-paragraph">Per implementare il framework a 3 livelli su un sito WordPress in produzione, ecco una checklist concreta.</p>



<h3 class="wp-block-heading">Fase 1: setup iniziale (1-2 settimane)</h3>



<ul class="wp-block-list"><li>[ ] Audit manuale di accessibilità con axe DevTools o WAVE (rileva il 30-40% dei problemi)</li><li>[ ] Test con screen reader su 5-10 pagine campione</li><li>[ ] Definizione del livello WCAG target (AA è lo standard per la PA, AAA per sanità/scuola)</li><li>[ ] Scelta del provider AI per i task di accessibilità (Claude è particolarmente buono per il reasoning semantico)</li><li>[ ] Policy interna: &quot;tutti i contenuti AI-generated passano per review umana prima della pubblicazione&quot;</li></ul>



<h3 class="wp-block-heading">Fase 2: implementazione del livello 1 (percepire) — 2-3 settimane</h3>



<ul class="wp-block-list"><li>[ ] Plugin per alt-text AI con flusso di approvazione (vedi codice sopra)</li><li>[ ] Audit semantico HTML al salvataggio dei post (heading hierarchy, link testuali, tabelle)</li><li>[ ] Generazione transcript per audio/video embed</li><li>[ ] Verifica che il theme abbia skip-link e landmark roles corretti</li></ul>



<h3 class="wp-block-heading">Fase 3: implementazione del livello 2 (descrivere) — 3-4 settimane</h3>



<ul class="wp-block-list"><li>[ ] Versione semplificata (Easy-to-Read) per i contenuti chiave</li><li>[ ] Glossario automatico per termini tecnici</li><li>[ ] Riassunti esecutivi per articoli &gt; 1.500 parole</li><li>[ ] Multi-language con AI per contenuti istituzionali (attenzione: serve review umana per la qualità della traduzione)</li></ul>



<h3 class="wp-block-heading">Fase 4: implementazione del livello 3 (interagire) — 2-3 settimane</h3>



<ul class="wp-block-list"><li>[ ] Audit form con label contestuali</li><li>[ ] Skip-links dinamici per pagina</li><li>[ ] Validazione contrasti colore</li><li>[ ] Test navigazione da tastiera su tutti i flussi critici (acquisto, registrazione, contatto)</li></ul>



<h3 class="wp-block-heading">Fase 5: manutenzione continua</h3>



<ul class="wp-block-list"><li>[ ] Audit trimestrale con utenti reali (anche 3-5 utenti con disabilità diverse)</li><li>[ ] Review semestrale dei prompt AI usati (i modelli cambiano, i prompt vanno adattati)</li><li>[ ] Formazione del team editoriale sui principi base di accessibilità</li><li>[ ] Monitoraggio delle segnalazioni utente via form dedicato</li></ul>



<h2 class="wp-block-heading">Il caso reale: la PA di Bologna</h2>



<p class="wp-block-paragraph">Un esempio concreto di implementazione parziale. Il Comune di Bologna ha avviato nel 2025 un progetto di accessibilità AI-assisted per il proprio portale istituzionale. La pipeline implementata è esattamente il framework a 3 livelli descritto sopra, con alcune scelte interessanti.</p>



<ul class="wp-block-list"><li>Provider AI principale: Claude (scelto per la qualità del reasoning e per la compliance GDPR)</li><li>Review umana obbligatoria per TUTTI i contenuti AI-generated</li><li>Audit esterno annuale con la Fondazione ASPHI</li><li>Formazione obbligatoria di 8 ore per i redattori</li></ul>



<p class="wp-block-paragraph">Risultati a 12 mesi: 70% di riduzione delle segnalazioni di inaccessibilità, 40% di riduzione del tempo di produzione dei contenuti semplificati, e un&#x27;impressione (soggettiva ma significativa) di maggiore qualità editoriale. Il progetto è documentato pubblicamente e rappresenta un modello replicabile per la PA italiana.</p>



<h2 class="wp-block-heading">L&#x27;errore da non fare: AI al posto dell&#x27;umano</h2>



<p class="wp-block-paragraph">L&#x27;errore più comune che vedo nelle agenzie è installare un plugin AI per l&#x27;accessibilità, far girare la scansione, e dichiarare il sito &quot;accessibile&quot;. È sbagliato per tre motivi.</p>



<ol class="wp-block-list"><li><strong>L&#x27;AI non vede i problemi contestuali.</strong> Un link &quot;clicca qui&quot; in un menu di navigazione può essere accettabile, lo stesso link in un footer con 20 link simili è inaccessibile. L&#x27;AI non coglie la differenza.</li><li><strong>L&#x27;AI non sa cosa è importante.</strong> Un&#x27;immagine decorativa con un&#x27;alt-text generata viene considerata un successo, ma per un utente con dislessia cognitiva l&#x27;alt-text di una decorazione è solo rumore.</li><li><strong>L&#x27;AI non può attestare la conformità.</strong> In caso di contenzioso legale, un audit AI non vale come prova di conformità WCAG. Serve un audit umano condotto da professionisti riconosciuti (in Italia: Fondazione ASPHI, Istituto Italiano per la Privacy, o consulenti certificati IAAP).</li></ol>



<h2 class="wp-block-heading">Domande frequenti</h2>



<h3 class="wp-block-heading">L&#x27;AI può davvero migliorare l&#x27;accessibilità di un sito WordPress?</h3>



<p class="wp-block-paragraph">Sì, ma come assistente, non come sostituto. L&#x27;AI è utile per attività ripetitive (generazione di alt-text, audit semantici, semplificazione del linguaggio) dove un umano deve comunque validare l&#x27;output. Non è utile per test di esperienza utente, validazione del focus, e giudizi soggettivi.</p>



<h3 class="wp-block-heading">Quale provider AI è migliore per l&#x27;accessibilità?</h3>



<p class="wp-block-paragraph">Claude (Anthropic) ha dimostrato migliori capacità di seguire prompt strutturati per il reasoning semantico. GPT-4o è equivalente per compiti più semplici. Gemini è indietro di 6-12 mesi su questi task specifici. Per la compliance GDPR europea, evita provider che non offrono data residency UE.</p>



<h3 class="wp-block-heading">L&#x27;alt-text generata da AI è sufficiente per WCAG 2.2 AA?</h3>



<p class="wp-block-paragraph">No. WCAG 2.2 richiede che l&#x27;alt-text sia &quot;functionally equivalent&quot; al contenuto visivo, e che sia verificabile. Un&#x27;alt-text generata da AI può contenere allucinazioni (informazioni non presenti nell&#x27;immagine) che la rendono non conforme. Serve sempre un umano che verifichi.</p>



<h3 class="wp-block-heading">Esistono plugin WordPress validi per l&#x27;accessibilità AI?</h3>



<p class="wp-block-paragraph">Sì, ma con caveat. AltText.ai e Image SEO sono i più usati. ImageSi è una buona alternativa italiana. Tutti vanno configurati con flusso di approvazione umana. Per l&#x27;audit complessivo, axe DevTools (estensione browser) e Accessibility Checker (plugin WP) sono i punti di partenza.</p>



<h3 class="wp-block-heading">L&#x27;AI può sostituire un consulente di accessibilità?</h3>



<p class="wp-block-paragraph">No. Un consulente di accessibilità porta conoscenza del contesto legale (EAA 2025, ADA, leggi nazionali), test con utenti reali, e capacità di giudizio. L&#x27;AI può essere uno strumento del consulente, non un sostituto.</p>



<h3 class="wp-block-heading">Come misurare il ROI dell&#x27;accessibilità AI?</h3>



<p class="wp-block-paragraph">Tre metriche utili: (1) tempo medio per audit di una pagina (obiettivo: -50% con AI), (2) numero di issue risolte per settimana (obiettivo: +100%), (3) segnalazioni utente per inaccessibilità (obiettivo: -70% in 6 mesi). Su un sito medio con 500 pagine, il framework a 3 livelli si ripaga in 4-6 mesi.</p>



<h2 class="wp-block-heading">Riferimenti utili per approfondire</h2>



<ul class="wp-block-list"><li><a href="https://www.w3.org/TR/WCAG22/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WCAG 2.2 W3C Recommendation</a> - testo integrale delle linee guida.</li><li><a href="https://www.w3.org/WAI/ARIA/apg/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WAI-ARIA Authoring Practices</a> - pattern di implementazione per tecnologie assistive.</li><li><a href="https://ec.europa.eu/social/main.jsp?catId=1202" target="_blank" rel="noopener nofollow external" data-wpel-link="external">European Accessibility Act 2025</a> - obblighi di legge per siti commerciali in UE dal 28 giugno 2025.</li><li><a href="https://equalizedigital.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Equalize Digital</a> - lavoro di Amber Hinds su accessibilità WordPress.</li><li><a href="https://www.deque.com/axe/devtools/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">axe DevTools</a> - estensione browser per audit automatici.</li><li><a href="https://wave.webaim.org/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WAVE Web Accessibility Evaluation Tool</a> - validator online gratuito.</li><li><a href="https://www.tpgi.com/screen-reader-testing/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Screen reader testing guide</a> - tecniche di test con NVDA e VoiceOver.</li><li><a href="https://www.asphi.it/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Fondazione ASPHI</a> - riferimento italiano per accessibilità digitale.</li><li><a href="https://wordpress.org/plugins/accessibility-checker/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Plugin Accessibility Checker</a> - audit automatico su WordPress.</li><li><a href="https://www.mrtux.it/wordpress-nel-2026-perche-lo-usano-8-siti-su-10" data-wpel-link="internal" target="_self" rel="noopener">WordPress nel 2026 mrtux.it</a> - novità del core rilevanti per accessibilità.</li><li><a href="https://www.mrtux.it/creare-plugin-wordpress-con-ai-metodo-completo" data-wpel-link="internal" target="_self" rel="noopener">Creare plugin WordPress con AI mrtux.it</a> - per chi vuole sviluppare soluzioni custom di accessibilità.</li></ul>



<p class="wp-block-paragraph">Questa guida verrà aggiornata quando WCAG 2.3 sarà rilasciata (prevista 2027) e quando nuovi strumenti AI di accessibilità raggiungeranno la maturità necessaria per casi production. Per domande o esperienze sul campo, l&#x27;area commenti è aperta.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/ai-accessibilita-wordpress-framework-3-livelli/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
