<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: a11ySolutions</title>
    <description>The latest articles on Forem by a11ySolutions (@a11ysolutions).</description>
    <link>https://forem.com/a11ysolutions</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3891044%2F5e091ec5-d07a-4d4f-b5dc-81adb3053f59.jpg</url>
      <title>Forem: a11ySolutions</title>
      <link>https://forem.com/a11ysolutions</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/a11ysolutions"/>
    <language>en</language>
    <item>
      <title>5 ARIA mistakes that make accessibility worse, not better</title>
      <dc:creator>a11ySolutions</dc:creator>
      <pubDate>Wed, 06 May 2026 08:34:27 +0000</pubDate>
      <link>https://forem.com/a11ysolutions/5-aria-mistakes-that-make-accessibility-worse-not-better-2pmp</link>
      <guid>https://forem.com/a11ysolutions/5-aria-mistakes-that-make-accessibility-worse-not-better-2pmp</guid>
      <description>&lt;p&gt;There's a rule in accessibility that doesn't get enough attention:&lt;/p&gt;

&lt;p&gt;No ARIA is better than bad ARIA.&lt;/p&gt;

&lt;p&gt;Adding ARIA attributes without understanding them doesn't help assistive tech, it actively misleads it. Here are the mistakes I find most often in real audits:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. role="button" on a div — without keyboard support&lt;/strong&gt;&lt;br&gt;
If you give something a button role, screen readers announce it as a button.&lt;br&gt;
Users expect to activate it with Space or Enter.&lt;br&gt;
If your div only handles onClick, keyboard users get announced a button they can't press. Use &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;. That's what it's there for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. aria-label that duplicates visible text — badly&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;&amp;lt;button aria-label="Click here to submit the form"&amp;gt;Submit&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;br&gt;
Screen readers read the aria-label, ignoring "Submit". Now your button is "Click here to submit the form", verbose, inconsistent, and confusing in a list of controls.&lt;br&gt;
If the visible label is accurate, you don't need aria-label.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. aria-hidden="true" on focusable elements&lt;/strong&gt;&lt;br&gt;
Hiding something from the accessibility tree while leaving it focusable creates a ghost, keyboard users can tab to it, but screen readers announce nothing. That's worse than not hiding it at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. aria-live on everything&lt;/strong&gt;&lt;br&gt;
aria-live="assertive" interrupts whatever the screen reader is doing to announce the update. Useful for critical alerts. Catastrophic for &lt;br&gt;
status messages, loading indicators, or anything non-urgent.&lt;br&gt;
Most of the time, aria-live="polite" is what you want, or nothing at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Decorative icons without aria-hidden&lt;/strong&gt;&lt;br&gt;
An icon inside a button with no aria-hidden forces screen readers to &lt;br&gt;
announce the SVG path or file name alongside the button label.&lt;br&gt;
&lt;code&gt;&amp;lt;svg aria-hidden="true"&amp;gt;&lt;/code&gt; is two words. Use them.&lt;/p&gt;

&lt;p&gt;No ARIA is better than bad ARIA.&lt;br&gt;
Before reaching for it, ask if a native HTML element solves it first.&lt;/p&gt;

&lt;p&gt;What ARIA mistakes do you see most in code reviews?&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>webdev</category>
      <category>html</category>
    </item>
    <item>
      <title>Form accessibility: the checklist nobody actually uses (until users complain)</title>
      <dc:creator>a11ySolutions</dc:creator>
      <pubDate>Thu, 30 Apr 2026 07:19:49 +0000</pubDate>
      <link>https://forem.com/a11ysolutions/form-accessibility-the-checklist-nobody-actually-uses-until-users-complain-1b3h</link>
      <guid>https://forem.com/a11ysolutions/form-accessibility-the-checklist-nobody-actually-uses-until-users-complain-1b3h</guid>
      <description>&lt;p&gt;Forms are where accessibility debt becomes user abandonment.&lt;/p&gt;

&lt;p&gt;A form can pass every automated scan and still be completely unusable &lt;br&gt;
for a significant chunk of your users.&lt;/p&gt;

&lt;p&gt;Here's what I see skipped constantly in real audits:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Placeholder text used as a label&lt;/strong&gt;&lt;br&gt;
When the field gets focus, the hint disappears. For users with cognitive disabilities or memory issues, that's a dead end.&lt;br&gt;
Use &lt;code&gt;&amp;lt;label&amp;gt;&lt;/code&gt; elements. Always.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Error messages that only exist visually&lt;/strong&gt;&lt;br&gt;
Red border + error text looks complete. But if the error isn't linked to the input via &lt;code&gt;aria-describedby&lt;/code&gt;, screen readers announce nothing.&lt;br&gt;
The user submits. Nothing happens. They don't know why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Required fields with no accessible indicator&lt;/strong&gt;&lt;br&gt;
An asterisk (*) is a visual convention. Without &lt;code&gt;aria-required="true"&lt;/code&gt; or a text equivalent, it means nothing to assistive tech.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Autocomplete missing on personal data fields&lt;/strong&gt;&lt;br&gt;
WCAG 1.3.5 exists. Most teams don't know it does. Name, email, phone, address, those fields need proper &lt;code&gt;autocomplete&lt;/code&gt; &lt;br&gt;
attributes. For users with motor disabilities, it can be the difference between completing the form or not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Focus order that fights the visual layout&lt;/strong&gt;&lt;br&gt;
Tab order follows DOM order, not visual order. If your CSS grid or &lt;br&gt;
flexbox rearranges things visually, keyboard users may be jumping around the form in a completely unexpected sequence.&lt;/p&gt;

&lt;p&gt;None of these fail an automated scan.&lt;br&gt;
All of them fail real users.&lt;/p&gt;

&lt;p&gt;If you're doing form reviews, what's the first thing you check?&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>html</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Great insights by Vitaly Skadorva! Our benchmarks confirm that moving to dynamic interaction testing is key, increasing finding precision from ~20% to over 80%. A must-read for true A11y!</title>
      <dc:creator>a11ySolutions</dc:creator>
      <pubDate>Mon, 27 Apr 2026 16:24:17 +0000</pubDate>
      <link>https://forem.com/a11ysolutions/great-insights-by-vitaly-skadorva-our-benchmarks-confirm-that-moving-to-dynamic-interaction-mb7</link>
      <guid>https://forem.com/a11ysolutions/great-insights-by-vitaly-skadorva-our-benchmarks-confirm-that-moving-to-dynamic-interaction-mb7</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/vitalyskadorva/accessibility-testing-best-practices-3li9" class="crayons-story__hidden-navigation-link"&gt;Accessibility Testing: Best Practices&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/vitalyskadorva" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3829602%2Ff815fcd6-c31b-40eb-abe7-08844fbc54d0.jpg" alt="vitalyskadorva profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/vitalyskadorva" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Vitaly Skadorva
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Vitaly Skadorva
                
              
              &lt;div id="story-author-preview-content-3555038" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/vitalyskadorva" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3829602%2Ff815fcd6-c31b-40eb-abe7-08844fbc54d0.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Vitaly Skadorva&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/vitalyskadorva/accessibility-testing-best-practices-3li9" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 27&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/vitalyskadorva/accessibility-testing-best-practices-3li9" id="article-link-3555038"&gt;
          Accessibility Testing: Best Practices
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/a11y"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;a11y&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/qa"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;qa&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/testing"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;testing&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/vitalyskadorva/accessibility-testing-best-practices-3li9" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/vitalyskadorva/accessibility-testing-best-practices-3li9#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            12 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Accessibility issues that automated tools won't catch (from real audits)</title>
      <dc:creator>a11ySolutions</dc:creator>
      <pubDate>Fri, 24 Apr 2026 10:35:10 +0000</pubDate>
      <link>https://forem.com/a11ysolutions/accessibility-issues-that-automated-tools-wont-catch-from-real-audits-2o8l</link>
      <guid>https://forem.com/a11ysolutions/accessibility-issues-that-automated-tools-wont-catch-from-real-audits-2o8l</guid>
      <description>&lt;p&gt;I run accessibility audits regularly. One pattern keeps showing up:&lt;/p&gt;

&lt;p&gt;The most critical issues are never in the code. They're in the interaction.&lt;/p&gt;

&lt;p&gt;Automated tools are genuinely useful, they catch structural and semantic &lt;br&gt;
issues fast. But they don't simulate real user behavior. And that's where &lt;br&gt;
things actually break.&lt;/p&gt;

&lt;p&gt;Here are the failure patterns I find most often:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keyboard traps in modals&lt;/strong&gt;: focus gets locked inside a dialog with no &lt;br&gt;
way out unless you know to press Escape (and even then, sometimes it doesn't &lt;br&gt;
work).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unpredictable focus jumps&lt;/strong&gt;: after a button click or route change, focus &lt;br&gt;
lands somewhere random. A screen reader user loses their place entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Silent error messages&lt;/strong&gt;: form validation runs, the error renders visually, &lt;br&gt;
but &lt;code&gt;aria-live&lt;/code&gt; is missing. Screen readers announce nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forms that validate but can't be completed&lt;/strong&gt;: the markup passes the &lt;br&gt;
scanner. Real users hit walls at step 2.&lt;/p&gt;

&lt;p&gt;None of these show up in axe, Lighthouse, or WAVE. You only find them &lt;br&gt;
when you actually use the product, keyboard only, screen reader on, &lt;br&gt;
cognitive load simulated.&lt;/p&gt;

&lt;p&gt;Accessibility isn't about passing a scan. It's about whether people can &lt;br&gt;
complete critical flows.&lt;/p&gt;

&lt;p&gt;How are you testing beyond automated tools in your projects?&lt;br&gt;
Keyboard only passes? Screen reader sessions? Something else?&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>digitalaccessibility</category>
      <category>a11ydetector</category>
      <category>wcag</category>
    </item>
  </channel>
</rss>
