Paste HTML and inspect ids

Paste page HTML below; the tool counts ids, duplicate names and extra occurrences in the browser, and checks whether label for, ARIA references and href="#id" anchors resolve. No network, no upload; results can be exported as CSV.

Not checked yet.

Running built-in self-test…

Rules

MeasureRuleBoundary
idOccurrences of id="…" in static HTMLStrings in script, style and comments removed
Duplicate nameA name appearing more than onceCase compared as written
Extra occurrencesSum of (count − 1) for each duplicate nameNot the number of duplicate names
Referencelabel for, aria idrefs and href="#id"Existence only, order not checked
Dangling referenceTarget id absent from the documentA duplicated target still counts as present

The tool parses strings only: it does not build a DOM, execute scripts or judge whether a reference points at the right element. It shares its rules with the Python probe scripts/id_uniqueness_probe.py and adds the href="#id" anchor check; the Node assertions live in scripts/test_id_check.js (11 checks), run with node scripts/test_id_check.js.

Privacy: parsing happens on this page with no network request; the CSV keeps duplicate names and missing references only. Opening the page with #sample fills the sample automatically.

Related: the homepage id-uniqueness audit (48 duplicate ids across 25 sites), the homepage template-hygiene audit, and homepage semantics, keyboard access and ARIA.

Frequently asked questions

Does the tool upload the HTML?

No. Parsing runs entirely in the browser with no network request; nothing is stored or sent.

Why strip script and style first?

An id="…" inside a template string is not a real attribute and would inflate duplicates; the tool reads static HTML only.

What do duplicate ids affect?

They are an HTML validation error and make getElementById, fragment links and ARIA targets resolve to the first match.

Why check duplicates when there are zero dangling refs?

A duplicated id still counts as present, so a reference can point at the wrong element; the tool lists duplicates and dangling refs separately.

Which references are supported?

label for, aria-labelledby/describedby/controls/owns/activedescendant, and href="#id" anchors.

Check ids before references

Duplicate ids are invisible, yet they send fragments, labels and scripts to the first element only.

Request a recheck plan