accessibility WCAG axe HTML

Accessibility Checker Guide: Automated Tests and Manual Review

Use axe-based HTML checks to find accessibility violations, prioritize fixes, and combine automation with keyboard and screen-reader testing.

· Mohammed Aquib Ansari

Automated accessibility testing catches many high-value problems quickly: missing labels, invalid ARIA relationships, contrast failures, and structural mistakes. The ByteKiln Accessibility Checker runs axe-core against an isolated preview of your HTML and groups findings by impact.

A clean automated report does not mean a page is accessible. Automation cannot decide whether link text makes sense, focus order follows the task, alternative text communicates the image’s purpose, or a workflow is understandable with a screen reader.

Test a meaningful fragment

Paste a complete component state rather than one disconnected element. A form example should include its heading, instructions, labels, validation message, and submit control:

<section aria-labelledby="signup-heading">
  <h2 id="signup-heading">Create an account</h2>
  <form>
    <label for="email">Email address</label>
    <input id="email" name="email" type="email" autocomplete="email" required>
    <button type="submit">Create account</button>
  </form>
</section>

Run the check, review the preview, and expand each violation. The report identifies the affected element, explains the rule, and links the failure to remediation guidance.

Prioritize by user impact

Impact labels are useful triage, but context still matters. Fix critical and serious violations first, especially issues that block keyboard or assistive-technology users. Then address moderate and minor findings and recurring component-level causes.

Avoid fixing only the individual page. If ten pages use an unlabeled icon button from the same component, correct the component and add a regression test. Design-system fixes produce the largest accessibility return.

Treat ARIA as a supplement

Prefer native HTML before adding ARIA. A <button> already provides keyboard behavior, focusability, and a role. A clickable <div role="button"> requires you to recreate keyboard activation and disabled behavior correctly.

Use ARIA to add an accessible name, connect instructions and errors, or describe state when native HTML has no equivalent. Invalid or contradictory ARIA can make an interface harder to use than no ARIA.

Add manual keyboard testing

After automated checks pass, use the interface without a mouse:

  1. Reload and press Tab from the top.
  2. Confirm every interactive element receives visible focus.
  3. Check that focus order follows the visual and task order.
  4. Activate buttons and links with Enter or Space as appropriate.
  5. Open and close menus, dialogs, and disclosures.
  6. Verify focus moves into a dialog and returns to its trigger.
  7. Ensure there is no keyboard trap.

Repeat at a narrow viewport and at 200% zoom. Content should reflow without requiring two-dimensional scrolling except where the content itself needs it, such as a large data table.

Check names, instructions, and errors

Every form control needs a persistent accessible name. Placeholder text is not a label. Error messages should explain how to fix the problem and be programmatically associated with the field, commonly using aria-describedby.

Do not communicate state using color alone. Pair red borders with text or an icon that has an accessible name. The Color Palette tool can calculate contrast, but contrast alone does not verify that color usage communicates meaning accessibly.

Perform a screen-reader smoke test

For important workflows, test with at least one common browser and screen-reader combination. Check:

  • the page title and main heading;
  • landmark navigation;
  • control names, roles, and states;
  • form instructions and validation feedback;
  • dynamic updates and loading announcements;
  • table headers and relationships;
  • dialog names and focus management.

Listen for the experience rather than only inspecting the accessibility tree. A technically named control can still be confusing in context.

Put accessibility into CI

Automated checks are most effective as regression protection. Run axe in component tests for reusable controls and in browser tests for critical pages. Keep a small number of intentional, documented exceptions with owners and review dates; broad rule suppression hides future defects.

Combine automated scans with linting, semantic component APIs, unit tests for keyboard behavior, and scheduled manual audits. Include people with disabilities in usability research when the product and resources allow it.

Definition of done

Before shipping a component, confirm:

  • automated checks have no unexplained violations;
  • semantic HTML is used wherever possible;
  • the complete task works by keyboard;
  • focus is visible and predictable;
  • labels, instructions, and errors are announced;
  • contrast and non-color cues are sufficient;
  • zoom and narrow layouts remain usable;
  • important behavior has regression coverage.

Accessibility is a product-quality practice, not a one-time score. The checker shortens feedback loops, while manual review verifies the parts that rules cannot understand.