WPShadow

All Shadow checks

WordPress accessibility checks in Shadow

These checks look at whether people who use a keyboard or a screen reader can get around your site: skip links, focus outlines, heading order, link styling, form error messages, button wording and the viewport setting. Shadow reads your active theme and your published content to answer them.

There are 12 checks in this family. Shadow reports what it finds, and nothing is changed until you approve a fix.

In this family

What each check looks at

Button Text Specific

Scans published posts and pages for button blocks and links that use vague non-descriptive text (e.g. "Click Here", "Learn More") which break screen-reader context.

Focus Outline Preserved

Scans the active theme's CSS files for rules that remove the browser focus outline on interactive elements, which prevents keyboard users from knowing which element has focus.

Form Error Messaging

Checks whether active form plugins support accessible inline error messaging that is programmatically associated with the relevant input fields.

Heading Structure Reviewable

Scans published posts and pages for heading issues: an H1 inside the post body (duplicating the title) or skipped heading levels (e.g. H2 to H4), which disrupts screen-reader document outline navigation.

HTML Lang Attribute Correct

Checks that the site language produces a valid BCP-47 tag for the HTML lang attribute so screen readers use the correct pronunciation and dictionary.

Image Alt Text Process

Checks the media library for uploaded images that have no alt text set. Images without alt text are invisible to screen readers and fail WCAG 1.1.1.

Why it matters. Checks the media library for image attachments that have no alt text stored in the _wp_attachment_image_alt post-meta field. Missing alt text on non-decorative images violates WCAG 1.1.1.

Checks that links in body text remain distinguishable from surrounding text by more than color alone, as required by WCAG 1.4.1.

Verifies that themes with multiple navigation landmarks provide a unique accessible name on each <nav> element via aria-label or aria-labelledby.

Why it matters. When a theme renders more than one <nav> landmark, each region must have a unique accessible name (aria-label or aria-labelledby) so screen-reader users can distinguish them. This diagnostic checks whether multiple nav menus are assigned and whether the theme templates supply the required ARIA attributes.

Reduced Motion Support

Scans the active theme for CSS animations or transitions and checks whether a prefers-reduced-motion media query is present to protect users with vestibular disorders.

Search Form Accessible Name

Checks whether the theme's search form template provides an accessible name for the search input via a label, aria-label, or aria-labelledby attribute.

Why it matters. WordPress core's default search form includes a visible <label> for the search input. Themes that override searchform.php sometimes drop the label entirely, leaving the input anonymous to screen readers. This diagnostic detects that pattern and flags it.

Checks that the active theme includes a skip link pointing to the main content area so keyboard users can bypass repeated navigation.

Why it matters. A skip link lets keyboard and screen-reader users jump past repeated navigation blocks directly to the main content. Without one, every page load forces keyboard users to tab through the entire nav before reaching the content they actually came for (WCAG 2.4.1 - Bypass Blocks).

Viewport Meta

Checks that the viewport meta tag does not disable user zoom (user-scalable=no or maximum-scale below 2), which would prevent users from enlarging text to meet WCAG 1.4.4.

Why it matters. The <meta name="viewport"> tag controls how browsers scale content on mobile devices. When it includes user-scalable=no or maximum-scale values less than 2, browser pinch-to-zoom is disabled, violating WCAG 1.4.4 (Resize Text) for users who depend on zoom to read content.

The other check families

Shadow is free and runs on your own server, with no account. The source is on GitHub, and these descriptions come from it.

Find me online: LinkedIn · Bluesky · X · Mastodon · YouTube · GitHub · WordPress.org