# Vague link text

> Links that say “click here” or “read more” tell search engines and screen readers nothing. Use text that names the destination.

_Category: Search visibility · Detector `seo` · Check `generic-link-text` · Severity: info_

Link text like “click here”, “read more”, or “learn more” carries no meaning on its own. Search engines use anchor text to understand the linked page, and screen-reader users often pull up a list of links out of context — a list of ten “read more” links is useless. AI-generated CTAs default to these generic phrases.

## Symptoms

- Multiple links reading “click here”, “read more”, “learn more”
- A screen reader’s link list is full of identical, meaningless labels
- Anchor text gives search engines no signal about the destination

## How VibeCheck detects it

The `seo` detector flags this live in the browser and reports it to the widget's Problems list — and to your coding agent over MCP.

- **Issue string:** `Vague link text`
- **Threshold:** link text matching /click here|read more|learn more|here|more|link|this/i

## Root causes

- CTA components default to generic labels
- “Read more” links after truncated cards reuse one phrase
- Link text was written for layout, not meaning

## The fix

Write link text that describes the destination, so it makes sense read on its own. If a card’s layout needs a short CTA, add a visually-hidden label or an `aria-label` that names the target.

### Steps

1. Rewrite generic links to name their destination
2. For unavoidable short CTAs, add an `aria-label` or visually-hidden text
3. Verify each link makes sense out of context

```html
<!-- vague -->
<a href="/pricing">Read more</a>

<!-- descriptive -->
<a href="/pricing">See pricing &amp; plans</a>

<!-- short CTA that still names the target -->
<a href="/pricing" aria-label="See pricing and plans">Read more</a>
```

## Framework-specific fixes

### React

Pass a descriptive label, or an `aria-label` when the visible text must stay short. Next.js `<Link>` is identical.

```tsx
<Link href="/pricing" aria-label="See pricing and plans">Read more</Link>
```

### Vue

Use descriptive slot text or bind `aria-label`.

```vue
<router-link to="/pricing" aria-label="See pricing and plans">Read more</router-link>
```

### Svelte

Write descriptive anchor text, or add `aria-label` for short CTAs.

```svelte
<a href="/pricing" aria-label="See pricing and plans">Read more</a>
```

## FAQ

### Is “click here” really that bad?

For usability and SEO, yes. Anchor text describes the destination to crawlers and to screen-reader users reading a link list. “See pricing” beats “click here” every time.

### How do I keep a short button label but still be descriptive?

Add an `aria-label` that names the destination, or include visually-hidden text. The visible label can stay short while assistive tech and crawlers get the full meaning.

## Related problems

- [Images missing alt text](https://vibecheck.wcgw.fun/fix/missing-image-alt-text.md) — Search visibility
- [No H1 heading](https://vibecheck.wcgw.fun/fix/missing-h1-heading.md) — Search visibility
- [Missing <main> landmark](https://vibecheck.wcgw.fun/fix/missing-main-landmark.md) — AI readiness
- [Unfriendly URL slug](https://vibecheck.wcgw.fun/fix/unfriendly-url-slug.md) — Search visibility

---

Fix guide from VibeCheck — https://vibecheck.wcgw.fun/fix/generic-link-text. Full site index for LLMs: https://vibecheck.wcgw.fun/llms.txt
