Fixes
Every technique. Explained.
W3C documents 432 techniques for meeting WCAG 2.2, and not one of them is required. They are worked examples of ways to satisfy a rule, so you take the route that suits your code and leave the rest. The catch is that they are written for standards experts, so we rewrite each one for the person doing the work. A guide tells you what the fix is, how we find the problem in an audit, how it lands on the people it affects, and what a pass looks like beside a fail. For the separate question of how a rule gets tested rather than satisfied, the ACT rules are the other half of the picture. All 432 have a guide here, with none skipped.
The guides use the standard's own vocabulary. The A to Z glossary decodes every term →
432 of 432 techniques
Sufficient
Enough on its own to meet the rule it serves.
Learn more →
Advisory
Recommended, and beyond the minimum the rule asks for.
Learn more →
Failure
A documented pattern that breaks the rule.
Learn more →
317 of these are enough on their own, 90 are documented ways to break a rule, and 25 are advisory extras. The three technique types explain why one technique can hold two of those labels at once.
HTML52
- H100Level AAMark up email and password inputs properlyA sign-in form should be markup a password manager can read.Sufficient
- H101Level AIdentify page regions with semantic HTML elementsThe region elements, header and nav and main and aside and footer, map to landmarks, and landmarks are what a screen-reader user gets around a page by.Sufficient
- H102Level ABuild modal dialogs with the native dialog elementThe dialog element, opened with showModal, does five things a hand-built overlay has to be taught one at a time.SufficientHuman testing
- H2Level ACombine adjacent image and text links into oneTwo links pointing at the same page, one wrapped around a thumbnail and one around its caption, are one link doing the job twice.Sufficient
- H24Level AAdd alt text to every image map areaAn image map turns one picture into several links, and every one of those area elements needs its own alt naming where it leads.Sufficient
- H25Level AGive every page a descriptive titleEvery page needs a title element in its head, and it has to name that page rather than the site.Sufficient
- H28Explain abbreviations with the abbr elementThe abbr element carries an expansion in its title attribute, so WHO can also announce as World Health Organization.Advisory
- H30Level AWrite link text that says where the link goesWrite the link so its own words say where it goes.Sufficient
- H32Level AGive every form a real submit buttonEvery form needs a control the user presses to send it.SufficientHuman testing
- H33Level ASupplement vague link text with a title attributeA title attribute on a link can carry the words the link text is missing, and W3C does list that as sufficient for 2.4.4 Link Purpose when the title supplements a description that already partly exists.Sufficient
- H34Level AKeep mixed-direction text reading in the right orderArabic or Hebrew with Latin words or numbers inside it can render with the punctuation in the wrong place.SufficientHuman testing
- H36Level AAdd alt text to image submit buttonsAn image submit button shows a picture where an ordinary button shows words, so its alt attribute has to carry the button's job rather than the picture's description.Sufficient
- H37Level AAdd alt text to every meaningful imageEvery img that carries meaning needs an alt attribute, and the words in it have to do the picture's job rather than describe the picture.Sufficient
- H39Level ACaption data tables so their purpose is clearA caption element, placed first inside a table, gives that table a title assistive technology can find and announce.Sufficient
- H40Mark up term-and-definition pairs as description listsA description list, built from dl, dt and dd, tells software that a run of items are pairs.Sufficient
- H42Level AUse real heading tags, not styled bold textA section title has to be a real h1 to h6 element.Sufficient
- H43Level AConnect complex table cells to headers with idsSome tables carry two header rows, or merged cells, or headers running down the middle, and in those the scope attribute runs out of road.Sufficient
- H44Level AAttach a real label to every form fieldEvery input needs a label element wired to it, either a label whose for attribute matches the field's id or a label wrapped around the field itself.Sufficient
- H48Level AMark up lists with real list elementsAnything a reader perceives as a list should be built from real list elements, because the markup is what tells software how many items there are and where in them the reader currently is.Sufficient
- H49Level AUse real markup for emphasized or special textEmphasis, quotation and correction are meaning rather than decoration, so they belong in markup.Sufficient
- H51Level AUse real table markup for tabular dataInformation is tabular when the same piece of data has a relationship in two directions at once, down its column and across its row.Sufficient
- H53Level AGive object elements meaningful fallback contentThe object element renders whatever sits between its tags when the embedded thing cannot be shown, so that body is where the text alternative goes.SufficientHuman testing
- H54Mark the defining instance of a term with dfnThe dfn element marks the place where a specialist term gets defined.Sufficient
- H56Level AFix nested right-to-left text with the dir attributeH56 is the heavier counterpart to H34, for the case W3C calls a nested directional run.SufficientHuman testing
- H57Level ADeclare the page language on the html elementThe html element carries a lang attribute naming the page's language, and that one attribute decides how the whole page gets pronounced.Sufficient
- H58Level AAMark language changes with a lang attributeWhen a page switches language mid-paragraph, the element holding the other language needs a lang attribute saying which one, and a screen reader changes pronunciation engine at that boundary.Sufficient
- H62Add ruby annotations to show pronunciationRuby annotation prints a small pronunciation gloss above a run of text, most familiar as furigana over Japanese kanji.Sufficient
- H63Level AAdd scope to table header cellsThe scope attribute says which direction a header governs.Sufficient
- H64Level AGive every iframe a descriptive titleEvery iframe needs a title attribute naming what is inside it.Sufficient
- H65Level ALabel form fields when a visible label will not fitA title attribute on a form control gives it an accessible name, and W3C lists that as sufficient for the rules covering non-text content, structure, and name and role.Sufficient
- H67Level AGive decorative images an empty altA decorative image takes an empty alt attribute, written as alt="", present but with nothing in it.Sufficient
- H69Level AStart every content section with a real headingStart each section of a page with a real heading element, because heading navigation is how a screen-reader user gets around and it only works on genuine h1 to h6.Sufficient
- H71Level AGroup related form fields with fieldset and legendA fieldset with a legend ties a group of controls to the question they answer.Sufficient
- H76Make meta refresh redirects instant, never timedA meta refresh redirect passes only with a delay of exactly zero.Sufficient
- H77Level AGive list links context from their list itemDownload PDF is a fine link when the list item around it reads Annual report 2025, Download PDF, 2 MB.Sufficient
- H78Level AGive links context from their enclosing paragraphThe sentence around a link can carry the link's purpose, and W3C lists that as sufficient for 2.4.4 Link Purpose in Context.Sufficient
- H79Level AGive table links context from cells and headersInside a data table, a link's purpose can come from its own cell plus the headers that cell belongs to.Sufficient
- H80Level AGive links context from the heading above themA heading directly above a link can supply that link's purpose, which is the news teaser pattern.Advisory
- H81Level AGive nested list links context from parent itemsIn a nested list, a link can take its purpose from the parent item it sits under.Sufficient
- H83Warn users when links open new windowsWhen a link opens a new window or tab, say so in the link text itself.Sufficient
- H84Level APair select menus with a real action buttonWhen a select menu triggers something, jumping to a page, filtering a list, switching language, the trigger has to be a button press rather than the menu changing.SufficientHuman testing
- H85Level AGroup long select lists with optgroupThe optgroup element splits a long select into named groups, which browsers render as headings inside the menu.Sufficient
- H86Level AGive emojis and ASCII art text alternativesCharacters used as pictures are non-text content, so they need a text alternative like any other image.Sufficient
- H88Level AUse HTML the way the spec intendsUse HTML elements for the jobs the specification gives them.Sufficient
- H89Add context-sensitive help to form fieldsA title attribute on a form control can carry extra guidance, a format hint or a worked example.Advisory
- H90Level AMark required fields in the label itselfA required field has to say so where everybody can perceive it, and H90 puts that in the label, or in the legend for a group of controls.Sufficient
- H91Level AUse native HTML controls instead of rebuilt onesA native control arrives with its role, its keyboard behavior and its focus handling already built by the browser.Sufficient
- H95Level AAdd caption tracks to your videosA track element with kind=captions attaches a caption file to an HTML video, and the browser handles display and switching.Sufficient
- H96Level AAdd audio description tracks to videoA track element with kind=descriptions carries timed text describing what happens on screen, the actions and scene changes and on-screen words the soundtrack leaves out.AdvisoryHuman testing
- H97Level AWrap navigation link groups in nav elementsThe nav element marks a group of links as navigation, and assistive technology exposes it as a landmark people can jump to or past.Sufficient
- H98Level AAAdd autocomplete attributes to personal data fieldsFields that ask about the person filling them in need an autocomplete attribute from HTML's fixed list of tokens.Sufficient
- H99Level AALet users jump between pages of contentW3C wrote H99 for digital publications with fixed page breaks.AdvisoryHuman testing
ARIA26
- ARIA1Level AAttach help text to inputs with aria-describedbyaria-describedby points a control at the id of the element holding its hint text, and assistive technology reads that text as the field's description, after the name.Sufficient
- ARIA10Level AName images and charts with aria-labelledbyaria-labelledby gives non-text content its name by pointing at text that is already on the page.Sufficient
- ARIA11Level AAdd landmarks so users can skip aroundLandmark roles carve a page into regions software can list and jump between.Sufficient
- ARIA12Level AUse role=heading when h1-h6 is impossiblerole=heading marks an element as a heading, and W3C says it must be paired with aria-level to say which level.Sufficient
- ARIA13Level AName repeated landmarks so they are distinguishableTwo navigation landmarks on one page are two entries in a list, both reading navigation, and nobody can choose between them.Sufficient
- ARIA14Level ALabel icon-only controls with aria-labelaria-label gives a control a name where a visible label cannot be used, and W3C's own title carries that caveat.Sufficient
- ARIA15Level ALink complex images to longer descriptionsSome images cannot be summarized in a sentence.Sufficient
- ARIA16Level AName controls from visible text with aria-labelledbyaria-labelledby names a control by pointing at text already on the page, using the id of the element holding it.Sufficient
- ARIA17Level AGroup related form fields with ARIA rolesrole=group, or role=radiogroup for a set of radios, ties related controls together and the group carries its own accessible name.Sufficient
- ARIA18Level ARaise blocking errors in an alert dialogrole=alertdialog is for an error that has to stop somebody.SufficientHuman testing
- ARIA19Level AAnnounce form errors with role=alertrole=alert makes a container announce whatever gets put into it, without moving focus.Sufficient
- ARIA2Level ATell screen readers a field is requiredaria-required=true tells assistive technology that a field has to be filled in, and it gets announced with the field's name.Advisory
- ARIA20Level AMark leftover page areas with role=regionrole=region is the generic landmark, for a block of content that deserves its own place on the map and does not fit any of the named roles.Sufficient
- ARIA21Level AFlag invalid fields with aria-invalidaria-invalid=true marks the specific field that failed validation, so somebody moving back through a form hears which one to fix.Sufficient
- ARIA22Level AAAnnounce status messages with role=statusA status message is a change in content telling the user how something went, what an application is waiting for, how far a process has got, or that there are errors.Sufficient
- ARIA23Level AAAnnounce chat and feed updates with role=logrole=log is for a container that gains entries in order over time.Sufficient
- ARIA24Level AGive meaningful font icons role=imgAn icon font paints its glyph through a CSS pseudo-element, usually from a private-use character that means nothing outside the font.Sufficient
- ARIA25Level AAAnnounce progress bar updates with a live regionA progress bar with correct aria-valuenow, aria-valuemin and aria-valuemax is doing its job and still says nothing while it moves.Sufficient
- ARIA26Level AMark the current page with aria-currentaria-current marks the one item in a set that is current.Sufficient
- ARIA27Level AAAnnounce progress with the ariaNotify APIariaNotify lets a script hand a message straight to assistive technology, with no live region and no hidden div to write into.Sufficient
- ARIA4Level AGive custom widgets a real ARIA roleA widget built from divs and spans has no identity.Sufficient
- ARIA5Level AExpose widget state with ARIA attributesARIA state and property attributes carry what a component is doing right now.Sufficient
- ARIA6Level AName icon-only controls with aria-labelaria-label puts an accessible name on something with no visible text to take one from.Sufficient
- ARIA7Level ABuild clear link names from nearby headingsaria-labelledby takes a list of ids and stitches their text together into one accessible name, which lets a Read more link borrow the headline sitting above it.Sufficient
- ARIA8Level AFix vague link text with aria-labelaria-label puts a full name on a link, replacing whatever the visible text said.Sufficient
- ARIA9Level AAssemble one label from several text piecesSome controls have their label scattered across the sentence they sit in.Sufficient
CSS36
- C12Level AASize text in percent so it scalesFont sizes written in percent are computed against the size the element inherits, so text that started from the browser's default keeps its relationship to whatever the reader has set that default to.SufficientHuman testing
- C13Level AAUse named font sizes that respect user defaultsCSS has named font sizes.SufficientHuman testing
- C14Level AASize text in em units, not pixelsAn em is a property of the font, so a size written in em moves whenever the font moves.SufficientHuman testing
- C15Level AStyle the focus indicator instead of removing itC15 is the CSS technique for changing how a component looks when it takes focus, and W3C lists it as sufficient for 2.4.7 Focus Visible at Level AA.SufficientHuman testing
- C17Level AALet form fields grow when text resizesA form field sized in pixels holds the same number of pixels whatever the text does, so enlarged text scrolls inside a box it has outgrown.Advisory
- C18Level AReplace spacer images with CSS margin and paddingSpace between things is a job for CSS margin and padding, not for a transparent one-pixel GIF stretched to size.Advisory
- C19Align text left or right, never justifiedJustified text stretches the spaces between words so both edges line up, and the uneven gaps that result run together into pale rivers down the column.Sufficient
- C20Level AACap line length with relative column widthsSet column widths in relative units so the measure adapts as text size and window width change.Sufficient
- C21Give paragraphs breathing room with line spacingSingle-spaced paragraphs make the next line hard to find, because the eye has to come back across the column and land on one of several lines that all look the same distance away.Sufficient
- C22Level AStyle real text instead of text imagesFonts, colors, sizes and alignment are all CSS's job, which means a headline that looks designed can still be text.SufficientHuman testing
- C23Let main content follow user color settingsC23 is a deliberate omission.Sufficient
- C24Size containers in percentages, not fixed pixelsA container sized in percent takes its width from the space available, so when a reader enlarges the text the words reflow inside the window rather than running off the side of it.Sufficient
- C25Mark out page areas without hard-coding colorsC25 is C23's other half.Sufficient
- C27Level AMatch DOM order to visual orderKeep the order of the markup and the order on screen the same.SufficientHuman testing
- C28Level AASize text containers in em unitsSizing text in a relative unit is only half the job.Sufficient
- C29Offer a style switcher as an alternate versionC29 is the odd one in this family, and the difference is worth knowing before you rely on it.Advisory
- C30Level AALet users swap images of text for textWhere a design genuinely needs images of text, C30 is the way to ship them without stranding anybody.SufficientHuman testing
- C31Level AAReflow content with flexbox at narrow widthsFlexbox lets a row of items wrap into a column when the space runs out, which is what reflow asks for.Sufficient
- C32Level AAStack columns with grid and media queriesCSS grid with media queries is the other route to reflow.Sufficient
- C33Level AABreak long URLs so nothing scrolls sidewaysOne long unbroken string can force an entire page wider than the viewport, and a pasted URL in a comment is the usual culprit.Sufficient
- C34Level AAUnstick sticky headers when space runs outA sticky header that takes 64 pixels of a full screen takes most of the screen once somebody zooms in.Advisory
- C35Level AAKeep buttons intact when text spacing increasesText spacing overrides make words wider, and a fixed-width button is a box that cannot take it.Sufficient
- C36Level AALet user text-spacing overrides work without breakageReaders change text spacing through a user stylesheet, a bookmarklet, a browser extension or a reading application, and the rule asks that nothing is lost when they do.Sufficient
- C37Level AAConstrain images with max-width so pages reflowAn image with a fixed width holds that width whatever happens around it, so at high zoom it pushes past its column and takes a horizontal scrollbar with it.Advisory
- C38Level AALet labels and inputs wrap on narrow screensA label floated to a fixed width beside a fixed-width input is a two-column form that cannot become a one-column form.Sufficient
- C39Respect the reduced-motion preference in CSSprefers-reduced-motion is an operating system setting a person turns on because movement makes them ill, and a media query lets a stylesheet honor it.Sufficient
- C40Level AABuild focus indicators that work on any backgroundA single-color focus ring always has a background it disappears against.Sufficient
- C41Draw a strong focus indicator inside the controlDraw the focus indicator inside the component rather than around it, as an inset border or an inset shadow.Sufficient
- C42Level AASpace small targets with min-width and min-heightThe Level AA target size rule can be met two ways, and knowing which one you are doing keeps the work honest.Sufficient
- C43Level AAStop sticky headers hiding focused contentWhen a keyboard user tabs to a link below the fold, the browser scrolls it into view and a fixed header or footer can be sitting exactly where it lands.SufficientHuman testing
- C44Make targets at least 44 by 44 pixelsW3C names its own criterion inside this technique, which makes it unusually easy to place.Sufficient
- C45Level AAShow keyboard focus with :focus-visibleoutline none on focus is the single most common accessibility defect on the web, and it is almost always somebody removing a ring they only ever saw after a mouse click.Sufficient
- C6Level AKeep source order meaningful when CSS repositions contentWrite the page in structural markup, in the order it means something, and let CSS put it where the design wants it.SufficientHuman testing
- C7Level AAdd hidden text to clarify short linksC7 puts the missing words inside the link and hides them visually with CSS, so the design keeps its short label and the accessible name carries the full one.Sufficient
- C8Level ASpace letters with CSS, not blank charactersTo spread a word out, use the letter-spacing property.SufficientHuman testing
- C9Level APut decorative images in CSS backgroundsAn image that carries no information belongs in CSS, as a background or through the content property on a pseudo-element, not in an img element.Sufficient
JavaScript23
- SCR1Level ALet users extend a script's time limitSCR1 is a sufficient technique, and it is only sufficient in a pair.Sufficient
- SCR14Let users switch nonessential alerts offSCR14 is a sufficient technique, so an implementation that does what it describes settles the rule it belongs to.Sufficient
- SCR16Level AWarn users before a time limit runs outSCR16 is a sufficient technique in a pair with SCR1, which handles the extension.Sufficient
- SCR18Level AValidate in the browser and describe the errorSCR18 is sufficient for identifying an error and only advisory for suggesting how to fix it, which is a distinction the badge above cannot draw for you.SufficientHuman testing
- SCR19Level ANever change context when a select changesSCR19 is a sufficient technique, and it is unusual in describing what a handler may do rather than what it must not.SufficientHuman testing
- SCR2Level APair every mouse handler with a keyboard oneSCR2 is a sufficient technique for keyboard access when you use it with G90, the general technique for keyboard-triggered handlers.Sufficient
- SCR20Level AGive device-specific scripts a keyboard pathSCR20 is a sufficient technique for keyboard access when it is used with G90, and it covers the case SCR2 cannot.Sufficient
- SCR22Level AStop scripted blinking within five secondsNo partner technique, no qualifier, nothing bolted on.Sufficient
- SCR24Level AOpen new windows only when the user asksSCR24 is a sufficient technique, and W3C's title for it says the whole thing.Sufficient
- SCR26Level AInsert new content right after its triggerSCR26 is a sufficient technique for focus order, qualified for the case where a page changes while somebody is on it.SufficientHuman testing
- SCR27Level AReorder sections in the DOM, not just on screenSCR27 is a sufficient technique for focus order, and most summaries of it describe half of it.SufficientHuman testing
- SCR28Level ACollapse repeated blocks so they can be skippedSCR28 is a sufficient technique for getting past a block of repeated material, qualified for the case where that material has been grouped so it can be skipped.Sufficient
- SCR29Level AMake a scripted div or span keyboard-operableSCR29 is an advisory technique, and the distinction is doing real work on this page.Advisory
- SCR30Level ALet users swap in self-explanatory link textSCR30 is a sufficient technique for link purpose, qualified for one specific offer.Sufficient
- SCR31Level AAHighlight the focused element with scriptSCR31 is a sufficient technique for making focus visible, with no partner technique and no qualifier.Sufficient
- SCR32Level APut validation errors in the page as textSCR32 is sufficient for identifying an error and advisory for suggesting a fix, the same split as SCR18, and the two are the two halves of one choice.SufficientHuman testing
- SCR33Level AGive scrolling content a pause and a resumeSCR33 is a sufficient technique, and it is sufficient for two separate rules rather than the one shown above, which is worth knowing if you are deciding what a ticker owes you.Sufficient
- SCR34Level AACompute sizes so they scale with the textSCR34 is a sufficient technique for resizing text, qualified for the case of resizing text containers, and W3C files it for reflow as well.Sufficient
- SCR35Level AHang scripted actions on real links and buttonsThe word onclick sounds like a mouse.Sufficient
- SCR36Level AOffer a static view of moving textSCR36 is a sufficient technique, and it takes a different route from every pause control near it.Sufficient
- SCR38Keep a conforming fallback for a scripted pageSCR38 is unusual and you should know how before you rely on it.Advisory
- SCR39Level AAMake hover content hoverable and dismissibleSCR39 is a sufficient technique with no qualifier attached, and it splits into two sets of rules depending on what triggered the content.SufficientHuman testing
- SCR40Check prefers-reduced-motion before animatingSCR40 is a sufficient technique, and its scope is narrower than the way it usually gets quoted.Sufficient
Common failures90
- F1Level ADo not rearrange meaning with CSS positioningF1 is a documented failure, so it describes a way the meaningful sequence rule gets broken rather than a way to satisfy it.FailureHuman testing
- F10Level ADo not trap keyboard users inside embedded contentF10 is a documented failure for the no keyboard trap rule, and it is the most serious kind of finding a page can carry.Failure
- F100Level AANever tell users to rotate their deviceThe page detects portrait, hides everything, and puts up a message asking you to turn the device around.Failure
- F101Level ADo not trigger actions on the down-eventThe action fires the instant the button goes down, before anybody has let go, so sliding a finger off the wrong control saves nothing.FailureHuman testing
- F102Level AADo not let content vanish when the page reflowsAt the reflowed 320-pixel width, which is the same measurement as 400% zoom on a 1280-pixel screen, part of the page has simply gone.Failure
- F103Level AADo not post status messages without a roleSomething important appears on the page without moving focus, like 3 results found or Saved, and nothing tells a screen reader it arrived.Failure
- F104Level AADo not clip text when users override text spacingA reader applies their own text spacing and your fixed-height box cuts the paragraph in half.Failure
- F105Level ADo not require swipes without a single-tap alternativeA function can be reached only by tracing a path with a finger.FailureHuman testing
- F106Level ADo not ship motion controls without an off switchShake to undo, tilt to scroll, and no setting anywhere that stops the page listening.FailureHuman testing
- F107Level AADo not invent autocomplete attribute valuesThe field carries an autocomplete attribute and the value is made up, or it is real and belongs on a different field.Failure
- F108Level AADo not make dragging the only way to move thingsThe only way to move a card between columns, or to reorder a list, is to pick the thing up and drag it.FailureHuman testing
- F109Level AANever block paste in password or code fieldsThe password field refuses a paste, or the code arrives as six separate boxes, so a password manager cannot fill it and the user has to read the string and retype it.Failure
- F110Level AADo not let sticky bars bury the focused elementTab down the page and focus lands behind the sticky footer.FailureHuman testing
- F111Level ADo not leave labeled controls without a nameThe word Quantity sits above the box in plain sight, and nothing in the code ties the two together, so the control has no name at all.Failure
- F112Level ADo not let content blink past five secondsSomething on the page blinks, and it carries on blinking.Failure
- F113Level AADo not leave dialogue pauses empty of descriptionThe video shows something the soundtrack never mentions, and the gaps in the dialogue where a narrator could have said it are left silent.FailureHuman testing
- F12Do not let session timeouts destroy user inputF12 is a documented failure, so it names a defect rather than a route to conformance.Failure
- F13Level ADo not write alt text that drops color meaningF13 is a documented failure and it is filed under two rules at once, non-text content and use of color, which tells you who it hurts.FailureHuman testing
- F14Level ANever identify content by shape or location aloneF14 is a documented failure under the sensory characteristics rule.FailureHuman testing
- F15Level ADo not build controls outside the accessibility APIF15 is a documented failure under the name, role and value rule, and it is the broadest failure that rule has.Failure
- F16Level ADo not auto-scroll content without a pause controlF16 is a documented failure under the pause, stop, hide rule, and it is the carousel and ticker finding.Failure
- F19Do not hide the accessible version of a pageF19 is a documented failure, and it is filed against nothing else in this library, because W3C attaches it to no success criterion at all.Failure
- F2Level ADo not fake structure with styled textF2 is a documented failure and it is the most cited one in accessibility reporting, because it is what every bold paragraph standing in for a heading gets written up as.Failure
- F20Level ADo not let text alternatives fall out of dateF20 is a documented failure filed under two rules, non-text content and name, role and value, so it covers stale alt text and stale accessible names alike.Failure
- F22Do not open windows the user never requestedF22 is a documented failure, so it describes something to remove rather than something to build.Failure
- F23Level ADo not autoplay audio without a stop controlSound that starts on its own and runs longer than three seconds needs a way to turn it off.Failure
- F24Level AANever set text color without its backgroundF24 is a documented failure filed under three contrast rules, so it reaches further than the one shown above.Failure
- F25Level ADo not ship page titles that identify nothingUntitled Document, New Page 1, report.html.Failure
- F26Level ADo not let a symbol alone carry meaningF26 is a documented failure under the sensory characteristics rule, and its scope is narrower than its title suggests.FailureHuman testing
- F3Level ADo not put information in CSS background imagesF3 is a documented failure under the non-text content rule.Failure
- F30Level ANever use filenames or placeholders as alt textF30 is a documented failure filed under two rules, non-text content and the prerecorded audio-only and video-only rule, so it reaches media alternatives as well as images.FailureHuman testing
- F31Level AADo not label the same function differentlyF31 is a documented failure under the consistent identification rule, and it is the only failure that rule has.FailureHuman testing
- F32Level ANever spread words apart with real spacesW E L C O M E, spelled with spaces to make a heading look airy.FailureHuman testing
- F33Level ADo not fake columns with white space charactersF33 is a documented failure filed under both info and relationships and meaningful sequence, and it is what happens when plain text is asked to do a layout job.FailureHuman testing
- F34Level ADo not format tables with white space charactersF34 is F33's sibling, a documented failure under the same two rules, and it is the table-shaped version.FailureHuman testing
- F36Level ADo not auto-submit when the last field changesF36 is a documented failure under the on input rule, and it is more specific than its usual summary.FailureHuman testing
- F37Level ADo not launch windows from a checkbox or selectF37 is a documented failure under the on input rule, and it is the second and last failure that rule has.FailureHuman testing
- F38Level ADo not leave decorative images announcedF38 is a documented failure under the non-text content rule, and its current wording carries a second route through it that most summaries, our own old one included, do not.Failure
- F39Level ADo not give decorative images junk alt textF39 is a documented failure under the non-text content rule, and it is F38's mirror.Failure
- F40Level ADo not redirect with a timed meta refreshF40 is a documented failure, so a page carrying this pattern has a defect rather than a technique.Failure
- F41Level ADo not auto-reload pages with meta refreshF41 is a documented failure and it is F40's twin, the same attribute with no destination in it.Failure
- F42Level ADo not emulate links with scripted spansA span with a click handler that navigates is broken in three separate ways at once.Failure
- F43Level ADo not use structural markup for visual effectsF43 is a documented failure under the info and relationships rule, and it is F2 read backward.Failure
- F44Level ADo not break tab order with positive tabindexThe thing this failure names is not the attribute.FailureHuman testing
- F46Level ANever put th or caption in a layout tableF46 is a documented failure under the info and relationships rule, and it is the case F43 carves out of itself.Failure
- F48Level ADo not publish data tables as preformatted textF48 is a documented failure under the info and relationships rule, and it is the narrowest one in this family.Failure
- F49Level ADo not use layout tables that read as nonsenseF49 is a documented failure under the meaningful sequence rule, and it is the other half of the layout table story.FailureHuman testing
- F50Level ADo not script blinking that never stopsF50 is a documented failure under the pause, stop, hide rule, and it is the setInterval version.Failure
- F52Do not spawn new windows on page loadF52 is a documented failure, so it names something to take out rather than something to add.Failure
- F54Level ADo not wire functionality to pointer events onlyF54 is a documented failure under the keyboard rule, and its title names something people forget it covers.Failure
- F55Level ADo not use script to throw focus awayThis is a documented failure, so a page matching it has a defect rather than a solution.FailureHuman testing
- F58Level ADo not auto-redirect after a server-side timeoutF58 is a documented failure under the timing adjustable rule, and it is the only member of the meta refresh family filed under that rule alone.Failure
- F59Level ADo not build interactive controls from bare divsF59 is a documented failure, so this page describes a way 4.1.2 Name, Role, Value gets broken rather than a way to pass it.Failure
- F60Do not launch new windows while users typeF60 is a documented failure, so it describes a defect and not a technique.Failure
- F61Do not auto-replace content users cannot stopF61 is a documented failure, and its subject is more specific than auto-updating in general.Failure
- F63Level ADo not strand link context away from the linkF63 is a documented failure under the link purpose rule, and it has the clearest test of any failure here.Failure
- F65Level ANever ship images without a text alternativeF65 is a documented failure under the non-text content rule, and it is cited more than any other failure in accessibility reporting.Failure
- F66Level AADo not reorder navigation links between pagesYour menu carries the same links on every page and not in the same order, so the third item on one page is the fifth on the next.FailureHuman testing
- F67Level ADo not write long descriptions that miss the pointThe long description is there, and it is not carrying what the picture carries.FailureHuman testing
- F68Level ADo not ship form controls without accessible namesA field sits next to visible text with no code joining the two, so the name every sighted user reads never reaches assistive technology.Failure
- F69Level AADo not clip or truncate text at 200% zoomText enlarged to 200% gets cut off, swallowed by an ellipsis, or dropped on top of the paragraph beside it, so the one thing a low-vision reader can do for themselves is the thing that breaks the page.Failure
- F7Level ADo not embed blinking content without a pauseF7 is a documented failure under the pause, stop, hide rule, and it covers content you did not write.Failure
- F71Level ADo not fake text with look-alike charactersCharacters that merely look like the letters they stand for get used as though they were those letters, and the text underneath says something else.Failure
- F72Level ADo not publish ASCII art without an alternativeA picture drawn out of keyboard characters is still a picture, and F72 is the failure technique for publishing one with no text alternative.Failure
- F73Level ADo not mark links by color aloneThis one is a documented failure rather than a fix, so a page that matches it has a defect.FailureHuman testing
- F74Level ADo not leave a media alternative unlabeledSome pages carry a video that exists only to replay text already printed on the page, and the captions rule lets that video go uncaptioned on one condition.Failure
- F75Level ADo not skip captions when a video adds contentA video that was meant to stand in for text stops being an alternative the moment it starts telling you more than the text does.Failure
- F78Level AANever remove the keyboard focus outline with CSSSomeone set outline to none so the design would sit flat, and the keyboard user lost the one thing telling them where they are.Failure
- F79Level ADo not simulate focus without moving real focusA widget draws its own highlight and never moves the browser's focus, so the page looks focused and the accessibility API has no idea.Failure
- F8Level ADo not publish captions that skip dialogueF8 is a documented failure under the prerecorded captions rule, and it is the caption problem no checker will ever find.Failure
- F80Level AADo not pin form control text to a fixed sizeThe labels grow when a reader enlarges text and the answers do not, because the control's font size is pinned in the stylesheet.Failure
- F81Level ADo not mark required or error fields by color aloneA field is marked as required, or marked as the one that failed, with nothing but a change of color.FailureHuman testing
- F82Level ADo not split a phone field and drop the labelThree small boxes for one phone number, with punctuation printed between them and no label over the set.Failure
- F83Level AADo not set text over a low-contrast background imageText sits on top of a photograph and the photograph wins, so the headline reads perfectly over the dark trees and vanishes into the bright sky.Failure
- F84Stop writing "click here" and "read more" linksA link that says click here, or more, or continue, tells you nothing at all once you meet it on its own.Failure
- F85Level ADo not open dialogs far from their triggerA button opens a dialog whose markup lives at the bottom of the document, so a keyboard user has to tab the whole page to reach the thing they just opened.FailureHuman testing
- F86Level ADo not leave parts of a split field namelessOne label sits over the first of three boxes and the other two carry nothing, which is how almost every split phone field ships.Failure
- F88Do not justify text to both marginsJustified text is stretched until both margins line up, and the stretching goes into the gaps between words, which opens rivers of white running down the paragraph.Failure
- F89Level ADo not leave image-only links without a nameA link wraps an image and nothing else, and the image carries no alt text, so the link has no name for anything but a mouse.Failure
- F9Do not change context when a field loses focusF9 is a documented failure, which means it describes a way a rule gets broken rather than a way to meet one.Failure
- F90Level ADo not mis-wire headers and id attributes in tablesA data cell points at its header by id, and points at the wrong one, or at an id that is not in the table any more.Failure
- F91Level ADo not style table headers instead of marking them upThe top row is bold and grey and it is built from ordinary data cells, so it looks like a header and is not one.Failure
- F92Level ADo not put role="presentation" on meaningful contentThe attribute role="presentation" tells assistive technology to throw an element's meaning away, and somebody has put it on a data table.Failure
- F93Level ADo not autoplay audio without a way to stop itSound starts on its own when the page loads and there is no way to stop it.Failure
- F94Level AADo not size text in viewport unitsText sized in viewport units scales with the window and ignores the reader's own text-size setting, so the one control meant to help them does nothing at all.Failure
- F95Level AADo not show hover content the pointer cannot reachA tooltip appears on hover and vanishes the second you try to move onto it, because a gap sits between the trigger and the content.FailureHuman testing
- F96Level ADo not let accessible names contradict visible labelsA button says Go on the screen and its accessible name says Find in this site, so a speech-input user says click Go and nothing happens.Failure
- F97Level AADo not lock your interface to one orientationThe app is pinned to portrait, so someone whose tablet is mounted sideways on a wheelchair arm gets a page they can only read with their head tilted.Failure
- F98Do not build interactions that respond to touch aloneCode detects a touchscreen and then wires up touch handlers only, so a laptop with a touchscreen and a keyboard gets the touch build and loses its keyboard.Failure
- F99Level ADo not hardwire single-character keyboard shortcutsOne key does something.FailureHuman testing
General166
- G1Level AAdd a skip link as the first element on the pageA skip link is a link at the top of the page that sends focus straight to the main content.Sufficient
- G10Level ABuild custom components on accessibility-supported techCustom components have to reach the platform's accessibility API, and G10 is the strategy for getting them there.Sufficient
- G100Level AUse the accepted name as the alternativeSome content exists to be experienced rather than to carry information, and no description substitutes for it.Sufficient
- G101Define words used in an unusual or restricted wayA word is unusual or restricted when one particular sense is the only one that makes your sentence work.Sufficient
- G102Explain every abbreviation where it first appearsAn abbreviation is a shortened form of a word, a phrase, or a name.Sufficient
- G103Add illustrations that help explain complex contentSome ideas are hard to read and easy to see.Sufficient
- G105Save user data across session re-authenticationAn authenticated session that times out mid-task normally throws away everything the user had typed.Sufficient
- G107Level ATrigger context changes on activation, not focusMoving focus is how people look around a page.SufficientHuman testing
- G108Level AExpose name, role, and changes through markupAssistive technology can only describe a control if the markup says what the control is, what it is called, and what it is doing right now.Sufficient
- G11Level AStop any blinking within five secondsBlink to catch the eye, then stop.Sufficient
- G110Make client-side redirects instant, not timedA client-side redirect is code inside a page that tells the browser to go and fetch a different address.Sufficient
- G111Level APair color coding with patterns and shapesWhen color difference carries information inside a picture, a chart, or a map, G111 asks you to carry the same information in a pattern as well.SufficientHuman testing
- G112Define specialized terms inline where they appearAn inline definition is a definition delivered in the running text, just before or just after the word.Sufficient
- G115Level AMark up structure with semantic elementsSemantic markup means choosing elements for what the content is rather than for how it should look.Sufficient
- G117Level AState in text what styling alone conveysSometimes a change in how text looks is doing a job.Sufficient
- G120Give the pronunciation right after ambiguous wordsIn some writing, how a word sounds is what decides what it means.Sufficient
- G121Link ambiguous words to their pronunciationsG121 is the linked half of the pronunciation answer.Sufficient
- G123Level AAdd skip links past repeated content blocksEvery page on a site tends to open with the same material, and every keyboard user walks through it before reaching what they came for.Sufficient
- G124Level AAdd top-of-page links to each content areaG124 opens a page with a short list of links, one to each area of the content.Sufficient
- G125Level AALink related pages so content is findableG125 is the plainest of the findability techniques.SufficientHuman testing
- G126Level AAProvide a list of links to every pageG126 puts a list of links to all the other pages in the set on each page.SufficientHuman testing
- G127Level AShow each page's place in its collectionG127 asks you to make clear how the page a reader is on relates to the pages around it.Sufficient
- G128Show current location inside navigation barsG128 asks a navigation bar to say which of its items you are on, so a reader can tell where they have landed without reverse-engineering it from the content.Sufficient
- G13Level ASay what a control will do before it does itChanging a dropdown does not usually reload the page, so when yours does, the reader has earned a heads-up.SufficientHuman testing
- G130Level AAWrite headings that describe their sectionsA heading is a promise about what follows.Sufficient
- G131Level AAWrite labels that describe their fieldsG131 asks two things of every label.Sufficient
- G133Level AOffer longer session limits before forms beginG133 puts a checkbox on the first page of a multipart form that lets the user ask for a longer session limit, or for none at all.Sufficient
- G135Level AExpose controls through the platform accessibility APINot everything is built from markup.Sufficient
- G136Link nonconforming pages to a conforming versionRead this one carefully.Advisory
- G138Level AAdd semantic markup wherever color carries meaningColor is a fast cue for most readers and no cue at all for some.Sufficient
- G139Level ALet users jump straight to form errorsG139 puts a link next to each reported error that takes the user straight to the field that caused it, usually from a summary at the top of the re-displayed form.AdvisoryHuman testing
- G14Level ASay in text what color alone signalsColor carries meaning on your page.SufficientHuman testing
- G140Level AKeep content and structure separate from presentationTwo different things are going on in any page.SufficientHuman testing
- G141Level AOrganize every page with a heading hierarchyG141 asks you to give every section of a page a heading, and to nest those headings so the levels match the real outline.Sufficient
- G142Level AABuild with technologies whose browsers support zoomG142 is a choice made early.Sufficient
- G143Level ADescribe every CAPTCHA's purpose in textA CAPTCHA is an image or a sound with a task hidden inside it.Sufficient
- G144Level AOffer a second CAPTCHA in another modalityG144 asks the page to carry a second CAPTCHA that serves the same purpose through a different sense, so somebody blocked by one has a real chance at the other.Sufficient
- G145Level AAGive large text at least 3:1 contrastContrast rules relax for big text.Sufficient
- G146Level AAUse liquid layouts that fit any windowA liquid layout defines its regions in units that scale with text, and positions them so they wrap onto new rows the way words wrap in a paragraph.Sufficient
- G148Level AALeave text colors default, or set bothThere is a way to pass contrast without measuring anything.Sufficient
- G149Level AAUse components the browser highlights on focusBrowsers already highlight standard controls when they take focus.Sufficient
- G15Level ATest flashing content against seizure thresholdsSome flashing can trigger a seizure, and you cannot tell by looking at it.Sufficient
- G150Provide live text for live audio-only contentG150 covers giving live audio-only content a text alternative while it is happening, through real-time stenography, rapid typing, or re-voicing into speech recognition trained on one operator.Sufficient
- G151Link live statements to their prepared scriptWhen a live broadcast follows a script written in advance, that script is already a more accurate record than anyone could type in real time.Sufficient
- G152Level AStop animated GIFs blinking within five secondsAn animated GIF's running time is simple arithmetic.Sufficient
- G153Make dense text easier to readG153 is about the writing rather than the markup.Sufficient
- G155Level AAAdd a confirmation checkbox before final submissionG155 adds a checkbox the user must tick to say they have reviewed their input and are ready to commit it.SufficientHuman testing
- G156Level AAKeep text recolorable by the user's browserMost browsers can override an author's foreground and background colors.Sufficient
- G157Caption live audio with a captioning serviceG157 brings a real-time captioning service onto the page itself.Sufficient
- G158Level AProvide transcripts for audio-only contentG158 asks for a document that tells the same story as the audio, in the same language, so somebody who cannot hear it gets the same information rather than a summary of it.SufficientHuman testing
- G159Level AProvide text alternatives for video-only contentA video with no soundtrack puts all of its information into moving pixels.SufficientHuman testing
- G160Offer sign language versions of essential contentFor many Deaf people, sign language is a first language and written text is a second one.Sufficient
- G161Level AAAdd a site-wide search functionSearch is a route through a site that needs no understanding of how the site is organized.SufficientHuman testing
- G162Level APosition labels where users expect themG162 is about where the label sits.Sufficient
- G163Use standard diacritics readers can turn offMany languages use diacritical marks to show pronunciation or to tell similar words apart.Sufficient
- G164Level AAState how long requests can be canceledAn order is usually a commitment.SufficientHuman testing
- G165Level AAKeep the platform's default focus indicatorOperating systems draw their own focus indicator, and many let people make it thicker, brighter, or a different color.Sufficient
- G166Level AAdd described audio for silent videoA video with no soundtrack is closed to blind and some low-vision viewers.SufficientHuman testing
- G167Level ALabel fields with their adjacent buttonsWhere a button sits next to an input, carries a clear text label, and acts on that input, W3C accepts the button as the field's label.Sufficient
- G168Level AAAsk for confirmation before completing risky actionsG168 asks for a confirmation step on actions that cannot be undone once they run.SufficientHuman testing
- G169Align text to one side onlyJustified text is stretched to reach both margins.Sufficient
- G17Meet the enhanced 7:1 contrast ratioSeven to one, measured between the text and whatever sits behind it.Sufficient
- G170Level APut a mute control before auto-playing soundIf sound starts by itself and runs past three seconds, the page owes the reader a way to stop it.Sufficient
- G171Level APlay sound only when the user asksThe simplest answer to autoplay is not to autoplay.Sufficient
- G172Let users switch off fully justified textG172 offers a version of the page whose text is not justified to both margins.Sufficient
- G173Level AOffer a described version of every videoAudio description is narration filling in what the picture shows and the soundtrack does not.SufficientHuman testing
- G174Level AAOffer a working switch to high-contrast viewG174 offers a link or control leading to a version of the content that meets a higher contrast ratio.Sufficient
- G175Let readers pick their own text colorsG175 puts a color picker on the page, covering the full range, so a reader can choose their own foreground and background and have the page adopt it.Sufficient
- G176Level AKeep any flashing area below seizure thresholdsFlashing is dangerous in proportion to how much of your central vision it fills, so G176 caps the area rather than the flash.Sufficient
- G177Level AASuggest corrections when input fails validationWhen a form rejects an entry and the system can work out what was probably intended, G177 says offer that correction rather than only reporting the error.SufficientHuman testing
- G178Level AAProvide working on-page text-size controlsBrowsers can resize text.Sufficient
- G179Level AAStop enlarged text clipping in fixed containersThis technique covers one specific collision.Sufficient
- G18Level AAMeet the 4.5:1 contrast ratio for textBody text needs a contrast ratio of at least 4.5:1 against its background, and G18 is the technique that says so.Sufficient
- G180Level ALet users extend time limits tenfoldG180 gives the reader a way to change a time limit at the beginning of their session, before any activity the clock applies to.Sufficient
- G181Preserve form data across session re-loginG181 has one defining constraint and it is easy to miss.Sufficient
- G182Level ABack up color-coded text with another cueG182 applies to colored text where the color carries information.SufficientHuman testing
- G183Level AMake color-only links contrast and respondTake the underline off your links.SufficientHuman testing
- G184Level AState form requirements before the fieldsG184 puts instructions about the expected format at the start of the form, before the reader meets a field that will reject them.Sufficient
- G185Level AALink every site page from the home pageOn a small site the home page can act as two mechanisms at once.SufficientHuman testing
- G186Level AAdd a stop control for moving contentContent that moves, blinks or scrolls automatically, runs past five seconds, and sits beside other content needs a way to stop it.Sufficient
- G188Offer a control that opens up line spacingG188 adds a button or link that opens up the spacing of the text.Sufficient
- G189Level AOffer a switch to self-describing link textG189 gives the reader a control that switches link text between a short form and a long, self-describing one.Sufficient
- G19Level AKeep flashes to three per second maximumThree flashes in any one second, and no more.Sufficient
- G190Link inaccessible objects to accessible versionsWhere one object on a page cannot be made accessible, G190 puts a link to a conforming version next to it.Advisory
- G191Level AOffer a blink-free reload of the pageG191 gives the reader a way to reload the current page with its blinking content stopped.Sufficient
- G193Provide an accessible help assistant on the pageG193 is more specific than its usual paraphrase.Sufficient
- G194Spell-check text input and offer fixesG194 spell-checks text the reader has entered and offers corrections when it can.Sufficient
- G195Level AAShip a clearly visible custom focus indicatorDrawing your own focus indicator? G195 sets the bar it has to clear.Sufficient
- G196Level ADescribe grouped images with one alternativeWhere several images work together to say one thing, describing them one at a time destroys the meaning.Sufficient
- G197Level AALabel identical functions identically everywhereG197 says that components doing the same job across a set of pages carry the same label.SufficientHuman testing
- G198Level ALet users switch time limits off entirelyG198 gives the reader a way to turn a time limit off before it starts running.Sufficient
- G199Level AConfirm success when a submission worksG199 puts a message on screen confirming that a submission worked, so the reader is not left guessing.SufficientHuman testing
- G200Stop opening new tabs without causeG200 is guidance, not a conformance route, and W3C says so on the technique's own page.Advisory
- G201Level AWarn users before opening a new windowG201 says warn the reader before a link opens a new window.Advisory
- G202Level AMake every control work with a keyboardEvery piece of functionality has to be operable from the keyboard interface.Sufficient
- G203Level ADescribe talking-head video with static textSome videos genuinely present nothing visually.SufficientHuman testing
- G204Do not block the browser's natural text reflowBrowsers reflow text on their own.Sufficient
- G205Level AAdd text cues to color-coded field labelsA form that marks required fields in red has told everyone who can see red.SufficientHuman testing
- G206Offer a layout without horizontal scrollingG206 gives the reader a way to switch to a layout that does not need horizontal scrolling to read a line of text.Sufficient
- G207Level AAGive meaningful icons 3:1 contrastNot every graphic is in scope, and G207 says which ones are.Sufficient
- G208Level AInclude the visible label in the accessible nameG208 says the text a reader can see on a control has to appear, in its entirety, inside the name assistive technology receives.Sufficient
- G209Level AASeparate adjoining chart colors with real contrastWhere a graphic puts colors next to each other and the boundary carries meaning, G209 asks that neighboring colors differ by at least 3:1.Sufficient
- G21Level ANever trap keyboard focus inside a widgetFocus goes into a component and cannot get back out, so Tab cycles inside it forever and the rest of the page is gone.Sufficient
- G210Level AMake every drag-and-drop action cancellableG210 asks that a pointer action started by mistake can be abandoned before it takes effect.SufficientHuman testing
- G211Level AMatch accessible names to visible labels exactlyG211 is the strict version of matching a control's name to what the reader sees.Sufficient
- G212Level AUse native controls that activate on releaseNative controls fire when the pointer is released, not when it goes down.SufficientHuman testing
- G213Level AGive motion-activated features conventional controlsWhere a feature responds to shaking, tilting or moving the device, G213 asks for two things.SufficientHuman testing
- G214Level AAOffer a control to rotate orientation-locked contentG214 gives the reader a control presenting the content in the other orientation, where the display itself is locked.Sufficient
- G215Level AProvide simple controls for complex gesturesA path-based gesture asks the reader to move a finger along a route, and plenty of people cannot.SufficientHuman testing
- G216Level ALet sliders work with single tapsA control slider is a track with a thumb you move along it, used for volume, a color hue, a loan amount, a donation.SufficientHuman testing
- G217Level ALet users remap or disable single-key shortcutsA single-key shortcut fires on a letter, number, punctuation mark or symbol pressed with no modifier.SufficientHuman testing
- G218Level AASign users in with an emailed linkAuthentication that demands a memorized password is a memory test, and G218 offers a route around it.Sufficient
- G219Level AAGive every drag action a click alternativeG219 requires that anything achievable by dragging also be achievable through single pointer activations that involve no dragging.SufficientHuman testing
- G220Level AKeep the contact link in one consistent placeG220 says that if help is offered anywhere in a set of pages, it appears in the same relative place on all of them.SufficientHuman testing
- G221Level ACarry entered data into later stepsG221 says a multi-step process should not ask for the same information twice.SufficientHuman testing
- G223Make keyboard focus impossible to missG223 describes a focus indicator built to a higher standard than merely visible.Advisory
- G224Level AAPreserve meaningful indentation when text reflowsSome content means something by how it is indented.Sufficient
- G225Level AAKeep horizontal carousels usable at 320 pixelsRead this one precisely.Sufficient
- G226Level ANarrate visual content within the soundtrack itselfThe cheapest audio description is the one you never have to add, and G226 is that approach.SufficientHuman testing
- G4Level ALet users pause moving content and resume itA carousel, a ticker, an animation, a feed that refreshes on its own.Sufficient
- G5Remove time limits from activities entirelyTake the clock out and there is nothing left to test.Sufficient
- G53Level ALet the sentence around a link explain itA link reading Learn more is fine as long as the sentence holding it says where it goes.Sufficient
- G54Include a sign language interpreter in videosFor many deaf people, sign language is a first language and written captions are a second one, read at speed.Sufficient
- G55Link unusual words to their definitionsA word your industry uses one way and everyone else uses another, with no definition anywhere on the page.Sufficient
- G56Keep background audio 20 decibels below speechMusic under a voiceover has to sit well under it, and the number is 20 decibels.Sufficient
- G57Level APut content in a meaningful reading orderThe source order is the order everything that is not a pair of eyes will read your page in.SufficientHuman testing
- G58Level APut the media alternative link beside the mediaThe transcript exists and nobody can find it, so it might as well not.SufficientHuman testing
- G59Level AOrder interactive elements to match the contentTab order comes out of source order, so wherever the controls sit in the markup is where focus will go.SufficientHuman testing
- G60Level ASilence automatic audio within three secondsA sound plays when the page loads and stops by itself in three seconds or less.Sufficient
- G61Level AAKeep repeated components in the same orderEverything that repeats across your pages keeps the same relative order, every time.SufficientHuman testing
- G62Provide a glossary for specialized termsOne alphabetical list of the terms your content uses, each with a definition beside it.Sufficient
- G63Level AAOffer a site map as another routeA page that lists the sections of your site and links to each one.SufficientHuman testing
- G64Level AAProvide a table of contents for long documentsA list of a document's sections at the top, each entry linking to its section.SufficientHuman testing
- G65Show a breadcrumb trail on deep pagesHome, then Jewelry, then Rings, then the ring itself, each step a link.Sufficient
- G68Level ADescribe the purpose of live-only streamsA live traffic camera or a live audio feed cannot carry a transcript, because the content does not exist until it happens.Sufficient
- G69Level AProvide a full transcript of the mediaNot a caption file, and not a list of what got said.SufficientHuman testing
- G70Offer a dictionary search for specialized contentPut a lookup on the page and let a reader query an online dictionary without leaving.Sufficient
- G71Put a help link on every pageOne link to help on every page, pointing at help for that page.Sufficient
- G73Level ALink complex images to a long descriptionA chart, a diagram, a map.Sufficient
- G74Level ADescribe complex images in the nearby textSometimes the description is already written.Sufficient
- G75Let users postpone automatic content updatesA page that refreshes on its own schedule, and a reader who was halfway through a sentence.Sufficient
- G76Update content only when the user asksTake the automatic refresh out and put a button where it was.Sufficient
- G78Level AOffer a selectable audio description trackA second audio track carrying the original soundtrack plus a narrator describing what the picture shows.SufficientHuman testing
- G79Offer a spoken version of the textA recording of the page, read aloud, linked from the page itself.Sufficient
- G8Level AProvide a version with extended audio descriptionsSome videos have nowhere to put a description.SufficientHuman testing
- G80Level AUse a submit button, not automatic submissionNothing happens until the reader presses the button.SufficientHuman testing
- G81Offer a synchronized sign language video trackSign language interpretation delivered as its own video stream, synchronized with the main one, which the player can overlay or show in a second window.Sufficient
- G82Level AName the function of interactive imagesWhen an image is also a control, its alternative has to name what it does rather than what it looks like.Sufficient
- G83Level ATell users which required fields they missedA submitted form comes back with three fields outlined in red and one line at the top saying please correct the errors.Sufficient
- G84Level AExplain when input is not an allowed valueThe field accepts one of a fixed set of values and the reader supplied something else, so the message has to say what the set is.SufficientHuman testing
- G85Level AExplain format errors and show the fixThe date got typed the wrong way round, or the reference number is two digits short.SufficientHuman testing
- G86Add a plain-language summary of complex contentSome content cannot be simplified without losing what it says.Sufficient
- G87Level AAdd captions to every video with speechPrerecorded video with sound needs captions running in time with it, carrying the dialogue and any sound that carries meaning.SufficientHuman testing
- G88Level AWrite page titles that describe the pageThe title is the first thing a screen reader announces, the label on the browser tab, the line in a search result and the name of the bookmark.Sufficient
- G89Level AShow the expected format with an exampleTell the reader what shape the answer takes before they get it wrong.Sufficient
- G9Level AACaption live video streams in real timeLive video needs captions while it is live, and G9 is the transcription half of that job.SufficientHuman testing
- G90Level APair every event handler with keyboard supportAnything a mouse can do, a keyboard has to be able to do as well.Sufficient
- G91Level AWrite link text that states its purposeThe link says where it goes, on its own, with no help from the sentence around it.Sufficient
- G92Level AWrite long descriptions carrying the same informationThe short alt names the image.Sufficient
- G93Level AProvide open captions burned into the videoCaptions burned into the picture, always visible, needing nothing at all from the player.SufficientHuman testing
- G94Level AWrite alt text that serves the same purpose as the imageHaving alt text is not the goal.SufficientHuman testing
- G95Level AGive every graphic a brief text descriptionSome images cannot be reduced to a sentence, and G95 is the honest minimum for those.Sufficient
- G96Level AIdentify items by more than shape or positionPress the round button.SufficientHuman testing
- G97Expand each abbreviation at its first useWrite the full form the first time, put the short form beside it, then use the short form freely from there.Sufficient
- G98Level AALet users review answers before final submissionBefore the transaction commits, show the reader everything they entered and let them change it.SufficientHuman testing
- G99Level AAMake deleted data recoverableDeleting something does not have to mean losing it.SufficientHuman testing
Plain text3
- T1Level ASeparate plain-text paragraphs the standard wayT1 applies when the deliverable really is plain text.Sufficient
- T2Level AFormat plain-text lists with standard conventionsIn plain text a list is a list because its labels say so.Sufficient
- T3Level AFormat plain-text headings with standard conventionsIn plain text a heading is marked by blank lines and nothing else.Sufficient
PDF23
- PDF1Level AAdd alt text to images in PDFsIn a tagged PDF, every meaningful image needs an Alt entry on its Figure tag.Sufficient
- PDF10Level ALabel every field in your PDF formsEvery field in a PDF form needs a visible label on the page and a matching tooltip, because the tooltip is the label that assistive technology is actually attached to.Sufficient
- PDF11Level ATag PDF links so they are announcedA working, announced link in a PDF is three things joined together.Sufficient
- PDF12Level AGive PDF form fields a name, role, and valueEvery PDF form field has to expose three things through the accessibility layer.Sufficient
- PDF13Level AReplace raw URLs in PDFs with descriptive textWhen a link's visible text cannot say where it goes, a raw URL or a shortened code, the Link tag can carry an Alt entry with replacement text.Sufficient
- PDF14Add running headers and footers to long PDFsLong documents need running headers or footers that repeat the same orientation cues in the same place on every page.AdvisoryHuman testing
- PDF15Level AGive PDF forms an explicit submit buttonAn interactive PDF form should end in a real button wired to the submit-form action, so the user asks for the submission rather than tripping over it.SufficientHuman testing
- PDF16Level ASet the document language in every PDFEvery PDF should declare its default language in the Lang entry of the document catalog.Sufficient
- PDF17Level AMake PDF page numbers match the printed pagesThe page number a PDF viewer announces should match the number printed on the page.SufficientHuman testing
- PDF18Level AGive every PDF a real document titleA PDF needs a real title in its document properties, and it needs to be told to show that title instead of the filename.Sufficient
- PDF19Level AMark language changes inside PDF documentsWhen a passage inside a PDF is in a different language from the document around it, the tag covering that passage needs a Lang entry of its own, so screen readers switch voices mid-document and switch back afterwards.Sufficient
- PDF2Level AAAdd bookmarks so long PDFs are navigableBookmarks are the panel down the side of a PDF viewer that jumps you to any section in one click.AdvisoryHuman testing
- PDF20Level ARepair mistagged tables with Acrobat's Table EditorTables converted to PDF often come out with cells merged or split wrongly, even when the original was marked up correctly in the authoring tool.Sufficient
- PDF21Level ATag PDF lists so they read as listsA list in a PDF is built from four tags, and each one has a job.Sufficient
- PDF22Level ATell users when PDF form input is invalidWhen a PDF form validates input, the error has to come back as text that names the field and describes the problem, not as a beep or a red border.SufficientHuman testing
- PDF23Level AUse fillable form fields instead of flat textA form distributed as a PDF has to contain real interactive controls, not printed lines and boxes to write on.Sufficient
- PDF3Level AFix the reading and tab order in PDFsA PDF stores a tag order for reading and a tab order for form fields and links, and both have to follow the logical order of the content.SufficientHuman testing
- PDF4Level AHide decorative PDF images from screen readersPurely decorative content in a PDF should be marked as an Artifact so assistive technology skips it.Sufficient
- PDF5Level AMark required fields in PDF formsRequired fields in a PDF form have to say so in a way assistive technology reports.Sufficient
- PDF6Level ATag PDF tables as real tablesData tables in a PDF need real table tags, Table, TR, TH and TD, so screen readers can announce the right header with each cell.Sufficient
- PDF7Level AARun OCR so scanned PDFs contain real textA scanned PDF is a stack of photographs of pages.SufficientHuman testing
- PDF8Provide expansions for abbreviations in PDFsA PDF tag can carry an E entry that attaches an expansion to an abbreviation, so a Span reading "SEC" exposes "Securities and Exchange Commission" to assistive technology.Sufficient
- PDF9Level ATag PDF headings with real heading tagsHeadings in a PDF have to be tagged as headings, nested by level, so screen reader users can pull up a heading list and jump between sections.Sufficient
Media (SMIL)8
- SM1Level AAdd extended audio description in SMIL 1.0SM1 is a sufficient technique when used with G8, the general technique for a movie with extended audio descriptions, and it is filed against three different description rules rather than the one shown above.SufficientHuman testing
- SM11Level AAdd caption text streams in SMIL 1.0SM11 is a sufficient technique when used with G87, the general technique for closed captions, and W3C also files it for live captioning with a second partner technique.SufficientHuman testing
- SM12Level AAdd caption text streams in SMIL 2.0SM12 is a sufficient technique when used with G87, and W3C also files it for live captioning with G9 alongside.SufficientHuman testing
- SM13Add a sign language video stream in SMIL 1.0SM13 is a sufficient technique when used with G81, and what it delivers is sign language interpretation rather than captions.Sufficient
- SM14Add a sign language video stream in SMIL 2.0SM14 is a sufficient technique when used with G81, and it is SM13's arrangement in SMIL 2.0.Sufficient
- SM2Level AAdd extended audio description in SMIL 2.0SM2 is a sufficient technique when used with G8, and it is SM1's method carried into SMIL 2.0.SufficientHuman testing
- SM6Level AAdd audio description in SMIL 1.0SM6 is a sufficient technique when used with G173, the general technique for a described version of a movie, and it covers both of the criteria shown above.SufficientHuman testing
- SM7Level AAdd audio description in SMIL 2.0SM7 is a sufficient technique when used with G173, filed against both criteria above, and it is SM6's method in SMIL 2.0.SufficientHuman testing
Server-side5
- SVR1Redirect on the server, not with a timed refreshConsecutive page loads are what this technique exists to prevent.Sufficient
- SVR2Use .htaccess to route to the conforming versionSVR2 is attached to no success criterion.Advisory
- SVR3Gate non-conforming content by HTTP refererSVR3 is attached to no success criterion, exactly as SVR2 is, and it does the same job in application code rather than server configuration.Advisory
- SVR4Store the user's accessible-version preferenceSVR4 is attached to no success criterion, and it covers two different situations that get treated as one.Advisory
- SVR5Level ASend the content language in the HTTP headerSVR5 is an advisory technique, and the distinction changes what you should do with it.Advisory
Not sure which of these your site needs?
That is what the audit answers. Every finding in your report names the rule it breaks, links to the technique that fixes it, and shows the evidence, in the order worth doing.