Give it a try
last updated: 08/04/2026
-
To see your bookmarks bar, press the keys
(Ctrl/Cmd + Shift + B). - Drag the "SpotCheck - List Identifier" link to your bookmarks bar or bookmark folder.
- Open any page, then click the bookmark to run it.
- Click it again or click the close button in the popup to clear the results.
What the colors mean
Every list gets a dashed outline and a label describing what was found.
A properly formed list with one or more list items.
The list is structurally valid but contains one or more empty
<li> elements.
The list is empty, has a direct child that isn't an
<li>, or is an
<li> that isn't inside a
list at all.
Try it here
Run the check against the sample markup below.
Valid list
- Item one
- Item two
Empty list item
- Item two
Empty list
Malformed list
- Item
Orphaned item
Applicable WCAG 2.2 success criteria
List semantics tell assistive technology how many items there are and where the list starts and ends, which only works when the markup is well formed.
-
1.3.1
Info and Relationships(Level A)
Content that is visually a list needs to be marked up as a real list so screen readers announce item counts and boundaries correctly.
Read the source
The bookmarklet contains the TL;DR version of the code. Here's the readable version.
(function () {
var w = window;
var d = document;
var STATE_KEY = "__a11yListIdentifier";
if (w[STATE_KEY]) {
w[STATE_KEY].clear();
return;
}
var COLORS = {
green: "#1a7d4f",
gold: "#8b6800",
red: "#be412a"
};
var OUTLINES = {
green: "5px solid",
gold: "6px dotted",
red: "5px dashed"
};
var OUTLINE_OFFSET = "3px";
var DOTS = {
green: "#3fbf7f",
gold: "#e0b84f",
red: "#e06a4f"
};
var LEVELS = {
ok: "green",
emptyItems: "gold",
empty: "red",
stray: "red",
orphan: "red"
};
var BADGES = {
ok: "items",
emptyItems: "empty - /
- /
FYI
-
An empty
<ul>or<ol>usually means content failed to load, or a list wrapper was left behind after items were removed by script. -
Only children other than
<li>,<template>, and<script>are flagged as malformed content. -
A stray
<li>not inside a<ul>,<ol>, or<menu>loses its list-item semantics entirely and is announced as plain text.