{"id":345962,"date":"2026-07-30T07:59:49","date_gmt":"2026-07-30T07:59:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/a11yfy-pdf-accessibility-checker-fixer\/"},"modified":"2026-07-30T08:38:56","modified_gmt":"2026-07-30T08:38:56","slug":"a11yfy-pdf-accessibility-checker-fixer","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/a11yfy-pdf-accessibility-checker-fixer\/","author":23534308,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"a11yfy \u2013 PDF Accessibility Checker & Fixer","header_author":"a11yfy","header_description":"Free in-browser PDF accessibility scan (Matterhorn Protocol machine checks) and one-click PDF\/UA-1 remediation via the a11yfy service.","assets_banners_color":"104b42","last_updated":"2026-07-30 08:38:56","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/a11yfy.com\/wordpress","header_author_uri":"https:\/\/a11yfy.com","rating":5,"author_block_rating":0,"active_installs":0,"downloads":27,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"a11yfy","date":"2026-07-30 08:38:56"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3628129,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3628129,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3628129,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3628129,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3628129,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3628129,"resolution":"1","location":"assets","locale":"","width":2560,"height":1600},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3628129,"resolution":"2","location":"assets","locale":"","width":2560,"height":1600},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3628129,"resolution":"3","location":"assets","locale":"","width":2560,"height":1600},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3628129,"resolution":"4","location":"assets","locale":"","width":2560,"height":1600},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3628129,"resolution":"5","location":"assets","locale":"","width":2560,"height":1600}},"screenshots":{"1":"Dashboard: every PDF in your Media Library with its accessibility status \u2014 credit balance, filter chips, one-click Fix and \"Fix all\".","2":"Plain-language issue details with a live page preview \u2014 findings are highlighted right on the page, and each failed checkpoint explains what the remediation will do about it.","3":"After remediation: the issues found before are shown crossed out with a \"Fixed\" chip \u2014 verified by re-running the free scan.","4":"Accessibility column in the Media Library list view, with row actions.","5":"One-question onboarding: automatic or manual remediation, with an optional monthly credit cap (0 = no limit)."}},"plugin_section":[],"plugin_tags":[1953,2682,241427,1764,1956],"plugin_category":[34,50],"plugin_contributors":[273773],"plugin_business_model":[],"class_list":["post-345962","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-ada","plugin_tags-eaa","plugin_tags-pdf","plugin_tags-wcag","plugin_category-accessibility","plugin_category-media","plugin_contributors-a11yfy","plugin_committers-a11yfy"],"banners":{"banner":"https:\/\/ps.w.org\/a11yfy-pdf-accessibility-checker-fixer\/assets\/banner-772x250.png?rev=3628129","banner_2x":"https:\/\/ps.w.org\/a11yfy-pdf-accessibility-checker-fixer\/assets\/banner-1544x500.png?rev=3628129","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/a11yfy-pdf-accessibility-checker-fixer\/assets\/icon.svg?rev=3628129","icon":"https:\/\/ps.w.org\/a11yfy-pdf-accessibility-checker-fixer\/assets\/icon.svg?rev=3628129","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/a11yfy-pdf-accessibility-checker-fixer\/assets\/screenshot-1.png?rev=3628129","caption":"Dashboard: every PDF in your Media Library with its accessibility status \u2014 credit balance, filter chips, one-click Fix and \"Fix all\"."},{"src":"https:\/\/ps.w.org\/a11yfy-pdf-accessibility-checker-fixer\/assets\/screenshot-2.png?rev=3628129","caption":"Plain-language issue details with a live page preview \u2014 findings are highlighted right on the page, and each failed checkpoint explains what the remediation will do about it."},{"src":"https:\/\/ps.w.org\/a11yfy-pdf-accessibility-checker-fixer\/assets\/screenshot-3.png?rev=3628129","caption":"After remediation: the issues found before are shown crossed out with a \"Fixed\" chip \u2014 verified by re-running the free scan."},{"src":"https:\/\/ps.w.org\/a11yfy-pdf-accessibility-checker-fixer\/assets\/screenshot-4.png?rev=3628129","caption":"Accessibility column in the Media Library list view, with row actions."},{"src":"https:\/\/ps.w.org\/a11yfy-pdf-accessibility-checker-fixer\/assets\/screenshot-5.png?rev=3628129","caption":"One-question onboarding: automatic or manual remediation, with an optional monthly credit cap (0 = no limit)."}],"raw_content":"<!--section=description-->\n<p><strong>Is your site ready for the European Accessibility Act (EAA) and the ADA?<\/strong> Most PDF documents on the web are not accessible: screen readers cannot read them in a meaningful order, images have no descriptions, forms have no labels. The requirements are similar on both sides of the Atlantic \u2014 the EAA in the EU, the ADA and Section 508 in the United States \u2014 and PDFs are the most commonly overlooked part.<\/p>\n\n<p>See the plugin in action (58 seconds):<\/p>\n\n<p>https:\/\/youtu.be\/O3wbNx5PUdA<\/p>\n\n<p>The a11yfy plugin gives you two things:<\/p>\n\n<ol>\n<li><p><strong>Free accessibility scan \u2014 100% local.<\/strong> The analysis engine runs in <em>your browser<\/em> (pdf.js + pdf-lib): it verifies your PDFs against 42 machine-verifiable checkpoints of the Matterhorn Protocol (PDF\/UA-1) \u2014 tag structure, document metadata, heading hierarchy, alternative texts, language settings, annotation nesting and more. Your files never leave your site. The result is a risk rating and a concrete list of problems for every PDF in your Media Library.<\/p><\/li>\n<li><p><strong>One-click remediation (optional, paid).<\/strong> Connect your a11yfy account and the plugin sends the selected PDFs to the a11yfy service, which produces a tagged, PDF\/UA-oriented accessible version \u2014 processed in the EU. The fixed file replaces the original at the same URL (the original is kept as a backup with one-click restore), or, in conservative mode, is served alongside it.<\/p><\/li>\n<\/ol>\n\n<p>The free scan is a genuine standalone tool \u2014 no account, no API calls, no telemetry. The paid service is only involved when you explicitly send a document for remediation.<\/p>\n\n<p><strong>Why a11yfy?<\/strong><\/p>\n\n<ul>\n<li>Files are processed in the EU, on EU infrastructure \u2014 GDPR-friendly by design.<\/li>\n<li>Works on scanned (image-only) PDFs too: OCR plus a full structural rebuild.<\/li>\n<li>The original file is always kept \u2014 one-click restore, tamper detection, free re-apply.<\/li>\n<li>Every remediated PDF comes with a verifiable certificate \u2014 downloadable from the document page or the Media Library, with a public verification link you can share.<\/li>\n<li>Fully translation-ready \u2014 translations are delivered via translate.wordpress.org as they become available.<\/li>\n<\/ul>\n\n<p><strong>Important:<\/strong> the free scan is a technical pre-check against the machine-verifiable PDF\/UA-1 checkpoints. It cannot (and does not claim to) certify full PDF\/UA-1, EAA or ADA compliance \u2014 that also requires human checks and font-level validation, which the a11yfy service performs during remediation.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the <strong>a11yfy API<\/strong> (https:\/\/a11yfy.com) \u2014 but <em>only<\/em> when you connect an API key and request remediation or balance information. The free scan never contacts any external service.<\/p>\n\n<p>What is sent and when:<\/p>\n\n<ul>\n<li><strong>When you remediate a PDF<\/strong> (manually, via bulk action, or through the automatic mode you enabled): the PDF file itself, its file name, and your API key are sent to <code>https:\/\/a11yfy.com\/v1\/jobs<\/code>. Processing happens in the EU.<\/li>\n<li><strong>Balance \/ job status checks<\/strong>: your API key is sent with each request; no document content.<\/li>\n<\/ul>\n\n<p>The plugin never sends analytics, usage statistics, or any data about your site visitors. Data processing terms: https:\/\/a11yfy.com\/privacy \u2014 Terms of service: https:\/\/a11yfy.com\/terms<\/p>\n\n<h3>Source Code<\/h3>\n\n<p>The bundled analysis engine is built from human-readable source with esbuild. Unminified source: the <code>js\/<\/code> directory of the public plugin repository at https:\/\/github.com\/a11yfy\/wp-plugin \u2014 the bundled libraries are pdf.js (Apache-2.0, https:\/\/github.com\/mozilla\/pdf.js), pdf-lib (MIT, https:\/\/github.com\/Hopding\/pdf-lib), smalot\/pdfparser (LGPL-3.0, https:\/\/github.com\/smalot\/pdfparser), Action Scheduler (GPL-3.0, https:\/\/github.com\/woocommerce\/action-scheduler).<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20the%20scan%20really%20free%3F\"><h3>Is the scan really free?<\/h3><\/dt>\n<dd><p>Yes. It runs in your browser using open-source libraries. It does not use the a11yfy API and works without an account.<\/p><\/dd>\n<dt id=\"how%20much%20does%20remediation%20cost%3F\"><h3>How much does remediation cost?<\/h3><\/dt>\n<dd><p>Remediation uses credits from your a11yfy account \u2014 typically 1\u20133 credits per page, depending on the PDF. The dashboard shows an estimate before you confirm, and the scan itself never costs anything. Current pricing: https:\/\/a11yfy.com\/pricing<\/p><\/dd>\n<dt id=\"my%20pdfs%20are%20scans%20%E2%80%94%20can%20they%20be%20fixed%3F\"><h3>My PDFs are scans \u2014 can they be fixed?<\/h3><\/dt>\n<dd><p>Yes. Scanned, image-only PDFs are OCR-processed and rebuilt with a full tag structure, including an invisible, screen-reader-readable text layer.<\/p><\/dd>\n<dt id=\"will%20the%20fixed%20pdf%20look%20different%3F\"><h3>Will the fixed PDF look different?<\/h3><\/dt>\n<dd><p>No. Remediation preserves the visual appearance; it adds the accessibility structure (tags, reading order, alternative texts, metadata) underneath.<\/p><\/dd>\n<dt id=\"which%20pdfs%20cannot%20be%20remediated%3F\"><h3>Which PDFs cannot be remediated?<\/h3><\/dt>\n<dd><p>Password-protected, XFA-form and portfolio PDFs are detected up front, clearly labelled, and never sent to the service. Digitally signed PDFs are detected too: remediation rewrites the file and would invalidate the signature, so the fix only starts after you explicitly confirm it on the document.<\/p><\/dd>\n<dt id=\"my%20security%20plugin%20reported%20that%20a%20pdf%20file%20changed.\"><h3>My security plugin reported that a PDF file changed.<\/h3><\/dt>\n<dd><p>That is the point of remediation: the accessible version replaces the original file (same URL). The original is kept in a protected backup folder and can be restored with one click from the Media Library.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20delete%20the%20plugin%3F\"><h3>What happens when I delete the plugin?<\/h3><\/dt>\n<dd><p>Remediated PDFs are your content and stay by default. In Settings you can choose to restore the original files on deletion instead. All plugin data (tables, options, scan results) is removed either way.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20offloaded%20media%20%28s3%2Fcdn%29%3F\"><h3>Does it work with offloaded media (S3\/CDN)?<\/h3><\/dt>\n<dd><p>Partially. Scanning works through a local proxy; in-place replacement automatically falls back to conservative mode for non-local files. Full offload support is planned.<\/p><\/dd>\n<dt id=\"in%20conservative%20mode%2C%20are%20all%20links%20to%20the%20pdf%20swapped%3F\"><h3>In conservative mode, are all links to the PDF swapped?<\/h3><\/dt>\n<dd><p>Conservative mode swaps links in post and page content (<code>the_content<\/code>) and wherever WordPress resolves the attachment URL (<code>wp_get_attachment_url<\/code>). Links hard-coded elsewhere \u2014 page-builder modules (Elementor, Divi, \u2026), widgets, navigation menus, or theme templates \u2014 may keep pointing to the original file and should be checked manually. The default in-place mode does not have this limitation: the accessible file replaces the original at the same URL.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Free in-browser PDF accessibility scan (PDF\/UA machine checkpoints) and one-click remediation of your Media Library PDFs via the a11yfy service.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/345962","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=345962"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/a11yfy"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=345962"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=345962"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=345962"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=345962"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=345962"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=345962"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}