GUIDE · WEB DESIGN

ACCESSIBILITY FIXES THAT ALSO HELP SEO

A handful of the things that make a site usable with a screen reader are the same things that make it legible to a crawler. This is that overlap, fixed, and an honest account of where it stops.

Share
Last verified 24 August 2026 against W3C WCAG 2.2 for the contrast thresholds. Ontario's obligations are covered in the paired article and on Ontario's own accessibility laws page

Before you start

Time
About 3 hours
Difficulty
Mostly editing, some HTML
Cost
Free
You end with
Seven fixes and a handoff doc
  • A scan of your homepage from a free checker. The paired article covers which tools and how to run them, and this guide starts from the report
  • A keyboard. It's genuinely the most revealing tool here, and step 5 is the one people remember
  • The ability to edit HTML and CSS, or to brief someone who can. More of this is editable in a page builder than you'd expect
  • Three hours, and a willingness to finish with an incomplete result, because that's the honest outcome

The overlap itself is under-sold. A screen reader and a crawler solve a similar problem: both arrive without eyes, and both need structure and meaning expressed in the markup rather than implied by how it looks. A heading that's an H2 because it's the second level, rather than because that size looked right, helps both. So does alt text that describes the image, and a link that says where it goes.

Where the overlap ends, it ends sharply, and each step says so rather than pretending the two goals are one.

1

Sort the scan before you fix anything

You have a report with an intimidating number on it. Before touching anything, understand two things about that number.

It's inflated by repetition. Scanners report every instance, so one template mistake becomes forty errors. A gallery with forty images missing alt attributes is one fix applied forty times. Sorting by type rather than working down the list turns the report from a wall into a short list of jobs.

It's also incomplete, and that matters more. Automated tools detect only a minority of real barriers. They're good at things a machine can check: a missing attribute, a contrast ratio, an unlabelled input. They can't tell you whether your alt text is useful, whether your headings describe the content, or whether the tab order makes sense. A clean scan isn't a working site, and the steps that follow are ordered so the manual ones aren't left to last.

So group the report into four buckets, which between them account for most of what gets found: contrast, missing alt, form labels, and empty or unclear links. Anything left over goes in a fifth pile for step 8.

How to know it worked Your report is grouped into four buckets with a count against each, and you can name the one template change that would clear the biggest bucket. You have also written the total down, because step 8 compares against it.

Common trap Treating the scan as the definition of the job. It's the machine-checkable slice, and it's the slice least likely to contain the thing actually stopping somebody using your site.

2

Fix the heading structure

Headings are how a page is navigated without eyes. Screen reader users jump between them the way a sighted reader skims, so a page whose headings are chosen for their font size rather than their level is a page with a broken table of contents.

Three rules, and they're the same three that make a page legible to a crawler:

  • One H1 per page, and it describes what the page is. Not the site name, not the logo.
  • No skipped levels. An H2 is followed by an H3, never straight to an H4 because that size looked better. If the size is wrong, that's a CSS problem, not a markup one.
  • Headings describe content. A line styled to look like a heading but marked up as a bold paragraph is invisible as structure to both audiences.

The test is quick: extract the headings alone and read them as an outline. If that outline tells you what the page covers and in what order, the structure is sound. If it reads as a list of disconnected phrases, or jumps from a big idea to a detail and back, the levels are wrong.

Where the overlap is exact. This one is genuinely identical for both goals, which is why it goes first. There's no version of this fix that helps accessibility and not search, or the reverse.

How to know it worked The headings read as a coherent outline on their own, there's exactly one H1, and no level is skipped. Guide 01's step on what Google sees covers the same check from the search side.

Common trap Fixing the levels and leaving the text. Our Services at the correct H2 level is structurally valid and still tells a person skimming by heading almost nothing. Correct level, descriptive text, both.

3

Write alt text that actually works

Alt text is the most commonly reported failure and the most commonly misunderstood fix, because the instruction people remember is "add alt text to images" and that isn't quite the rule.

The rule is that every image needs an alt attribute, and not every image needs words in it. Three outcomes, and the decision tree artifact below runs them properly:

  • It conveys information. Describe what it conveys, not what it depicts. A photo of your van outside a house isn't "white van"; it's what it tells the visitor, which is usually that you did this kind of job in this kind of place.
  • It's decorative. A flourish, a divider, a background texture. It gets alt="", empty, which tells assistive software to skip it. This is a real answer, not a cop-out.
  • It's a link or a button. Then the alt text describes the destination or action, not the picture. An icon linking to your contact page is "Contact us", not "envelope icon".

Leaving the attribute off entirely is the actual error, because software then falls back to guessing and often reads the filename, so somebody hears a string of digits and a file extension.

Where the overlap ends. Both audiences want a real description, so far so aligned. But alt text is also where people stuff keywords, and that fails both goals simultaneously: it degrades the experience for the person depending on it, and it's the kind of signal search engines discounted years ago. If you find yourself editing alt text with a keyword list open, close the list.

How to know it worked Every image on the page either describes something specific or is explicitly empty, and none reads like a filename or a keyword list. Read five aloud. If any makes you wince, rewrite it.

Common trap Writing alt text for images that are already described by the words right next to them. A caption saying exactly what the alt text says means somebody hears it twice. Where the surrounding text carries the meaning, empty is correct.

The free audit checks the machine-detectable half of this alongside the rest of your site's health, which is a faster way to produce the step 1 report.

RUN THE FREE AUDIT
4

Fix the link text

Screen reader users can pull up a list of every link on a page and navigate by it. On a typical small business site that list reads: click here, click here, read more, https://example.com/services/, learn more, click here.

The test is to read each link out of context and ask whether it says where it goes. That single question resolves almost every case.

  • Click here to see our services becomes See our services.
  • Read more becomes Read more about furnace repair.
  • A bare URL becomes what the page is, since a screen reader may otherwise announce the address character by character.
  • Six Learn more links on one page become six different phrases, because six identical link texts pointing at six destinations is ambiguous by definition.

Where the overlap is exact, with one caveat. Descriptive link text is anchor text, and anchor text is one of the clearer signals about what you're linking to, so this fix is unusually well aligned. The caveat is the same as alt text: descriptive means describing the destination honestly, not packing the phrase with terms. Emergency furnace repair in Etobicoke, available 24 hours as link text isn't descriptive, it's an advert wearing a link's clothes.

How to know it worked You can read your links as a list, with no surrounding text, and know where each goes. No two links with the same text point to different places.

Common trap Fixing the visible links and forgetting the icons. A social icon or an arrow with no text is an empty link, which is exactly what a scanner flags and what a screen reader announces as nothing at all.

5

Put the mouse away and tab through it

This is the most revealing test in the guide, it takes five minutes, and most sites fail it at the navigation menu. It's also the step with the least SEO overlap, and it's here anyway, because it's the one where you find out whether somebody can actually use the site.

Hands off the mouse. Press Tab repeatedly from the top of the page and watch:

  1. Can you see where you are? There must be a visible focus indicator on every stop. If your CSS has outline: none anywhere, that's almost certainly why it's missing, and removing that line is often the entire fix.
  2. Can you reach everything? Every link, every button, every form field. Dropdown menus are the usual failure, particularly ones built to open on hover.
  3. Does the order make sense? It should follow the visual order. Jumping from the header to the footer and back means the markup order doesn't match the layout.
  4. Can you get out? If focus enters something and can't leave by keyboard, that's a trap, and it's the most serious thing on this list. Modals and embedded widgets are the usual culprits.
  5. Then complete your own contact form using only the keyboard. Tab to it, fill it, submit it. This is the whole test in one action, and it's the one that surprises people.

A useful thing to add while you're here: a skip link, a link at the very top that jumps past the navigation to the main content. Without one, a keyboard user tabs through your entire menu on every single page. It's a few lines of markup and it's the fix with the best ratio of effort to relief on this list.

How to know it worked You completed your own contact form with the keyboard alone, you could see the focus indicator at every step, and nothing trapped you. If you reached for the mouse even once, note where and why, because that spot is the finding.

Common trap Removing the focus outline because it looked untidy, then never noticing. It's one of the most common regressions in web design, and it removes the only signal a keyboard user has about where they are.

6

Correct the contrast

Contrast is the most commonly failed check on the web and the easiest to fix, because it's a colour value rather than a structural change.

The thresholds, from WCAG 2.2 at Level AA:

TextMinimum ratioWhat counts
Normal text4.5:1Anything below the large-text sizes
Large text3:1At least 18pt, or 14pt bold. Roughly 24px, or 18.5px bold

Run a contrast checker over the places designers reliably get it wrong, which are rarely the body copy:

  • Light grey placeholder text in form fields. Almost always fails, and it's often carrying the instruction for the field.
  • Button labels, especially white text on a mid-tone brand colour, which is the classic near-miss.
  • Text over images, where it may pass in one part of the photo and fail in another.
  • Muted secondary text: captions, form hints, footer links, disabled-looking states that aren't actually disabled.

Where the overlap ends completely. This one does nothing for SEO. Nothing. It's in the guide because it takes twenty minutes, it affects every visitor in bright sunlight or with ageing eyes, and pretending it carries a ranking benefit would be the kind of overclaim this guide is trying to avoid.

How to know it worked Body text, buttons and placeholder text all pass at their applicable ratio, checked with a tool rather than judged by eye. Eyes adapt to a brand palette and stop seeing the problem within about a week.

Common trap Checking the brand colour once and assuming the site is fine. Contrast is a property of a pair, so the same brand orange can pass on white and fail badly on your section background.

7

Repair the forms

Forms are where accessibility failures cost money directly, because a form that's hard to complete is abandoned by everybody, not only by people using assistive technology.

  • Every input needs a real label, properly associated. The label's for attribute matches the input's id. A styled span sitting above the box isn't a label, however much it looks like one. The markup artifact below has the pattern.
  • A placeholder isn't a label. It disappears when typing starts, so anyone who loses their place has lost the question too. Use both if you like the look, but never the placeholder alone.
  • Errors must be in text, next to the field. A red border says nothing to a screen reader and nothing to somebody who can't distinguish the colour. Say what's wrong and how to fix it.
  • Required fields need more than colour or an asterisk. Say required, or mark it in a way that survives being read aloud.
  • Group related fields. Radio buttons and checkboxes need their question associated with the set, not just with each option.

Where the overlap ends, and something better begins. None of this helps rankings. It helps conversions, which is usually the thing the ranking was for, and this is the step whose business case is easiest to make. It also pairs with the form test in guide 01: that one checks the submission actually arrives, this one checks a person can fill it in. Both failures are silent and both cost you enquiries you never hear about.

How to know it worked Click each field's label text and the cursor jumps into that field. That's the browser confirming the association exists, and it takes seconds per field. Then submit the form with a deliberate mistake and confirm the error is readable text.

Common trap Trusting a form plugin's output. Many generate labels that look right and aren't associated, and the click-the-label test catches it immediately.

8

Write down what you didn't fix

The last step is the one that separates this from an afternoon of tinkering, and it's the one most likely to be skipped because it feels like admitting failure. It's the opposite.

Re-run the scan, compare against the number you wrote in step 1, then write a short handoff document with three sections:

  • Fixed. What you corrected, on which pages, and the date.
  • Known and not fixed. Things you found and couldn't resolve, usually because the markup comes from a theme or a third-party widget. Say what and say why.
  • Not assessed. The honest one. You didn't test with a screen reader, you didn't test with real users, and you haven't looked at every page. Name that plainly.

This document is worth more than the fixes alone. It stops you re-discovering the same unfixable theme problem in six months, it tells whoever works on the site next what was already considered, and if you engage a specialist they begin from your work rather than zero, which is a materially cheaper start.

Then set a reminder to re-run the scan after any redesign or theme update, because these regress quietly. The focus outline in particular has a habit of disappearing again.

How to know it worked A dated document exists with all three sections filled in, and the third one isn't empty. If nothing is listed as not assessed, the document isn't honest yet.

Common trap Writing only what you fixed. That version reads as a completion certificate, which is exactly the wrong impression to leave for the next person and for yourself.

Copy and paste

Three artifacts. The keyboard script is the one to run first, because it finds the most in the least time.

The keyboard test script
Hands OFF the mouse. Whole test, top to bottom.

  [ ] Tab from the very top of the page
  [ ] Is there a SKIP LINK as the first stop?
      If not, add one. Best effort-to-relief
      ratio on the whole list.
  [ ] Can you SEE focus at every single stop?
      No visible outline anywhere?
      -> search your CSS for: outline: none
         that is usually the entire cause
  [ ] Reach every link, button and field
      dropdown menus fail most often,
      especially hover-to-open ones
  [ ] Does the order match the VISUAL order?
      header -> footer -> back = markup order
      does not match layout
  [ ] Can you always get OUT?
      focus that enters and cannot leave is
      a TRAP. most serious item here.
      usual culprits: modals, embedded widgets
  [ ] Open a modal, close it with Escape
  [ ] COMPLETE YOUR OWN CONTACT FORM
      keyboard only. tab, fill, submit.
      this is the whole test in one action

REACHED FOR THE MOUSE?
  Write down where and why. That spot is
  the finding, not the interruption.

RE-RUN AFTER
  any redesign, any theme update.
  the focus outline loves to vanish again.
Alt text decision tree
EVERY image needs an alt ATTRIBUTE.
Not every image needs WORDS in it.
Leaving the attribute off is the real error:
software falls back to reading the filename.

START: is the image a link or a button?
  YES -> alt describes the DESTINATION or
         ACTION, never the picture
         envelope icon -> alt="Contact us"
         NOT alt="envelope icon"
  NO  -> continue

Does it carry information the text does not?
  NO  -> alt=""   (empty, deliberate)
         flourishes, dividers, textures,
         and anything the caption already says
  YES -> continue

Describe what it CONVEYS, not what it depicts.
  bad .... alt="white van"
  good ... alt="Our van outside a semi in
                Etobicoke after a furnace
                replacement"

Is it complex (chart, diagram, price table)?
  -> short alt names it, and the real
     explanation goes in the page text where
     EVERYONE can read it

NEVER
  keyword lists. fails both goals at once:
    degrades it for the person relying on it,
    and search discounted it years ago
  "image of" / "picture of" - it is announced
    as an image already
  the filename, ever
Form markup that works, and the handoff log
<!-- label FOR matches input ID. that pairing
     is the whole thing. -->
<label for="email">Email address</label>
<input type="email" id="email" name="email"
       autocomplete="email"
       aria-describedby="email-hint"
       required>
<p id="email-hint">We reply within one business day.</p>

<!-- required: say the word, do not rely on
     colour or a bare asterisk -->
<label for="phone">Phone (required)</label>
<input type="tel" id="phone" name="phone" required>

<!-- grouped choices need the QUESTION tied
     to the SET, not just each option -->
<fieldset>
  <legend>Preferred contact method</legend>
  <label for="c-email">Email</label>
  <input type="radio" id="c-email" name="contact">
  <label for="c-phone">Phone</label>
  <input type="radio" id="c-phone" name="contact">
</fieldset>

THE 5-SECOND TEST
  Click the LABEL TEXT. Cursor jumps into the
  field? Associated. Nothing happens? It is not
  a label, whatever it looks like.
  Catches bad plugin output instantly.

-------------------------------------------
HANDOFF LOG            date: 2026-__-__
pages reviewed: ____________________
scanner count: before ____ after ____

FIXED
  - what, which pages

KNOWN, NOT FIXED
  - what, and WHY
    (usually: theme markup, third-party widget)

NOT ASSESSED          <- do not leave blank
  - not tested with a screen reader
  - not tested with real users
  - pages not reviewed: __________

This is not a completion certificate.
It is where the next person starts.

The whole pass on one page

0 of 8 done

Where this stops

Earlier than on any other guide here, and it's worth being blunt about it rather than finishing on a flourish.

These seven fixes are real, they're worth doing, and most of them are genuinely easy. They're also not an accessibility audit. This guide doesn't cover testing with assistive technology, testing with people who actually use it, ARIA beyond the basics, complex interactive components, video captions, or documents. It doesn't establish compliance with anything. A clean automated scan means the machine-detectable problems are gone, and those are a minority of real barriers.

If your organisation has a legal obligation, engage a specialist. That isn't deflection: it's a different discipline, and doing this work doesn't qualify anyone to advise on it. What this guide can do is mean you arrive with the obvious things fixed and a written record of what remains, which makes that engagement shorter and cheaper.

One thing to actively avoid. Overlay widgets that promise instant compliance from a single line of JavaScript are widely criticised by accessibility practitioners and have been the subject of legal action. They don't fix the underlying markup, and the fixes in this guide are the actual work they claim to replace. The paired article covers that in more detail.

If you want the machine-detectable half checked alongside the rest of your site, the free audit covers it, and the web design work is where this gets built in from the start rather than retrofitted, which is the version that's genuinely cheaper.

Questions people ask

The scanner found 47 errors. Where do I actually start?

Sort by type rather than working down the list, because a scanner reports every instance and a single template mistake can generate forty of them. Forty missing alt attributes on a gallery is one fix applied forty times, not forty problems, and seeing it that way turns an intimidating report into an afternoon. Group the report into contrast, missing alt, form labels and empty or unclear links, which between them account for most of what these tools find, then work one group at a time and re-scan after each. The count will fall in large jumps rather than one at a time, which also tells you the grouping was right. What you shouldn't do is start at the top of the list and work down, since the order is the order the tool crawled the page and carries no priority information at all.

WCAG 2.0, 2.1, 2.2. Which version am I supposed to be using?

This is genuinely confusing and the confusion isn't your fault. The current W3C standard is WCAG 2.2, and it's what most modern testing tools check against by default. Ontario's AODA regulation, however, names WCAG 2.0 Level AA specifically, because it was written when 2.0 was current. So your scanner may flag things the regulation doesn't name, which looks like a contradiction and is really just a version gap. The practical answer is that the versions are additive rather than conflicting: 2.1 and 2.2 add criteria, they don't remove or reverse anything from 2.0. So work to the newer standard and you have covered the older one by definition. Nothing in this guide is affected by the difference, since every fix here appears in all three.

My theme generates the HTML. Can I fix any of this?

More than you'd expect, because the highest-value fixes here are content rather than code. Alt text, link text, heading choices and form labels are all things you type into an editor, and they're also four of the most commonly reported failures, so a platform you can't code on still leaves the majority of this work available to you. Contrast usually sits in a theme colour setting rather than a stylesheet, which most builders expose. What you often can't reach is focus styling, the markup of a navigation menu, and whether a control was built as a real button or a styled div, and those are exactly what step 5 tends to surface. If the keyboard test fails at the menu and the menu came with the theme, that's a genuine ceiling rather than a skill gap, and it's worth writing down in step 8 rather than fighting.

Does every image need alt text?

Every image needs an alt attribute. Not every image needs words in it, and the difference is the whole point. An image carrying information gets a description of what it conveys. An image that's purely decorative, a background flourish or a divider, gets an empty alt attribute, written as alt equals two quote marks with nothing between them, which tells a screen reader to skip it entirely. Leaving the attribute off altogether is the actual error, because then the software has to guess and will often read out the filename, so a visitor hears a string of digits and a file extension. The other common mistake is treating alt text as a place for keywords. It degrades the experience for the person relying on it and it's the kind of thing search engines have discounted for years, so it manages to fail both goals at once.

How do I know when I'm finished?

On this particular job, you don't, and any guide implying otherwise is selling something. Automated tools detect a minority of real barriers, so a clean scan means the machine-detectable problems are gone rather than that the site works for everyone. Real confidence comes from testing with actual assistive technology and, better, with actual users, which is specialist work and isn't what this guide is. What you can say precisely is what you did: these seven categories were reviewed and corrected on these pages, on this date, and these items remain open. That's what step 8 produces, and it's a far more useful answer than a score. If you have a legal obligation, that document is also the right thing to hand a specialist, because it means they start from your work instead of from zero.