216digital.
Web Accessibility

ADA Risk Mitigation
Prevent and Respond to ADA Lawsuits


WCAG & Section 508
Conform with Local and International Requirements


a11y.Radar
Ongoing Monitoring and Maintenance


Consultation & Training

Is Your Website Vulnerable to Frivolous Lawsuits?
Get a Free Web Accessibility Audit to Learn Where You Stand
Find Out Today!

Web Design & Development

Marketing

PPC Management
Google & Social Media Ads


Professional SEO
Increase Organic Search Strength

Interested in Marketing?
Speak to an Expert about marketing opportunities for your brand to cultivate support and growth online.
Contact Us

About

Blog

Contact Us
  • WCAG 1.4.10 Reflow: How to Avoid Two-Direction Scrolling

    Have you ever visited a page that looks fine at first, but when you zoom in, you have to scroll sideways just to read the content? Or maybe you’ve had to zoom in and out to see everything? We still see this during reviews, even on sites that claim to be “responsive.”

    WCAG 2.1 Success Criterion 1.4.10 (Reflow) is the WCAG requirement meant to prevent that. It says digital content needs to adapt to different screen sizes, eliminating the need for horizontal scrolling—even at 400% zoom—without losing functionality or readability.

    But because a desktop screen size is defined as 1280×1024 pixels, the criterion effectively requires your site to adjust to fit within a 320×256-pixel frame. That just happens to match older phone widths, so we get sites that work on small mobile devices without requiring two-dimensional scrolling to view content on a page.

    It helps to treat this as a zoom issue first. Breakpoints matter, but zooming makes the viewport smaller while users still expect everything to work the same. Kind of nice, right? So don’t write off older phone widths—test across screen sizes.

    What WCAG 1.4.10 Reflow Requires

    1.4.10 Reflow is about layout adaptability under constraints. When the viewport gets narrow, whether from device size, split-screen, or browser zoom, the page should reorganize so standard content fits within the visible area. Users should not have to scroll in both directions to read or interact with the site’s content.

    WCAG points to a width equivalent to 320 CSS pixels for vertically scrolling pages. Testing at 400% zoom is common because the viewport width shrinks as zoom increases. Zoom itself is not the requirement. The requirement is the experience at an equivalent small viewport.

    For content designed to scroll horizontally, WCAG uses a height equivalent to 256 CSS pixels. In practice, zoom scales width and height together, so we test at a small width and a small height together when possible, then validate with zoom on real devices when issues show up.

    What’s the Difference Between 1.4.4 Resize Text and 1.4.10 Reflow?

    Both help users with visual impairments, but they solve different problems. One is about text size. The other is about layout under zoom.

    WCAG 1.4.4 Resize Text focuses specifically on making text larger. It requires that users can zoom text up to 200% without needing assistive tools like screen magnifiers, and without the page layout breaking. If you need that extra boost in text size to read comfortably, this criterion keeps content readable and functional at that scale.

    WCAG 1.4.10 Reflow, on the other hand, is about layout behavior. This criterion requires that content can be zoomed up to 400% without needing horizontal scrolling. It ensures everything—text, images, buttons—fits within the screen’s width,  especially when the effective viewport becomes narrow. The goal is to keep scrolling in one direction (usually up and down), so users aren’t stuck scrolling side to side to follow content.

    In short, 1.4.4 scales text, while 1.4.10 makes sure the page layout adapts at high zoom without breaking use.

    Why Horizontal Scrolling Hurts Users

    When content does not reflow, reading turns into a repetitive pattern: scroll right to finish a line, then scroll left to find the start of the next. We’ve watched users lose their place after each line break because the viewport moved more than the text. The page still “worked,” but reading became the task.

    Dr. Wayne Dick’s research on horizontal scrolling links it to increased reading effort and reduced comprehension. In testing, we see the same behavior. Time to complete a task climbs. Errors climb. People abandon the page sooner.

    Reflow also reduces physical effort. Horizontal scrolling often requires more precise movement than vertical scrolling. Trackpads, touch gestures, and wheel setups all behave differently. Under magnification, the precision demands go up fast.

    Who Gets Blocked When Reflow Fails

    • Low vision: You zoom in to read. Your layout should stay readable without side-scrolling.
    • Small screens (mobile or split-screen): You have limited width. Your content should reflow so that reading and controls stay in one direction.
    • Keyboard or switch controls: You move focus step by step. The focus should remain visible, and controls should not slide off-screen at high zoom levels.
    • Cognitive or attention-related disabilities: You follow structure and spacing. Your experience improves when content doesn’t shift sideways or break into hard-to-track fragments.

    CSS Fixes That Help Content Reflow

    Reflow issues often come from overflow. Fixes tend to work best when you address the cause, rather than hiding the symptom. The work almost always sits at the component level.

    • Use Flexbox and Grid with restraint. Start by removing explicit widths. Let items grow and shrink. Add flex-wrap so rows can stack when space is tight. Media queries still matter, but they should not block zoom behavior.
    • Keep media inside its container. Set images and video to max-width: 100% (and typically height: auto). Without this, one fixed-width asset can force horizontal scroll at high zoom.
    • Let UI expand when text wraps. Test long labels, buttons, and badges. If a label wraps to two lines, the component should grow vertically. Avoid height constraints that clip text.
    • Remove shrink blockers in flex layouts. If a flex child refuses to shrink and pushes the page wide, check for min-width (including defaults). Adjust or override when needed so the layout can reflow.
    • Handle long strings at the right container. Apply wrapping rules where the overflow originates (not globally). Use options like overflow-wrap: anywhere; or word-break deliberately for URLs, IDs, and unbroken strings.
    • Contain exempt content instead of the whole page. For tables, use a scrollable container with overflow: auto. Keep the table’s width intact inside that container. This respects the exception while protecting the rest of the page.
    • For exempt sections, isolate scrolling to the section itself. Tables, code blocks, and specialized regions should scroll inside their own containers so the page does not inherit page-level horizontal scrolling.
    • Sticky UI needs narrow-viewport rules. Switch fixed positioning to static positioning, collapse UI into a toggle pattern, or reduce footprint so content and focus remain visible.

    Reflow Exceptions: Tables, Maps, and More

    Some content needs a two-dimensional layout to keep its meaning or function. Data tables with multiple columns are the most common example. Maps, diagrams, video, games, presentations, and interfaces that require persistent toolbars can fall into this category, too.

    The exception is limited. If a table qualifies for a two-dimensional layout, the exception applies to the table area. It does not grant permission for the rest of the page to overflow. We have reviewed pages where a wide table forced page-level horizontal scrolling, and then a paragraph below the table also extended off-screen. The table sits under the exception. The paragraph does not. That pattern fails 1.4.10 Reflow.

    How to Test WCAG 1.4.10 Reflow

    We use two passes. The steps stay the same. Recreate an equivalent small viewport, then try to use the page.

    1. Test Reflow in Chrome DevTools

    We start in Chrome DevTools and set a custom device size close to 320 by 256. WCAG lists width and height separately, but zoom scales both dimensions together, so testing them together catches common failures.

    1. Open DevTools and toggle the device toolbar.
    2. Add a custom device near 320×256 and load the page.
    3. Look for loss of content, loss of function, overlap, clipping, and page-level two-direction scrolling.
    4. Do a quick task run: read a paragraph, open main navigation, tab through a form, trigger an error state, then recover.

    2. Validate With 400% Zoom on Real Devices

    When we see issues, we confirm with browser zoom at 400% on one or two laptops. The usable viewport changes with browser chrome, OS scaling, scrollbars, and docked windows. We’ve seen pages look fine in an emulated viewport, then fail at 400% because sticky UI took most of the remaining height.

    Find the Element Causing Horizontal Scroll

    • Set zoom to 400% and get the viewport down to an equivalent narrow width by resizing the window or using responsive mode.
    • Watch for page-level horizontal scroll. If it appears, inspect which element is pushing past the viewport. Often, one container causes the full issue.
    • Read standard content. If a paragraph requires side-scrolling, that section fails 1.4.10 Reflow.
    • Tab through navigation, forms, and core controls. If focus moves off-screen horizontally or ends up behind fixed UI, treat it as a failure pattern tied to reflow behavior.
    • Check high-risk components. Tables, carousels, media embeds, code blocks, and long strings. Confirm that the exempt content is contained, and that the surrounding content still reflows.

    When the Viewport Shows 318 Instead of 320

    If you see 318 in DevTools at 400% zoom, that’s common. Scrollbars and browser chrome reduce available space. Focus on the requirement. Standard content reads and works without two-direction scrolling, at an equivalent small viewport.

    Make Reflow Part of Your Release Checks

    Start with your highest-traffic templates: article pages, account pages, and form flows. Test them at 400 percent zoom and an equivalent narrow viewport. Fix overflow at the component level, not by forcing page-wide scrolling.

    Avoid fixed-width wrappers in core layout. Contain exempt content inside its own scroll region. Constrain media to its container width. Adjust sticky UI rules at narrow widths so content and focus remain visible. Test with real strings and real error states.

    At 216digital, we treat 1.4.10 Reflow as part of front-end quality. If you want help validating complex UI patterns and fixing root overflow issues without destabilizing your design system, schedule a complimentary ADA Strategy Briefing.

    Greg McNeil

    February 20, 2026
    WCAG Compliance
    1.4.10 Reflow, Accessibility, How-to, WCAG, WCAG Compliance, web developers, web development, Website Accessibility
  • How to Revive Web Accessibility After a Plateau

    Most accessibility programs don’t fail suddenly. They stall.

    At first, you see progress you can point to. But slowly, fewer people get trained, bug fixing slows down, and the accessibility dashboard plateaus once leadership stops looking at it. In some organizations, accessibility slips from a program back into a short-term project. Then it gets treated as “done” until a customer complaint or a legal demand letter forces attention again.

    A plateau isn’t a sign your accessibility program is doomed. It usually means it has outgrown its original structure, leadership model, or how you measure progress. If you want to revive web accessibility, treat it as a system problem. You’re probably seeing repeat issues across templates and shared components, accessibility showing up late in the sprint, and audits that keep flagging the same patterns. Momentum comes back when accessibility is built into planning, design, development, and QA so fixes land as defaults, not one-offs.

    Signs Your Web Accessibility Program Has Plateaued

    A plateau is easy to miss because work is still getting done. You may be shipping fixes and still seeing the same issues return in the next sprint.

    Fix Repeat Accessibility Bugs in Templates and Components

    The same patterns show up again and again:

    • New components repeat old contrast failures.
    • Heading structures get skipped in content work.
    • QA logs the same missing label bugs repeatedly.

    This points to a reactive approach. You fix what you find after it ships, but the workflow still allows the issue to enter the system again. If you want to revive web accessibility, start with the defect classes you keep re-fixing. That is where your workflow is leaking.

    Set Accessibility Goals That Teams Can Execute

    If people across your organization cannot name a single accessibility objective for the current quarter, you have likely plateaued. “Meeting the  Web Content Accessibility Guidelines (WCAG)” is not a quarterly objective. It’s a baseline. Without specific objectives, your teams lose direction and drift into backlog work.

    To make goals usable, connect each one to a habit your teams can repeat. If your goal is time-to-fix, your habit might be weekly triage with agreed severity definitions and named owners. If your goal is component coverage, your habit might be “no new component ships without an accessible pattern and documentation.”

    Leadership Visibility: Metrics That Keep Accessibility Funded

    Executive enthusiasm is often strongest at launch. Over time, as things “seem fine,” attention fades and influence goes with it.

    Quarterly updates that connect accessibility to metrics leadership already cares about can keep it on the agenda. The ones that usually land are customer retention, legal risk, and developer velocity. If you can, include feedback from disabled customers in your research and route that feedback to product owners. It can change decisions because it ties defects to blocked tasks, not a checklist.

    Build Accessibility Capability Across Teams

    When most accessibility knowledge sits with a small group, demand will eventually exceed capacity. Teams stop asking for help, or they guess. Both paths lead to inconsistent solutions and recurring defects.

    If you see one team shipping solid fixes while another team repeats basic failures, that gap is a capability issue. It usually means people don’t have shared patterns, a clear path for questions, or enough training tied to the work they ship.

    Metrics That Predict Regressions

    If your reporting is limited to only WCAG violations, you are measuring the minimum, not whether your teams are preventing regressions. Compliance tracking matters, but it can hide repeat failure.

    Add a few prevention signals so you can tell whether the system is improving, not just whether a scan score moved. Net new accessibility bugs per release, regressions per release, and average time-to-fix are often more useful than raw violation totals.

    If you want to revive web accessibility, you need metrics that show prevention and capability, not only defect volume.

    Why Accessibility Programs Stall Under Delivery Pressure

    Strong programs usually have five basics: a named owner, a real budget, a written accessibility policy, leadership support, and training that people complete.

    Those help, but they don’t prevent a stall by themselves. Accessibility often slips when delivery pressure hits, and responsibility spreads out. When everyone can approve, no one is accountable. When everything funnels to one person, you’ve built a bottleneck.

    Sustained progress shows up when accessibility is treated like any other release requirement. It has clear checkpoints, assigned decision-makers, and an escalation path when something blocks release. It is part of the workflow, not a separate process.

    If you’re trying to revive web accessibility, look for approvals that happen without an accessibility check. That is where regressions enter. It might be a design review that signs off on a new pattern without keyboard behavior defined. It might be a PR review that skips accessible name checks for icon buttons.

    The Five Pillars of a Sustainable Accessibility Program

    The five elements also need to exist inside each team involved in accessibility, including content, development, QA, support, procurement, and HR. This is where many programs stall: the pillars exist “in theory,” but they do not show up in how teams plan, ship, and support work.

    Accountable Owner and Scope

    Name an accessibility lead per function or product area, with a clear scope. That may include triage ownership, review responsibilities, pattern decisions, and escalation authority when requirements are not met. If the lead can’t pause a release for a critical blocker, the role is mostly advisory.

    Budget for Prevention, Not Only Audits

    Budgets should cover more than audits and remediation sprints. Plan for:

    • Tooling and test coverage to catch regressions
    • Training and onboarding by role
    • Time allocation inside the normal delivery capacity
    • User testing that includes people with disabilities
    • Expert review at high-risk points, such as major releases and design system changes

    If you only budget for audits, you are budgeting for detection, not prevention. If you want to revive web accessibility, budget for the work that stops repeats.

    Policy as Workflow Gates and Definition of Done

    Policies should translate into workflow gates, not just statements. Examples:

    • Accessibility acceptance criteria in tickets
    • A definition of done that includes accessible names, keyboard behavior, and focus management
    • Review checklists for code and QA.
    • Vendor requirements and procurement gates
    • Support routing and response expectations

    Leadership support

    Leadership support needs a cadence and a format that stays relevant. Use metrics tied to risk, retention, and delivery efficiency. Share changes over time, not one-time status. Include customer feedback from disabled users where possible.

    Training That Sticks: Patterns and Reinforcement

    Training should be role-based and reinforced. Pair training with patterns and examples that teams can reuse. Build a way to ask questions that does not depend on one person being available.

    Revive Web Accessibility Outside the SDLC

    Plateaus can also be reinforced outside delivery.

    Procurement Standards for Accessible Vendors

    If your SaaS vendors or third-party tools are not accessible, you are creating barriers. Strengthen procurement by:

    • Requiring and evaluating VPATs
    • Validating claims with hands-on testing
    • Adding accessibility language to RFPs and contracts
    • Treating procurement as a gatekeeper, not a workaround

    If you have frequent accommodation requests tied to internal tools, procurement can reduce friction and reduce churn caused by barriers.

    Support Ticket Tagging for Accessibility Issues

    Users who hit barriers often contact support. If support cannot identify accessibility concerns or route them correctly, you lose trust and lose useful feedback.

    Practical steps:

    • Train support to recognize accessibility concerns and gather useful details
    • Add tags in your CRM to track patterns by feature and assistive tech.
    • Route issues to the right owners with clear SLAs
    • Follow up with users when fixes ship.

    Using Accommodation Trends to Drive Fixes

    Accessibility and accommodations should reinforce one another. When they do not, people fall through the cracks. Connect the accessibility team with the accommodations program, track trends, review SLAs, and use accommodations data to drive upstream fixes, often in procurement.

    If your accommodation process is inconsistent, people may have to repeat their needs and justification. That slows response time and increases risk. Document the process, clarify timelines, and reduce repeated burden.

    To revive web accessibility, treat internal experience as part of the system. Workplace barriers affect delivery quality and retention.

    Build a WCAG 2.1 Plan Your Teams Can Maintain

    Programs move forward when they combine shared ownership across roles, training that sticks, and measurable outcomes. When accessibility is embedded into planning, reporting cycles, and daily review habits, it scales with the work instead of fighting the backlog.

    That kind of progress is easier to sustain when WCAG 2.1 compliance work is tied directly to your development roadmap, with clear priorities, owners, and release checkpoints. If you want support building that strategy, 216digital can help you do it on your terms. Schedule a complimentary ADA Strategy Briefing so we can review the flows that matter most, confirm what is driving repeat defects, and map a plan that supports your business goals and your users’ needs.

    Greg McNeil

    February 18, 2026
    How-to Guides, Testing & Remediation
    Accessibility, How-to, Maintaining Web Accessibility, revive web accessibility, WCAG, Website Accessibility
  • Google Lighthouse 100? Automated Testing Still Falls Short

    A 100 score from automated testing feels good. Your dashboard turns green. The report says you passed every check. It looks complete. On paper, everything looks compliant. It is the kind of result that gets shared in Slack, checked off in a ticket, and filed away as “resolved.”

    But that score does not mean people can use your site.

    Most automated testing tools are helpful. They catch real barriers and save time. The problem is what they cannot measure. In practice, automated checks tend to cover only a slice of accessibility—roughly 30 percent—because they are limited to what can be evaluated programmatically. The remaining work involves interaction, context, and human judgment. As standards evolve and legal expectations keep tightening, you have to be honest about whether the metrics you rely on still tell the truth—for your business and for your users.

    Here is where automated testing leaves gaps that can turn into barriers for users and real exposure for your team.

    What Google Lighthouse Checks (and What It Doesn’t)

    Google Lighthouse is an open-source tool that audits a web page and reports on several quality signals—most commonly performance, SEO, and accessibility. It is widely used because it is easy to run, easy to share, and it produces a single score that feels objective.

    As an accessibility tool, though, Lighthouse is limited.

    How Lighthouse Calculates Your Accessibility Score

    Like all automated accessibility tests, Lighthouse can miss barriers that affect users (false negatives). It can also flag patterns that are not actually barriers in context (false positives). That is not a knock on Lighthouse. It is a reminder that the tool is only as reliable as what can be measured from code alone.

    When Google Lighthouse scores accessibility, it runs a set of pass-or-fail checks and assigns weights to each one. Your final score is a weighted average, which means some failures carry much more impact than others.

    A clear example is severe ARIA misuse. Putting aria-hidden=”true” on the body element is heavily weighted because it removes page content from the accessibility tree. When that happens, a screen reader user may not be able to perceive the page at all. Lighthouse penalizes this hard, and it should.

    Where Lighthouse Scores Stop and User Experience Starts

    Notice what that scoring model reinforces. Lighthouse is evaluating machine-detectable code patterns. It is not validating the full user experience—whether a flow makes sense, whether focus order matches intent, whether labels hold up in context, or whether an interaction is usable with assistive technology.

    Google’s own guidance is clear: only a subset of accessibility issues can be detected automatically, and manual testing is encouraged. That is not a minor disclaimer. It defines the boundary of what the score means.

    If you use the score as a proxy for accessibility, you are using it outside its intended purpose.

    How Automated Accessibility Testing Evaluates Your Site

    Automated testing is built for consistency and repeatability. It excels at spotting structural issues that follow well-defined rules. In practice, that usually means it flags things like:

    • Missing alt attributes on images
    • Low color contrast ratios based on numeric values
    • Form fields with no programmatic label
    • Empty buttons or links with no text alternative
    • Missing language attributes on the html element
    • Obvious ARIA errors that break the accessibility tree

    Why “Pass” Does Not Mean “Helpful”

    Color contrast is another great example. A tool can measure foreground and background values, calculate the ratio, and report whether it meets the Web Content Accessibility Guidelines (WCAG) requirements.  For example,  SC 1.4.3 Contrast Minimum requires a 4.5:1 ratio for normal text. That matters for users with low vision and color vision differences.

    Contrast is another place where automated tools fall short. They can measure color contrast ratios, but they cannot evaluate readability in context. They cannot tell whether your font size and weight work well with that contrast choice, whether visual styling creates confusing groupings in navigation, or whether users can scan the page and understand it easily.

    That pattern shows up across most automated checks. Tools confirm that something is present in code; they do not confirm how well it works in context. The scan focuses on individual elements rather than the interactions between them, on static states rather than the workflows people have to move through.

    That coverage is useful, but it is thin. It reaches only a narrow slice of accessibility. The rest sits in the gap that automation cannot reach.

    The Limits of Automated Accessibility Testing

    The issues that stop people usually sit outside what automation can prove. They show up in behavior and context, not in markup alone. That is how a site can “pass” and still fail users.

    Keyboard Navigation and Focus Visibility

    A tool can confirm that an element is focusable and that a label exists. It cannot verify what using the page with a keyboard actually feels like.

    You still need to know:

    • All interactive elements can be reached by pressing Tab.
    • Focus indicators stay visible and easy to follow.
    • Complex widgets like date pickers, autocomplete fields, and modal dialogs work correctly with keyboard-only navigation.

    Those answers do not come from scanning markup. Keyboard testing requires human interaction and someone who understands how keyboard users move through web pages.

    Screen Reader Output and Meaning

    Automation can confirm that text alternatives and labels are present. It cannot confirm what a screen reader announces, in what order, and whether that output is useful in context.

    This is where “passes” hide confusion. A tool cannot tell whether the alt text says “image123” or “Yum yum” for a product photo. Both satisfy the requirement. Only one helps a user.

    A label can exist but be announced in a way that does not match the visible interface. Alt text can be technically present and still add noise instead of clarity. Errors can appear visually and never be announced at all. The code can look correct while the experience still breaks.

    Screen readers also differ. NVDA, JAWS, VoiceOver on macOS, VoiceOver on iOS, and TalkBack all interpret markup in slightly different ways. Automated testing does not account for those differences. It assumes a static model of accessibility, while users operate in dynamic environments.

    Understanding, Language, and Cognitive Load

    Tools do not measure whether your interface is understandable. They do not know when instructions are dense. They do not notice when terminology shifts from one step to the next or when navigation labels do not match what the page is actually doing.

    Key questions stay unanswered:

    • When someone scans the page, can they tell what to do next, or is it buried in jargon and extra complexity?
    • If they make a mistake, do they have a clear way to recover, or are they forced to start over?
    • As users change text size or zoom, does the layout hold together, or does it fall apart?
    • For people with cognitive disabilities, do your interface patterns feel consistent and understandable?

    Why Manual Accessibility Testing Still Sets the Standard

    Automated checks can tell you whether patterns exist in your code. They cannot tell you whether those patterns work when a person tries to complete a task with assistive technology.

    Manual testing is where you find the failures that stay invisible in a report. It is also where you verify that “accessible” holds up across the tools people actually use.

    In audits, we test with NVDA and JAWS on Windows, VoiceOver on macOS, VoiceOver on iOS, and TalkBack on Android. These tools do not behave the same way, even when the markup looks clean. We also test keyboard-only navigation, voice control, and zoom. Each component is evaluated against a checklist of over 260 items for full WCAG 2.2 coverage.

    This is often where perfect automated scores stop feeling meaningful. Forms can look correct on paper, yet labels that technically announce still fail voice control because the spoken target is unclear. Mobile layouts may meet target size rules, while the placement makes taps unreliable. Dynamic regions can update with no announcement at all, so screen reader users lose the thread. Navigation might be valid in markup and still be hard to use when landmarks are noisy, vague, or missing where people expect them.

    Manual testing connects those details back to the actual job a user is trying to do.

    The Cost of Relying Only on Automated Accessibility Tests

    Teams that stop at automated testing tend to learn about the remaining issues the hard way. A user hits a blocker, reports it, and now the problem is public. That carries reputational risk, can become legal risk, and often lands on your team as an urgent disruption instead of planned work.

    It is also avoidable.

    The cost curve is clear. A full audit that includes manual testing is typically cheaper than defending a claim, rebuilding components that shipped without assistive technology constraints in mind, or patching accessibility after customers have already churned. Teams sometimes rebuild the same feature more than once because the first pass did not account for how screen readers announce changes or how voice control targets labels.

    Automated testing is a starting point. A perfect score is baseline hygiene worth maintaining. It is necessary, and still nowhere near enough.

    Combining Automated and Manual Accessibility Testing

    Lighthouse scores and perfect automated testing results create false confidence. Genuine accessibility depends on both automated and manual testing. Automated checks belong in your everyday development pipeline, catching structural issues early and guarding against regressions. But don’t stop there. Manual testing with assistive technology then fills in the rest of the picture, showing whether people can actually complete tasks.

    A better approach is to treat automation as the first pass, but manual testing as the standard of proof. Run automated tests early and often, then make space for keyboard checks, screen reader passes, and voice control scenarios before you sign off on a release.

    If you want help putting that kind of testing strategy in place, 216digital can work alongside your team. Schedule an ADA Strategy Briefing with our experts to review your current workflow, understand your risk, and design an accessibility testing plan that pairs automated coverage with focused manual testing where it counts most.

    Greg McNeil

    February 17, 2026
    Testing & Remediation
    Accessibility, Accessibility testing, automated scans, automated testing, How-to, Website Accessibility
  • Accessibility Statement: The Good, Bad, and Ugly

    An accessibility statement is one of those pages most teams don’t think about until something forces the issue. A user hits a blocker and asks for help. A procurement review wants proof of process. Or someone internally asks the question no one loves answering: “What can we honestly say about accessibility right now?”

    If you already work with Web Content Accessibility Guidelines (WCAG), you know the hard part isn’t writing a few well-meaning lines. It’s making sure the statement matches the lived experience of your site. It needs to be specific enough to help someone plan their next step, careful enough to hold up under scrutiny, and practical enough that it won’t be outdated after the next release.

    We’ll walk through the common versions you’ll see online, what they communicate at a glance, and what to include if you want a statement that stays accurate as your site and your workflows keep evolving.

    Accessibility Statement Best Practices

    WCAG does not require an accessibility statement. That surprises a lot of teams. But “not required” and “not important” are two different things.

    A statement helps people understand what to expect and how to get support. It also helps internal teams because it forces clarity. If it feels hard to explain your testing process or your goals, that usually points to a bigger issue. The work may be happening in pieces, but the process is not fully owned yet.

    In some cases, publishing a statement is not optional. The Revised Section 508 Standards in the United States apply to many public institutions and require accessibility statements that follow a specific format. And even when an organization is not under Section 508, laws and regulations like the ADA, AODA, or EAA raise the stakes around access and transparency.

    There is also a practical reality. When a complaint or demand letter happens, this page gets read. Often early. It shows what you claimed, what you promised, and whether your wording matches the experience. So it is not only communication. It can become evidence.

    Missing Accessibility Statement: User and Risk Impact

    No page. No link. No mention in the footer or on the contact page.

    When a site has no accessibility statement, users are left guessing. If they hit a barrier, they also have no clear way to report it. Many people will not spend extra time searching for a hidden email address. They will leave.

    A missing statement usually points to one of three situations:

    • Accessibility has not been considered yet.
    • It has been considered, but it keeps getting pushed down the list.
    • Work is happening, but nobody has taken ownership of communicating it.

    None of that helps someone trying to apply for a job, schedule an appointment, pay a bill, or place an order.

    It can also create risk. It can look like there is no accessibility process at all. Again, that is not proof by itself. But it is not a good signal.

    Boilerplate Accessibility Statement: Copy, Paste, Risk

    Boilerplate is easy to spot. It often says “we are committed to accessibility” and references WCAG, but nothing else. No date. No testing details. No contact method that feels monitored. Sometimes it even claims full compliance.

    This version is risky for a simple reason. It makes a promise without support.

    If the site still has keyboard traps, broken form labels, missing focus states, or confusing headings, users will notice the mismatch right away. The page that was meant to build confidence does the opposite.

    Boilerplate also tends to sound the same across many sites. That sameness can read as performative. People have seen it before, and many have learned it does not mean much in practice.

    If your statement came from a template, treat it as a draft. It should be reviewed with the same care you would give a checkout flow, an account login, or a support page.

    Aspirational Accessibility Statement: Nice Words, Few Details

    This one is tricky because it can come from a good place.

    Aspirational statements often sound warm and well-intentioned. They talk about inclusion, values, and long-term goals. Some mention employee groups, empathy workshops, or automated tools. The problem isn’t the heart behind it. It’s that none of this helps a user complete a task today.

    Where these statements tend to fall short is in clarity. They describe the why but skip the what now. Users trying to pay a bill or submit a form need concrete information, not broad promises about the future. When a statement avoids specifics about testing, current site limitations, or how to get help, it becomes more of a brand message than a resource.

    This is also where teams can unintentionally stall. Publishing a warm, values-driven accessibility statement can create the illusion that the work is “handled,” even when the practical steps are still ahead.

    How to Write a Good Accessibility Statement

    A strong accessibility statement is simple in a practical way. It does not try to sound impressive. It explains what you are doing, what you know, and how users can reach you if they run into a problem.

    You can think of it as having a few main ingredients. The exact recipe will vary by organization, but these parts show up again and again in statements that users actually trust.

    Purpose and Commitment

    Start with a clear handshake. Say you are dedicated to making your website or content accessible, including for people who use assistive technology. Keep it short and human. It should feel like support, not legal language.

    Standards and Guidelines (WCAG)

    Mention the standard you are aiming for, such as WCAG 2.2 Level AA. If that is your target, say it. If you are still working toward it, you can say that too. Honesty here builds more trust than a bold claim.

    Testing Approach and Review Dates

    This is where you move from “we care” to “we have a process.”

    Include:

    • The date of your last accessibility evaluation
    • Whether you used automated checks, manual testing, or both
    • How often you plan to review the site again

    You can also name what you focus on at a high level, like key user flows, forms, templates, and shared components. Users do not need a lab report. They do need to know that testing is not a rumor.

    Areas of Success

    This part is often missing, but it helps. Call out what is working well today. It tells users where the experience is likely to be smoother, and it shows that accessibility work is not only future tense.

    Examples might include:

    • Core navigation and main templates reviewed for keyboard and screen reader use
    • Improved form labels and clearer error handling in key workflows
    • Updates to contrast and focus styling on shared components

    Keep this realistic. Don’t oversell. Just help users understand where the site is in better shape.

    Areas Needing Improvement

    Nobody’s site is perfect, and users already know that. The question is whether you are willing to be honest about it.

    List the known problem areas that affect tasks. For example:

    • Older pages that still have heading or label issues
    • Some PDFs or documents that are not fully accessible yet
    • Third-party tools that have accessibility limits, you are working to address

    If you can add timelines or priority windows, do it. Avoid vague “we’re working on it” language. A specific window builds confidence because it shows this is planned work, not wishful thinking.

    Assistive Technology and Environments Tested

    Mention the kinds of environments you consider, such as desktop and mobile, keyboard-only use, and screen readers. A short list helps users understand whether your testing reflects their reality.

    Contact Information and Support Process

    Provide an easy way to reach out if someone runs into a barrier. Email is a baseline. Some teams also offer a phone number or an accessible form.

    Just as important, include a brief note about what happens after someone reaches out. Even one sentence helps. For example, reports are reviewed and routed to the right team.

    Where to Place the Accessibility Statement Link

    Make sure the statement is easy to find. Put it in the footer, and consider linking it from the contact page as well. If users need a search engine to find it, you are adding friction at the exact moment they need support.

    Common Accessibility Statement Mistakes

    Even a well-meaning statement can miss the mark. These are the mistakes that show up the most.

    Overly Legal or Technical Language

    An accessibility statement is not a compliance brief. Write for people. Define acronyms. Use short paragraphs and lists. Make it scannable.

    Claims You Can’t Support

    Avoid saying “fully compliant” unless you can back it up and keep it true over time. Websites change constantly. A claim that was accurate once can become inaccurate fast.

    A safer approach is to describe your goal, your testing, and your process.

    No Clear Feedback Path

    If there is no clear way to report barriers, the statement fails one of its most important jobs. And if you list an email address, make sure it is monitored.

    Burying the Accessibility Statement

    Put it somewhere consistent, like a global footer. Users should not have to hunt.

    Make Your Accessibility Statement Match Reality

    An accessibility statement only does its job if it stays close to reality. As your site changes, the statement should keep pace, reflecting what has been tested, what still needs attention, and how people can reach you when something doesn’t work as expected. If reading your current statement feels uncomfortable or outdated, that’s not a dead end. It’s a useful signal that your process needs clearer ownership, stronger testing language, or a better plan for keeping the page current.

    At 216digital, our team is committed to helping you take the steps towards web accessibility on your terms by developing a strategy to integrate WCAG 2.2 compliance into your development roadmap. We offer comprehensive services that not only audit your website for accessibility but also provide solutions to meet ADA compliance requirements.

    To learn what more you should do to achieve and maintain accessibility for your team, schedule a Complimentary ADA Strategy Briefing with the experts at 216digital.

    Greg McNeil

    February 13, 2026
    How-to Guides, Legal Compliance, Web Accessibility Training
    accessibility statement, Accessibility Statment, How-to, Web Accessibility, Website Accessibility
  • Why ARIA Links Break More Often Than You Think

    Links are supposed to be the easy part. You write a few words, wrap them in an , and move on.

    But ARIA links have a way of turning “easy” into “why is this broken in Safari” surprisingly fast. Not because ARIA is bad, and not because links are fragile. It usually happens when we start doing clever things to link text. We hide it. We replace it. We split it into tiny pieces for styling. Then we assume every tool people use will still understand the link the same way.

    That assumption is where the trouble starts.

    The focus here is understanding why ARIA links break across browsers, what the testing uncovered, and how small markup choices can ripple out into very real barriers for users.

    How ARIA Links Get Their Accessible Name

    A link needs a name. That name is what tools use to announce it, list it, or make it usable.

    In the best case, the name is just the visible text inside the link. Simple, reliable, and supported everywhere.

    When we start building ARIA links, we often change that name in one of two ways. We override it with aria-label, or we hide the visible text (often with aria-hidden) and hope ARIA will fill the gap.

    Here’s the catch. Screen readers look at the accessibility tree, where ARIA is meant to live. But many browser-native features do not behave like screen readers. Some look at rendered text instead. Some use a simplified “reading view” model. Some apply their own rules to decide what counts as readable content.

    So an ARIA label can be “correct” in the accessibility tree, yet still get ignored by other tools that your users rely on.

    ARIA Link Patterns That Break Across Browsers

    In the original write-up, the author tried a bunch of versions of the same link, including multilingual cases. Three patterns kept causing breakage.

    ARIA Links and aria-label on Visible Text

    This is a common move. It can happen on purpose, like when someone wants a “cleaner” name, or by accident, like when a component always injects an aria-label.

    In the tests, browser speech tools did not treat that aria-label as the link’s name. Edge Read Aloud did not announce the aria-label value for any link. Chrome reader mode text-to-speech did not announce the aria-label value for any link. Safari’s Speech feature did not announce the aria-label value for any link.

    So you end up with ARIA links that may sound fine in a screen reader, but feel unlabeled in browser read-aloud tools. That’s a big deal because a lot of people use read-aloud features without ever touching a screen reader.

    There’s another issue too. In the tests, the aria-label values were intentionally different from the visible label so it was easy to spot. That mismatch causes a known WCAG barrier (SC 2.5.3 Label in Name), but the practical problem is even simpler. Users hear one thing and see another. That erodes trust fast.

    ARIA Links and aria-hidden Inside Links

    This one looks harmless until it isn’t.

    aria-hidden="true" removes content from the accessibility tree. If the text inside your link is hidden, then for many tools, the label is effectively gone.

    In the tests, Chrome Reader Mode visually hid every link with aria-hidden. Firefox Reader Mode visually hid every link with aria-hidden. Edge Read Aloud did not announce links with aria-hidden, regardless of other attributes. Chrome reader mode text-to-speech did not announce links with aria-hidden, regardless of other attributes.

    So now your ARIA links can disappear from reader views, or get skipped by speech features, even though they still look clickable on the standard page.

    There was also a more subtle interaction issue. When the tester highlighted aria-hidden links, Chrome and Edge wouldn’t let them link to the highlighted text, though that behavior shifted once more content was added. Either way, it’s a reminder that hiding text changes more than announcements. It changes how pages behave.

    ARIA Links With Split Text Spans

    This is the “design made me do it” pattern. It’s often used for animations, hover effects, or custom typography.

    The tests showed it can create a surprising amount of fallout. Text split into letter spans did not auto-translate. Firefox Reader Mode styled span-split links as white instead of blue or purple. Safari Speech jumped past most of the page when it hit span-split text. After that jump, Safari announced subsequent links with the wrong link text, including pulling Korean text for English links. Safari Speech did not announce the span-separated letters and also did not announce the visible word those letters formed.

    So you can end up with a link that looks fine, but breaks translation, looks unclickable in reader view, and causes speech tools to lose their place.

    That last part is especially rough. When a speech feature starts skipping content or mislabeling later links, the whole page becomes harder to trust. Users can’t just “work around” that.

    Cross-Browser Results for ARIA Links

    One of the best takeaways from the cross-browser checks is this: these are not edge-case bugs in one browser. Each browser failed in its own way.

    Chrome and Edge

    • Reader mode and text-to-speech ignored aria-label on links.
    • Reader mode hid links when aria-hidden was involved.
    • Some selection and “link to highlight” behavior broke around aria-hidden content.

    Firefox

    • Reader view hid aria-hidden links.
    • Span-split links lost normal link styling and showed up as white text.

    Safari

    • Speech skipped content after span-split links.
    • It then announced later links with the wrong label, sometimes in the wrong language.
    • It ignored aria-label values for link naming.

    If your testing only includes one browser and one screen reader, it’s easy to miss all of this. The links will “work” in the sense that you can click them. But they won’t work the same way for people who browse differently.

    Why ARIA Links Break in Reader Mode and Speech

    ARIA labels live in the accessibility tree. Many browser reading tools do not rely on that tree the way screen readers do. Instead, they often prioritize what they can extract from rendered text or from a simplified reading model.

    On top of that, aria-hidden removes content from the tree, and some tools treat that as “remove from reading,” not merely “ignore for screen readers.” When the visible label is hidden, those tools are left with less content to work with, and the link can become empty or disappear.

    Per-letter spans create a different kind of problem. They turn a word into fragments, and many tools don’t rebuild those fragments into a single word reliably. Translation and reading modes are especially sensitive here because they’re trying to extract coherent content, not just replay the DOM.

    So the link is still a link, but its label becomes unstable. It might be visible but not readable to speech. It might be readable in one mode but missing in another. It might translate in one browser but not another.

    That inconsistency is the barrier.

    What Broken ARIA Links Feel Like for Users

    When ARIA links fail this way, users don’t experience it as “ARIA isn’t supported.” They experience it as missing information, broken reading flow, or a page that feels unreliable.

    Reader Mode can show a page that looks mostly right, but key links are missing. Read-aloud can skip links or move through them without saying their names. Translation can work for paragraphs while navigation or call-to-action links remain untranslated. Links can lose their visual cues in reading view and look like plain text, which makes people hesitate to click.

    Speech tools can be the most disruptive. When they jump around, skip content, or start announcing the wrong link text, users lose confidence in the whole page. Even basic tasks like highlighting and sharing text can become awkward when the words inside the link aren’t treated as real text.

    None of this requires a screen reader. These are everyday tools. Plenty of users lean on them for fatigue, focus, dyslexia support, language support, low vision support, or just convenience.

    Safer Patterns for ARIA Links

    You don’t have to give up design. You just need to be careful about what you do to the actual link label.

    Keep a real text label in the link. If your link has visible text, keep it as real text inside the <a>. That’s the most stable way to get a consistent accessible name across tools.

    Use aria-label only when there is no visible text. Icon-only links are the right case for this. If text exists, it should usually carry the name.

    Avoid aria-hidden on link labels. If an icon is decorative, hide the icon. Do not hide the words people need.

    Avoid splitting words into separate spans. If you want animation, animate the container, an underline, a background, or a pseudo-element. Keep the word intact.

    If you inherit a design system that already does this, treat it like a compatibility issue and add guardrails. Make sure there’s still a readable text node somewhere that tools can use. Keep the visible label aligned with the computed name. Test in Reader Mode and speech features, not only in screen readers.

    Quick Tests for ARIA Links

    A few fast checks can reveal the same problems that showed up in the browser experiments. These don’t take long, but they make it clear whether your link text holds up beyond a screen reader.

    • Open Chrome Reader Mode and confirm the links still appear, still look like links, and keep the right text.
    • Use Edge Read Aloud and listen for link names. Watch for links that go silent.
    • Try Firefox Reader View and make sure the links keep normal styling instead of turning into plain text.
    • Use Safari Speech and watch for skipped sections or incorrect labels on later links.
    • Translate the page and see whether link text is translated as a full word instead of letter fragments.
    • Highlight link text and check that selection behaves normally across the whole label.
    • Inspect the accessibility tree to confirm the computed name matches what’s visible.
    • Finish with a screen reader pass as a second layer instead of the only one.

    If a link pattern fails any of these, it’s a sign your ARIA links are doing too much.

    Sanity-Check Your ARIA Links

    If your links have been “mostly fine” in screen reader checks but still feel weird in Reader Mode or read-aloud, you’re not alone. That’s exactly why these patterns are sneaky. They don’t break the click. They break the label, the reading flow, and the trust people build as they move through a page.

    The upside is you don’t need a big rebuild to clean this up. Start with one or two link components that get used everywhere. Keep the visible text intact. Be careful with aria-label when text is already on screen. Don’t hide the label with aria-hidden. Avoid splitting words into lots of spans. Then run the quick checks again. When it’s fixed, you’ll hear it right away.

    At 216digital, we help teams pressure-test link patterns in the same places users feel these failures. Reader modes, speech tools, translation, selection, and yes, screen readers too. If your components rely on ARIA links or stylized link labels, schedule an ADA Strategy Briefing. We’ll help you tighten the markup so links stay predictable across the tools and browsers your users actually use.

    Greg McNeil

    February 12, 2026
    How-to Guides, Web Design & Development
    ARIA, ARIA links, aria-describedby, aria-label, How-to, Web Accessibility, Website Accessibility
  • How to Use VoiceOver to Evaluate Web Accessibility

    Most page reviews start the same way. You scan the layout, tab through a few controls, and make sure nothing obvious is broken. That catches a lot. It just doesn’t tell you what the page sounds like when a screen reader is in charge. Turn on VoiceOver, and the same interface can expose gaps you would never notice visually. A button has no name. The heading structure is thinner than it looks. A menu opens, but nothing announces that anything changed.

    On macOS, Apple’s built-in screen reader gives you a direct way to hear what your site is exposing to assistive technology. We’ll cover a practical setup, the few commands that matter most, and a repeatable testing flow you can use on any page.

    Why VoiceOver Testing Catches Issues Automated Tools Miss

    VoiceOver is a screen reader that ships with Mac devices. When it is turned on, it announces what is on the screen, the role of each element, and its state. It also replaces mouse-first navigation with keyboard navigation so people can move through pages without relying on sight.

    Testing with this tool shows how your site appears to the macOS accessibility layer in Safari. You hear whether headings form a usable outline. You find out whether regions are exposed as landmarks. You also learn whether labels give enough context when they are spoken on their own, which is a big deal for links, buttons, and form fields.

    Small issues stand out more when they are spoken about. A “Learn more” link might seem harmless when it sits next to a product title. But in a list of links, it turns into five identical options with no meaning. An icon-only button might look clear on screen, but it can be announced as “button” with no name. A form field might look labeled, but if that label is not programmatically connected, the field can be read as “edit text” and nothing else.

    VoiceOver is not the only screen reader that matters. NVDA and JAWS on Windows and mobile tools on phones and tablets each have their own patterns. This approach treats macOS testing as one important view into accessibility, not a substitute for broader coverage.

    Web Content Accessibility Guidelines (WCAG) requirements still apply the same way. On desktop, the impact of focus order, labeling, and structure becomes more obvious when you stop scanning visually and start moving through a page one item at a time.

    Set Up VoiceOver in Safari for Reliable Accessibility Testing

    A stable setup makes your testing more dependable over time. You do not need anything complex. A Mac, Safari, and a space where you can hear speech clearly are enough. Headphones help if your office or home is noisy.

    Before you run your first pass, set up the few things that will affect your results:

    • Turn VoiceOver on with Command + F5
      • On some laptops, you may need fn + Command + F5
    • Choose your VO modifier key.
      • Control + Option together, or Caps Lock
    • In Safari preferences, go to the Advanced tab and enable “Press Tab to highlight each item on a webpage.”

    That Safari setting is easy to miss, but it matters. Without it, you can tab and still skip controls you need to test.

    Next, spend a minute in the screen reader settings. Adjust the speech rate to something you can follow without strain. If it is too fast, you will miss details during longer sessions. If it is too slow, you will start rushing and skipping steps. Set the voice and language so they match the primary language of the site.

    Different macOS versions and device setups can change where settings live or how certain items are announced. You do not need the “perfect” configuration. What helps most is using one setup consistently, so results are comparable from sprint to sprint.

    Turn VoiceOver On and Off Fast During Development

    You can enable the screen reader through System Settings under Accessibility, but for regular work, it is worth using the keyboard toggle. Most teams rely on Command + F5 so they can switch quickly.

    That quick toggle matters in real development cycles. You might review a component visually, turn VoiceOver on, test it, turn it off, adjust code, and repeat. If enabling and disabling feel slow, the step stops happening.

    There is a learning curve. When the screen reader is active, you will use the VO key with other keys for many commands. You also want to know how to pause speech quickly. Pressing Control to stop reading is one of those small skills that make testing feel manageable instead of chaotic.

    If you ever want a safe practice mode, turn on Keyboard Help with VO + K. VoiceOver will tell you what keys do without typing or triggering actions. Press VO + K again to exit.

    VoiceOver Commands for Web Testing You’ll Use Most

    You do not need every Mac keyboard shortcut to run useful tests. A small set covers most web content and keeps the process repeatable across a team.

    For reading:

    • Read from the top: VO + A
    • Stop reading: Control
    • Move to next item: VO + right arrow
    • Move to previous item: VO + left arrow

    For interactive elements:

    • Move focus forward: Tab
    • Move focus backward: Shift + Tab
    • Activate an item: Return or VO + Space

    Start with simple, linear navigation. Read from the top and move through items one by one. Ask yourself whether the reading order matches what you see on screen. Listen for controls that do not make sense when heard out of context, like “button” with no name or multiple links with the same vague label.

    This pace will feel slower than visual scanning. That is part of the value. The slowness makes gaps in structure, naming, and focus behavior hard to ignore.

    Use the VoiceOver Rotor to Check Headings, Links, and Landmarks

    Once you can move through a page linearly, the Rotor helps you evaluate structure much faster.

    Open the Rotor with VO + U. Use the left and right arrow keys to switch between categories and the up and down arrow keys to move through the items in that category. Common Rotor lists include headings, links, landmarks, form controls, tables, and images.

    This is where structural problems become obvious. If the page outline is weak, the Rotor will tell you fast.

    Start with headings. Move through the hierarchy and listen for a clear outline. Missing levels, unclear section names, or long stretches with no headings usually mean the structure is not supporting nonvisual navigation.

    Next, move to landmarks. This reveals whether regions like header, navigation, main, and footer are present and used in a way that matches the layout. Too few landmarks can make the page feel flat. Too many can create noise.

    Then scan links and controls. Duplicate or vague link text stands out when you hear it as a list. Controls with incomplete labeling stand out too. An icon button that looks fine can become “button” repeated several times.

    You can also filter Rotor lists by typing. If you are in the headings Rotor and type “nav,” you can jump to headings that contain those characters. Small features like this make VoiceOver testing feel less like wandering and more like a targeted review.

    A Repeatable VoiceOver Workflow for Web Accessibility QA

    You do not need to run a full audit on every page. A light, repeatable workflow is easier to sustain and still catches a large share of issues.

    When you review a new page or a major change:

    1. Turn on the screen reader and let it read the beginning of the page.
    2. Move through the page in order and note anything confusing or missing.
    3. Use the Rotor to review headings, landmarks, links, and form controls.
    4. Complete one core task using only the keyboard.

    Start by listening to how the page begins. Do you hear a clear main heading early? Does navigation appear when it should? Is anything being read that is not visible or not meant to be part of the flow?

    Then move through the content one item at a time. Note skipped content, unexpected jumps, or labels that do not match what you see.

    Next, do your structural passes with the Rotor. Headings give you a quick sense of hierarchy. Landmarks show whether regions are exposed and used correctly. Links and form controls expose labeling patterns and repetition.

    Finally, test a key journey. Pick a task that matters and complete it with no mouse. That might be searching, opening navigation, filling out a form, or moving through a checkout step. If focus jumps, if a dialog opens without being announced, or if you cannot reach a control, it is not a minor problem. It is a broken path for many users.

    Along the way, watch for patterns. Maybe icon buttons from one component set often lack names. Maybe form errors rarely announce. Patterns are the difference between fixing one page and improving the whole system.

    High-Impact VoiceOver Checks for Forms, Menus, and Modals

    Some parts of a site deserve more focused time because they carry more weight for users and for the business.

    Forms and inputs

    Fields should have clear labels, including required fields and fields with special formats. Error messages need to be announced at the right time, and focus should move to a helpful place when validation fails. If the error appears visually but VoiceOver does not announce it, users may never know what went wrong.

    Navigation menus and drawers

    Menus should announce when they open or close. Focus should shift into them when they appear and return to a sensible point when dismissed. A menu that opens visually but stays silent is a common failure.

    Modals and other overlays

    Modals should trap focus while active and hand focus back cleanly when they close. Users should not be able to tab into page content behind the modal. The modal should also have a clear label so it is announced as a meaningful dialog, not just “group.”

    Status updates and confirmation messages

    Loading indicators, success messages, and alerts should be announced without forcing users to hunt for them. If an action completes and nothing is announced, users are left guessing.

    Tables and structured data

    If you use data tables, confirm that headers are associated properly so VoiceOver can announce row and column context as you move. Tables with merged headers or empty corner cells can cause confusing output, so they are worth extra attention.

    These areas tend to reveal focus and naming issues quickly, especially when the UI is built from custom components.

    VoiceOver Bug Notes That Lead to Faster Fixes

    Bringing screen reader testing into your workflow is one of those small shifts that pays off quickly. It helps you catch problems earlier, tighten how your components behave, and ship experiences that hold up under real use.

    To keep it sustainable, capture findings in a way that leads to fixes instead of debate:

    • Record the page and the component or flow.
    • List the steps you took
    • Note what you expected to hear.
    • Note what you actually heard.
    • Explain the impact of completing a task.
    • Suggest a direction, such as a missing label, an incorrect role, or a focus not managed.

    Short, consistent notes are usually enough. Over time, your team will build a shared understanding of what “sounds right” and what needs cleanup.

    Make VoiceOver Checks Part of Your Release Routine

    VoiceOver testing can feel slow at first, and that is normal. You are training your ear to notice things your eyes will always gloss over. Keep the scope small, stay consistent, and let the habit build. A quick pass on one key flow each release is enough to change how teams design, label, and manage focus over time. And when you hit a pattern that keeps coming back, that is usually a sign the fix belongs in your shared components, not in one-off patches.

    If you want help making this a repeatable part of how you ship, 216digital can support you. We work with teams to weave WCAG 2.1 into their development roadmap in a way that fits their product, pace, and constraints. Schedule a complimentary ADA Strategy Briefing, and we’ll talk through what you’re building, where VoiceOver testing should live, and the next changes that will have the most impact.

    Kayla Laganiere

    February 11, 2026
    How-to Guides
    Accessibility, assistive technology, How-to, screen readers, VoiceOver, Web Accessibility, Website Accessibility
  • How to Build Accessible Form Validation and Errors

    A form can succeed or fail based on how predictable its validation and recovery patterns are. When users can’t understand what the form expects or how to correct an issue, the flow breaks down, and small problems turn into dropped sessions and support requests. The reliable approach isn’t complex—it’s consistent: clear expectations, helpful correction paths, and markup that assistive technologies can interpret without ambiguity. That consistency is the foundation of accessible form validation.

    Two ideas keep teams focused:

    • Validation is the contract. These are the rules the system enforces.
    • Error recovery is the experience. This is how you help users get back on track.

    You are not “showing error messages.” You are building a recovery flow that answers three questions every time:

    1. Do users notice there is a problem?
    2. Can they reach the fields that need attention without hunting?
    3. Can they fix issues and resubmit without getting stuck in friction loops?

    Accessible Form Validation Begins on the Server

    Server-side validation is not optional. Client-side code can be disabled, blocked by security policies, broken by script errors, or bypassed by custom clients and direct API calls. The server is the only layer that stays dependable in all of those situations.

    Your baseline should look like this:

    • A <form> element that can submit without JavaScript.
    • A server path that validates and re-renders with field-level errors.
    • Client-side validation layered in as an enhancement for speed and clarity.

    A minimal baseline:

    <form action="/checkout" method="post">
     <!-- fields -->
     <button type="submit">Continue</button>
    </form>

    From there, enhance. Client-side validation is a performance and usability layer (fewer round-trips, faster fixes), but it cannot become the source of truth. In code review terms: if disabling JavaScript makes the form unusable, the architecture is upside down.

    Once submission is resilient, you can prevent a large share of errors by tightening the form itself. This foundation keeps your accessible form validation stable even before you begin adding enhancements.

    Make the Form Hard to Misunderstand

    Many “user errors” are design and implementation gaps with a different label. Prevention starts with intent that is clear during keyboard navigation and screen reader use.

    Labels That Do Real Work

    Every control needs a programmatic label:

    <label for="email">Email address</label>
    <input id="email" name="email" type="email">

    Avoid shifting meaning into placeholders. Placeholders disappear on focus and do not behave as labels for assistive technology. If a field is required or has a format expectation, surface that information where it will be encountered during navigation:

    <label for="postal">
     ZIP code <span class="required">(required, 5 digits)</span>
    </label>
    <input id="postal" name="postal" inputmode="numeric">

    This supports basic expectations in WCAG 3.3.2 (Labels or Instructions): users can understand what is needed before they submit.

    Group Related Inputs

    For radio groups, checkbox groups, or multi-part questions, use fieldset + legend so the “question + options” relationship is explicit:

    <fieldset>
     <legend>Contact preference</legend>
    
     <label>
       <input type="radio" name="contact" value="email">
       Email
     </label>
    
     <label>
       <input type="radio" name="contact" value="sms">
       Text message
     </label>
    </fieldset>

    This prevents the common failure where options are read out as a scattered list with no shared context. Screen reader users hear the question and the choices as one unit.

    Use the Platform

    Choose appropriate input types (email, tel, number, date) to use built-in browser behavior and reduce formatting burden. Normalize on the server instead of making users guess the system’s internal rules:

    • Strip spaces and dashes from phone numbers.
    • Accept 12345-6789, but store 12345-6789 or 123456789 consistently.
    • Accept lowercase, uppercase, and mixed-case email addresses; normalize to lowercase.

    The more variation you handle server-side, the fewer opaque errors users see.

    Don’t Hide Labels Casually

    “Visual-only” placeholders and icon-only fields might look clean in a mock-up, but they:

    • Remove a click/tap target that users rely on.
    • Make it harder for screen reader users to understand the field.
    • This leads to guessing when someone returns to a field later.

    If you absolutely must visually hide a label, use a visually-hidden technique that keeps it in the accessibility tree and preserves the click target.

    You’ll still have errors, of course—but now they’re about the user’s input, not your form’s ambiguity.

    Write Error Messages That Move Someone Forward

    An error state is only useful if it helps someone correct the problem. Rules that hold up well in production:

    • Describe the problem in text, not just color or icons.
    • Whenever possible, include instructions for fixing it.

    Instead of: Invalid input

    Try: ZIP code must be 5 digits.

    Instead of:Enter a valid email

    Try: Enter an email in the format name@example.com.

    A practical markup pattern is a reusable message container per field:

    <label for="postal">ZIP code</label>
    <input id="postal" name="postal" inputmode="numeric">
    <p id="postalHint" class="hint" hidden>
     ZIP code must be 5 digits.
    </p>

    When invalid, show the message and mark the control:

    <input id="postal"
          name="postal"
          inputmode="numeric"
          aria-invalid="true"
          aria-describedby="postalHint">

    Visually, use styling to reinforce the error state. Semantically, the combination of text and state is what makes it usable across assistive technologies. Clear, actionable messages are one of the most reliable anchors of accessible form validation, especially when fields depend on precise formats. 

    With messages in place, your next decision is the presentation pattern.

    Pick an Error Pattern That Matches the Form

    There is no universal “best” pattern. The decision should reflect how many errors are likely, how long the form is, and how users move through it. Choosing the right pattern is one of the most important decisions in accessible form validation because it shapes how people recover from mistakes.

    Pattern A: Alert, Then Focus (Serial Fixing)

    Best for short forms (login, simple contact form) where one issue at a time makes sense.

    High-level behavior:

    1. On submit, validate.
    2. If there’s an error, announce it in a live region.
    3. Mark the field as invalid and move focus there.

    Example (simplified login form):

    <form id="login" action="/login" method="post" novalidate>
     <label for="username">Username</label>
     <input id="username" name="username" type="text">
     <div id="usernameHint" class="hint" hidden>
       Username is required.
     </div>
    
     <label for="password">Password</label>
     <input id="password" name="password" type="password">
     <div id="passwordHint" class="hint" hidden>
       Password is required.
     </div>
    
     <div id="message" aria-live="assertive"></div>
    
     <button type="submit">Sign in</button>
    </form>
    
    <script>
     const form = document.getElementById("login");
     const live = document.getElementById("message");
    
     function invalidate(fieldId, hintId, announcement) {
       const field = document.getElementById(fieldId);
       const hint = document.getElementById(hintId);
    
       hint.hidden = false;
       field.setAttribute("aria-invalid", "true");
       field.setAttribute("aria-describedby", hintId);
    
       live.textContent = announcement;
       field.focus();
     }
    
     function reset(fieldId, hintId) {
       const field = document.getElementById(fieldId);
       const hint = document.getElementById(hintId);
    
       hint.hidden = true;
       field.removeAttribute("aria-invalid");
       field.removeAttribute("aria-describedby");
     }
    
     form.addEventListener("submit", (event) => {
       reset("username", "usernameHint");
       reset("password", "passwordHint");
       live.textContent = "";
    
       const username = document.getElementById("username").value.trim();
       const password = document.getElementById("password").value;
    
       if (!username) {
         event.preventDefault();
         invalidate("username", "usernameHint",
           "Your form has errors. Username is required.");
         return;
       }
    
       if (!password) {
         event.preventDefault();
         invalidate("password", "passwordHint",
           "Your form has errors. Password is required.");
         return;
       }
     });
    </script>

    Tradeoff: On longer forms, this can feel like “whack-a-mole” as you bounce from one error to the next.

    Pattern B: Summary at the Top (Errors on Top)

    Best when multiple fields can fail at once (checkout, account, applications). Behavior:

    1. Validate all fields on submit.
    2. Build a summary with links to each failing field.
    3. Move the focus to the summary.

    This reduces scanning and gives users a clear plan. It also mirrors how many people naturally work through a list: top to bottom, one item at a time. When built with proper linking and focus, this supports WCAG 2.4.3 (Focus Order) and 3.3.1 (Error Identification).

    Pattern C: Inline Errors

    Best for keeping the problem and the fix in the same visual area. Behavior:

    • Show errors next to the relevant control.
    • Associate them programmatically with aria-describedby (or aria-errormessage) and mark invalid state.

    On its own, inline-only can be hard to scan on long forms. The sweet spot for accessible form validation is often:

    Summary + inline

    A summary for orientation, inline hints for precision.

    Make Errors Machine-Readable: State, Relationships, Announcements

    Recovery patterns only help if assistive technology can detect what changed and why. This pattern also matches key WCAG form requirements, which call for clear states, programmatic relationships, and perceivable status updates.

    1) State: Mark Invalid Fields

    Use aria-invalid="true" for failing controls so screen readers announce “invalid” on focus. This gives immediate feedback without extra navigation.

    2) Relationships: Connect Fields to Messages

    Use aria-describedby (or aria-errormessage) so the error text is read when the user reaches the field. If a field already has help text, append the error ID rather than overwriting it. This is a common regression point in component refactors.

    <input id="email"
          name="email"
          type="email"
          aria-describedby="emailHelp emailHint">

    This approach makes sure users hear both the help and the error instead of losing one when the other is added.

    3) Announcements: Form-Level Status

    Use a live region to announce that submission failed without forcing a focus jump just to discover that something went wrong:

    <div id="formStatus" aria-live="assertive"></div>

    Then, on submit, set text like: “Your form has errors. Please review the list of problems.”

    Someone using a screen reader does not have to guess whether the form was submitted, failed, or refreshed. They hear an immediate status update and can move to the summary or fields as needed.

    Use Client-Side Validation as a Precision Tool (Without Noise)

    Once semantics and recovery are solid, client-side validation can help users move faster—so long as it does not flood them with interruptions.

    Guidelines that tend to hold up in production:

    • Validate on submit as the baseline behavior.
    • Use live checks only when they prevent repeated failures (complex password rules, rate-limited or expensive server checks).
    • Prefer “on blur” or debounced validation instead of firing announcements on every keystroke.
    • Avoid live region chatter. If assistive tech is announcing updates continuously while someone types, the form is competing with the user.

    Handled this way, accessible form validation supports the person filling the form instead of adding cognitive load.

    Define “Done” Like You Mean It

    For high-stakes submissions (financial, legal, data-modifying), error recovery is not the whole job. Prevention and confirmation matter just as much:

    • Review steps before final commit.
    • Confirmation patterns where changes are hard to reverse.
    • Clear success states that confirm completion.

    Then keep a test plan that fits into your workflow:

    • Keyboard-only: complete → submit → land on errors → fix → resubmit.
    • Screen reader spot check: “invalid” is exposed, error text is read on focus, form-level status is announced.
    • Visual checks: no color-only errors, focus is visible, zoom does not break message association.
    • Regression rule: validation logic changes trigger recovery-flow retesting.

    Teams that fold these checks into their release process see fewer “the form just eats my data” support tickets and have a clearer path when regression bugs surface.

    Bringing WCAG Error Patterns Into Your Production Forms

    When teams treat error recovery as a first-class experience, forms stop feeling like traps. Users see what went wrong, reach the right control without hunting, and complete the process without unnecessary friction. That is what accessible form validation looks like when it is built for production conditions instead of only passing a demo.

    If your team needs clarity on where accessibility should live in your development process, or if responsibility is spread too thinly across roles, a structured strategy can bring confidence and sustainability to your efforts. At 216digital, we help organizations integrate WCAG 2.1 compliance into their development roadmap on terms that fit your goals and resources. Scheduling a complimentary ADA Strategy Briefing gives you a clear view of where responsibility sits today, where risk tends to build, and what it takes to move toward sustainable, development-led accessibility that your teams can maintain over time.

    Greg McNeil

    January 22, 2026
    How-to Guides, Web Design & Development
    Accessibility, forms, How-to, WCAG, Web Accessibility, web developers, web development, Website Accessibility
  • How Empty Buttons Break Accessibility and How to Fix Them

    You’ll run into this sooner or later in accessibility work: everything in a pull request looks fine. Layout sits correctly, icons load, hover states behave, keyboard focus moves. And then you turn on a screen reader, and it announces the same thing over and over:

    “Button. Button. Button.”

    That’s an empty button.

    And yes—teams ship them all the time, even experienced ones.

    They show up across small sites, large platforms, custom apps, and CMS-driven systems. Large-scale audits have found them on a significant share of homepages year after year, which tells you this isn’t a “carelessness” problem. Things look correct visually, so nobody questions whether the button actually exposes a name.

    Once you see how often that gap slips through, it becomes easier to break the issue apart—what an empty button is at the markup level, why teams run into them so frequently, how screen readers respond to them, and the patterns and fixes that prevent them from resurfacing in future work.

    What Empty Buttons Are and Why They Matter

    An empty button is a control that does not expose an accessible name. It might not be “empty” visually—the UI may show an icon, a custom SVG, or a shape styled entirely through CSS. It might animate and look fully functional. None of that changes the fact that assistive technology can’t understand what the control does. Visually complete or not, a button without a name is effectively invisible to anyone relying on that information.

    Common UI Patterns That Produce Empty Buttons

    You’ll see empty buttons come from a handful of predictable patterns:

    • Icon-only controls such as search, hamburger menus, close icons, and carousel arrows
    • Buttons that use CSS background images or pseudo-elements for their visible “content.”
    • SVGs inside a button without a usable label or internal text
    • Buttons where text was added through CSS instead of being in the DOM
    • Submit or action inputs that never received a value

    These patterns all have the same underlying problem: nothing meaningful ends up in the accessibility tree. Even experienced teams get caught by this because none of these cases look broken during normal UI review. The button appears complete, so the missing name goes unnoticed.

    Buttons vs Links: Preventing Naming Failures

    A fair number of empty buttons start long before anyone looks at labels—they come from using the wrong element altogether.  A control can look like a button in the UI, but under the hood, it’s a styled link coming from a CMS. Or a real <button> gets wired up to handle navigation because it was the fastest way to hook into a script. Both choices create avoidable problems.

    The semantic rule is not complicated, and it holds up across every framework and CMS:

    • Links move the user to a new location.
    • Buttons trigger something in the current view.

    Assistive technology depends on that distinction. Screen readers keep separate lists for links and buttons. Keyboard users expect different activation behavior. When the markup doesn’t match the intent, the control becomes unpredictable—especially for anyone not relying on visuals to figure out what’s going on.

    If you’re working in a design system or component library, this is where discipline pays off. Define two primitives that share the same visual design but render the correct element under the hood:

    • A real <button> component for actions
    • A LinkButton (or equivalent) that renders an anchor for navigation

    You keep visual consistency, but the markup stays honest. That reduces confusion for assistive tech and cuts down on empty-button issues that come from mismatched roles or controls that never get a proper name.

    How Screen Readers Handle Empty Buttons

    A screen reader can only announce what a button does if it has a real, programmatic name. When that name is missing, the control becomes indistinguishable from every other unlabeled button in the interface. At that point, the user isn’t navigating—they’re guessing.

    Screen readers follow a strict naming order. They don’t pull from styling, layout, or anything “visual.” They rely on one of these sources, in this order:

    • Visible text inside the <button> element
    • aria-label
    • aria-labelledby
    • Alt text on images inside the button
    • The value on an <input type="submit">

    Anything outside this list won’t create a name.

    That includes:

    • CSS content
    • Pseudo-elements
    • Background images
    • Any text that isn’t actually in the DOM

    If the label isn’t provided through one of the recognized naming mechanisms, assistive technology has nothing to announce. A lot of empty-button issues come from assuming CSS or decorative SVGs can stand in for meaningful text—they can’t.

    When you need to confirm what a screen reader will announce, check the source the same way the browser does. In Chrome or Edge DevTools, open the Accessibility panel and look at Computed Name. If that field is empty, the button has no name for any user relying on a screen reader.

    How to Find Empty Buttons Before Release

    Catching empty buttons early is far easier than chasing them after a release. A reliable workflow keeps these issues visible long before they reach production, and it doesn’t require heavy tooling—just consistent layers of checks.

    Automated Checks for Empty Buttons

    Start with automated scans. They’re fast, predictable, and empty buttons show up as clear failures in most tools. They’re straightforward to fix and worth addressing immediately, rather than letting them roll into regressions.

    Page-Level Spot Checks in Key UI Areas

    After automation, move through the areas where empty buttons tend to cluster:

    • Header controls such as search, menu, account, and cart
    • Modal and drawer close buttons
    • Carousel next/previous controls
    • Cookie banners with accept or dismiss icons

    In the DOM, look for button elements with no text, empty aria-label values, and input buttons missing a value.

    Keyboard and Assistive Technology Checks

    Keyboard testing surfaces empty buttons quickly. If focus lands on a control and gives you no indication of its purpose, that’s a naming failure. A short screen reader pass will confirm whether the accessible name is missing.

    CMS and Plugin Sources of Empty Buttons

    Many empty buttons come from CMS templates and plugins where the markup isn’t easily changed. When you run into one, narrow it down to one of three paths:

    • Is there a setting that adds or overrides the label?
    • Can the template be patched safely?
    • Does the component need to be replaced altogether?

    This keeps the work focused on concrete fixes instead of guessing where the problem originated.

    Fixing Empty Buttons With Accessible Labels

    Most empty buttons come from repeatable markup patterns, so the fixes follow equally repeatable shapes.

    Adding Visible Text to Name Buttons

    <button type="button">Subscribe</button>

    Providing Labels for Icon-Only Buttons

    <button type="button" aria-label="Close dialog">
     <svg aria-hidden="true" focusable="false"></svg>
    </button>

    Using Screen-Reader-Only Text for Labels

    <button type="button">
     <svg aria-hidden="true" focusable="false"></svg>
     <span class="sr-only">Search</span>
    </button>

    Fixing Input Buttons Missing Values

    <input type="submit" value="Submit" />

    Using Alt Text Correctly on Image Buttons

    <button type="submit">
     <img src="email.svg" alt="Subscribe to newsletter">
    </button>

    All of these preserve a stable, accessible name, so the control keeps working even if styles or icons change later.

    WCAG Requirements Related to Empty Buttons

    When a button has no accessible name, it violates several parts of the Web Content Accessibility Guidelines (WCAG). These requirements ensure that every interactive control can be understood and operated by people using assistive technology. Empty buttons fall short because they provide no text, label, or programmatic name for a screen reader to announce.

    Empty buttons map to several WCAG criteria, most commonly:

    • 1.1.1 Non-text Content (A)
    • 2.4.4 Link Purpose (In Context) (A)

    Tools may categorize them differently, but they’re all pointing at the same failure: the control doesn’t expose a usable name.

    How to Prevent Empty Buttons Long-Term

    Long-term prevention comes from a few small guardrails.

    Setting Standards for Icon and Action Buttons

    If your team builds icon-button components, require a label prop. That forces naming decisions into the place where they’re easiest to enforce.

    Adding Tests to Catch Unnamed Buttons Early

    Add tests that check for unnamed buttons in rendered output. Even a small number of targeted cases can stop regressions before they appear in the UI.

    Reviewing CMS Output for Labeling Support

    When reviewing new plugins or themes, inspect their output. If controls can’t be labeled cleanly, decide early whether they should be configured, patched, or replaced.

    Building Better Accessible Buttons

    Empty buttons are simple to overlook but deeply disruptive for users who rely on assistive technology. When a button can’t introduce itself, the interface stops feeling usable and starts feeling unpredictable.

    From a development standpoint, addressing this isn’t complicated—it just requires intention. Choose the correct semantic element. Provide a name that lives in the DOM. Confirm the accessible name using your tools. And treat CMS and design system choices as part of your front-end architecture, not an afterthought.

    If your team wants support refining button patterns, improving audits, or building accessibility practices that scale, 216digital can help. To map WCAG 2.1 requirements into your actual development workflow, schedule an ADA Strategy Briefing and get guidance tailored to your stack and long-term accessibility plans.

    Greg McNeil

    January 19, 2026
    How-to Guides
    Accessibility, empty buttons, How-to, WCAG, Web Accessibility, web developers, web development
  • WCAG 3.3.8: Rethinking Passwords, Codes, and CAPTCHAs

    The main login form usually isn’t the problem. It’s everything around it. The retry loop. The MFA branch that forces you to read a code on one device and type it into another. The recovery step that adds a challenge after you’re already stuck. That’s also where “hardening” changes tend to hide—paste blocked, autocomplete disabled, segmented OTP inputs that fight autofill.

    If you’ve ever been locked in a loop because you mistyped once, you already know how quickly “secure” turns into “unusable.” For some users that’s just irritating. For others—people dealing with memory limitations, dyslexia, ADHD, anxiety, or plain cognitive overload—it’s the point where access ends. WCAG 3.3.8 is essentially asking for one thing: don’t make recall or manual re-entry the only route through authentication.


    What WCAG 3.3.8 Actually Requires for Accessible Authentication

    WCAG 3.3.8 Accessible Authentication (Minimum) is easy to misread as “no passwords” or “no MFA.” It’s neither. It’s about whether the user has a path through authentication that does not depend on a cognitive function test. WCAG 3.3.8 focuses on removing authentication steps that rely on memory, transcription, or puzzle-solving when no accessible alternative exists. In practice, you cannot make “remember this” or “retype this” the gate unless you also provide a supported alternative or a mechanism that reduces the cognitive burden.

    What Counts as a Cognitive Function Test in Authentication

    A cognitive function test includes anything that requires the user to remember, transcribe, or solve something in order to log in. That includes remembering site-specific passwords, typing codes from one device into another, or solving distorted text in a CAPTCHA.

    Allowable Alternatives Under WCAG 3.3.8

    Under WCAG 3.3.8, a cognitive function test cannot be required at any step in an authentication process unless the page provides at least one of these options:

    • An alternative authentication method that does not rely on a cognitive function test
    • A mechanism that assists the user, such as password managers or copy and paste
    • A test based on object recognition
    • A test based on personal non-text content that the user previously provided

    Object recognition and personal content are exceptions at Level AA, yet they are still not ideal for many users with cognitive or perceptual disabilities. From an inclusion standpoint, it is better to avoid them when a simpler option exists, such as letting the browser fill in credentials or using passkeys.

    This applies to authenticating an existing account and to steps like multi-factor authentication and recovery. It does not formally cover sign-up, although the same patterns usually help there too.


    Cognitive Function Tests Hiding in Authentication Flows

    Most 3.3.8 issues don’t show up on the main login screen. They show up in the surrounding steps: the retry loop after a failed password, the MFA prompt, the recovery flow, or the extra verification that triggers when traffic looks unusual. When you walk through those paths end-to-end, you can see where memory or transcription slips back in.

    Memory-Based Authentication Pressure Points

    Asking users to recall a username, password, or passphrase without any assistive mechanism is a cognitive function test. Security questions like “What street did you grow up on” or “What was your first pet’s name” add even more recall pressure, often years after someone created the answers.

    Transcription-Based Authentication Pressure Points

    Many authentication flows expect people to read a one-time passcode from SMS or an authenticator app and then type it into a separate field. This becomes even harder when paste is blocked or when the code lives on a different device, and the user must move between them.

    Puzzle-Style Pressure Points and CAPTCHA

    Traditional CAPTCHAs that rely on distorted text, fine detail image selection, or audio that must be transcribed all require perception, memory, and focus under time pressure.

    If a CAPTCHA or extra test appears only after multiple failures or “suspicious” activity, it still has to comply with the success criterion.


    Fast WCAG 3.3.8 Wins With Password Managers and Paste

    Start with the stuff that breaks the widest range of users and is easiest to fix. If a password manager can’t reliably fill the form, or paste is blocked in password or code fields, the flow forces recall and transcription. That’s exactly what WCAG 3.3.8 is trying to remove.

    Implementation Details That Improve Accessible Authentication

    Allowing password managers to store and fill credentials removes the need for users to remember complex passwords. Allowing paste lets people move secure values from a password manager, secure notes, or another trusted source into the login form without retyping.

    Here’s what tends to matter in real implementations:

    • Use clear labels and proper input types so browsers and password managers can correctly identify login fields.
    • Avoid autocomplete="off" on username and password fields.
    • Do not attach scripts that block paste or interfere with autofill.

    A basic compliant login form can look like this:

    <form action="/login" method="post">
     <label for="username">Email</label>
     <input id="username" name="username" type="email"
            autocomplete="username" required>
    
     <label for="password">Password</label>
     <input id="password" name="password" type="password"
            autocomplete="current-password" required>
    
     <button type="submit">Log in</button>
     <a href="/forgot-password">Forgot password?</a>
    </form>

    A show password toggle is also helpful. It lets users check what they have typed without guessing, which reduces errors for people who struggle with working memory or fine motor control.

    From a security standpoint, allowing paste and password managers aligns with modern guidance. Strong, unique passwords managed by tooling are safer than short patterns that people try to remember across dozens of sites.


    Offering Authentication Paths That Reduce Cognitive Load

    Even with perfect autofill support, passwords are still a brittle dependency. WCAG 3.3.8 expects at least one route that doesn’t ask the user to remember or retype a secret. Passwordless options are the cleanest way to do that without playing whack-a-mole with edge cases.

    Magic Links by Email

    Users enter an email address and receive a time-limited, single-use link. Clicking that link completes authentication. Done well, this path removes passwords and codes entirely.

    Third-Party Sign In

    Signing in with an existing account from a trusted provider can also reduce cognitive load when the external account is already configured for accessible authentication. It shifts the cognitive work away from your login page, so you must still consider whether the rest of your flow remains usable.

    When you implement these methods, keep security fundamentals in place. Tokens should be single-use, expire after a reasonable window, and be protected by sensible rate limits. You can keep a strong security posture without making users memorize or transcribe extra values.


    Passkeys and WebAuthn as an Accessible Authentication Pattern

    Passkeys are one of the rare shifts where security and cognitive accessibility improve together. No remembered secrets. No code transcription. Authentication becomes a device interaction, which lines up cleanly with what WCAG 3.3.8 is trying to achieve.

    Why Passkeys Align Well With WCAG 3.3.8

    Passkeys based on WebAuthn use public key cryptography tied to the user’s device. Users confirm through a fingerprint, face recognition, device PIN, or a hardware key. They do not have to remember strings or retype codes, which removes a large source of cognitive effort.

    A simplified client example might look like this:

    const cred = await navigator.credentials.get({ publicKey });
    
    await fetch("/auth/webauthn/verify", {
     method: "POST",
     headers: { "Content-Type": "application/json" },
     body: JSON.stringify(cred),
    });

    Design your interface so people can choose the method that works best for them. Do not force a single modality. Some users will prefer biometrics, others a hardware key, others a platform prompt. Always keep an accessible fallback available in case a device method fails.


    Rethinking MFA Without Creating New WCAG 3.3.8 Barriers

    MFA is where a lot of otherwise compliant logins fail. The password step might be fine, then the second factor turns into a transcription test. If the only available MFA path is “read six digits and type them,” you don’t actually have a low cognitive route through authentication under WCAG 3.3.8.

    MFA Patterns That Avoid Cognitive Barriers

    • Push notifications that allow the user to approve a sign-in with a simple action.
    • Hardware security keys that require a button press instead of code entry.
    • Device prompts that rely on the operating system’s secure authentication methods.

    If OTP is staying, the bar is simple. Make it fillable and pasteable, and don’t punish slower entry.

    • Allow paste and platform autofill for OTP fields.
    • Avoid very short expiration windows that penalize slower users.
    • Be careful with multi-input digit fields and ensure they support pasting a full code.

    A basic single-field OTP input can look like this:

    <label for="otp">Verification code</label>
    <input id="otp" name="otp"
          inputmode="numeric"
          autocomplete="one-time-code">

    This keeps the security benefit of MFA without turning the second factor into a failure point.


    CAPTCHA and Bot Protection Without Cognitive Puzzles

    CAPTCHAs often get introduced after a login endpoint gets abused. The default implementations are usually cognitive tests, and they tend to appear when the user is already in a retry loop or being flagged as suspicious. That is a bad time to add a puzzle.

    Bot-Mitigation Patterns That Don’t Burden the User

    Object recognition and personal content challenges may technically meet Level AA, but they still exclude many users and should not be your first choice. A better strategy is to move bot checks out of the user’s direct path whenever possible.

    Prefer controls that don’t ask the user to prove they’re human:

    • Rate-limiting login attempts.
    • Device or geo-based risk checks.
    • Invisible CAPTCHA that runs in the background.
    • Honeypot inputs that automated scripts are likely to fill.

    For example, a simple honeypot field can look like this:

    <div style="position:absolute;left:-9999px" aria-hidden="true">
     <label for="website">Website leave blank</label>
     <input id="website" name="website" tabindex="-1" autocomplete="off">
    </div>

    If the backend treats any non-empty value as a bot signal, most automated scripts are filtered without showing users a challenge at all.


    Testing Authentication Journeys Against WCAG 3.3.8

    You can’t validate WCAG 3.3.8 from markup alone. You need to run the flow the way users actually run it, including autofill, paste, and OS prompts. Then you need to intentionally trigger the “extra verification” paths because that’s where most failures live.

    Manual Tests That Matter for Accessible Authentication

    • Log in with a browser password manager and a popular third-party password manager.
    • Confirm that paste works in username, password, and OTP inputs.
    • Trigger retry flows, lockouts, and “suspicious” paths and check for hidden CAPTCHAs or extra steps.
    • Walk through every MFA route and confirm that at least one complete path avoids unsupported cognitive tests.

    Automated Checks for the Supporting Code

    Automation still helps as a tripwire, just not as the final verdict. Custom checks can flag:

    • Inputs with autocomplete="off" where credentials belong
    • Password and OTP fields that attach paste blocking handlers
    • Known CAPTCHA patterns that appear in authentication contexts

    The target is not “no friction.” The target is “no cognitive gate without a supported way through it.”


    Improving Login Usability Through WCAG 3.3.8

    WCAG 3.3.8 is much easier to handle when you treat authentication as a system, not a single screen. Most barriers show up in the supporting paths, not the main form. Once those routes are mapped and cleaned up, keeping at least one low-cognitive path end to end stops feeling like extra work and starts feeling like a more stable design pattern. You still keep strong security, but you drop the steps that slow users down or lock them out.

    If you want help threading accessible authentication and broader WCAG 2.2 requirements into your existing roadmap, 216digital can support that process. To see what that could look like for your team, you can schedule a complementary ADA Strategy Briefing.

    Greg McNeil

    January 14, 2026
    How-to Guides
    Accessibility, How-to, WCAG, WCAG 3.3.8, WCAG Compliance, WCAG conformance, web developers, web development, Website Accessibility
  • YouTube Accessibility: Captions, Audio, and Design

    Most teams watch views, watch time, and subscribers like hawks. But there is another number that matters, even if you never see it in analytics. How many people tried to watch your video and left because it was hard to follow?

    That question sits at the heart of YouTube accessibility.

    YouTube is one of the biggest marketing channels most brands rely on. It powers product explainers, support content, training, webinars, and the videos embedded on your website. When the video is hard to use, that friction follows your brand.

    Now, YouTube does a few things well out of the box. The player is responsive, the controls are built in, and keyboard shortcuts are already there. Screen reader support is strong, too. Still, the creator side matters most. Captions, transcripts, audio description, visual design, structure, and testing are all handled by your team. None of this needs to be complicated, and it scales well once it’s part of your workflow.

    Start With a Plan for YouTube Accessibility

    If accessibility starts after the upload, it usually turns into cleanup work. Cleanup is slower. It costs more. It also leads to compromises, like leaving a confusing visual in place because the edit timeline is already locked.

    Planning earlier changes the whole experience. When you build accessibility into the script and storyboard, you can:

    • Read on-screen text out loud as you write it.
    • Explain charts and visuals in the same moment they appear.
    • Avoid abrupt effects that some viewers may not handle.
    • Save time by choosing caption and transcript steps up front.

    Set a Baseline and Assign Ownership

    A simple shift helps. Treat accessibility checkpoints like production milestones. Put them beside script approval, rough cut, and final cut. When a team does this, rework drops fast, especially for repeat formats like weekly updates or a recurring demo series.

    It also helps define a baseline for each video type. A solid default for prerecorded content often includes accurate captions, a transcript viewers can access outside the player, and narration that explains important visuals. Then you layer in needs by format. Tutorials often need stronger descriptive narration. Short marketing clips need careful contrast and motion choices. Webinars and livestreams need reliable audio and a caption plan.

    This is also about roles. Every script needs a clear owner. Captions deserve someone who reviews them thoughtfully. Contrast and motion checks should fall to a named reviewer. And the final accessibility pass needs an accountable person before anything goes live. Without that clarity, tasks slip—not from a lack of care, but from uncertainty about who handles the final step.

    Tip: build a short “definition of done” for a video. If the checklist lives in the same place as your content calendar or project tickets, it gets used.

    Captions That Hold Up Under Review for YouTube Accessibility

    Captions are often treated like a marketing feature. They increase overall watch time. Search performance benefits. And viewers stay engaged, even in public settings. All true. But captions also carry a basic promise to Deaf and hard-of-hearing viewers. The promise is simple. The words matter, and you should be able to access them.

    Standards matter here, too. Web Content Accessibility Guidelines (WCAG) includes caption requirements for prerecorded and live video. Auto-captions are rarely enough on their own. Names get dropped. Product terms get mangled. Key phrases come back as nonsense. If your content includes instructions, legal details, or health and safety steps, “close enough” captions can become a serious problem.

    Choose a Workflow You Can Repeat

    Your workflow can still be practical. In YouTube Studio, most teams choose one approach and stick with it:

    • Upload a caption file, like SRT or VTT, created in an editor or third-party tool.
    • Start with auto-captions, then edit and correct them.
    • Type captions in YouTube’s editor for shorter videos.

    What matters is consistency. Pick a standard and apply it. Many teams upload edited caption files for major videos and review auto-captions for low-risk clips. That can work, as long as “reviewed” means a real check.

    A quick quality checklist helps:

    • Accuracy: capture what is said, plus key sound cues when they change meaning
    • Timing: captions should appear with the speech, not late or early
    • Readability: short chunks, correct punctuation, and speaker labels when needed
    • Placement: do not cover critical visuals if you can avoid it

    Two caption details teams often miss:

    • Numbers and units: “15” vs “50” is not a small error in a demo or training video.
    • Proper nouns: product names, locations, and people’s names are where auto-captions tend to drift.

    Livestreams Need a Follow-Up Step

    Livestreams add pressure because content is happening in real time. Live captioning can still be useful, but it depends heavily on audio quality. Use a strong mic. Reduce background noise. Speak clearly. Then, when the livestream becomes an archived video, upload corrected captions. That keeps the recording usable long after the event ends.

    Transcripts and Chapters for YouTube Accessibility

    Captions are not the same as transcripts. Captions are synced to the video. Transcripts live outside the player. They let people scan, search, and jump to what they need.

    It helps to separate three things:

    • Captions: synced text that follows audio
    • Transcripts: full text of spoken content, not tied to exact timing
    • Descriptive transcripts: transcripts that also include important visual info

    Transcripts support more than disability access. They also help people who learn better by reading. For anyone who wants to revisit a specific tutorial step, a transcript makes it easy to review without rewatching the entire video. And when a user needs to search for a key phrase, the text lets them jump directly to the right section.

    Chapters Make Long Videos Easier to Navigate

    Chapters matter for the same reason. Long videos are easier to use when viewers can jump straight to what they need. For tutorials, webinars, and explainers, add timestamps and clear chapter titles. Skip vague labels like “Step 3.” Use names that match what a person is trying to do, like “Turn on captions in YouTube Studio” or “Fix timing and speaker labels.”

    A simple way to level up chapters is to write them like help-center headings. If the title sounds useful on a support page, it will likely be useful in a video, too.

    Bring Transcripts Onto Your Website

    If you embed videos on your website, do not hide the transcript behind extra clicks. Put the transcript on the page, or link to it right next to the player. This helps users decide if the video is worth watching. It also helps your site’s content, as the page now includes the same information in an easy-to-scan format.

    Audio Description for YouTube Accessibility

    Many teams assume audio description means a big budget and a separate production track. Sometimes it does. Often, it does not.

    The real question is whether the video includes meaningful visual details that are not shared in the audio. When a chart appears without explanation, that creates a gap. On-screen instructions that happen without being spoken create the same problem. And when important text is shown visually but never read aloud, that is another gap.

    Descriptive Narration Works Well for Demos

    In a talking-head video where the speaker explains everything, extra description may not be needed. But tutorials and demos are different. They rely on what the viewer sees. That is where descriptive narration becomes a strong option. The presenter can name what they are clicking, what changed on screen, and what the viewer should look for next.

    A helpful habit in demos is to replace vague phrases with concrete ones. Instead of “click this,” say “select Settings,” or “open the Captions tab,” or “choose English from the language menu.” That supports more viewers than you might expect, including people watching on small screens.

    Some teams also publish a second version, clearly labeled, like “with audio description,” when visuals are dense and constant. That approach can work well for training content, data-heavy explainers, or detailed product walkthroughs.

    Whether you use narration or a described version, keep descriptions concise and focused. Describe what changes the meaning. Place it in natural pauses. Keep the tone neutral and consistent with the video’s style.

    Visual Design Choices for YouTube Accessibility

    Video design can either support understanding or fight against it. Many accessibility issues show up in the same places, again and again. Thumbnails. On-screen text. Contrast. Motion.

    Contrast is a clear example. WCAG guidance uses targets like 4.5:1 for normal text and 3:1 for large text. Apply that mindset to thumbnails, titles, lower thirds, and callouts. If you need to place text over video footage, add a background block to keep it readable. Small text, thin fonts, and low contrast do not just look “clean.” They disappear for many viewers.

    Tip: if it is important enough to show, it is important enough to leave up long enough to read. Fast overlays are a common source of missed information.

    Reduce Flashing and Overly Fast Motion

    Motion is another common trap. Fast flashing edits and strobe-like overlays can create real harm for some people. Avoid rapid flashing effects. Keep motion smooth. If an edit feels intense, it probably is. Review the sequence before publishing.

    Do Not Rely on Color Alone

    Also, do not rely solely on color to convey meaning. If a chart uses red and green, add labels. If an overlay uses color to mark “good” and “bad,” add shapes or text. And if something important appears visually, say it out loud too. That single habit supports many people at once.

    Embedding and Ongoing Checks for YouTube Accessibility

    The standard YouTube embed gives you a lot. Player controls are built in. Keyboard operation is supported. The player adapts across screen sizes. Those are strong foundations.

    But your website still needs to do its part. An embedded video should not sit alone. Give it context:

    • A descriptive heading before the player
    • A short summary of what the video covers
    • A transcript on the page, or a clear link to it nearby

    Avoid auto-play when possible, especially with sound. Auto-play can overwhelm users and can make it harder for screen reader users to orient themselves on the page.

    Quick Checks to Add to QA

    Testing does not need to be complex. Build a few checks into QA:

    • Can you reach and operate the player with only a keyboard?
    • Does focus move in and out of the player in a predictable way?
    • Are captions available and working in the embedded view?
    • If you provide a described version, is it easy to find and understand?

    Hit Play on YouTube Accessibility

    Creating accessible YouTube content is not about chasing perfection or rebuilding your process from scratch. It is about making intentional choices that let more people engage with your videos, whether they are watching, listening, reading, or browsing. When captions are accurate, visuals are clear, and narration carries meaning, your content works harder and reaches further.

    At 216digital, we help teams turn accessibility from a checklist into a sustainable strategy. We work with you to integrate WCAG 2.1 accessibility requirements into your video and web development roadmap, tailored to your tools, timelines, and business goals. From reviewing existing video content to building repeatable workflows for captions, transcripts, and embedded media, our focus is on progress you can maintain.

    If you want guidance on strengthening your YouTube accessibility practices and aligning them with your digital accessibility goals, schedule a complimentary ADA Strategy Briefing with our team. We’ll help you make a plan that fits your team and your release cycles—on your terms.

    Greg McNeil

    December 12, 2025
    How-to Guides
    Accessibility, captions, Closed caption, How-to, screen readers, videos and audio content, Website Accessibility, Youtube
1 2 3 … 9
Next Page

Find Out if Your Website is WCAG & ADA Compliant







    By submitting this form, you consent to follow-up from 216 Digital by call, email, or text regarding your inquiry. Msg & data rates may apply. Reply STOP to opt out or HELP for help.

    216digital Logo

    Our team is full of professionals in Web Accessibility Remediation, eCommerce Design & Development, and Marketing – ready to help you reach your goals and thrive in a competitive marketplace. 

    216 Digital, Inc. BBB Business Review

    Get in Touch

    2208 E Enterprise Pkwy
    Twinsburg, OH 44087
    216.505.4400
    info@216digital.com

    Support

    Support Desk
    Acceptable Use Policy
    Accessibility Policy
    Privacy Policy

    Web Accessibility

    Settlement & Risk Mitigation
    WCAG 2.1/2.2 AA Compliance
    Monitoring Service by a11y.Radar

    Development & Marketing

    eCommerce Development
    PPC Marketing
    Professional SEO

    About

    About Us
    Contact

    Copyright © 2026 216digital. All Rights Reserved.