Accessibility Statement and EN 301 549 Self Check by TheSEO
Toetst je WordPress-site op de machinaal toetsbare punten van EN 301 549 en schrijft een toegankelijkheidsverklaring die klopt met de meting. Geen overlay. Gratis GPL-plugin van theseo.nl.
by TheSEO · github.com/gianlucanaarden/theseo-toegankelijkheidsverklaring · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/gianlucanaarden/theseo-toegankelijkheidsverklaring/releases/download/v1.0.0/theseo-toegankelijkheidsverklaring-1.0.0.zipReadme
Accessibility Statement and EN 301 549 Self Check
Een WordPress-plugin van TheSEO die twee dingen doet die vandaag vrijwel nooit samen gedaan worden: hij toetst je site op de punten uit EN 301 549 die je machinaal kunt toetsen, en hij schrijft daarna een toegankelijkheidsverklaring die klopt met wat er werkelijk gemeten is.
Geen overlay. Geen widget. Geen knop die beweert je site toegankelijk te maken. De plugin wijst aan waar het misgaat, in de opmaak, en jij herstelt het daar.
Interface in het Nederlands en in het Engels. De verklaring in het Nederlands of in het Engels, los daarvan in te stellen.
Waarom deze plugin bestaat
De Europese toegankelijkheidsrichtlijn geldt sinds 28 juni 2025 voor onder meer webshops en online diensten aan consumenten. De pluginmap van WordPress staat vol met overlay-widgets, en juist die aanpak wordt door de toegankelijkheidswereld afgeraden: een overlay lost het onderliggende probleem niet op, hij legt er iets overheen.
Wat er nauwelijks is, is het document zelf. De verklaring die de richtlijn vraagt, gebouwd op een echte meting, in het Nederlands. Dat is wat hier zit.
Wat hij toetst
Achttien regels: tien die iemand blokkeren en acht die aandacht verdienen. Samen raken ze twaalf succescriteria van WCAG 2.2. Hoofdstuk 9 van EN 301 549 neemt de WCAG-criteria een op een over, dus criterium 1.1.1 is punt 9.1.1.1 van de norm. Beide nummers staan bij elke bevinding.
| Wat | Zwaarte | WCAG |
|---|---|---|
| afbeelding zonder tekstalternatief | blokkerend | 1.1.1 |
| tekstalternatief dat een bestandsnaam is | aandachtspunt | 1.1.1 |
| klikbaar gebied van een afbeeldingskaart zonder alt | blokkerend | 1.1.1 |
| ingesloten object zonder terugval | aandachtspunt | 1.1.1 |
| lege kop | blokkerend | 1.3.1 |
| kopniveau overgeslagen | aandachtspunt | 1.3.1 |
| tabel zonder koppencellen | aandachtspunt | 1.3.1 |
| geluid dat vanzelf begint | blokkerend | 1.4.2 |
| zoomen uitgezet of begrensd | blokkerend | 1.4.4 |
| pagina zonder titel | blokkerend | 2.4.2 |
| positieve tabindex | aandachtspunt | 2.4.3 |
| link zonder naam | blokkerend | 2.4.4 |
| linktekst die niets zegt | aandachtspunt | 2.4.4 |
| link opent in een nieuw venster zonder waarschuwing | aandachtspunt | 3.2.5 |
| paginataal niet ingesteld | blokkerend | 3.1.1 |
| formulierveld zonder label | blokkerend | 3.3.2 |
| dezelfde id twee keer | aandachtspunt | 4.1.1 |
| frame zonder naam | blokkerend | 4.1.2 |
Criterium 4.1.1 is in WCAG 2.2 ingetrokken en telt onder EN 301 549 nog zolang die norm naar WCAG 2.1 wijst. Daarom staat het hier als aandachtspunt en niet als blokkerende bevinding, en die reden staat ook naast de bevinding zelf.
Wat hij niet toetst, en dat op elk scherm zegt
Een machinale toets dekt een deel van toegankelijkheid en niet meer. Hij ziet een ontbrekend tekstalternatief. Hij kan niet beoordelen of dat alternatief de afbeelding beschrijft, of je site met alleen een toetsenbord te bedienen is, of het contrast klopt, of een foutmelding zichzelf uitlegt, of een zelfgebouwde component zich gedraagt zoals hij zich aankondigt.
Een verklaring die alleen op deze meting leunt is onvolledig. Die zin staat in de verklaring zelf, op het overzicht en op het instellingenscherm. Testen met mensen die hulpsoftware gebruiken en een beoordeling door een deskundige zijn de delen die ontbreken.
Installeren
- Download
theseo-toegankelijkheidsverklaring-1.0.0.zip. - WordPress, Plugins, Nieuwe plugin, Plugin uploaden, activeren.
- Instellingen, Toegankelijkheid.
Eisen: WordPress 6.0 of nieuwer, PHP 7.4 of nieuwer, en de DOM-uitbreiding van PHP. Ontbreekt die uitbreiding, dan blijft de plugin uit en zegt hij dat met een melding in plaats van halverwege de eerste controle stuk te gaan.
Wat hij opslaat
Twee tabellen in je eigen database.
{prefix}theseo_ta_bevindingen houdt per bevinding het post-id, de regelcode, de
zwaarte, een korte verwijzing naar het element, het stukje html afgekapt op 300
tekens, en het moment van meten. {prefix}theseo_ta_scans houdt per controle het
moment, de stand waarin er gelezen is en de tellers. De velden van de verklaring
staan in een enkele optie.
Geen persoonsgegevens. Geen bezoekersdata. Geen IP-adres, geen cookie, niets in localStorage of sessionStorage, geen user agent. De plugin kijkt helemaal niet naar je bezoekers; hij leest je eigen inhoud.
Deactiveren laat de bevindingen staan en stopt alleen de automatische controle.
Verwijderen laat uninstall.php beide tabellen, de optie en de geplande taak
opruimen, op elke site van een multisite. De verklaringspagina blijft staan, want
die is van jou.
Het enige verzoek dat ooit je server verlaat
De controle leest of alleen de inhoud van een item, dus wat de editor oplevert, of de hele pagina inclusief de kop, het menu en de voettekst van je thema. Drie van de achttien regels zijn alleen op een hele pagina te beoordelen: de paginataal, de paginatitel en de viewport.
Die hele pagina zien kan maar op een manier, en dat is je eigen site via http om de pagina vragen. Dat verzoek gaat naar je eigen domein en nergens anders heen. De stand alleen de inhoud is de standaard, en in die stand is er geen enkel uitgaand verzoek. Sommige hostingpartijen blokkeren dat een site zichzelf aanroept; het overzicht meldt dan hoeveel items niet gelezen konden worden, in plaats van ze stilletjes als schoon te tellen.
De verklaring
Het tabblad Verklaring vraagt om wat een verklaring nodig heeft: naam van de organisatie, waar iemand een probleem meldt, wat er gebeurt als jij niet reageert, de datum van de beoordeling en wie hem uitvoerde. Daarna kies je per regel die ergens op de site echt gebroken is een van drie antwoorden: opgelost, bekend en wordt aan gewerkt, of onevenredige last met jouw motivering erbij.
De tekst wordt uit die antwoorden en uit de meting opgebouwd, en uit niets anders. Je ziet hem volledig op het scherm voordat er iets wordt weggeschreven. De knop bewaart hem als conceptpagina. Er wordt nooit iets voor je gepubliceerd. Bestaat de pagina al, dan wordt hij herschreven en houdt hij de status die hij had.
Een Nederlandse overheidsinstantie heeft een ander document nodig en moet zijn verklaring in het landelijke register publiceren, in het voorgeschreven model. Dit is dat model niet en het vervangt het niet. Dat staat op het scherm voordat je iets invult.
Mappen
theseo-toegankelijkheidsverklaring/
theseo-toegankelijkheidsverklaring.php kopregels, constanten, twee guards
uninstall.php ruimt beide tabellen en de optie op
readme.txt voor de WordPress-pluginmap
includes/
class-tstv-rules.php de achttien regels, hun tekst en zwaarte
class-tstv-scanner.php leest html, kent WordPress niet
class-tstv-runner.php loopt over de items, kent html niet
class-tstv-repository.php alle query's op een plek
class-tstv-install.php de twee tabellen en de geplande taak
class-tstv-settings.php instellingen, gevalideerd in en uit
class-tstv-statement.php bouwt de verklaring als blokopmaak
class-tstv-admin.php de drie tabbladen en twee ajax-routes
class-tstv-plugin.php elke hook op een plek
assets/
css/tstv-admin.css
js/tstv-admin.js draait de controle in stappen
languages/ pot, nl_NL.po en nl_NL.mo
Veiligheid
Nonce en current_user_can( 'manage_options' ) op elke schrijfactie en op beide
ajax-routes. Alle uitvoer ontsnapt. Alle query's via $wpdb->prepare of via
insert, update en delete met een formaatlijst. ABSPATH-guard bovenaan elk
bestand. Geen superglobal zonder sanitatie. Geen eval, geen base64_decode,
geen code van buiten.
Testen
TESTEN.md bevat een testinstructie van vijf minuten waarmee je zelf vaststelt
dat de plugin doet wat de readme belooft, stap voor stap, met per stap een
uitkomst die je met eigen ogen ziet.
De logica draait ook buiten WordPress:
cd tests
php test-toegankelijkheid.php
101 controles over de scanner, de regels en de validatie van de instellingen.
Licentie
GPLv2 of later. Zie LICENSE.
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| v1.0.0 | Aug 19, 2026 | theseo-toegankelijkheidsverklaring-1.0.0.zip | 1 |