Internal link checker
Check internal links on your page: anchors, nofollow, and total count
Check results
This check only covers internal links. For a full picture of your page, run a page audit.
For issues across your whole site — duplicate titles, orphan pages, broken internal links — run a site audit.
Want us to fix what we found? Our team can help.
What are internal links and why they matter
Internal links point from one page on your site to another page on the same site. They form the crawl graph search engines use to discover content, distribute ranking signals (PageRank) across pages, and help both users and bots understand which pages are important. A site with good internal linking gets indexed faster, ranks individual pages more effectively, and gives users a clearer path through the content.
What this tool checks
- Internal link count — how many links to same-origin URLs were found
- Placeholder links —
href="#",href="", orjavascript:*that don't navigate anywhere - Empty anchors —
<a>tags with no text and no image - Generic anchor text — "click here", "read more", "learn more" that give crawlers no topical signal
- Nofollow on internal links —
rel="nofollow"that blocks internal ranking-signal flow - File links without target="_blank" — PDF/ZIP/docs that open in the current tab
The role of anchor text
The anchor is the clickable text of the link. Google uses anchor text as a strong signal for what the target page is about — both your own text (for other pages on your site) and text from external sites linking to you. Descriptive anchors like "our 2026 SEO audit checklist" outperform vague ones like "click here" because they tell search engines and users what to expect before the click. Generic anchors waste a linking opportunity.
Nofollow on internal links
The rel="nofollow" attribute tells search engines not to pass ranking signals through the link. On external links, nofollow is a common and reasonable practice (comments, paid placements, untrusted content). On internal links, nofollow is almost always counterproductive — it blocks your own PageRank from flowing between your pages. Legitimate exceptions: login forms, shopping carts, and account pages that shouldn't be indexed anyway.
Good vs bad examples
Good — descriptive anchor pointing to a specific topical page:
<a href="/seo-audit-checklist">Our complete SEO audit checklist</a>
Good — image-only link with alt text (screen readers read the alt as the link label):
<a href="/about"><img src="/logo.png" alt="Seorado homepage"></a>
Good — download link correctly opening in a new tab:
<a href="/report.pdf" target="_blank" rel="noopener">2026 trends report (PDF)</a>
Bad — placeholder link that navigates nowhere:
<a href="#">Click me</a>
Bad — empty anchor (screen reader says "link" with nothing else):
<a href="/article"></a>
Bad — generic anchor text (Google gets no signal about the target):
<a href="/article-123">Read more</a>
Common mistakes
- Placeholder hrefs left from prototyping —
href="#"is fine in a Figma mockup, terrible in production. Use<button>when you need a JS handler without navigation - "Click here" for every inline link — every major SEO guide flags this; replace with text that names the destination
- Icon-only links with no alt / aria-label — the clickable target is accessible but the label isn't; screen-reader users can't tell where it goes
- Nofollow on internal links site-wide — usually a plugin misconfiguration; internal PageRank should flow freely
- PDF and ZIP links opening in the current tab — users navigate away and don't return; add
target="_blank" rel="noopener" - Orphan pages (no internal links pointing to them) — they're harder to discover. Not detected by a single-page audit; requires a full site crawl.
Frequently asked questions
<img> an alt that describes the destination (e.g. alt="Seorado homepage", not alt="logo").href="#" scrolls to the top of the page; javascript:void(0) does nothing. Users often click and nothing happens (or something unexpected happens). Screen readers announce them as links with no destination. Crawlers follow them to nowhere. If the element triggers a JS handler without navigating, the correct HTML is <button>, not <a>. If it should navigate, set a real URL.