---
title: "Link crawlers can't follow (seo/crawlable-link)"
description: "An <a> with a javascript: href, or one that navigates in onClick with no real href, has no URL for crawlers (Lighthouse: links are not crawlable)."
url: http://localhost:4173/rules/seo/crawlable-link
updated: 2026-11-11
---

# Link crawlers can't follow

> `seo/crawlable-link` is a vetd rule. It flags: Link crawlers can't follow. It runs on every `check`, together with the TypeScript check.

| Fact | Value |
| --- | --- |
| Rule id | `seo/crawlable-link` |
| Severity | warning |
| Group | SEO |
| Tags | seo, lighthouse |

## Why it matters

An <a> with a javascript: href, or one that navigates in onClick with no real href, has no URL for crawlers (Lighthouse: links are not crawlable).

## How to fix it

Put the destination in href (use <Link href>), or use a <button> for actions.

## Credit

Based on work by:

- [Google Search Central](https://developers.google.com/search): Google follows only anchors with a resolvable href; javascript: links and click handlers are not crawlable.

## References

- [SEO Link Best Practices for Google](https://developers.google.com/search/docs/crawling-indexing/links-crawlable), Google Search Central
- [<a> HTML anchor element](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/a), MDN Web Docs
- [Link Component](https://nextjs.org/docs/app/api-reference/components/link), Next.js

## See it

Demos in the vetd Lab:

- [Navigate with <Link>](http://localhost:4173/lab/nextjs/navigate-with-link)

## Related rules

- [`next/internal-anchor`](http://localhost:4173/rules/next/internal-anchor.md)
- [`seo/link-text`](http://localhost:4173/rules/seo/link-text.md)

## Get this text from vetd

MCP: call `explain` with `{ "diagnosticId": "seo/crawlable-link" }`. CLI: `npx vetd explain seo/crawlable-link`.

---

[All 92 rules](http://localhost:4173/rules.md) · Previous: [`seo/link-text`](http://localhost:4173/rules/seo/link-text.md) · Next: [`seo/noindex`](http://localhost:4173/rules/seo/noindex.md)
