Free tool, no account needed

Internal Link Checker

Enter any URL to find the broken internal links in its body copy. Redirects, nofollowed internal links and anchors that describe nothing are reported alongside them, template links are kept out of the way, and every row says what to do about it.

8 checks remaining today

Short answer

An internal link checker reports which of a page's own links are defective rather than counting them. This one separates the links written into the body copy from those the template repeats sitewide, requests up to 30 in-copy destinations, and lists broken links first, then redirects, nofollowed internal links and vague anchors. Links answering 401, 403, 429 or 451 are listed apart: a bot block is not a missing page.

The five things that go wrong with an internal link

Internal links fail in ways that look alike in a spreadsheet and need completely different work. The checker sorts by what it costs to leave each one alone, so the top of the table is always the thing to do first.

What the checker foundCost of leaving itWhat to do
Broken: 404, 410 or 5xxA dead end for readers, a wasted fetch for crawlers, equity thrown awayPoint the link at a live URL, restore the page, or remove the link
No answer: timed outUnknown, which is its own problemOpen it yourself. A slow server is not a missing page
Redirect: 301 or 302A round trip on every follow, and the seed of a redirect chainLink straight to the final URL
Nofollowed internal linkEquity withheld from your own page, usually by accidentDrop the rel unless you meant it; use noindex or robots.txt if indexing was the real concern
Anchor describes nothingA crawler learns nothing; a screen reader user gets a list of identical linksName the destination in the link text
Image link with no alt textThe link has no accessible name at allDescribe the destination in the image's alt attribute
Blocked: 401, 403, 429, 451Nothing. This is not a defectCheck it in a browser before touching the link

A bot block is not a broken link

The last row is the one that matters most in practice. Bulk link checkers report bot blocks as red rows, people believe them, and working links get deleted. This tool keeps them in a separate list with that warning attached.

Why the template links are kept out of the way

Most of the links on any page were not written for that page. A navigation bar, a footer and a sidebar repeat on every URL on the site, and a checker that counts them equally tells you the same thing on every page you run. Worse, one broken footer link will be reported on all of them, so the genuine finding on page forty is buried under thirty-nine copies of a problem you already knew about.

This checker draws the boundary first and checks only what is inside it. It looks for a <main> element, an <article>, or a role="main" wrapper. When a page has none of those it falls back to removing nav, header, footer, aside and form from the body, and says in the results that it did so. Wrapping your content in <main> makes the split exact, for this tool and for assistive technology.

Template links are still counted. The summary reports how many there were, which is the number worth glancing at: when a page's body copy holds three internal links and the template holds ninety, the page is a leaf on someone else's navigation rather than a node in your content.

Working through the findings in a useful order

A list of link defects is a to-do list without an order until you put one on it. This is the sequence the table already uses, and the reasoning behind it.

  1. 01

    Check a page that earns something, not the homepage

    A homepage is almost all template links, and template links are the theme's job rather than the page's. Point the checker at an article, a guide or a category page: somewhere a person wrote the links by hand, which is where the defects live.

  2. 02

    Fix the broken links before anything else

    A broken internal link costs a reader a dead end and a crawler a wasted fetch, and unlike a broken outbound link it is entirely yours to fix. Every other finding on the page can wait behind this one.

  3. 03

    Tell a bot block apart from a dead page

    A 401, 403, 429 or 451 means a crawler was turned away, not that the page is missing. Those are listed apart from the broken links for that reason. Open one in a browser before you touch the link.

  4. 04

    Shorten the redirects you link through

    An internal link pointing at a redirect works and costs a round trip every time anyone follows it. Point it at the final URL instead. This is also how redirect chains stop forming, because the second move is always another redirect added in front of the first.

  5. 05

    Decide whether each nofollow was deliberate

    Nofollow on your own pages withholds equity from yourself. Most internal nofollows arrive by template accident rather than by choice, usually on login, cart or filter URLs where a noindex or a robots rule was the tool actually wanted.

  6. 06

    Rewrite the anchors that describe nothing

    Click here, read more and this page tell a crawler nothing about the destination and leave a screen reader user with a list of identical links. Describe where the link goes instead. This costs nothing today, which is why it is last.

What this cannot tell you

One page's outgoing links are a keyhole view of a link graph. Three questions that matter need the whole site, and no single-page checker can answer them:

  • Which of your pages are orphans, with no internal link pointing at them at all. That needs every page crawled, not one.
  • Which pages are too deep, sitting five or six clicks from the homepage where crawlers arrive late and rarely.
  • Whether the pages you care about are the ones receiving the most internal links, which is the question internal linking actually exists to answer.

Those are a crawl, and a crawl joined to Search Console is what makes the answers actionable. The underlying idea, that links pass value between your own pages, is link equity, and the practice of directing it deliberately is internal linking. Until then, run this on the pages that earn you something and fix what it finds.

What this internal link checker reports

Broken internal links first

404, 410 and 5xx destinations lifted to the top of the table

Body copy split from template

Nav, header and footer links counted but kept out of the findings

Redirects called out

Internal links pointing at a 301 or 302, with the destination they land on

Nofollowed internal links

How many of a destination's links carry a rel that discards their value

Anchors that describe nothing

Click here, read more and the rest, flagged only in the body copy

Image links with no alt

Image-only links left with no accessible name for the destination

Bot blocks kept separate

401, 403, 429 and 451 listed apart, because they are not broken links

The fix on every row

What to change, not just what is wrong

What this reads, and what it cannot

The page is requested once, anonymously, from a US server with a crawler user agent, and only the HTML that came back is read. Links added in the browser by JavaScript are not in that response and are not counted, which is the same position a crawler is in on its first pass. Status is fetched for the first 30 in-copy destinations so one run cannot overload another server, and anything past that is reported as found but unchecked rather than quietly passed. What a single page cannot show you is the shape of the whole graph: which pages are orphaned, which sit too deep, and whether your most valuable pages are the best-linked ones. That is a crawl, and joining it to impressions is what the technical SEO audit does.

Frequently asked questions

What is an internal link checker?

It is a tool that reads the internal links on a page and reports which ones are defective, rather than describing how many there are. This one fetches the page, separates the links a person wrote in the body copy from the ones the template repeats on every page, requests each in-copy destination, and reports the ones that return an error, redirect, carry rel="nofollow", or use an anchor that describes nothing. Each row comes with the fix it needs.

What is the difference between this and the internal link analyzer?

They run the same crawl and answer different questions. The internal link analyzer describes the link graph: how many links, where they point, how the body copy compares with the template. This checker leads with what is wrong and what to do about it. If you want to understand a page's linking, use the analyzer; if you want a list of things to fix, use this.

Why does it only check the links in the body copy?

Because template links repeat on every page, so a broken nav link would be reported once on every URL you check and bury the links the page's author can actually act on. The tool finds the content boundary from a main, article or role="main" wrapper, falling back to stripping nav, header, footer, aside and form from the body. Template links are still counted and reported as a total, just not checked one by one.

How many links does it check per run?

It reads up to 300 destinations on a page and fetches a status for the first 30 in-copy ones. The fetch limit is there so one run cannot hammer another server. When a page has more in-copy destinations than that, the extra ones are reported as found but unchecked, so you always know the difference between a link that passed and a link nobody looked at.

Does a broken internal link hurt SEO?

Directly, less than people assume: Google does not demote a page for linking to a 404. Indirectly it costs real things. Crawl budget goes on fetches that return nothing, the equity that link was meant to pass evaporates, and a reader who hits a dead end leaves. On a large site the crawl waste is the part that matters, because every fetch spent on a dead URL is one not spent on a page you want indexed.

Should internal links ever be nofollowed?

Rarely, and almost never for the reason people think. PageRank sculpting stopped working in 2009: nofollow stopped redirecting equity to your other links and started discarding it instead. The legitimate uses are narrow, such as user-generated links in comments. For a login, cart, or faceted filter URL you almost always want a noindex tag or a robots.txt rule, which control indexing and crawling, rather than a nofollow, which only throws away the link's value.

What counts as an anchor that describes nothing?

Phrases that describe the act of clicking rather than the destination: click here, read more, this page, learn more, find out more, details, continue. They matter twice over. A crawler takes anchor text as a description of the destination and learns nothing from these, and a screen reader user who pulls up a list of a page's links sees eight entries all reading read more. The fix is to name the destination in the link text.

What is an orphan page, and will this find one?

An orphan page is one that no internal link points at, so it can only be discovered through a sitemap or an external link. This tool checks one page's outgoing links, so it cannot see the whole graph and cannot tell you which of your pages are orphans. That needs a crawl of the entire site, which is what the CrawlRaven audit does.

Why is a link reported as a redirect rather than broken?

Because it works. A 301 or 302 resolves, the reader arrives, and nothing is on fire. It is still worth fixing: every follow costs an extra round trip, and the next time someone moves that page the redirect is added in front of the existing one rather than replacing it, which is how a two-hop chain becomes a five-hop chain. Pointing the link at the final URL ends it.

Does it find links added by JavaScript?

No. It reads the HTML your server returns, which is what a crawler sees on its first pass. Links inserted in the browser are not in that response and are not counted. If the tool reports far fewer links than the page visibly has, that gap is itself the finding: a crawler may not follow those links either, or may only find them after a rendering pass that is queued and can lag by days.

Can I check a page behind a login?

No. The tool requests the URL anonymously, the same way a crawler does, so a page that needs a session returns a login page or a 401. That is the correct answer for SEO purposes, since a page a crawler cannot reach is a page that cannot be indexed, but it means the tool is no use for auditing a members area or a staging site behind basic auth.

How many internal links should a page have?

There is no number worth chasing, and any tool quoting one is guessing. What matters is whether the links are in the writing and whether they go somewhere useful. A 2,000-word guide with two in-copy internal links is a dead end that receives equity and passes none on, and that is a real finding. The same page with forty links stuffed in to hit a target is worse, because none of them means anything.

Other crawl and indexing tools

Website URL Extractor

Crawl any website and download every URL it links to as CSV, TXT, or JSON. Works straight from the live site, no sitemap required.

Use tool

Redirect Chain Checker

Trace every redirect hop with status codes and response times. Detect loops, long chains, protocol downgrades, and 302 misuse.

Use tool

404 Error Checker

Paste up to 100 URLs and find the dead ones. Hard 404s, 410s and server errors first, soft 404s that answer 200 flagged beside them, with the fix on every row.

Use tool

HTTP Status Code Checker

Check the status code of up to 100 URLs at once: 200, 301, 404, 410 or 5xx, with every redirect hop, possible soft 404s and response times.

Use tool

Website Speed Test

Test a page on mobile or desktop: real-visitor Core Web Vitals (LCP, INP, CLS) next to the Lighthouse score, with fixes sorted by time saved.

Use tool

Page Indexability Checker

Find out why a page is not indexed. Checks status codes, noindex tags and X-Robots-Tag headers, robots.txt rules, canonicals, sitemap membership, and rendered content.

Use tool

Broken Link Checker

Find links that no longer work, internal and external together. Checks up to 50 links on a page for 404 errors, redirects, and timeouts.

Use tool

External Link Checker

Audit who a page links out to and on what terms. Destinations grouped by domain, with rel nofollow, sponsored and ugc, new-tab safety, and live status.

Use tool

Internal Link Analyzer

See which internal links a page makes in its own writing and which come from the template, grouped by destination, with anchor text, nofollow and live status.

Use tool

Robots.txt Tester

Analyze robots.txt to see which AI crawlers and search engines are blocked, find sitemaps, and identify access issues.

Use tool

Robots.txt Generator

Build a correct robots.txt from presets for WordPress, ecommerce, and AI crawlers. Decide which bots to allow, add your sitemap, copy the file.

Use tool

llms.txt Generator

Build a valid llms.txt from your own pages: the H1, blockquote summary and H2 link sections the proposal specifies, checked for relative URLs and duplicates.

Use tool

HTTP Header Checker

Read every response header a URL returns, with the redirect chain timed hop by hop and X-Robots-Tag, header canonicals and caching gaps called out.

Use tool

Shopify robots.txt.liquid Generator

Build a robots.txt.liquid template that keeps Shopify's default rules in the Liquid loop and adds blocks for tag pages, vendor and type collections, filter parameters and AI crawlers.

Use tool

Shopify App Script Checker

Inventory every script tag on a Shopify product or collection page by origin: theme, Shopify platform, app and third-party. Flags async, defer and blocking scripts, sizes up to 30 external files and lists legacy ScriptTag API scripts.

Use tool

Read up on internal and external links

A tool tells you what is wrong. These explain what to do about it.

Terms this tool checks

  • Internal Linking

    Internal linking is the practice of connecting pages within your website using hyperlinks.

  • Link Equity

    Link equity (also called link juice or PageRank) is the ranking value passed from one page to another through hyperlinks.

  • Anchor Text

    Anchor text is the visible, clickable text of a hyperlink.

  • 301 Redirect

    A 301 redirect is a permanent server-side redirect that tells search engines a page has permanently moved to a new URL.

One page checked, and the other nine hundred

A single page's links are a keyhole. CrawlRaven crawls the whole site, finds the orphan pages no internal link reaches and the pages buried five clicks deep, and ranks every broken link by the impressions and sessions behind the page it sits on, so you fix the ones that cost you something first.