Fixing Vague Link Text
Links reading "click here", "read more" or "learn more" make sense to a sighted reader who can see the paragraph around them. Screen reader users often pull up a list of every link on the page and pick from it, and in that list ten entries called "Read more" are useless.
Voice control users say the link text aloud to activate it, which fails when the words are vague or hidden. This guide explains what WCAG requires, how to find weak links, and how to rewrite them without cluttering your design.
Why link wording matters so much
Sighted visitors skim a page by eye. People who cannot see it skim in other ways, and links are one of the main ones. Every desktop screen reader can gather the links on a page into a single list: in NVDA and JAWS this is the elements list opened with Insert+F7, and in VoiceOver on a Mac it is the rotor, opened with Control+Option+U. The list shows each link's text and nothing else. Tabbing through a page gives a similar experience, one link at a time.
Speech recognition users meet the same problem from the other side. With Voice Control on Apple devices or Windows voice access, you activate a link by speaking what it says. If the visible words are "here" and there are four such links, the software has to ask which one you meant. If the link's hidden name differs from its visible words, saying what you can see may do nothing at all.
Search engines read link wording too. Google's own guidance asks for anchor text that is descriptive, reasonably concise and relevant to the page it points to. The SEO side of that, including anchor text on internal links, is covered in fixing anchor text; this guide stays with the accessibility rules.
What WCAG actually requires
| Success criterion | Level | What it means for links |
|---|---|---|
| 2.4.4 Link Purpose (In Context) | A | You can tell where a link goes from its text, or from its text together with its immediate context: the same sentence, paragraph, list item or table cell, or the heading directly above it. |
| 2.4.9 Link Purpose (Link Only) | AAA | The link text alone is enough. Not required for AA, but a sensible target for new content. |
| 2.5.3 Label in Name | A | When a link has visible text, its accessible name contains those same words, ideally at the start. |
| 1.1.1 Non-text Content | A | A link made only of an image needs alt text that says where it goes. |
| 4.1.2 Name, Role, Value | A | Every link has a name. An empty link fails. |
| 1.4.1 Use of Color | A | Links inside a block of text are not picked out by colour alone unless the colour differs enough from the text and another cue appears on hover and focus. |
Note what 2.4.4 does and does not say. A "Read more" link placed right after a heading can pass at level A, because the heading is its context. It is still a poor experience in a links list, which is why most accessibility specialists recommend writing links that make sense alone wherever you can, and why the checker flags them.
What the checker reports and what each finding means
- Generic link text. The whole link is a stock phrase such as "click here", "here", "read more", "more", "learn more", "details", "this page" or "link".
- Same text, different destinations. Several links share identical wording but go to different addresses, so nobody can tell them apart in a list.
- Empty link. The link has no text content, no alt text on an image inside it and no ARIA name. A screen reader announces just "link", or reads out the address.
- Image link without alt text. A logo or product photo wrapped in a link, where the image has no alt or an empty one.
- Accessible name does not match visible text. An
aria-labelreplaces the visible words with different ones. - Raw web address as the text. The link reads
https://www.example.co.uk/downloads/2026/brochure-final-v3.pdf, which is tiring to hear read aloud.
An automated check can detect wording and empty names. It cannot tell whether "Our prices" is a good description of a page that is actually about delivery charges, so read the links list yourself too.
The fix, step by step
Step 1
List every link out of context
Run the Accessibility Audit on each template, then open a screen reader and bring up its list of links, using Insert+F7 in NVDA or Control+Option+U in VoiceOver on a Mac. Read the list from top to bottom as if you had never seen the page. Mark every entry where you cannot say where it goes, every group of identical entries, and every entry that is just an address, a file name or the word link.
Step 2
Rewrite vague links so the words name the destination
Move the link onto the words that describe where it leads, instead of adding a separate phrase to click. "To see our prices, click here" becomes "See our boiler servicing prices". Put the most distinctive word first, keep it to a short phrase rather than a whole sentence, and drop filler such as "click", "link to" or "go to", because screen readers already announce that it is a link and touch users do not click.
Step 3
Fix repeated Read more links on cards and listings
On blog lists, product grids and service cards, make the card heading itself the link and remove the separate "Read more", or keep the visible button and add visually hidden words so it reads "Read more about winter boiler checks". If the whole card must be clickable, link the heading and stretch its clickable area across the card with a CSS pseudo-element, rather than wrapping every part of the card inside one enormous link.
Step 4
Give image and icon links a text name
For a linked image, write alt text that states the destination or action, not the picture:
a linked logo becomes "Harbour Plumbing home page", not "logo". For icon links such as social profiles,
basket or search, add visually hidden text inside the link or an aria-label, and mark the
SVG icon itself with aria-hidden="true". Then check the links list again to confirm no entry
is announced as a bare "link" or an address.
Step 5
Merge duplicate links that go to the same place
Product and article cards often have three links to one address: the image, the
title and a button. Each adds a stop for keyboard users and a repeat in the links list. Wrap the image
and title in a single link where the design allows, or take the image link out of the tab order with
tabindex="-1" and hide it from screen readers with aria-hidden="true", leaving
the text link as the only one announced.
Step 6
Warn about downloads, new tabs and other sites
When a link opens a file, include the type and size in the link text, for example "Price list (PDF, 240 KB)", so people know before they select it. If a link opens a new tab or window, say so in visible text or with an icon that has a hidden text alternative. Better still, open ordinary links in the same tab, which is the behaviour visitors expect and can override themselves.
Step 7
Keep the accessible name matching the visible words
Search the templates for aria-label on links. Where the label replaces
the visible text with different wording, either delete it and improve the visible text, or rewrite it
so it starts with exactly the words on screen, such as visible "Read more" with a label beginning "Read
more about". This keeps voice control users able to say what they see, and meets WCAG 2.5.3 Label in
Name.
Before and after: rewriting common patterns
| Before | After | Why it is better |
|---|---|---|
| For opening hours, click here. | See our opening hours. | The link words are the destination. |
| Download the menu here. | Download the lunch menu (PDF, 180 KB). | Names the file and warns about the format. |
| Read more (under every blog card) | Heading link: How often should a boiler be serviced? | Unique, and one link per card. |
| https://www.example.co.uk/terms | Read our terms of sale. | Readable aloud and in a list. |
| More info beside three plans | Compare the Standard plan, Compare the Premium plan โฆ | Each link is distinct. |
| A magnifying-glass icon, no text | Icon plus hidden text "Search the shop" | Has a name for screen readers and voice users. |
When you rewrite, resist stuffing keywords into links. "Cheap emergency plumber Northfield plumbing services" is no easier to scan than "click here" and reads as spam to people and search engines alike. The goal is the shortest phrase that would make sense if someone read it on its own.
Markup for the tricky cases
Visually hidden extra words
This class hides text from sight but keeps it in the accessible name. Most themes already include
one, often called screen-reader-text, sr-only or visually-hidden.
.visually-hidden {
position: absolute !important;
width: 1px; height: 1px;
padding: 0; margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
<a href="/blog/winter-boiler-checks/">
Read more<span class="visually-hidden"> about winter boiler checks</span>
</a>
Put the hidden words after the visible ones, so the accessible name still begins with "Read more" and voice control commands keep working.
A card where the heading is the only link
<article class="card">
<img src="/img/boiler.jpg" alt="">
<h3><a class="card-link" href="/blog/winter-boiler-checks/">Winter boiler checks</a></h3>
<p>Five things to do before the first cold snap.</p>
</article>
.card { position: relative; }
.card-link::after {
content: "";
position: absolute;
inset: 0;
}
The whole card is clickable, but screen readers and the Tab key meet one link with a clear name. The
image has empty alt text because the heading already says what it shows; see fixing
alt text for when that is right. Keep any other interactive items in the card, such as a wishlist
button, above the stretched area with position: relative and a higher z-index.
An icon-only social link
<a href="https://www.example.com/harbourplumbing">
<svg aria-hidden="true" focusable="false" width="24" height="24">...</svg>
<span class="visually-hidden">Harbour Plumbing on Facebook</span>
</a>
For more on when to reach for aria-label instead of hidden text, and the mistakes that
make ARIA names worse, see fixing ARIA labels.
Where vague links come from on each platform
- WordPress. "Read more" and "Continue reading" links on archive pages come from the theme's excerpt or more-tag settings. Many well-built themes already append the post title in hidden text; if yours does not, the fix belongs in the theme or a child theme rather than in each post. In the block editor, the Read More block and the Query Loop block control this text.
- Shopify. "View all", "Shop now" and "Learn more" buttons in banners and collection sections usually take their wording from section settings in the theme editor, so you can change them without code. Product cards in collection grids often contain duplicate image and title links in the theme's card snippet.
- Page builders and email tools. Button widgets default to text such as "Click here" or "Button". Change the default in the builder's global settings where you can.
- Hand-written content. The biggest source is simply writing habit. A short line in your style guide saying "link the words that describe the destination" prevents most of it.
Edge cases
Links that look like buttons, and buttons that look like links
If it takes the visitor to another page or file, it is a link, whatever it looks like. If it performs
an action on the current page, such as adding to the basket or opening a panel, it should be a <button>.
Screen readers announce the two differently, and users rely on that to know what will happen.
Email addresses and phone numbers
A link whose text is an email address or phone number is acceptable, because the text is the destination. "Email us" or "Call 01234 567890" is equally clear.
Legal citations and references
In long documents with many references, short link text such as a footnote number is common. Give footnote links a hidden label such as "Footnote 3", and link back from the note to where it was cited.
Link colour and underlines
Links inside paragraphs need to stand out from the surrounding text by more than colour alone, unless the colours differ strongly and another cue appears on hover and focus. Keeping the underline is the simplest way to pass. Contrast ratios are covered in fixing colour contrast.
1. Is "click here" an accessibility failure?
It can be. Under WCAG 2.4.4, a link passes at level A if its purpose is clear from the link text together with its surrounding sentence, paragraph, list item or heading. A lone "click here" in a sentence that explains the destination may technically pass, but it still fails people who scan a list of links, and it gives voice control users nothing clear to say. Rewriting it so the link covers the words describing the destination is quick and removes any doubt.
2. Are Read more links bad for SEO?
They waste an opportunity rather than cause harm. Google uses the words in and around a link to understand the page it points to, and its guidance asks for descriptive, concise anchor text. Dozens of identical Read more links tell it little about each article. Making the article title the link, or adding the topic to the link text, helps search engines and screen reader users at the same time, without any keyword stuffing.
3. Should I use aria-label to fix vague links?
Only with care. An aria-label replaces the visible text as the link name, so if it says something different from what is on screen, voice control users cannot activate the link by saying what they see, which fails WCAG 2.5.3 Label in Name. If you use it, start it with the exact visible words. Usually it is simpler and more robust to improve the visible wording or add visually hidden words after it.
4. How long should link text be?
Long enough to make sense on its own and short enough to scan, which in practice is usually two to eight words. A whole sentence as a link is hard to read in a links list and gives a very large click target that people hit by accident while scrolling on phones. Put the most distinctive words first, because many people only hear or read the start of each link before moving on to the next.
5. Do I need to say a link opens in a new tab?
WCAG level AA does not strictly require it, but warning people is good practice and is recommended in W3C techniques. An unexpected new tab disorientates screen reader users and breaks the back button for everyone. The best option is to open ordinary links in the same tab. Where a new tab is genuinely useful, such as a help page opened during checkout, add visible text or an icon with a hidden text alternative saying it opens in a new tab.
6. Can two links have the same text?
Yes, if they go to the same place. Two links reading Contact us that both go to the contact page are fine. The problem is identical text for different destinations, such as three Learn more links that each go to a different service. In a links list those are indistinguishable. Either make the visible text distinct, or add hidden words so each accessible name is unique while the visible design stays the same.
7. What should alt text say when an image is a link?
It should describe where the link goes or what it does, not what the picture looks like. A linked company logo in the header should say something like the company name followed by home page. A product photo linking to the product page can use the product name. If the same link already has text beside it inside the same anchor, the image can have empty alt text so the name is not read twice.
The Accessibility Audit tests your page against WCAG 2.2 level AA and lists each finding with the element that failed and the success criterion behind it, including links with no text or duplicate vague text.
Open Accessibility Fixes โ