Toegankelijkheidsverklaring en EN 301 549 zelfcontrole
Twee dingen die bij elkaar horen en die bijna nooit samen gedaan worden: een controle van wat een machine werkelijk kan toetsen, en een verklaring die uit die meting wordt opgebouwd in plaats van uit goede bedoelingen. Geen overlay, geen widget, geen knop die beweert je site toegankelijk te maken. Hij wijst aan waar het probleem zit; oplossen doe jij, op de plek zelf, in je eigen thema of pagina.
Achttien regels aan de ene kant, en vijf dingen die geen enkel script kan beoordelen
Dit is het belangrijkste beeld op deze pagina, want hier gaat de hele categorie mis. Een scanner die 98 procent scoort geeft je het gevoel dat je er bent, terwijl de dingen die er het meest toe doen buiten het bereik van elke scanner vallen. Die zin komt daarom zelf in de verklaring te staan, en hij wordt herhaald op het overzicht en op het instellingenscherm.
- Afbeelding zonder tekstalternatief, en een alternatief dat in werkelijkheid een bestandsnaam is
- Klikgebied van een afbeeldingskaart zonder tekstalternatief
- Ingesloten object of embed zonder iets om op terug te vallen
- Lege kop, en een overgeslagen kopniveau
- Tabel met datacellen en geen enkele koptekstcel
- Audio of video die vanzelf start, niet gedempt is en geen bediening heeft
- Zoomen uitgezet of afgetopt onder twee keer de grootte
- Pagina zonder titelelement
- Positieve tabindex
- Link zonder naam, linktekst die niets zegt, en een link die in een nieuw venster opent zonder dat te zeggen
- Paginataal niet op het html-element gezet
- Formulierveld zonder label, aria-label of title
- Hetzelfde id twee keer gebruikt
- Frame zonder naam
- Of een tekstalternatief de afbeelding ook werkelijk beschrijft
- Of je site met alleen een toetsenbord te bedienen is
- Of het contrast in de praktijk standhoudt
- Of een foutmelding zichzelf uitlegt
- Of een zelfgebouwd onderdeel zich gedraagt zoals het zich aankondigt
Waarom bijna elke toegankelijkheidsplugin het verkeerde probleem oplost
De Europese toegankelijkheidsrichtlijn geldt sinds 28 juni 2025 voor onder meer webshops en online diensten aan consumenten. De behoefte is dus echt en actueel, en de markt heeft er iets tegenover gezet dat het probleem niet oplost.
Bron: de Implementatiewet toegankelijkheidsvoorschriften producten en diensten op wetten.overheid.nl, in werking sinds 28 juni 2025
Laatst nagekeken op 25 augustus 2026: de wet staat er nog en die datum is niet verschoven. Wanneer welke toezichthouder in welk land begint met handhaven, noemen wij niet: daar bestaat geen bron voor die je kunt nakijken.
Wat er in de WordPress-pluginmap staat is overwegend het overlay-widget: een knop rechtsonder waarmee een bezoeker het lettertype kan vergroten of het contrast kan omkeren. De toegankelijkheidswereld raadt dat af, om een reden die je niet hoeft te geloven om te begrijpen: een overlay laat het onderliggende probleem staan en verbergt het voor het gereedschap dat het had kunnen vinden. Wie een schermlezer gebruikt loopt nog steeds tegen de ontbrekende alt-tekst aan, alleen ziet de scanner hem nu niet meer.
Deze plugin doet daarom bewust twee dingen niet: hij repareert niets bovenop je pagina, en hij verklaart je nergens conform
Wat hij wel doet is meten wat te meten valt, aanwijzen waar het staat, en van die uitkomst een verklaring maken die niet meer belooft dan er gemeten is.
Wat er precies gecontroleerd wordt
Achttien regels. Tien daarvan blokkeren iemand, acht verdienen aandacht. Samen raken ze twaalf WCAG-succescriteria uit de versie waar EN 301 549 naar wijst. Elf daarvan staan zowel in WCAG 2.1 als in WCAG 2.2. Het twaalfde, criterium 4.1.1 Parsing, is in WCAG 2.2 vervallen en telt hier alleen mee zolang EN 301 549 naar WCAG 2.1 verwijst; daarom is het in de plugin een melding en geen blokkerende bevinding, en de plugincode zegt dat zelf in een noot. De volledige lijst staat in FIG.01 en er staat niets buiten die lijst; er is geen verborgen negentiende regel en geen totaalscore die uit lucht is opgebouwd.
Bij elke bevinding staat het WCAG-nummer en het clausulenummer uit EN 301 549
Dat tweede getal is wat je nodig hebt zodra iemand naar de norm vraagt in plaats van naar de richtlijn, en het is precies wat de meeste gereedschappen weglaten.
Twee manieren van lezen
Inhoudsmodus leest wat de editor produceert. Dat is de standaard, het is snel, en er gaat geen enkel verzoek de deur uit.
Paginamodus haalt de hele pagina op inclusief je thema, en dat is de enige manier om de paginataal, de paginatitel en de viewport te beoordelen. Het verzoek gaat naar je eigen domein.
Wat er met de bevindingen gebeurt
Bij elke controle worden de bevindingen per item vervangen. Wat je ziet is de staat van de laatste meting en niet een stapel geschiedenis. Dat is een keuze: een lijst die alleen maar groeit wordt binnen een maand genegeerd.
Vier stappen, en de laatste zet nooit iets online
De verklaring wordt opgebouwd uit je antwoorden en uit de meting, en uit niets anders. Je ziet de hele tekst op het scherm voordat hij ergens wordt weggeschreven. De knop maakt daarna een conceptpagina. Er wordt nooit een nieuwe pagina voor je gepubliceerd.
Zo installeer je hem, in vier stappen
Er is geen account nodig, geen sleutel en geen registratie. Een gewone WordPress waar je beheerder bent is genoeg.
manage_options nodig, dus beheerder.Klik hierboven op de downloadknop. Je krijgt theseo-toegankelijkheidsverklaring-1.0.0.zip, 67 KB. Pak hem niet uit: WordPress wil de zip zelf.
In je WordPress: Plugins, Nieuwe plugin, Plugin uploaden. Kies het bestand en klik op Nu installeren.
Klik op Plugin activeren. Er verschijnt een nieuw onderdeel in je beheermenu. Je site verandert er op dat moment nog niet van.
Open het instellingenscherm en loop de standen langs. Alles wat aan je openbare site raakt staat uit tot je het zelf aanzet.
Wat de verklaring wel en niet is
De verklaring die eruit komt is bruikbaar en beperkt, en het is beter dat je dat vooraf weet.
Hij verklaart je nergens conform
Er staat in de verklaring zelf dat hij op een machinale meting rust en dat een machinale meting een deel van toegankelijkheid dekt. Dat is geen slag om de arm maar de waarheid, en een verklaring die dat weglaat is onjuist.Hij is niet het model van de Nederlandse overheid
Publieke instanties publiceren hun verklaring in het landelijke register in een voorgeschreven model dat om zaken vraagt die hier niet gemeten worden. Dit is een verklaring voor een bedrijf onder de Europese toegankelijkheidsrichtlijn.Hij vervangt geen test met echte gebruikers
Testen met mensen die hulpmiddelen gebruiken, en een beoordeling door iemand die dit vak uitoefent, zijn de twee dingen die hier ontbreken. Dat staat op elk scherm.Hij publiceert niets voor je
De knop maakt een conceptpagina. Bestaat de pagina al, dan wordt de tekst herschreven en houdt de pagina de status die hij had.Twee tabellen in je eigen database, en een verzoek dat je zelf aanzet
Naar je bezoekers wordt helemaal niet gekeken. Hij leest je eigen inhoud. Het enige verzoek dat ooit je server verlaat gaat naar je eigen domein, en in de standaardinstelling gebeurt zelfs dat niet.
- Per bevinding: het bericht-id, de regelcode, het gewicht, een korte verwijzing naar het element, de aanstootgevende html afgekapt op 300 tekens en het moment van meten
- Per controle: het moment, hoe hij de site gelezen heeft, en de totalen
- Je verklaringsvelden, in een enkele optie
- Enig gegeven over een bezoeker
- Een IP-adres
- Een cookie of iets in localStorage of sessionStorage
- Een user agent
- Iets dat je server verlaat
includes/class-tstv-runner.php en gaat naar get_permalink(), dus naar je eigen pagina op je eigen domein. Het gebeurt alleen in paginamodus. Inhoudsmodus is de standaard en daarin is er geen enkel uitgaand verzoek. Sommige hosts staan niet toe dat een site zichzelf aanroept; het overzicht meldt dan hoeveel items niet gelezen konden worden in plaats van ze stil als schoon te tellen.Privacy: wat er wel en niet wordt vastgelegd
Er is bij deze plugin geen bezoeker in het spel. Dat maakt de paragraaf kort en het maakt hem ook eerlijk controleerbaar.
Geen bezoekersgegeven, in geen enkele vorm
Geen IP-adres, geen cookie, niets in localStorage of sessionStorage, geen user agent. De plugin kijkt niet naar wie je site bezoekt; hij leest je eigen inhoud.Op je front end verandert er niets
, behalve een link naar je verklaringspagina als je die zelf aanzet. Er wordt geen script geladen en er wordt niets over je pagina heen gelegd.Het enige uitgaande verzoek gaat naar jezelf
Het staat inincludes/class-tstv-runner.php, het roept get_permalink() aan, en het gebeurt alleen in paginamodus. Inhoudsmodus is de standaard en doet geen enkel verzoek. Er is geen tweede adres in de hele plugin.Alles blijft in je eigen database
Twee tabellen en een optie, met de velden zoals ze in FIG.03 staan. De aanstootgevende html wordt op 300 tekens afgekapt, want een bevinding heeft genoeg aan de aanwijzing.Verwijderen ruimt op
Beide tabellen, de optie en de geplande controle gaan weg. Je verklaringspagina blijft staan, want die pagina is van jou.Veelgestelde vragen
Is dit een overlay? Nee, en dat is het uitgangspunt. Er komt niets over je pagina heen en er wordt niets gerepareerd bovenop je site. De plugin wijst aan en jij lost het op in de bron.
Maakt dit mijn site conform de Europese toegankelijkheidsrichtlijn?
Nee. Het meet het deel dat machinaal te meten valt en schrijft een verklaring die precies dat zegt. De delen die ontbreken staan met naam en toenaam in de verklaring zelf.
Wat is het verschil tussen inhoudsmodus en paginamodus?
Inhoudsmodus leest wat de editor produceert en doet geen enkel uitgaand verzoek. Paginamodus haalt de hele pagina op inclusief je thema en is de enige manier om de paginataal, de paginatitel en de viewport te beoordelen.
Mijn host laat niet toe dat de site zichzelf aanroept.
Dan meldt het overzicht hoeveel items niet gelezen konden worden. Ze worden niet stil als schoon geteld, want dat zou het cijfer beter maken dan de werkelijkheid.
Kan ik dit gebruiken als overheidsinstelling?
Niet als vervanging. Publieke instanties in Nederland publiceren in het landelijke register in een voorgeschreven model dat meer vraagt dan hier gemeten wordt. De meting zelf is wel bruikbaar als voorwerk.
Wordt mijn verklaringspagina overschreven?
De tekst wordt herschreven, de status blijft. Een nieuwe pagina wordt altijd als concept aangemaakt en nooit voor je gepubliceerd.
Wat je er de eerste week aan hebt
De verstandige volgorde is meten voordat je iets schrijft, want een verklaring die niet uit een meting komt is een tekst die je later niet kunt verdedigen. Wat wij zelf over de toegankelijkheid van deze site publiceren staat op onze eigen verklaring. Wil je daarnaast weten wat je bezoekers werkelijk aan snelheid ervaren, dan meet de Core Web Vitals plugin dat bij dezelfde mensen. Wil je erover doorpraten, plan dan een gesprek.