How to fix
How to fix links with no discernible text
By Chris Morris · updated 2026-09-15
A link a screen reader announces as just "link" tells the user nothing. This usually happens with icon-only links and image links. Here is how to fix each case.
Why this fails
WCAG 2.4.4 Link Purpose and 4.1.2 Name, Role, Value require every link to have text that conveys where it goes. The common failures:
- Icon-only links: a social or menu link that is just an
<svg>with no text. - Image links with no alt: a logo or thumbnail wrapped in a link, where the image has empty or missing alt.
- Empty links: an
<a>with no content at all.
What "links must have discernible text" actually means
It means the link has no accessible name: nothing a screen reader can read out to say where it goes. The link is still in the browser's accessibility tree, but its name is empty, so it gets announced as bare "link" with no destination.
You will see the same finding worded several ways. "Links must have discernible text" is axe-core's message. "Links do not have a discernible name" is the same check described in terms of the accessible name. Some tools say the link has no text alternative. All three describe one condition, and one fix.
PageSpeed Insights and Chrome DevTools report it too, because Lighthouse's accessibility category runs axe-core, so the wording is identical to what you get here. This one is a real WCAG failure, not a best-practice suggestion: axe maps it to 2.4.4 Link Purpose and 4.1.2 Name, Role, Value at Level A.
Work out the accessible name in this order, taking the first that exists: aria-labelledby, then aria-label, then the link's own text content (including the alt of an image inside it), then title. If every one is empty, the link fails.
When the link is an image
Put the destination in the image's alt. When an image is the only thing inside a link, its alt text becomes the link's accessible name, so an empty alt="" leaves the link nameless even though the markup looks complete.
<!-- fails: nothing to announce -->
<a href="/"><img src="logo.svg" alt=""></a>
<!-- passes: alt names the destination -->
<a href="/"><img src="logo.svg" alt="Home"></a>
Describe where the link goes, not what the picture shows. A logo linking home is "Home", not "Company logo". If the same image also appears outside a link elsewhere, the two alts can legitimately differ.
Alt on a linked image is not optional the way it is for decorative images. alt="" is correct for decoration precisely because it removes the image from the accessibility tree, which is the opposite of what a link needs.
How to fix it
Give the link an accessible name. For an icon-only link, add aria-label:
<a href="/cart" aria-label="View cart">
<svg aria-hidden="true">...</svg>
</a>
Mark the decorative icon aria-hidden="true" so it is not announced separately. For an image link, describe the destination in the image's alt:
<a href="/"><img src="logo.svg" alt="Home"></a>
If a link has visible text, prefer that over an aria-label. Avoid vague text like "click here" or "read more" on its own, since those fail 2.4.4 in context.
Icon links in Elementor
An Elementor Icon widget with a link, or a linked icon inside another widget, outputs an <a> around an icon and nothing else, so it fails this check unless you name it. Elementor's custom link attributes add attributes to the link's own <a> element, in key|value form: aria-label|View cart.
Use that field, not the Custom Attributes box on a widget's Advanced tab. Those land on the widget's wrapper, and an aria-label there does not reach the link, so the scan still reports it. Re-scan after the change to confirm the name shows up on the link itself.
Where to look first
Nameless links cluster in the header and footer: the logo, social icons, a cart icon. Those sit on every page, so fixing the template clears the finding site-wide. The scan above lists each link with no accessible name and the element it found. Fix the markup and scan again. To stop new ones shipping, the CLI and GitHub Action can fail a build on this rule.
Frequently asked questions
How do I make an icon-only link accessible?
Add an aria-label describing the destination, and mark the icon itself aria-hidden="true" so it is not announced twice.
Is "click here" an accessibility problem?
It can be. Link text should make sense on its own, since screen-reader users often navigate by a list of links. Describe the destination instead.
Does an image inside a link need alt text?
Yes. When the image is the only content of the link, its alt text becomes the link's accessible name, so it should describe where the link goes.
Why does an empty link fail?
Because there is nothing to announce. A screen-reader user pulling up a list of links sees an entry with no text, so the link is reachable by keyboard and completely unidentifiable. An empty <a> is usually left behind by a removed icon, or is a placeholder waiting on content. If it does not go anywhere yet, remove it rather than leaving it in the tab order.
PageSpeed Insights flagged this. Is it the same check?
Yes, identical. PageSpeed Insights runs Lighthouse, and Lighthouse's accessibility audits are powered by axe-core, the same engine behind this scanner. What differs is coverage rather than correctness: Lighthouse reports a score alongside performance and SEO, while a dedicated scan lists every failing element with its WCAG criterion.
What does "links do not have a discernible name" mean?
The same thing as "links must have discernible text". One phrasing describes the missing accessible name, the other the missing text that would have supplied it. Different tools word it differently; the condition and the fix are the same.
Which WCAG criteria does this cover?
2.4.4 Link Purpose (In Context) and 4.1.2 Name, Role, Value, both Level A. Unlike heading order, this is a genuine conformance failure rather than a best-practice warning.
Related guides
See what's actually broken on your site
Real axe-core results, every element outlined. No email wall, no fake “compliant” badge.
Run a free scanLast updated 2026-09-15.