EN
Language · same page NLNederlands/tools-en-plugins/toegankelijkheidsverklaring/ ENEnglish (UK)/en/tools-and-plugins/accessibility-statement/ ESEspañolnot translated yet We do not remember your choice and never redirect you automatically.
SRV · plugin · accessibility reg. T.000 · wordpress · gplv2 or later

Accessibility statement and an EN 301 549 self-check

Two things that belong together and are almost never done together: a check of what a machine can actually test, and a statement built from that measurement instead of from good intentions. No overlay, no widget, no button that claims to make your site accessible. It points out where the problem sits; you fix it yourself, at the source, in your own theme or page.

Download the plugin ↓ Book a call theseo-toegankelijkheidsverklaring-1.0.0.zip · 67 KB · version 1.0.0 · GPLv2 or later · no account, no registration, no key
Gianluca, who builds the tools and plugins on this site
image · whoever built the tool also explains it
FIG.01: What a machine sees, and what it does notsheet 1/3

Eighteen rules on one side, and five things no script can judge

This is the most important image on this page, because this is where the whole category goes wrong. A scanner that scores 98 per cent gives you the feeling that you have arrived, while the things that matter most fall outside the reach of any scanner. That sentence is therefore included in the statement itself, and it is repeated on the overview and on the settings screen.

scope18 rules · and the limit behind them
tested by machine
  • Image without a text alternative, and an alternative that is actually a file name
  • Image map click area without a text alternative
  • Embedded object or embed with nothing to fall back on
  • Empty heading, and a skipped heading level
  • Table with data cells and not a single header cell
  • Audio or video that autoplays, is not muted and has no controls
  • Zoom disabled or capped below twice the size
  • Page without a title element
  • Positive tabindex
  • Link without a name, link text that says nothing, and a link that opens a new window without saying so
  • Page language not set on the html element
  • Form field without a label, aria-label or title
  • The same id used twice
  • Frame without a name
no scanner can judge this
  • Whether a text alternative actually describes the image
  • Whether your site can be operated with a keyboard alone
  • Whether the contrast holds up in practice
  • Whether an error message explains itself
  • Whether a custom-built component behaves the way it announces itself
Chapter 9 of EN 301 549 carries the WCAG criteria over one to one, so criterion 1.1.1 is clause 9.1.1.1 of the standard. The plugin prints both numbers at every finding, so your statement refers to the standard and not only to the guideline. Testing with people who use assistive technology, and an assessment by someone who works in this field, are the parts missing here. This plugin replaces neither.
DOC.01

Why almost every accessibility plugin solves the wrong problem

The European Accessibility Act has applied since 28 June 2025 to, among others, webshops and online services to consumers. The need is real and current, and the market has responded with something that does not solve the problem.

Source: the Dutch Accessibility Requirements for Products and Services (Implementation) Act (Implementatiewet toegankelijkheidsvoorschriften producten en diensten) on wetten.overheid.nl, in force since 28 June 2025

Last checked on 25 August 2026: the act is still in force and that date has not moved. We do not state when which regulator in which country starts enforcing it: there is no source for that which you can check.

What sits in the WordPress plugin directory is mostly the overlay widget: a button in the bottom corner that lets a visitor enlarge the font or invert the contrast. The accessibility field advises against this, for a reason you do not have to take on faith to understand: an overlay leaves the underlying problem in place and hides it from the tool that could have found it. Someone using a screen reader still runs into the missing alt text, only now the scanner no longer sees it.

This plugin therefore deliberately avoids two things: it does not patch anything on top of your page, and it never declares you compliant

What it does do is measure what can be measured, point out where it sits, and turn that outcome into a statement that promises no more than what was measured.

DOC.02

What exactly gets checked

Eighteen rules. Ten of them block someone, eight deserve attention. Together they touch twelve WCAG success criteria from the version EN 301 549 points to. Eleven of them appear in both WCAG 2.1 and WCAG 2.2. The twelfth, criterion 4.1.1 Parsing, has been dropped in WCAG 2.2 and only counts here for as long as EN 301 549 points to WCAG 2.1; that is why the plugin treats it as a notice rather than a blocking finding, and the plugin code says so itself in a note. The full list is in FIG.01 and nothing sits outside that list; there is no hidden nineteenth rule and no overall score built out of thin air.

Every finding shows the WCAG number and the clause number from EN 301 549

That second number is what you need the moment someone asks about the standard rather than the guideline, and it is exactly what most tools leave out.

Two ways of reading

Content mode reads what the editor produces. That is the default, it is fast, and not a single request leaves the building.

Page mode fetches the whole page including your theme, and that is the only way to judge the page language, the page title and the viewport. The request goes to your own domain.

What happens to the findings

At every check, the findings for each item are replaced. What you see is the state of the latest measurement, not a pile of history. That is a deliberate choice: a list that only ever grows gets ignored within a month.

FIG.02: From measurement to statementsheet 2/3

Four steps, and the last one never puts anything online

The statement is built from your answers and from the measurement, and from nothing else. You see the whole text on screen before it is written anywhere. The button then creates a draft page. A new page is never published for you.

statementfour steps · draft at the end
1MeasureThe check reads the content of an item, or the whole page including the header, the menu and the footer of your theme. Three of the eighteen rules can only be judged on a whole page: the page language, the page title and the viewport.
2AnswerFor every rule that is actually broken somewhere on your site, you choose one of three answers: fixed, known and being worked on, or a disproportionate burden with your own justification added.
3Fill in the restThe organisation's name, where someone reports a problem, what happens if you do not respond, the date of the assessment and who carried it out. Dutch or English.
4Save as draftThe button writes the text away as a draft page. If a statement page already exists, it is rewritten and keeps the status it had. Publishing is up to you.
A Dutch public authority needs a different document. Public bodies in the Netherlands must publish their statement in the national register, in the prescribed template, and that template asks for things this plugin does not measure. This is a statement for a business under the European Accessibility Act. The statement screen says so before you fill in anything.
DOC.04
WordPress6.0 or higher. The plugin states tested up to and including 6.8.
PHP7.4 or higher. The code has been checked on 8.5.
RightsYou need manage_options, so an administrator account.
Screen languageDutch on a Dutch site, English otherwise.
Also available on Full source code on GitHub The zip above and the source code on GitHub are the same version. This plugin is not yet in the official WordPress plugin directory. It has been prepared for submission; until that is finalised, the download above is the only place to get it. Checked on 19 August 2026.
STEP 1 · GET IT

Click the download button above. You get theseo-toegankelijkheidsverklaring-1.0.0.zip, 67 KB. Do not unpack it: WordPress wants the zip itself.

STEP 2 · UPLOAD

In your WordPress: Plugins, Add New Plugin, Upload Plugin. Choose the file and click Install Now.

STEP 3 · ACTIVATE

Click Activate Plugin. A new item appears in your admin menu. Your site does not change yet at this point.

STEP 4 · SET UP

Open the settings screen and go through the toggles. Everything that touches your public site stays off until you turn it on yourself.

DOC.03

What the statement is, and is not

The statement that comes out of it is useful and limited, and it is better that you know that in advance.

POINT 01

It never declares you compliant

The statement itself says that it rests on a machine measurement and that a machine measurement covers only part of accessibility. That is not a hedge but the truth, and a statement that leaves it out is inaccurate.
POINT 02

It is not the Dutch government template

Public bodies publish their statement in the national register in a prescribed template that asks for things not measured here. This is a statement for a business under the European Accessibility Act.
POINT 03

It does not replace testing with real users

Testing with people who use assistive technology, and an assessment by someone who works in this field, are the two things missing here. That is stated on every screen.
POINT 04

It does not publish anything for you

The button creates a draft page. If the page already exists, the text is rewritten and the page keeps the status it had.
FIG.03: Where the data stayssheet 3/3

Two tables in your own database, and one request that you switch on yourself

Your visitors are not looked at at all. It reads your own content. The only request that ever leaves your server goes to your own domain, and in the default setting even that does not happen.

storagetwo tables · one option
is stored
  • Per finding: the post id, the rule code, the weight, a short reference to the element, the offending html capped at 300 characters, and the time it was measured
  • Per check: the time, how it read the site, and the totals
  • Your statement fields, in a single option
is not stored
  • Any data about a visitor
  • An IP address
  • A cookie or anything in localStorage or sessionStorage
  • A user agent
  • Anything that leaves your server
The only outgoing request sits in includes/class-tstv-runner.php and goes to get_permalink(), so to your own page on your own domain. It only happens in page mode. Content mode is the default, and in that mode there is no outgoing request at all. Some hosts do not allow a site to call itself; the overview then reports how many items could not be read, instead of silently counting them as clean.
DOC.05

Privacy: what is recorded and what is not

With this plugin there is no visitor involved at all. That keeps the paragraph short, and it also makes it honestly verifiable.

POINT 01

No visitor data, in any form

No IP address, no cookie, nothing in localStorage or sessionStorage, no user agent. The plugin does not look at who visits your site; it reads your own content.
POINT 02

Nothing changes on your front end

, except a link to your statement page if you turn that on yourself. No script is loaded and nothing is laid over your page.
POINT 03

The only outgoing request goes to yourself

It sits in includes/class-tstv-runner.php, it calls get_permalink(), and it only happens in page mode. Content mode is the default and makes no request at all. There is no second address anywhere in the plugin.
POINT 04

Everything stays in your own database

Two tables and one option, with the fields as shown in FIG.03. The offending html is capped at 300 characters, because a finding needs only the pointer.
POINT 05

Uninstalling cleans up

Both tables, the option and the scheduled check are removed. Your statement page stays in place, because that page is yours.
DOC.06

Frequently asked questions

Is this an overlay? No, and that is the starting point. Nothing is laid over your page and nothing is patched on top of your site. The plugin points things out and you fix them at the source.

Does this make my site compliant with the European Accessibility Act?

No. It measures the part that can be tested by machine and writes a statement that says exactly that. The parts that are missing are named explicitly in the statement itself.

What is the difference between content mode and page mode?

Content mode reads what the editor produces and makes no outgoing request at all. Page mode fetches the whole page including your theme and is the only way to judge the page language, the page title and the viewport.

My host does not allow the site to call itself.

Then the overview reports how many items could not be read. They are not silently counted as clean, because that would make the figure look better than reality.

Can I use this as a public authority?

Not as a replacement. Public bodies in the Netherlands publish in the national register in a prescribed template that asks for more than is measured here. The measurement itself is useful as groundwork, though.

Will my statement page be overwritten?

The text is rewritten, the status stays. A new page is always created as a draft and never published for you.

DOC.07 · Next step

What it gives you in the first week

The sensible order is to measure before you write anything, because a statement that does not come from a measurement is a text you cannot defend later. What we ourselves publish about the accessibility of this site is on our own statement. If you also want to know what speed your visitors actually experience, the Core Web Vitals plugin measures that on the same people. If you want to talk it through, book a call.

Section · Next stepreachable 24/7 · sales@theseo.nl
Book a call ↗
Written by GianlucaFounder of TheSEO. Has been building findability for Dutch businesses since 2017, in Google and in AI answers. More about the institute.