Accessibility tool
Tab trail
One click shows the path the Tab key takes through any page, and marks in red what goes wrong on the way.
Press it to try it on this page. Drag it to your bookmarks bar to have it on every site.On a phone? Press it, then press Play to watch it walk this page. To use it on your own site, open this page on a computer.
Version 1.0, updated October 29, 2026
These 3 are broken on purpose. Press Tab trail and watch them turn red.
Why use it
Some people only use the keyboard. If Tab skips your "Add to cart" button, they can't buy from you. If it skips "Send" on your contact form, they can't write to you.
A code scanner like axe or Lighthouse reads the HTML and never presses Tab, so it misses it. Tab trail follows Tab and shows it. Keyboard access is part of the WCAG 2.2 AA standard.
Where I use it
I built it to check every page properly with the keyboard, so I can support WCAG 2.2 AA. I ran it on every page of this site: 0 clickable things Tab skips, 0 menus that open only for the mouse. The 3 above, broken on purpose, are the only red. How I built this page?
Drag it to your bookmarks bar.Then click it on any site. In Firefox, use the console.4 steps
- 1Drag the Tab trail button to your bookmarks bar. It turns into a bookmark you can click on any site. Don't see the bookmarks bar? Press Ctrl+Shift+B, or Cmd+Shift+B on a Mac. In Firefox, use the console instead (see below).
- 2Open your site and click the bookmark.
- 3Press Tab and follow the numbers, or press Play and it walks every stop for you. Click the bookmark again or press Escape to close it.
- 4Your bookmark keeps the version you dragged. To get new checks, delete it and drag the button again.
Press Tab, or press Play.The numbers show where Tab goes. Orange is you.How to read it
- A green 0 means that check found nothing. A red number means it found something, and the chips under it take you there.
- In the Log, OK passed, PROBLEM needs a fix, SKIPPED was not judged and says why, and INFO is a note.
- Out of order is judged only for the Tab presses you make. Press Tab to the end, then Shift+Tab back.
- Hidden focus is judged once the page stops scrolling. Press Play to test every stop.
- Lost focus is judged only for the popups you open and close.
- Everything is tested at your window size. Try a narrow window too.
Fix what turns red.5 checks, each with its WCAG rule.See all 20
What it lists in red
- 01Missed spots. Red boxes: looks clickable, Tab skips it. WCAG 2.1.1
- 02Hover menus. Menu opens for the mouse only? Listed in red. WCAG 2.1.1
- 03Hidden focus. Tab lands under a sticky bar? Listed in red. WCAG 2.4.11
- 04Lost focus. Popup closes, focus drops to the top? Listed in red. WCAG 2.4.3
- 05Out of order. Tab jumped? Every jump is listed in red. WCAG 2.4.3
How to read the trail
- 06Tab order. Numbers show where Tab goes. Orange is you.
- 07Hidden links. Skip links show as dashed dots.
- 08Inside dialogs. A dialog opens? The trail goes in too.
- 09Late arrivals. Scroll, and new buttons get counted.
- 10Big pages. Over 50 stops? See 50 at a time.
How to work with it
- 11Play it. No Tab key? Press Play, it walks every stop.
- 12Jump there. Click a number and focus moves there.
- 13Find it. Click a red spot in the list to see it.
- 14The count. Fix it, run it again, compare.
- 15Log. See every check, the good ones too.
- 16Copy for AI. Paste the problems into your AI. It gets the fix.
- 17Out of the way. Drag the panel anywhere.
Settings
- 18Spotlight. Dim the page, light up where Tab is.
- 19No lines. Just the numbers? Hide the lines.
- 20Short lines. Too many lines? Keep every line short.
Hand it to your AI.Copy for AI, or run it in Playwright.Show the code
Copy for AI copies only the problems, each with its WCAG rule, what should happen, a CSS selector, the HTML, the component that drew it, a fix hint and how to check the fix. Paste it into your coding AI and it knows where to look.
While Tab trail is open, the page has window.__tabTrail, so a test or an AI agent can run it with no clicks:
await window.__tabTrail.play() window.__tabTrail.report() window.__tabTrail.log() window.__tabTrail.state() window.__tabTrail.version window.__tabTrail.close()In a Playwright test, it fails with the whole report when Tab skips something:
import { test, expect } from "@playwright/test"; test("Tab reaches everything", async ({ page }) => { test.setTimeout(120_000); const script = await (await fetch("https://matjazkorosec.com/tools/tab-trail.js")).text(); await page.goto("http://localhost:5173/"); await page.addScriptTag({ content: script }); const report = await page.evaluate(() => window.__tabTrail.play()); const log = await page.evaluate(() => window.__tabTrail.log()); expect(log.filter((l) => l.result === "PROBLEM" && !l.fixed), report).toEqual([]); });Stuck?Blocked bookmarks, Mac links, Firefox.7 answers
- Nothing happens when I click the bookmark?
- Some sites block scripts from bookmarks. Open the script (under "What's in the code"), copy all of it, and paste it into the browser console on that site.
- Tab skips every link on a Mac?
- Safari and Firefox do that until you turn it on. Safari: Settings, Advanced, "Press Tab to highlight each item". Firefox: System Settings, Keyboard, "Keyboard navigation".
- Escape doesn't close it?
- While a popup on the page is open, Escape closes the popup first, and during Play it pauses. Press Escape again, or click the bookmark.
- Open in new tab does nothing?
- Your browser blocked the pop-up. Allow pop-ups for that site and press it again.
- No red on a menu that opens on hover?
- If its CSS comes from another site, the browser lets no script read it. The Log lists that style sheet as SKIPPED.
- Using Firefox?
- Firefox can't save it as a bookmark: a bookmark there can be at most 65,536 characters long, and Tab trail is 159,041. Open the script (under "What's in the code"), copy all of it, press F12 on your site, open Console and paste it. If Firefox asks, type allow pasting first.
- On a phone?
- It needs a keyboard and a desktop browser. Press the button here to watch Play walk this page.
1 file, MIT License.It reads the page and sends nothing.What's in the code
- Tab trail is 1 script of plain JavaScript, 2139 lines. All of it is in the file below.
- It reads the page you have open: what the Tab key can reach, and what looks clickable.
- It draws in 1 layer it adds to the page, so the site's styles can't touch it. Closing it removes the layer.
- It changes nothing else on the site. It only moves focus and scrolls, the way your Tab key would, so the site's own focus code runs as usual. Play never clicks.
- It sends and loads nothing: no network requests, no cookies, no local storage.
- While it is open it adds window.__tabTrail for scripts. If you open the Log in a new tab, it names your tab so it can switch back, and clears the name when you close it.
- The links in its panel and Log all go to this page.
Tab trail is free under the MIT License. Use it, change it and share it, at work too, as long as every copy keeps the notice at the top of the script: "Copyright (c) 2026 Matjaž Korošec".
Found a bug? Press Copy log and email it to me.
It's the keyboard part.axe and Lighthouse read the code. Tab trail presses Tab.What it leaves out
Next to the tools you know
- axe and Lighthouse read the code. They never press Tab.
- Accessibility Insights numbers your Tab stops in Chrome and Edge. Tab trail does that in any desktop browser, with no extension.
- Tab trail also reads your CSS for menus that open only for the mouse, and catches focus hidden under a sticky bar or lost when a popup closes.
- Use them together. Tab trail is the keyboard part.
What it leaves to a full audit
- It spots clickable things by the pointer cursor, links with no address, button roles and click handlers in the HTML. A click handler added only by script, with no pointer cursor, stays hidden.
- It doesn't check if the focus ring is visible or has enough contrast, or what a screen reader says. Spotlight helps you look for yourself. Pages inside frames are skipped.
- Style sheets loaded from other sites can't be read, so hover menus styled there are not checked.
- It's made for Chrome, Edge, Firefox and Safari on a desktop computer. On a Mac, turn on Tab for links first, and Firefox needs the console (see above).
Red on your site?
Tab is 1 test. A full audit checks all of WCAG 2.2 AA, ranks every barrier by how much it hurts and prices every fix.