{"id":380008,"date":"2026-10-12T13:10:18","date_gmt":"2026-10-12T13:10:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/a11yfix\/"},"modified":"2026-10-12T13:10:03","modified_gmt":"2026-10-12T13:10:03","slug":"yodsira-accessibility-markup-audit","status":"publish","type":"plugin","link":"https:\/\/af.wordpress.org\/plugins\/yodsira-accessibility-markup-audit\/","author":23566278,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.2.0","stable_tag":"0.2.0","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Yodsira Accessibility Markup Audit","header_author":"Yodsira","header_description":"Accessibility audit with real markup fixes: find missing alt text, heading skips, unlabeled form fields \u2014 preview and apply safe DOM fixes. No overlay widgets.","assets_banners_color":"373b40","last_updated":"2026-10-12 13:10:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/yodsira-accessibility-markup-audit\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":20,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.0":{"tag":"0.2.0","author":"yodsira","date":"2026-10-12 13:10:03","revision":3741626}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3741626,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3741626,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3741626,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The audit report: findings grouped by severity, each with a concrete \"how to fix\" hint.","2":"Preview before repair: the exact markup change is shown before anything goes live.","3":"Repairs screen: every auto-fix category is a separate toggle."}},"plugin_section":[],"plugin_tags":[1953,2682,8533,241427,1956],"plugin_category":[34],"plugin_contributors":[281339],"plugin_business_model":[],"class_list":["post-380008","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-ada","plugin_tags-audit","plugin_tags-eaa","plugin_tags-wcag","plugin_category-accessibility","plugin_contributors-yodsira","plugin_committers-yodsira"],"banners":{"banner":"https:\/\/ps.w.org\/yodsira-accessibility-markup-audit\/assets\/banner-772x250.png?rev=3741626","banner_2x":"https:\/\/ps.w.org\/yodsira-accessibility-markup-audit\/assets\/banner-1544x500.png?rev=3741626","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/yodsira-accessibility-markup-audit\/assets\/icon-128x128.png?rev=3741626","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Yodsira Accessibility Markup Audit does not add widgets to your site. It finds real markup problems \u2014 and, for safe categories, fixes the actual DOM after showing you exactly what will change.<\/p>\n\n<p><strong>The audit<\/strong> scans your homepage, latest posts and one static page (on a schedule or on demand) and reports:<\/p>\n\n<ul>\n<li>images without alt text<\/li>\n<li>skipped heading levels (h2 \u2192 h4) and multiple h1<\/li>\n<li>links and buttons with no accessible name (icon-only links)<\/li>\n<li>form fields without labels<\/li>\n<li>pages that do not declare their language (<code>&lt;html lang&gt;<\/code>)<\/li>\n<li>missing or empty <code>&lt;title&gt;<\/code><\/li>\n<li>generic link text (\"read more\", \"click here\")<\/li>\n<\/ul>\n\n<p>Every issue comes with a severity and a one-phrase \"how to fix\" \u2014 the report is useful on its own, even if you fix everything by hand.<\/p>\n\n<p><strong>The repairs<\/strong> (each is a separate toggle):<\/p>\n\n<p>Safe, on by default:<\/p>\n\n<ul>\n<li>fill missing <code>alt<\/code> from the media library title\/alt field<\/li>\n<li>declare the page language on <code>&lt;html&gt;<\/code><\/li>\n<li>add <code>scope<\/code> to table headers<\/li>\n<\/ul>\n\n<p>Risky, off by default \u2014 review the preview first:<\/p>\n\n<ul>\n<li>accessible names for unlabeled controls (from URL slugs \/ placeholders)<\/li>\n<li>titles for untitled iframes<\/li>\n<\/ul>\n\n<p><strong>Preview before anything goes live.<\/strong> The plugin records every attribute it would add \u2014 target, attribute, new value \u2014 and shows the list before you enable a repair. Nothing is ever removed from your markup; repairs only add attributes. When a repair has nothing to change, the page is served byte-for-byte unchanged.<\/p>\n\n<p><strong>Honest scope:<\/strong> automated checks catch a part of WCAG issues (roughly the mechanical 20\u201340%); contrast, focus order and ARIA patterns still need a human expert. Use it to keep the floor high and the report short.<\/p>\n\n<p><strong>Why not an overlay?<\/strong> Overlay widgets that inject toolbars and rewrite the page at runtime are rejected by the accessibility community: they don't fix markup, sometimes break assistive tech, and create false confidence. Yodsira Accessibility Markup Audit is the opposite approach: find problems, fix the markup, show your work.<\/p>\n\n<h3>Yodsira Accessibility Markup Audit Pro<\/h3>\n\n<p>The companion plugin adds the client-facing layer on top of the free audit:<\/p>\n\n<ul>\n<li>client-ready compliance report (print to PDF) with an agency white-label<\/li>\n<li>weekly rescans of up to 25 pages with change digests<\/li>\n<li>an honest \"what automation does not cover\" section<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/yodsira.com\/en\/product\/a11yfix\/\">Buy Pro \u2014 $99\/year<\/a><\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin can send notifications ONLY to the service you configure in its\nown settings. It never contacts yodsira.com servers.<\/p>\n\n<p>-- Telegram notifications --\n* What the service is: Telegram Bot API (api.telegram.org), used to deliver\n  instant alerts to your own bot and chat.\n* What data is sent and when: a short alert text with your site name and the\n  event details - sent only when the monitored event fires or when you press\n  the test button in settings.\n* Opt-in: the feature is fully disabled until you enter your own bot token\n  and chat id; clearing them switches it off.\n* Terms: https:\/\/telegram.org\/tos\n* Privacy: https:\/\/telegram.org\/privacy<\/p>\n\n<h3>How the scan works<\/h3>\n\n<p>The daily scan fetches your site's own pages over HTTP (the same way a\nvisitor's browser would) and checks each page against nine concrete\nrules, for example: images without meaningful alt text, links that\ncontain only an icon with no accessible name, buttons and toggles\nmissing state attributes, and headings that skip levels. The scan runs\nfrom your own admin dashboard - no external service is involved and no\npage content leaves the site. Findings are listed with the exact URL,\nthe rule that matched and a suggested fix you can preview before\napplying.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>yodsira-accessibility-markup-audit<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip via Plugins \u2192 Add New \u2192 Upload Plugin.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open the Audit menu \u2192 press \"Run scan now\".<\/li>\n<li>Review the report; enable repairs one by one, using Preview first.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20it%20slow%20my%20site%20down%3F\"><h3>Will it slow my site down?<\/h3><\/dt>\n<dd><p>The scan runs on a cron request, never on a visitor's page load. With only safe repairs on, enabled fixes run through native WordPress filters; the output-buffered DOM pass activates only when you enable DOM-level repairs, and pages without needed changes are returned untouched.<\/p><\/dd>\n<dt id=\"can%20it%20break%20my%20layout%3F\"><h3>Can it break my layout?<\/h3><\/dt>\n<dd><p>Repairs only add attributes (alt, lang, scope, aria-label, title, value) and never touch tags, classes or styles. The preview shows every change before you enable a repair, and the front-end fixes have a master switch.<\/p><\/dd>\n<dt id=\"is%20my%20site%20compliant%20after%20this%3F\"><h3>Is my site compliant after this?<\/h3><\/dt>\n<dd><p>No automated tool can promise compliance. The plugin fixes mechanical issues and produces a clear report; a full audit needs a specialist. Anything promising \"one-click compliance\" is selling you a lawsuit risk.<\/p><\/dd>\n<dt id=\"where%20is%20my%20data%20stored%3F\"><h3>Where is my data stored?<\/h3><\/dt>\n<dd><p>Scan results live in your own database. Nothing is sent to third-party services; the scanner crawls only your own site.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Directory preparation release: POT template added for translate.wordpress.org.<\/li>\n<li>Screenshots section and changelog cleanup for the plugin directory page.<\/li>\n<li>Admin CSS\/JS moved to the enqueue API (wp_enqueue_style, wp_add_inline_style, wp_localize_script) \u2014 directory review feedback.<\/li>\n<li>Verified on WordPress 7.1 and PHP 7.4-8.4 (Plugin Check: 0 errors).<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Platform digest deferred scheduling; dev artifacts removed.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Load the shared Yodsira family components (family status endpoint).<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Added: Pro banner \u2014 the compliance-report companion plugin is now available.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release: audit (9 rules), safe repairs with per-repair toggles, change preview, daily scheduled scan, clean uninstall.<\/li>\n<\/ul>","raw_excerpt":"Accessibility audit with real markup fixes \u2014 and a preview before anything goes live. No overlay widgets.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/380008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=380008"}],"author":[{"embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/yodsira"}],"wp:attachment":[{"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=380008"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=380008"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=380008"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=380008"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=380008"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=380008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}