---
title: "<a> for an internal route (next/internal-anchor)"
description: "A plain anchor reloads the whole app and skips prefetching; <Link> navigates client-side."
url: http://localhost:4173/rules/next/internal-anchor
updated: 2026-11-11
---

# <a> for an internal route

> `next/internal-anchor` is a vetd rule. It flags: <a> for an internal route. It runs on every `check`, together with the TypeScript check.

| Fact | Value |
| --- | --- |
| Rule id | `next/internal-anchor` |
| Severity | warning |
| Group | SEO, accessibility and security |
| Tags | performance, nextjs-16 |

## Why it matters

A plain anchor reloads the whole app and skips prefetching; <Link> navigates client-side.

## How to fix it

Use <Link href="…"> from next/link (keep <a> for downloads and external URLs).

## Credit

Based on work by:

- [Next.js team](https://nextjs.org): The Link component prefetches routes and navigates client-side, which plain anchors do not.

## References

- [Link Component](https://nextjs.org/docs/app/api-reference/components/link), Next.js
- [Linking and Navigating](https://nextjs.org/docs/app/getting-started/linking-and-navigating), Next.js

## See it

Demos in the vetd Lab:

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

## Related rules

- [`next/unknown-route`](http://localhost:4173/rules/next/unknown-route.md)

## Get this text from vetd

MCP: call `explain` with `{ "diagnosticId": "next/internal-anchor" }`. CLI: `npx vetd explain next/internal-anchor`.

---

[All 92 rules](http://localhost:4173/rules.md) · Previous: [`next/html-lang`](http://localhost:4173/rules/next/html-lang.md) · Next: [`next/json-ld-xss`](http://localhost:4173/rules/next/json-ld-xss.md)
