{"id":304102,"date":"2026-06-10T08:24:19","date_gmt":"2026-06-10T08:24:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/axle-accessibility-scanner\/"},"modified":"2026-06-10T08:23:46","modified_gmt":"2026-06-10T08:23:46","slug":"asafamos-accessibility-scanner","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/asafamos-accessibility-scanner\/","author":23486977,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.1","stable_tag":"1.2.1","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"AsafAmos Accessibility Scanner","header_author":"AsafAmos","header_description":"Scan this WordPress site for WCAG 2.1 \/ 2.2 AA accessibility violations. axe-core 4.11 runs in your admin browser via a hidden iframe \u2014 nothing transmitted by default. Built for EAA 2025 \/ ADA \/ \u05ea\u05e7\u05e0\u05d4 35.","assets_banners_color":"","last_updated":"2026-06-10 08:23:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/asafamos\/axle\/tree\/main\/packages\/axle-wordpress","header_author_uri":"https:\/\/axle-iota.vercel.app?utm_source=asafamos-accessibility-scanner","rating":0,"author_block_rating":0,"active_installs":0,"downloads":28,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.1":{"tag":"1.2.1","author":"asafamos1","date":"2026-06-10 08:23:46"}},"upgrade_notice":{"1.2.0":"<p>Renamed plugin per WordPress.org review feedback. Readme rewritten for accuracy. No functional change. Update recommended.<\/p>","1.1.0":"<p>Scans now run locally in your browser and work on LocalWP \/ staging \/ VPN-restricted sites. No external call required for the free tier. Update recommended.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Admin dashboard showing the latest scan results.","2":"Severity breakdown and per-rule violations.","3":"Settings page with daily auto-scan toggle."}},"plugin_section":[],"plugin_tags":[1447,1953,266453,6464,1956],"plugin_category":[34],"plugin_contributors":[266454],"plugin_business_model":[],"class_list":["post-304102","plugin","type-plugin","status-publish","hentry","plugin_tags-a11y","plugin_tags-accessibility","plugin_tags-axe-core","plugin_tags-scanner","plugin_tags-wcag","plugin_category-accessibility","plugin_contributors-asafamos1","plugin_committers-asafamos1"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/asafamos-accessibility-scanner.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>AsafAmos Accessibility Scanner<\/strong> finds WCAG 2.1 \/ 2.2 AA accessibility violations on your WordPress site. The scan engine \u2014 axe-core 4.11 \u2014 is bundled with the plugin and runs <strong>entirely in your WP admin browser tab<\/strong>. The target page is loaded in a hidden iframe inside the admin area and evaluated there. The default scan flow does not transmit your URL, your HTML, or any scan contents to any external service.<\/p>\n\n<p><strong>What it does<\/strong><\/p>\n\n<ul>\n<li>Loads the target page in a hidden iframe inside your WP admin and evaluates it with bundled axe-core 4.11. Nothing leaves your server during a normal scan.<\/li>\n<li>Reports every violation grouped by severity (critical \/ serious \/ moderate \/ minor).<\/li>\n<li>Links to axe-core documentation for each rule so you can fix it in your theme or content.<\/li>\n<li>Optional daily cron re-scans (off by default \u2014 see &ldquo;Optional features&rdquo; below for what it does and does not transmit).<\/li>\n<li>Works with any theme, any page builder, any caching plugin.<\/li>\n<\/ul>\n\n<p><strong>Why not an accessibility overlay?<\/strong><\/p>\n\n<p>Overlay widgets (the &ldquo;robot button&rdquo; you've seen on other sites) inject runtime JavaScript over broken HTML. They do not fix anything; the FTC fined the largest vendor $1M in January 2025. Real compliance means fixing the source HTML \/ CSS. This plugin shows you what to fix \u2014 it does not hide problems and it does not ship any JavaScript to your visitors.<\/p>\n\n<p><strong>Built for new accessibility regulations<\/strong><\/p>\n\n<ul>\n<li><strong>EAA 2025<\/strong> \u2014 European Accessibility Act, enforceable since June 2025<\/li>\n<li><strong>ADA<\/strong> \u2014 U.S. courts apply WCAG 2.1 AA as the de facto standard<\/li>\n<li><strong>Israeli \u05ea\u05e7\u05e0\u05d4 35<\/strong> \u2014 updated October 2024 with stricter enforcement<\/li>\n<\/ul>\n\n<p><strong>Free. Optional paid tier (separate hosted service)<\/strong><\/p>\n\n<p>The plugin itself is free. Unlimited scans, optional daily cron, full per-rule violation report \u2014 all included.<\/p>\n\n<p>A separate hosted service at https:\/\/axle-iota.vercel.app offers Claude-generated code-fix suggestions per violation. That service is not part of this plugin and is not used by the default scan flow. If you sign up there and obtain an API key, you can paste it in this plugin's Settings; it is then only used during the optional cron \/ hosted-scan path described below.<\/p>\n\n<p><strong>Not a compliance certificate<\/strong><\/p>\n\n<p>Automated tools (including axe-core 4.11, the engine used here) catch roughly 57% of WCAG issues. Manual review by a qualified human auditor is still recommended for full conformance.<\/p>\n\n<h3>Optional features (and what they transmit)<\/h3>\n\n<p>This is the full and accurate transmission story for every feature. The default install transmits nothing.<\/p>\n\n<p><strong>1. &ldquo;Scan now&rdquo; button \u2014 default scan flow<\/strong><\/p>\n\n<ul>\n<li>Runs entirely in your WP admin browser tab.<\/li>\n<li>Loads the target page in a hidden iframe and evaluates it with bundled axe-core 4.11.<\/li>\n<li><strong>Does not transmit anything to any external service.<\/strong><\/li>\n<li>Scan results are written to your WordPress <code>wp_options<\/code> table under the key <code>axle_last_scan<\/code> so the admin dashboard can render the summary.<\/li>\n<\/ul>\n\n<p><strong>2. Auto scan = Daily (opt in only \u2014 Off by default)<\/strong><\/p>\n\n<ul>\n<li>Only relevant if you explicitly enable this in Tools \u2192 AsafAmos Accessibility Scanner \u2192 Settings.<\/li>\n<li>WP-Cron runs without a browser, so the daily cron cannot use the in-browser iframe scanner. Instead it uses the hosted scanner at <code>POST https:\/\/axle-iota.vercel.app\/api\/scan<\/code> with body <code>{ \"url\": \"&lt;your configured target URL&gt;\", \"source\": \"axle-wordpress\" }<\/code> (and <code>Authorization: Bearer &lt;key&gt;<\/code> if you've entered an axle API key).<\/li>\n<li><strong>Requires your target URL to be publicly reachable<\/strong> \u2014 the hosted scanner cannot reach LocalWP, staging behind basic auth, or VPN-only environments.<\/li>\n<li>No visitor data, form data, or admin content is sent. Only the configured target URL.<\/li>\n<li>Disabled by default. Setting can be turned off again at any time.<\/li>\n<\/ul>\n\n<p><strong>Service provider for #2 (the opt-in daily cron only):<\/strong> axle (https:\/\/axle-iota.vercel.app)\n<strong>Terms of use:<\/strong> https:\/\/axle-iota.vercel.app\/terms\n<strong>Privacy policy:<\/strong> https:\/\/axle-iota.vercel.app\/privacy<\/p>\n\n<p>You may disable all external communication by deactivating the plugin, by turning off Auto scan and not clicking Scan now, or by blocking the host <code>axle-iota.vercel.app<\/code> at the network level.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin zip via Plugins \u2192 Add New \u2192 Upload, or copy the plugin folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate through the Plugins menu.<\/li>\n<li>Go to <strong>Tools \u2192 AsafAmos Accessibility Scanner<\/strong> and click <strong>Scan now<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20inject%20any%20javascript%20into%20my%20public%20site%3F\"><h3>Does this plugin inject any JavaScript into my public site?<\/h3><\/dt>\n<dd><p>No. The bundled axe-core engine is loaded only inside your WordPress admin pages, never on your public-facing site. Your visitors see nothing.<\/p><\/dd>\n<dt id=\"what%20data%20leaves%20my%20site%20by%20default%3F\"><h3>What data leaves my site by default?<\/h3><\/dt>\n<dd><p>By default, <strong>nothing<\/strong>. The Scan now button runs entirely client-side in your admin browser via a hidden iframe \u2014 no analytics, no tracking, no calls to any external server. The only optional feature that contacts a server is the opt-in daily cron (Off by default), described in the &ldquo;Optional features&rdquo; section.<\/p><\/dd>\n<dt id=\"do%20i%20need%20an%20account%3F\"><h3>Do I need an account?<\/h3><\/dt>\n<dd><p>No. The plugin works without any signup. The optional Claude-generated code-fix feature requires a paid axle API key entered in Settings, but you do not need it to scan.<\/p><\/dd>\n<dt id=\"does%20this%20replace%20a%20professional%20accessibility%20audit%3F\"><h3>Does this replace a professional accessibility audit?<\/h3><\/dt>\n<dd><p>No. Automated scanning catches roughly 57% of WCAG issues. For full compliance, a human auditor is still recommended.<\/p><\/dd>\n<dt id=\"what%20about%20gdpr%20%2F%20privacy%3F\"><h3>What about GDPR \/ privacy?<\/h3><\/dt>\n<dd><p>The plugin does not track you or your visitors and includes no analytics. The default scan flow makes no outbound HTTP requests to any external service. The only optional feature that contacts a server is the opt-in daily cron (Off by default), documented under &ldquo;Optional features&rdquo; with the exact request body.<\/p><\/dd>\n<dt id=\"i%27m%20on%20localwp%20%2F%20staging%20behind%20basic%20auth%20%2F%20a%20vpn-only%20host.%20will%20this%20still%20work%3F\"><h3>I'm on LocalWP \/ staging behind basic auth \/ a VPN-only host. Will this still work?<\/h3><\/dt>\n<dd><p>Yes \u2014 the default Scan now flow works on any environment because it runs entirely inside your admin browser. The optional Auto scan = Daily setting requires public reachability and won't work for these environments; leave it Off.<\/p><\/dd>\n<dt id=\"why%20is%20the%20plugin%20called%20%26ldquo%3Basafamos%20accessibility%20scanner%26rdquo%3B%20and%20not%20%26ldquo%3Baxle%26rdquo%3B%3F\"><h3>Why is the plugin called &ldquo;AsafAmos Accessibility Scanner&rdquo; and not &ldquo;axle&rdquo;?<\/h3><\/dt>\n<dd><p>The author's WordPress.org username is <code>asafamos1<\/code>. The plugin is part of the <code>axle<\/code> accessibility-CI ecosystem (separate hosted service at https:\/\/axle-iota.vercel.app) but maintained by AsafAmos individually for the WordPress.org directory.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Removed the anonymous usage ping entirely per WordPress.org Plugin Review Team feedback \u2014 no tracking, no phoning home. The plugin now makes zero outbound requests by default. The only optional network feature is the opt-in daily cron (Off by default), which contacts the hosted scanner as a service you explicitly enable.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Renamed plugin display name and slug from &ldquo;Axle Accessibility Scanner&rdquo; \/ <code>axle-accessibility-scanner<\/code> to &ldquo;AsafAmos Accessibility Scanner&rdquo; \/ <code>asafamos-accessibility-scanner<\/code> per WordPress.org Plugin Review Team feedback (avoid the &ldquo;Axle&rdquo; trademark concern).<\/li>\n<li>Rewrote readme to remove inconsistencies between the original 1.0.0 (hosted-scan) and current 1.1.0+ (in-admin-iframe) architectures. The default scan flow now described accurately as fully client-side; optional hosted features moved to a clearly-labelled section.<\/li>\n<li>Updated <code>Contributors<\/code> to the plugin owner's WordPress.org username <code>asafamos1<\/code>.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Scans now run <strong>client-side in the admin browser<\/strong> using bundled axe-core 4.11. Works for LocalWP, staging behind basic auth \/ VPN, and any other private environment the previous hosted scanner could not reach.<\/li>\n<li>No external network calls during a normal Scan now.<\/li>\n<li>Auto scan cron still uses the hosted scanner (it has no browser available). Disabled by default; opt in via Settings.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<li>WCAG 2.1 \/ 2.2 AA scanning via axe-core 4.11.<\/li>\n<li>Admin dashboard under Tools menu.<\/li>\n<li>Settings for target URL, severity threshold, optional API key.<\/li>\n<\/ul>","raw_excerpt":"Scan your WordPress site for WCAG 2.1 \/ 2.2 AA violations. axe-core 4.11 runs in your admin browser via a hidden iframe \u2014 nothing transmitted by defau &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/304102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=304102"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/asafamos1"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=304102"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=304102"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=304102"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=304102"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=304102"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=304102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}