aria-current: The You Are Here Signal Screen Readers Need

November 12, 2026

aria-current marks the item that represents the current page, step, or date in a set. Put it on the active navigation link, the current breadcrumb, or today in a calendar, and a screen reader announces it. Leave it off and the user has to guess where they are.

The bold link nobody can hear

Open a storefront and look at the navigation. One link is bold, or underlined, or a different color. That is the current page, and every sighted visitor reads it in half a second. Now listen to the same page through a screen reader. Every link sounds identical. There is no bold in audio, and no underline. The current page is invisible unless the markup says so, and the attribute that says so is aria-current.

It is one of the smallest attributes in ARIA, and one of the most skipped. The value is usually "page" for navigation, "step" for a checkout step, "date" for today in a calendar, and "true" when none of those fits. The screen reader announces the link followed by "current page" or "current step", and the user knows where they are without opening anything.

Where it belongs, and where it does not

Navigation is the obvious home: the active link in the header, the current item in a breadcrumb trail, the active filter in a collection sidebar. Checkout is the second: the step indicator that shows Shipping, Payment, Review needs aria-current="step" on the step the shopper is actually on, or the progress bar is decoration for everyone who cannot see it. Calendars and date pickers are the third: today gets aria-current="date" so a keyboard user lands on the right day instead of guessing from the month grid.

Where it does not belong is everywhere else. aria-current on a button that is merely styled as active is noise. aria-current="true" on five items in the same list is a contradiction; there can only be one current item in a set. And aria-current is not a substitute for a visible focus indicator or a proper heading structure. It answers one question, where am I, and it should only be asked where the answer changes what the user does next.

The misuse that ships most often

The common mistake is putting aria-current on the wrong element: on the list item wrapping the link instead of on the link itself. Screen readers announce the current state when they announce the link, and a list item is not a link. The fix is mechanical, move the attribute onto the anchor. The second mistake is using aria-current="page" on a link that points at a section of the same page, like an anchor to a footer. A section is not a page, and announcing it as the current page sends the user looking for a page change that never comes.

Test it the way a screen reader user would. Tab through the navigation and listen. If you cannot tell which link is the current page without looking at the screen, the attribute is missing or misplaced. Fix it, then check the breadcrumb and the checkout steps the same way. Three spots, one attribute, and the site stops hiding the one piece of orientation every shopper needs. Two more small failures ride along with this one: the form errors screen readers never hear and the parallax hero that makes people sick.

Frequently asked questions

What value should aria-current have in navigation?

Use page for the link to the current page. Step is for a step in a process like checkout, date is for today in a calendar, and true is the fallback when none of those fits. Page is the one storefronts need most.

Can more than one item have aria-current?

No, not in the same set. There is one current page, one current step, one today. Marking several items current tells the screen reader the user is in several places at once, which is worse than marking none.

Does aria-current replace visible styling?

No. It adds the information for screen reader users; sighted users still need the bold or underline. Ship both. The visual cue and the attribute describe the same fact to different senses.

Where do I put it, on the link or the list item?

On the link itself, the anchor element. Screen readers announce the current state when they announce the link, and a list item wrapping the link never gets announced that way.