webzod
account

Fix the accessibility failures that Lighthouse finds

a11y.lighthouse.score_poor · effort: a project

Why it matters

A low Lighthouse accessibility score means many problems that stop people using screen readers, keyboards or low vision settings, such as unnamed buttons, images without alt text and weak contrast. Fixing the failing audits helps all visitors, and accessibility is often required for public sites.

The fix

  1. Run Lighthouse (in Chrome DevTools, or through PageSpeed Insights) on the page and open the Accessibility section. Fix the failing audits one by one, starting with those it lists first, because they affect the most people.
  2. Give every meaningful image an alt text that says what the image shows or does, and an empty alt="" to decorative ones. Give every form field a visible label, and every button and link a name that makes sense on its own (not "click here").
  3. Check colour contrast. Normal text needs a contrast ratio of at least 4.5 to 1 against its background, and large text (about 24 pixels, or 19 pixels bold) needs 3 to 1. Do not rely on colour alone to carry meaning.
  4. Set the page language on the html element, give each page a unique title, use headings in order (one h1, then h2 and h3), and use real buttons and links instead of clickable divs.
  5. Test by hand as well. Tab through the page with the keyboard only and check that focus is visible and in a sensible order, and try a screen reader on the main paths. Automated tests find only part of the problems.
html
<html lang="en">
  <head><title>Contact us | Example company</title></head>
  <body>
    <img src="/img/team.jpg" alt="Our team of six in the workshop">
    <img src="/img/divider.svg" alt="">

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

    <button type="submit">Send message</button>
    <button type="button" aria-label="Open menu"><svg aria-hidden="true">...</svg></button>
    <a href="/shipping">Read our shipping and returns policy</a>
  </body>
</html>

Read the documentation (opens in a new tab)

Scan your domain to see whether this applies to you.