Chat widgetAccessibilityExplainer

Chat Widget Accessibility: A WCAG 2.2 and EAA Checklist

What WCAG 2.2 and the European Accessibility Act require of a website chat widget, a 20-point checklist with test methods, and our own widget's results.

PepoChat TeamPublished Last verified 18 min read
A man in a black cap, glasses and white over-ear headphones types on a laptop at a white desk

Short answer

A chat widget must meet the same accessibility rules as the page it sits on, with WCAG 2.2 Level AA as the reference standard. The European Accessibility Act has covered consumer services such as online shops since 28 June 2025, exempting microenterprises that provide services, and the US Justice Department applies the ADA to websites of businesses open to the public. Our 20-point check of PepoChat's widget on 19 October 2026 found 5 failures, all fixed the same day.

Use this checklist if you run a chat widget on a website that serves the public, or if you are the developer asked whether that chat is accessible. The Web Content Accessibility Guidelines (WCAG) are the W3C's testable success criteria for accessible web content, grouped into levels A, AA and AAA, and every rule in this post leads back to them, directly or through a European standard. Below: the rules that reach a chat widget, the WCAG version to aim for, 20 checks with test methods, and questions for vendors.

The legal texts and standards cited below were read in the original on 19 October 2026: WCAG 2.2, the Official Journal text of Directive (EU) 2019/882, EN 301 549 V4.1.1 and the US Justice Department's web guidance. None of this is legal advice. Under the European Accessibility Act the obligations fall on the business offering the service to consumers, not on the company that makes the widget, so confirm your own position with a lawyer or your national regulator.

PepoChat is our product, and we audited its widget before writing this page with Lighthouse 13.5.0 and axe-core 4.14.0 in Chrome 155, a scripted keyboard walk and a review of the source code. The results are published as found, failures included, together with the fixes we released the same day and a second round of tests on the live widget. We did not test with a screen reader, so the table marks those checks as not tested rather than passed.

Do chat widgets have to be accessible?

Yes, wherever the website itself has to be. A chat widget is drawn onto your page, and WCAG treats conformance as a property of the whole page: it "cannot be achieved if part of a web page is excluded", in the words of WCAG 2.2. A launcher that a keyboard cannot reach, or a chat window a screen reader cannot read, makes your page fail whoever wrote the code.

The European Accessibility Act puts the obligations on the service provider (Article 13), and its exclusion for third-party content covers only content that is neither funded, developed by nor under the control of the business (Article 2(4)(d)). A widget you chose and configure yourself is hard to fit into that exclusion; that is our reading, not a court's. In the US, the Justice Department's fact sheet on its 2024 web rule for state and local governments says calendars, scheduling tools and payment systems built by outside companies usually need to meet WCAG 2.1 AA once a government puts them on its site.

The EU AI Act's chatbot disclosure also has to meet accessibility requirements; our post on AI chatbot disclosure laws covers that rule.

RuleWho it applies toTechnical standardApplies fromExemptions and limits
European Accessibility Act, Directive (EU) 2019/882, through each EU country's lawBusinesses providing listed services to consumers in the EU, including e-commerce, consumer banking, e-books and passenger transport websitesFunctional requirements in Annex I; presumption of conformity through a harmonised standard cited in the Official Journal28 June 2025Microenterprises providing services; contracts agreed before 28 June 2025 may run to expiry, five years at most; documented disproportionate burden
EN 301 549 V4.1.1 (CEN, CENELEC, ETSI)Anyone using it to show conformityWCAG 2.2 Level AA for web contentAdopted 24 August 2026; legal effect once cited in the Official JournalV3.2.1 (2021, WCAG 2.1 AA) remains the edition in force until then
ADA Title III, United StatesBusinesses open to the publicNo web regulation; the Justice Department points to WCAG and the Section 508 StandardsADA of 1990; web guidance dated 18 March 2022Businesses have flexibility in how they comply, but must comply
ADA Title II web rule, United StatesState and local governmentsWCAG 2.1 Level AA26 April 2027 (population 50,000 or more); 26 April 2028 (smaller entities, special districts)Some archived content, older documents and posts by members of the public
Revised Section 508 Standards, United StatesFederal agencies and the technology they buyWCAG 2.0 Level A and AA18 January 2018Unaltered older technology that met the original 508 standards

Read 19 October 2026 in the Directive's Official Journal text, EN 301 549 V4.1.1, ADA.gov and the US Access Board's standards; the Title II dates come from an interim final rule of 20 April 2026 that extended the original deadlines.

Does the European Accessibility Act apply to your chat widget?

The act reaches your chat widget if your business provides a covered service to consumers in the EU and is not a microenterprise, because the widget is part of the website through which you provide that service. The European Accessibility Act (EAA) is Directive (EU) 2019/882, an EU law that sets accessibility requirements for a list of products and services; EU countries apply it through national laws from 28 June 2025.

Article 2(2) of the directive lists the services: electronic communications, access to audiovisual media, parts of air, bus, rail and waterborne passenger transport including their websites, consumer banking, e-books, and e-commerce. The directive defines e-commerce services as services provided at a distance through websites and mobile apps, at a consumer's individual request, with a view to concluding a consumer contract. Because a consumer is a person acting outside their trade or profession, a service sold only to businesses is a separate question for your lawyer.

For websites, Annex I asks for sites and their related online applications to be perceivable, operable, understandable and robust, the same four principles WCAG is built on. Annex V adds a paperwork duty: the service provider must explain, in its general terms and conditions or an equivalent document, how the service meets the requirements. Businesses commonly meet it with an accessibility statement, and your chat widget belongs in that statement.

Two softer rules matter in practice. Service contracts agreed before 28 June 2025 may continue unchanged until they expire, but for no longer than five years (Article 32). And a provider may skip a requirement that would fundamentally alter the service or impose a disproportionate burden, but only after a documented assessment that it renews at least every five years (Article 14).

Microenterprises are the only size exemption for services. The directive defines one as an enterprise with fewer than 10 employees and an annual turnover or balance sheet total of no more than 2 million euros, and Article 4(5) exempts microenterprises providing services from the service requirements. Small and medium-sized businesses above that line are covered, and the exemption does not extend to products.

Which WCAG version should a chat widget meet?

Aim for WCAG 2.2 Level AA. WCAG 2.2 was first published as a W3C Recommendation on 5 October 2023, and the current edition is dated 12 December 2024. The W3C says content that conforms to WCAG 2.2 also conforms to WCAG 2.0 and 2.1, so one target covers every rule in the table above. Version 2.2 removed one criterion, 4.1.1 Parsing, and added nine, four of which land squarely on chat widgets.

3.2.6 Consistent Help (Level A) lists fully automated contact mechanisms, which is what a chatbot is, among the help mechanisms that must keep the same relative position on every page that repeats them. 2.5.8 Target Size (Minimum) (AA) wants pointer targets of at least 24 by 24 CSS pixels, which catches tiny close buttons. 2.4.11 Focus Not Obscured (Minimum) (AA) fails a page where a fixed launcher or an open chat window completely hides the element that has keyboard focus. 3.3.8 Accessible Authentication (Minimum) (AA) applies when the chat asks visitors to verify an email: entering a code must not rely on memory alone, so the field should accept paste and autofill.

EN 301 549 is the European standard for accessible ICT products and services, published jointly by CEN, CENELEC and ETSI. Version 4.1.1, adopted on 24 August 2026, moves its web clauses to WCAG 2.2 and adds an annex mapped to the EAA; once the European Commission cites it in the Official Journal, meeting it gives a presumption of conformity with the act. Ireland's National Disability Authority expects that citation on 16 December 2026 and notes that version 3.2.1, built on WCAG 2.1, stays the edition in force until then.

The 20-point chat widget accessibility checklist

Run these checks on your own site with the widget installed, because your brand colour, your page and your placement change the result. Each row gives the WCAG 2.2 criterion, what to look for, how to test it and PepoChat's result. A pass means the test we ran found no problem; it is not a claim that the widget conforms to WCAG.

#WCAG 2.2 criterion (level)What to test in a chat widgetHow to testPepoChat result, 19 October 2026
14.1.2 Name, Role, Value (A)The launcher is a real button with a spoken nameTab to it; read the name in the browser's accessibility panePass: a button named "Open chat", then "Close chat"
24.1.2 Name, Role, Value (A)Every icon-only button in the window has a name that says what it doesInspect each icon buttonFailed, fixed the same day: the six icon buttons are now named, and the send button is "Send message"
31.1.1 Non-text Content (A)Logos and avatars have alt text or are hidden from screen readersLighthouse image-alt auditPass
42.1.1 Keyboard (A)Open, use and close the chat with the keyboard aloneTab, Shift+Tab, Enter, Space, EscapePass on the screens tested; no message sent
52.1.2 No Keyboard Trap (A)Tab can leave the open chat windowTab past the last controlPass
62.4.3 Focus Order (A)Focus enters the chat after opening and returns to the launcher after closingOpen with Enter, close with the window's X, press TabFailed, fixed the same day: the X and Escape now return focus to the launcher, retested live
72.4.7 Focus Visible (AA)Every focused control shows a visible indicatorTab through and lookPass; the message box shows only its caret and a faint border
82.4.11 Focus Not Obscured (Minimum) (AA)The launcher or open window never hides the focused element on your pageTab through your footer with the chat closed and openNot tested; depends on your page
91.4.3 Contrast (Minimum) (AA)Text reaches 4.5:1, including white text on your brand colourLighthouse color-contrast audit, then a contrast checkerFailed, fixed the same day: status line 4.62:1 on the demo's brand colour, retested live; red text and badge 4.83:1 by calculation; light brand colours now get black text
101.4.11 Non-text Contrast (AA)Launcher icon and control edges reach 3:1Contrast checker on icon and backgroundPass: launcher icon 3.96:1 or more
111.4.10 Reflow (AA)The window works at 320 CSS pixels wideNarrow the browser or zoom to 400%Pass at 320 by 568 and 320 by 256 pixels
121.4.4 Resize Text (AA)Text at 200% keeps every control usableBrowser zoom to 200%Not tested
131.4.12 Text Spacing (AA)Wider line, letter and word spacing hides nothingA text-spacing bookmarkletNot tested
142.5.8 Target Size (Minimum) (AA)Launcher, close and send targets are at least 24 by 24 pixelsLighthouse target-size auditPass: launcher 60 pixels, header buttons 32 pixels
154.1.3 Status Messages (AA)New replies, "typing" and errors are announced without moving focusA screen reader: NVDA, JAWS or VoiceOverNot tested; the code uses a log region, a status role and alert roles
161.3.1 Info and Relationships (A)States such as the current tab are exposed in code, not only by colourBrowser accessibility treeFailed, fixed the same day: the current tab is now marked in code
173.1.1 Language of Page (A)The chat declares the language it is written inInspect the lang attributePass: follows the widget's language
182.4.2 Page Titled (A)A hosted chat page has a title; the chat frame has a title attributeLighthouse document-title and frame-title auditsFailed on the hosted page, fixed the same day: it is titled "Chat", retested live; the frame passes as "Chat widget"
193.2.6 Consistent Help (A)The chat sits in the same place on every pageClick through three pagesPass when installed once in a shared layout
203.3.8 Accessible Authentication (Minimum) (AA)Verification codes can be pasted or autofilledPaste a code into the fieldPass in code review; not tested live

Tested 19 October 2026 on PepoChat's hosted chat page and on a local test page with the loader script, using Lighthouse 13.5.0 (mobile profile, two runs each), axe-core 4.14.0 with the WCAG 2.0, 2.1 and 2.2 A and AA rules, a scripted keyboard walk in Chrome 155 and a source code review. Contrast for colours not on screen during the audit was calculated from the theme's colour values. The fixes were released the same day, after which we re-ran Lighthouse on the hosted chat page and the keyboard walk on the live loader.

How do you test a chat widget with a keyboard?

Use only Tab, Shift+Tab, Enter, Space and Escape; the test takes a few minutes per page. Focus order is the sequence in which the Tab key moves through controls, and a chat widget has to fit into your page's sequence without losing the visitor.

  1. Load the page and press Tab until the launcher is focused. It should come after your page's own links, show a visible focus ring and announce itself as a button with a name such as "Open chat".
  2. Press Enter. The window should open and the launcher should report the change, either with aria-expanded or by renaming itself "Close chat".
  3. Press Tab once. Focus should land on the chat's first control, without a detour through the rest of your page.
  4. Tab through every control in the window. Each should show focus and come in reading order: header buttons, messages or suggestions, then the text box and send button.
  5. Open any menu with Enter, then press Escape. The menu should close and focus should return to the button that opened it.
  6. Close the chat with its own close button, then press Tab. Focus should be on the launcher or just after it, not back at the top of the page.
  7. Try to Tab out of the open window. If focus cannot leave the chat, you have a keyboard trap, a Level A failure.
Over-the-shoulder view of a person typing on a black keyboard in front of a computer monitor on a wooden desk
A keyboard-only test needs five keys: Tab, Shift+Tab, Enter, Space and Escape. Focus should enter the chat when it opens and return to the launcher when it closes.

In our runs on PepoChat (the loader on a test page, and the hosted chat page), steps 1 to 5 and 7 behaved as described. The launcher came straight after the page's link, opened with Enter and renamed itself "Close chat", and the next Tab landed on the chat's own close button. Step 6 failed: the window closed, focus stayed on the hidden chat frame, and the next Tab jumped to the first link at the top of the page. Escape inside the chat did nothing, which WCAG does not require but most keyboard users expect. Both were fixed the same day: on the live widget, the close button and Escape now close the chat and put focus back on the launcher, so Shift+Tab reaches the link before it.

Why does an automated audit score 100 when the chat has failures?

Many chat windows, PepoChat's and LiveChat's among them, run inside an iframe served from the vendor's domain, and Lighthouse's accessibility audit tests your page, not the frame's contents. A local test page with PepoChat's loader scored 100 with the chat closed and 100 with it open: the audit checked the launcher's name and the frame's title, and nothing inside. The same chat app, audited at its own address, scored 92 with two failures, and 100 after the fixes.

Page auditedLighthouse accessibility scoreAudits passedAudits failedWhat failed
Blank test page, no widget100100Nothing
Test page with the loader, chat closed (2 runs)100160Nothing
Test page with the loader, chat open (1 run)100170Nothing; the frame's contents were not audited
Hosted chat page, the chat app itself (2 runs)92192Status line contrast 3.47:1; no page title
Hosted chat page after the same-day fixes (2 runs)100210Nothing

Measured 19 October 2026 with Lighthouse 13.5.0, mobile profile, Chrome 155, on the same kind of local test page as our chat widget page-speed measurements; repeated runs matched. On the local page the open window showed PepoChat's allowed-domains notice, because the demo workspace does not list local addresses, so no visitor session was created.

Automated tools are worth running, but they cannot judge focus order, screen-reader announcements or whether a label makes sense; Lighthouse itself lists 10 items for manual review, such as logical tab order and focus traps. The US Justice Department's web guidance puts it plainly: "A 'clean' report does not necessarily mean everything is accessible." Audit the chat's own address if your vendor offers a hosted chat page, then do the keyboard test.

What did our audit of PepoChat's own widget find?

Five of the 20 checks failed, across the ten findings below, and we fixed all ten the same day. None needed a redesign. The release went live on 19 October 2026, and a repeat Lighthouse run on the hosted chat page scored 100, up from 92.

FindingWhere it appearsCriterionFound byWhat we changed
Status line at 3.47:1 on the demo's #006bff brand colourChat header1.4.3LighthouseFull-white text: 4.62:1 on #006bff, confirmed by the Lighthouse rerun
No page titleHosted chat page2.4.2LighthouseThe page is titled "Chat"
Focus lost after closing with the window's XEmbedded widget2.4.3Keyboard scriptClosing returns focus to the launcher, confirmed live
Six icon buttons without a nameBack arrows on five screens; scroll-to-latest arrow4.1.2Code reviewNamed "Back", "Back to chat", "Back to home" and "Scroll to latest message" in all seven widget languages
Send button named "Ask me anything…"Message box4.1.2Code reviewNamed "Send message"
Red error text and unread badge at 3.76:1Error messages, launcher badge1.4.3Contrast calculationA darker red, #dc2626: 4.83:1 with white
Privacy notice text at 4.39:1Above the message box, when a privacy link is set1.4.3Contrast calculationDarker grey text: 6.87:1
"Powered by" line at about 1.5:1 to 2.3:1 for typical brand colours, 80 percent white on the pale end of the gradientHome screen of workspaces with Help articles, on plans that show branding1.4.3Contrast calculationBlack text: at least 6.88:1 on any brand colour, by our calculation
Active tab shown only by colour and weightTab bar, when Help articles are published1.3.1Code reviewThe current tab is marked in code
Escape does not close the chat; no reduced-motion settingEmbedded widgetNot a Level AA criterionKeyboard script, code reviewEscape closes the chat, confirmed live; animations stop when the visitor's device asks for reduced motion

Found 19 October 2026 on the live widget and in the source code of that date, and fixed in a release deployed the same day; the loader we retested is byte-for-byte the file now served at widget.pepochat.com. Ratios for colours that were not on screen during the retest are calculated from the theme's colour values.

The brand colour no longer sets a floor. The chat header used to draw its title and status line ("AI assistant · online") in white whatever colour you chose, and the status line, at 80 percent white, measured 3.47:1 on the demo workspace's #006bff. It is now full white: 4.62:1 on #006bff and 6.29:1 on the default #4f46e5. A second release the same day made PepoChat check the colour you pick. White stays while it reaches 4.5:1; on a lighter colour the header, buttons and the visitor's own messages switch to black text, the active tab uses a darker shade of the colour, and the welcome text on the home screen takes whichever of white or black stays readable where its lines sit on the gradient.

A smiling older man in a checked shirt and knitted vest reads a smartphone on a sofa while holding a teal mug
Small status text on a brand colour is an easy place for a chat widget to lose contrast. WCAG asks for 4.5:1 for normal-size text, and the rule covers every line in the chat window, not only the messages.

What passed: the launcher is a native button whose name carries the unread count ("Open chat, 2 unread replies"), and every control on the chat's home screen was reachable with Tab, in visual order, with a visible focus indicator. The menu opened with Enter and closed with Escape, returning focus, the window reflowed at 320 pixels without sideways scrolling, and Lighthouse's target-size audit passed.

What we did not test: screen readers (NVDA, JAWS, VoiceOver, TalkBack), 200 percent text zoom, text spacing, high-contrast modes, and the booking and voice screens. A live region is an area of the page that screen readers announce when its content changes; PepoChat's message list is one (role="log"), the typing indicator uses role="status" and form errors use role="alert", but code is not proof that a screen reader reads a streamed reply well. PepoChat makes no WCAG conformance claim for the widget.

Which chat widget failures should you look for first?

Check these five problems first; each takes minutes to test.

A launcher without a name. An icon-only launcher announced as "button" tells a screen-reader user nothing. The accessible name should say what happens, and a good one includes the unread count.

Focus that is lost or trapped. Opening should put the chat next in the Tab order, closing should return focus to the launcher, and Tab must always be able to leave; a chat that traps focus fails Level A.

Replies that are never announced. A sighted visitor sees a new message appear; a screen-reader user hears nothing unless the message list is a live region. Streaming replies can also be read out in fragments, so listen with a real screen reader.

Brand colours that drop below 4.5:1. Widgets usually draw white text on the colour you pick, and mid-tone blues, greens and oranges fail. LiveChat said in June 2021 that its widget adjusts colours derived from the brand colour to keep the required contrast; PepoChat has done the same since 19 October 2026, switching to black text on light colours.

Motion that cannot be turned off. Slide-in windows, bouncing typing dots and wobbling launchers should respect the operating system's reduce-motion setting. WCAG's Animation from Interactions (2.3.3) is Level AAA, so this is a courtesy at AA that motion-sensitive visitors notice. PepoChat's widget has followed the setting since 19 October 2026.

A visible text link such as "Chat with us" in your page's content gives keyboard and screen-reader users a predictable way into the chat. PepoChat's JavaScript API exposes EchoWidget.show() for exactly that.

What should you ask a chat widget vendor about accessibility?

Ask for an Accessibility Conformance Report (ACR), which is a vendor's completed VPAT, the Voluntary Product Accessibility Template maintained by the Information Technology Industry Council. The current VPAT version is 2.5Rev from April 2025, in four editions: 508, EU (EN 301 549, which brings WCAG 2.1), WCAG (up to 2.2) and INT, which combines the other three. The vendor marks each criterion supports, partially supports, does not support or not applicable, with remarks.

Then ask which product the report covers (the visitor-facing widget, not the agent dashboard), who tested it and when, which WCAG version, which screen readers, and what happens when a customer picks a brand colour that fails contrast. A good answer looks like Zendesk's. Its accessibility page, read on 19 October 2026, lists a VPAT 2.5 International Edition report for the Web Widget for messaging dated September 2025, based on a third-party audit, says reports since 2024 test against WCAG 2.2 AA, and links separate EAA documentation.

PepoChat has not published an ACR or an accessibility statement yet; this page is the first public record of our tests, and the contact page reaches the team for a procurement review. Whatever the vendor, audit your own configuration too, because a report describes the vendor's defaults, not your brand colour; in PepoChat the hosted chat page is the easiest address to audit.

What to do next

Run the keyboard test and a contrast check on your own site this week, then add the other checks to your AI chatbot launch checklist. Install the widget once in a shared layout so it sits in the same place on every page, as the script tag guide describes, and cover the usability side of the same window with our website chatbot best practices. To repeat our tests on PepoChat with your own brand colour, start a free workspace; every feature is on the free plan.

Frequently asked questions

Does the European Accessibility Act apply to a chat widget?
It applies to the service the widget is part of. Since 28 June 2025, businesses providing covered services to EU consumers, such as e-commerce, consumer banking and e-books, must make their websites and related online applications accessible, and a chat widget on those pages is part of them. Microenterprises providing services are exempt. The duty sits with the business, not the widget vendor. This is not legal advice.
Which WCAG version should a chat widget meet?
WCAG 2.2 Level AA. The W3C says content that conforms to WCAG 2.2 also conforms to versions 2.1 and 2.0, so one target covers EU and US rules. EN 301 549 V4.1.1, adopted in August 2026, moves to WCAG 2.2; until the European Commission cites it in the Official Journal, the edition in force is built on WCAG 2.1. The US Title II rule uses WCAG 2.1 AA.
Are small businesses exempt from the European Accessibility Act?
Only microenterprises providing services are exempt: businesses with fewer than 10 employees and an annual turnover or balance sheet total of no more than 2 million euros, under Articles 3 and 4(5) of Directive (EU) 2019/882. Small and medium-sized businesses above that line are covered, and the exemption does not apply to products. National laws implement the act, so check your country's version.
How do I test a chat widget with a keyboard?
Use only Tab, Shift+Tab, Enter, Space and Escape. Tab to the launcher and check that it shows focus and has a name, press Enter to open the chat, press Tab to move into it and reach every control, then close it with its own close button and confirm focus returns to the launcher. If Tab cannot leave the window, that is a keyboard trap.
Do chat messages need to be announced to screen readers?
Yes. WCAG 2.2's Status Messages criterion, 4.1.3 at Level AA, requires status messages such as results, waiting states and errors to be exposed in code so screen readers can announce them without moving focus. In a chat that covers typing indicators and errors, and a log region is the usual way to have new replies read out. Test with NVDA, JAWS or VoiceOver.
What is a VPAT and should I ask my vendor for one?
A VPAT is the Information Technology Industry Council's Voluntary Product Accessibility Template; filled in for a product, it becomes an Accessibility Conformance Report. The current version, 2.5Rev from April 2025, has editions for Section 508, EN 301 549, WCAG and all three combined. Yes, ask for one, and check which product it covers, its date, who tested it and which WCAG version.

Try this on your own site in ten minutes

PepoChat includes every feature on the free plan — 200 AI replies and 5 knowledge sources a month, no credit card.