Coverage

Our coverage of the W3C ACT Rules

The ACT Rules are the W3C's shared, testable definitions of accessibility checks, so that different tools can be compared on the same terms. This page says which of them Markproof actually implements, which it partly covers, and which it cannot cover — with the reason. Checked on 18 October 2026 against their published list; if they add rules, this page is out of date until we update it.

Why publish this at all: a tool that will not tell you its gaps is asking you to guess. The gaps below are the ones we know about, and some of them are permanent, because they need a browser or a person rather than a parser.

Implemented

ACT ruleOur checkNote
Image has non-empty accessible nameimg_missing_altAn image with no accessible name: we accept alt, aria-label, aria-labelledby or title, in that order of precedence. We do not evaluate whether the name is good; that needs a person.
Button has non-empty accessible namebutton_empty_nameIncludes buttons whose only content is an image with no alt text.
Link has non-empty accessible namelink_empty_nameIncludes icon links and links whose only content is an unnamed image.
Form field has non-empty accessible nameinput_missing_labelLabels, wrapped labels, aria-label and aria-labelledby are all accepted; hidden and submit inputs are left alone.
HTML page has lang attributehtml_missing_langWe check that it is present, not that the language tag is valid; that is their next rule.
Meta viewport allows for zoomzoom_blockedFlags user-scalable=no and maximum-scale values that block zoom.
HTML page has non-empty titlemissing_page_titleWe check presence and emptiness, not whether the title describes the page.
Element with aria-hidden has no content in sequential focus navigationaria_hidden_focusableA link or button inside aria-hidden="true" without tabindex="-1" is reachable by keyboard and invisible to a screen reader at the same time.

Partly covered

ACT ruleWhat we doWhat we do not do
Heading has non-empty accessible nameheading_empty flags headings with no text at all.Headings whose only content is an image or an ARIA reference: we do not compute an accessible name for every heading, only check for emptiness.
Iframe element has non-empty accessible nameiframe_missing_title accepts title, aria-label or aria-labelledby.Whether the name describes the frame's content.
Link is descriptivegeneric_link_text flags "click here" and its cousins; img_alt_filename and img_alt_generic flag alt text that is a file name or a placeholder.Whether a link's wording is genuinely descriptive in context. That is a judgement, and ours is a list of known-bad phrasings rather than an opinion.
Table header cell has assigned cellstable_missing_header flags a table with no header cells at all, unless it declares role="presentation".The headers attribute relationships and whether each header's scope covers the right cells.

Not covered, and why

ACT rulesWhy not
The contrast rules: Text has minimum contrast, Text has enhanced contrast, and the letter, word and line spacing rulesThey need computed styles from a rendered page. A parser reading HTML cannot know what colour anything ends up.
The media rules: transcripts, captions, audio description, autoplay controlThey need the media itself, not the markup. autoplay_media flags the attribute, which is not the same thing as measuring what plays.
The keyboard and focus rules: keyboard traps, visible focus, focus order, scrollable content reachable by focusThey need a rendered, interactive page.
The ARIA consistency rules: valid attribute values, required states and properties, permitted roles, required owned elementsWe check a few of these indirectly (a label pointing at a missing id), but we do not validate ARIA against the specification. Doing it properly means shipping a copy of the ARIA vocabulary and keeping it current.
The descriptive-name rules: whether an image's alternative is descriptive, whether a form field's label is descriptive, whether a page title is descriptiveThese are judgements about meaning. We say plainly that we cannot make them.
Structure rules that need the whole page or the site: bypass blocks, landmarks for the main content, repeated contentPartly measurable from one page, but the answer depends on the template and on what repeats across the site, which one page cannot tell us.

Rules of ours that are not ACT rules

Some of what we check has no ACT rule, usually because it is a convention rather than a conformance requirement: heading levels that skip (heading_order), positive tabindex (positive_tabindex), duplicate id attributes (duplicate_ids), links that open a new window without warning (link_new_window), links built out of JavaScript (link_javascript_href), interactive elements nested inside one another (nested_interactive), label references that point at nothing (aria_reference_missing), and the obsolete scrolling element (obsolete_element).

How we would prove any of this

Every finding quotes the exact markup, so each one can be checked by hand in seconds. The rules themselves are tested by two fixtures in the source: a page with twenty-two planted problems that must all be found, and a page that is correct in the ways that tempt a rule to invent a finding — a decorative image, a layout table the author declared presentational, a frame named with aria-label, inert template content — which must produce nothing at all. The second fixture matters more than the first: a wrong finding wastes somebody's afternoon and teaches them to distrust everything else.