Kithe

Examples

Everything it finds

The home page shows two of these in passing. This is the whole set, with the markup as it stands beside the markup it should be, so you can judge for yourself whether it is worth pointing at your own site.

Check your own page

01

Alt text that describes a different photograph

The one no automated checker on the market will catch, because by every mechanical measure it is correct. This is what the judgement tier is for.

The picture on the page

Trays of metal printing type, with a composing stick holding a line of set text across them.
Photograph: Metal movable type by Willi Heidelbach, used under CC BY 2.5. Resized.

What the page has

<img src="/img/header-2.jpg" alt="Our team at the summer barbecue">

Every automated checker on the market calls this a pass. There is an alt attribute, it is not empty, it is not a filename. Nothing flags it — and a screen reader announces a barbecue.

What it should have instead

<img src="/img/header-2.jpg"
     alt="Trays of metal printing type, with a composing
          stick holding a line of set text across them.">

Kithe looks at the actual image and the words around it, and writes this for you to approve, edit or throw out.

It usually happens the same way. Somebody duplicated a page, swapped the picture, and left the old sentence behind. It has been wrong ever since, and nobody who can see the page will ever notice.

02

6 things a rule cannot answer

Every “before” below passes the mechanical checks. That is the whole point — if a rule could catch it, it would never reach a model and would not be on this page.

  • Does the alt text describe this picture?

    A rule can see that alt exists. It cannot see the photograph, so it cannot tell you the sentence is about a different one.

    What the page has

    <img src="/img/header-2.jpg"
         alt="Our team at the summer barbecue">

    Passes every checker on the market. Somebody using a screen reader is told this page has a barbecue on it.

    What it should have instead

    <img src="/img/header-2.jpg"
         alt="Trays of metal printing type, with a composing
              stick holding a line of set text across them.">

    Kithe looks at the image and the words around it, then writes this for you to approve.

  • Does the link text work on its own?

    “Read more” is caught by a rule because it is a stock phrase. Text that is unique but still says nothing is not, and that is the common case.

    <a href="/classes/autumn">Details of this term’s
      evening sessions are on the classes page</a>

    Unique, descriptive, and thirteen words long. Pulled up in a list of every link on the page, it is a paragraph where a label should be.

    <a href="/classes/autumn">Autumn evening classes</a>

    Short enough to scan, specific enough to place. Kithe suggests the wording; you keep or change it.

  • Does the heading describe what is under it?

    Heading levels are a rule’s business. Whether a heading means anything is not.

    What the page has

    <h2>More</h2>
    <p>Places are limited to eight a term and they
       go quickly, so book before mid-month.</p>

    Headings are the table of contents for most screen reader users. “More” sends them back to reading the whole page.

    What it should have instead

    <h2>Booking and how many places are left</h2>
    <p>Places are limited to eight a term and they
       go quickly, so book before mid-month.</p>

    Kithe reads the section under the heading and writes one that describes it.

  • Can somebody follow this on the first read?

    No rule measures whether a sentence is followable. This one is read once, on a phone, by somebody in a hurry.

    What the page has

    <p>Enrolment is contingent upon remittance of the
       requisite deposit prior to the commencement
       of the session.</p>

    Twenty words, three of them Latinate, and an instruction somebody has to act on.

    What it should have instead

    <p>Pay the deposit before the first session
       to keep your place.</p>

    Same meaning, half the words. Flagged as a judgement rather than a measurement, so it arrives as a draft.

  • Does the button’s name match what it does?

    A rule can see that a name is there. Whether it is the right name is a different question, and a confident wrong name is worse than no name at all — it is followed.

    What the page has

    <button aria-label="Menu">
      <svg><use href="#icon-share"/></svg>
    </button>

    Passes every automated checker on the market, because the button has a name. Somebody using a screen reader is told this opens the menu, presses it, and posts the page to social media.

    What it should have instead

    <button aria-label="Share this page">
      <svg><use href="#icon-share"/></svg>
    </button>

    Kithe reads the icon and the markup around it, notices the name describes a different control, and writes the one it should have.

  • Does the title say which page you are on?

    Every page here has a title, so every rule is satisfied on every page. That nine of them are the same title is not something a tool checking one page at a time can ever see.

    What the page has

    <!-- /classes -->
    <title>Riverside Pottery</title>
    
    <!-- /booking -->
    <title>Riverside Pottery</title>

    Nine tabs open and nine identical labels. The same in a bookmark list, in browser history, and in the results when somebody searches for you.

    What it should have instead

    <!-- /classes -->
    <title>Evening classes — Riverside Pottery</title>
    
    <!-- /booking -->
    <title>Book a place — Riverside Pottery</title>

    Only a scan that has read the whole site can find this, which is why it is on the plans that crawl one.

One scan, fifty pages

Almost nothing reaches the model

Elements looked at1,240
images, links, headings, paragraphs
Settled by a rule890
no model request, no cost
Sent to the model350
what a rule could not answer
Came back a problem41
each with a draft to approve
The rules run first and answer most of it for nothing. Only what is left over — 350 of 1,240 — costs a model request, and 41 of those turned out to be worth telling you about. That ratio is why the judgement pass is metered in hundreds of items a month rather than thousands.

Why link text is the one people argue about

Because on the page it looks fine. Here is the same page with the sentences taken away, which is how a good number of people move through it.

The six links on one blog post, listed without the page around themA numbered list reading: read more, read more, click here, here, read more, learn more. Not one of the six says where it goes.01read more02read more03click here04here05read more06learn more
Six links from one blog post, with the sentences taken away. All six pass the mechanical check, because all six have text in them. Read as a list — which is how plenty of people move through a page — not one says where it goes.

03

One page, marked up

A small studio’s classes page with six findings ringed and keyed into the margin. Point at any ring, or any note, and the two light up together.

riverside-pottery.ca/classesSpecimen

Riverside PotteryClassesShopVisit

Autumn classes

Two-hour beginner sessions on the wheel, Thursday evenings from late September. Clay, glazes and firing all included.

More

Places are limited to eight a term and they go quickly, so book before the middle of the month. read more

Term dates, straight to your inbox

Email addressSign up

Enrolment is contingent upon remittance of the requisite deposit prior to the commencement of the session.

Nothing there is a working control — the menu, link and field are drawn, not real, because a page selling accessibility checking should not ship an unlabelled field to illustrate one. Point at a key to light up its note.

Six findings on this page

  1. Highlikely blocking

    Button has no accessible name

    The icon button at the end of the menu

    No text, no aria-label. It is announced as “button” and nothing else — you hear that there is something to press, and nothing about what pressing it does.

    <button class="menu"><svg …></svg></button>

    Mechanical · WCAG 4.1.2 Name, Role, Value (A)

  2. Highlikely blocking

    Image has no alt attribute

    The photograph under the menu

    A screen reader announces nothing here. If the picture carries meaning, describe it. If it is decoration, give it an empty alt so it is skipped.

    <img src="/uploads/IMG_2481.jpeg">

    Mechanical · WCAG 1.1.1 Non-text Content (A)

  3. Mediumworth fixing

    Heading level skipped

    The word “More”, under “Autumn classes”

    An h4 straight after an h2. People who navigate by heading read the levels as an outline, and a skipped level reads as a missing section.

    <h2>Autumn classes</h2> … <h4>More</h4>

    Mechanical · WCAG 1.3.1 Info and Relationships (A)

  4. Mediumworth fixing

    Link text does not say where it goes

    The link at the end of the paragraph

    It reads “read more”. Screen reader users often pull up a list of every link on a page. Out of context this one says nothing at all.

    Drafted for youBook a Thursday evening wheel class

    Mechanical · WCAG 2.4.4 Link Purpose (A)

  5. Highlikely blocking

    Form field has no label

    The sign-up field at the foot of the page

    You hear the field’s type but not what to put in it. The placeholder is not a label: it disappears the moment anyone types, and plenty of readers skip it.

    <input type="email" placeholder="Email address">

    Mechanical · WCAG 3.3.2 Labels or Instructions (A)

  6. Lowminor

    Notice is hard to read

    The line of small print at the very bottom

    Long and formal for something people have to act on. This one is a judgement rather than a measurement, so it arrives as a draft you approve or bin.

    Drafted for youPay the deposit before the first session to keep your place.

    Needs judgement · WCAG 3.1.5 Reading Level (AAA)

Kithe found these. It did not fix them, and it cannot: there is no login to your site and no way to write to it. The drafts above are wording for you to approve, edit or ignore.

04

Every mechanical check, and what it is looking for

Sixteen of them. Each is a fact about the page rather than an opinion, so the answer is the same however many times you run it — and each names the rung it sits on.

  1. Controls with edges too faint to findPaidThe fashionable form: a field bordered #eeeeee on white, at 1.18:1. It passes every text-contrast tool on the market because there is no text in it, and somebody with reduced contrast sensitivity cannot see where to click.
  2. Focus outline removed and not replacedPaidoutline: none is one line and the default ring is ugly, so it is the most common fault in modern CSS. Tab through the page afterwards and something invisible has focus; press Enter and find out what it was.
  3. A tab order somebody rearranged by handPaidtabindex="1" pulls one element in front of the whole page when tabbing. It is invisible with a mouse, so it survives every round of testing that does not involve a keyboard.
  4. Hidden from a screen reader, still reachable by keyboardPaidFocus lands on something that, as far as a screen reader is concerned, does not exist. Worse than no markup at all, because it was added on purpose.
  5. Headings with no textPaidPeople navigate a page by pulling up its list of headings. An empty one is a blank line in that list: a keystroke to skip, and it tells nobody anything.
  6. Fields that could fill themselves inPaidYour name, your email, your postcode. One attribute lets a browser fill them, and for somebody using a switch or their voice that is the difference between one gesture and forty.
  7. Images with no alt textNo accountA screen reader has nothing to say about them. Usually the ones you dragged in and never thought about again.
  8. Colour contrastNo accountMeasured, not guessed: the real ratio between your text and what is behind it, against the 4.5:1 line. Light grey on white is the usual culprit.
  9. Form fields with no labelNo accountSearch boxes, contact forms, the newsletter signup. A placeholder is not a label — it vanishes the moment anyone types.
  10. Buttons and icons with no nameNo accountThe menu toggle, the search glyph, the close cross. If it holds an icon and nothing else, there is nothing to announce.
  11. Heading level skippedFree accountAn h2 followed straight by an h4. People who navigate by heading read the levels as an outline, and a gap reads as a missing section.
  12. No top-level headingPaidNothing on the page says what the page is. Long posts and docs drift here fast, especially after a theme change.
  13. Vague link textPaidRead more. Click here. Here. Learn more. Six of them in a list say nothing at all.
  14. Links with no textFree accountA link wrapped round an unlabelled icon, or round nothing. There is no way to announce where it goes.
  15. Tables with no headersPaidPricing, comparisons, API references — anything in rows and columns where no cell is marked up as a header.
  16. Video and audio with no captionsPaidDemos, talks, screen recordings, with no captions track present.
  17. Frames with no titlePaidAn embedded map, video or form, announced as “frame” and nothing else.
  18. Pages with no titleNo accountThe title is what a browser tab, a bookmark and a search result all show, and it is the first thing announced when a page loads.
  19. No language declaredFree accountWithout it, screen reading software has to guess how to pronounce your words. It guesses badly, and English read with a French voice is not readable.
  20. Duplicate idsPaidThe same id twice on one page. It quietly breaks labels, skip links and in-page anchors.
  21. Broken linksPaidLinks that error out or go nowhere, checked across every page we reach.
  22. No skip-to-content linkPaidWithout one, anybody moving by keyboard tabs through your whole menu again on every single page.

How findings are ranked, and how much of the real problem any automated tool can reach, are both set out on the home page.

End

Now try it on yours

Three checks a day, no account, nothing installed. You will know within a minute whether any of this applies to you.

Check a page now