---
title: "Navigation uses elements crawlers can't follow (seo/links-not-crawlable)"
description: "seo/links-not-crawlable: Google and AI crawlers only follow <a href> with a resolvable URL; javascript: hrefs, onclick handlers and clickable divs hide pages…"
canonical: https://void-design.vercel.app/rules/seo/links-not-crawlable
lastModified: 2026-09-16
---

# Navigation uses elements crawlers can't follow

`seo/links-not-crawlable` · severity **error** · category SEO · detected by `void seo` and `void audit`

## Why it matters

Google and AI crawlers only follow <a href> with a resolvable URL; javascript: hrefs, onclick handlers and clickable divs hide pages from discovery.

## How to fix it

Use <a href> (next/link <Link>) for navigation and <button> for actions. Never navigate with router.push from a div's onClick.

## Example

```tsx
// ✗ <div onClick={() => router.push('/pricing')}>Pricing</div>
// ✓
import Link from 'next/link'
<Link href="/pricing">Pricing</Link>
```

## References

- https://developers.google.com/search/docs/crawling-indexing/links-crawlable

## More seo rules

`void seo` reports 60 rules in this category. What search engines need from the raw response: status codes, titles and descriptions in <head>, self-referencing canonicals, one h1, crawlable links, Open Graph, icons, robots.txt and a sitemap with real dates.

- `h1-title-mismatch` <h1> and <title> share little wording — [seo/h1-title-mismatch](https://void-design.vercel.app/rules/seo/h1-title-mismatch)
- `heading-skip` Heading levels skip (h2 → h4) or headings are empty — [seo/heading-skip](https://void-design.vercel.app/rules/seo/heading-skip)
- `img-alt-missing` <img> without an alt attribute — [seo/img-alt-missing](https://void-design.vercel.app/rules/seo/img-alt-missing)
- `img-alt-quality` Alt text is a filename, a generic word, or overly long — [seo/img-alt-quality](https://void-design.vercel.app/rules/seo/img-alt-quality)
- `link-text` Links with generic or empty text — [seo/link-text](https://void-design.vercel.app/rules/seo/link-text)
- `broken-links` Internal links return 4xx/5xx (or go through redirects) — [seo/broken-links](https://void-design.vercel.app/rules/seo/broken-links)
- `trailing-slash` Both trailing-slash and non-slash URLs serve 200 — [seo/trailing-slash](https://void-design.vercel.app/rules/seo/trailing-slash)
- `hreflang-invalid` hreflang uses invalid codes or relative URLs — [seo/hreflang-invalid](https://void-design.vercel.app/rules/seo/hreflang-invalid)

Detected by `void seo` and `void audit`. Explain it in a terminal: `void rules seo/links-not-crawlable`
