SVG Accessibility Checker

Paste inline SVG and verify title, desc, role and aria-labelledby presence

Ad placeholder (leaderboard)

Inline SVG icons are everywhere, and they are one of the most commonly missed accessibility cases. An SVG with no name is announced as nothing useful, while a decorative SVG that is not hidden floods a screen reader with shape data. This tool inspects a pasted SVG, decides which pattern it should follow, and checks that the required markup is present.

How it works

The tool parses your SVG with the browser’s XML parser, falling back to the HTML parser, and inspects the root svg element. It first decides the intended pattern:

  • Decorative — the root has aria-hidden="true" or role="presentation"/role="none". The tool confirms it is hidden and warns if a stray title or aria-label would leak a name.
  • Informative — anything else. The tool runs the accessible-name checks below.

For an informative SVG it verifies, in line with WCAG 1.1.1:

  1. role="img" on the root, so the graphic is exposed as a single image.
  2. A non-empty title element, which is the short accessible name.
  3. aria-labelledby on the root referencing the title element’s id, so the name is announced reliably (an aria-label is accepted as an alternative).
  4. A resolvable accessible name overall.
  5. An optional desc element for longer descriptions.

Example

<svg role="img" aria-labelledby="t">
  <title id="t">Download file</title>
  <path d="M12 3v12 ..."/>
</svg>

This passes: role="img" makes it one image, the title provides the name “Download file”, and aria-labelledby wires the two together. Remove the title and the icon becomes a nameless graphic.

Tips and notes

  • Give each title a unique id and reference exactly that id from aria-labelledby; a mismatch silently breaks the name.
  • Decorative icons that sit next to visible text should be hidden with aria-hidden="true" rather than given a redundant name, to avoid double announcements.
  • Use desc only when a short title is not enough, for example a data chart, and keep the title concise.
  • All parsing happens locally in your browser; the markup never leaves the page.
Ad placeholder (rectangle)