Easy WCAG
Fix live HTML accessibility gaps. Audit what still needs a human. No overlay.

System plugin
What Easy WCAG is
After Joomla builds the page, Easy WCAG applies safe accessibility fixes to the HTML sent to the browser: missing lang, image alt, iframe titles, empty controls, new-window hints, form labels, and a skip link when a main landmark exists. It also runs a focused checklist (duplicate IDs, broken ARIA, unnamed controls, heading outline, title and lang) and lets you add your own report, replace, or attribute rules.
Article source stays unchanged. No visitor overlay. No CDN script, so Google PageSpeed stays cleaner than overlay widgets. Super Administrators can open a debug panel on the page they visit. Every fix and checklist item can be switched off. Pair it with Easy Accessibility when visitors need their own text size, contrast, or Read Mode.
Image alt
Adds alt from the filename when the attribute is missing.
Iframe title
Adds a title from the embed host or file name.
Empty controls
Icon-only links and buttons get an aria-label.
New window
Adds rel="noopener noreferrer" and a screen-reader hint.
Form labels
Unlabelled inputs get aria-label from placeholder or name.
Skip to content
Injects a skip link when a main landmark exists and none is present.
html lang
Sets lang from the active site language when it is missing.
Audit reports
Duplicate IDs, broken ARIA refs, unnamed controls, heading outline, title and lang.
Your own rules
Add report, find/replace, regex, or attribute rules in the plugin. Developers can drop in PHP classes.
Super User panel
Logged-in Super Administrators see Fixed, Checklist, Needs review, and Switched off. Visitors never see it.
Fix, Report, or Off
Fix rewrites the live HTML. Report only lists what would change. Off pauses without uninstalling.
Every switch is yours
Turn off any fix or checklist item. Exclude components, URLs, menu items, or simple selectors.
Honest limits
What it is not
Easy WCAG does not claim WCAG AA certification. Pair it with Easy Accessibility for visitor preferences, and with a real review when you need a compliance claim.
- Does not rewrite heading order or rename IDs
- Does not fix colour contrast or font sizes
- Does not invent meaningful alt text beyond the filename
- Does not claim WCAG AA, and does not replace a visitor preference toolbar
How to read the examples
-
Demo
Live HTML after Easy WCAG runs. Look for
data-ewcagwhen Mark fixes is on. View source for FIXED / REPORT / REVIEW. - Source HTML What was saved in the article, before the plugin ran.
- Settings System > Plugins > System - Easy WCAG. Choose Fix, Report only, or Off. Super User debug panel shows the same list on the page.
This image has no alt attribute in the article. Easy WCAG adds one from the filename.
![]()
<img src="/images/demo/demo-logo.webp" width="180" height="48">
Iframes need a title for screen readers. This local embed has none in the article. Easy WCAG adds one. No YouTube or third-party player is loaded.
<iframe src="/images/demo/ewcag-sample-embed.html" width="100%" height="180"></iframe>
Links with target="_blank" get rel="noopener noreferrer" and a screen-reader hint.
<a href="https://joomlax.com" target="_blank">JoomlaX website</a>
This input has a placeholder only. Easy WCAG adds aria-label from the placeholder.
<form action="#" method="get"><input type="search" name="q" placeholder="Search the demo"></form>
Easy WCAG never renames IDs. It reports the duplicate so you can fix the template or module output.
<input id="ewcag-dup" name="a" type="text"> <input id="ewcag-dup" name="b" type="text">
aria-describedby points at an id that does not exist. Easy WCAG reports it. It does not invent a target element.
<input type="email" aria-describedby="ewcag-missing-help" placeholder="Email">
Heading levels are not rewritten. A jump is reported as a possible structural issue, not a WCAG failure.
Demo section
<h2>Demo section</h2> <h4>Skipped heading level</h4>
A plugin custom rule targets span.ewcag-custom-plain and adds role="status" when it is missing.
Live status
<span class="ewcag-custom-plain">Live status</span>