Internal Link Analyzer
Enter any URL to see its internal links split into body copy and template, grouped by destination, with the anchor text on each one and live status on the links that sit in the writing.
Short answer
An internal link analyzer reads every link on a page pointing to another page on the same site and reports the structure behind them rather than a total. The split that matters is body copy against template: a nav and a footer point at the same destinations from every page on the site, so a page can carry ninety internal links and say nothing about its own subject. This tool draws that boundary from <main>, role="main", the longest <article>, or the body with its furniture removed, and prints which one it used. It groups links by destination, lists the anchor text on each, flags generic anchors, self-links and internal nofollow, and fetches live status for the first 30 destinations linked from the writing. On-page #anchor jumps are counted separately, being navigation inside one document rather than links to another page.
The only internal link split that tells you anything
Internal link counts are quoted as one number, and the number is close to meaningless. A site with a 40-item mega menu gives every page 40 internal links before anyone has written a word, and every one of those links exists on every other page too.
| Where the link sits | What it says about this page | What it is good for |
|---|---|---|
| Nav, header, mega menu | Nothing. It is identical on every page of the site | Site architecture and crawl paths, decided once |
| Footer | Nothing, and it dilutes: a 60-link footer is 60 links from every page | Utility pages, legal, and little else |
| Sidebar, related-posts module | Something, but chosen by an algorithm rather than by an author | Discovery, and keeping older pages reachable |
| In a sentence in the body copy | That this page's subject is related to that one, in words someone chose | The relationship a crawler reads, and the anchor text you control |
Why the method is printed with the number
Where content ends and template begins is a judgment, so the tool states which boundary it drew: <main>, role="main", the longest <article>, or the body with its furniture removed. A figure whose method is hidden cannot be checked against your own reading of the page. The page word counter draws the same boundary for the same reason, so the two tools agree about what counts as this page.
Anchor text is the part you control completely
Every word of internal anchor text on your site is yours to choose, and unlike a backlink you can change it this afternoon. It is the clearest statement available about what the page being linked to is for.
- Generic anchors such as 'click here', 'read more' and 'learn more' spend the link and pass no description with it
- Screen readers commonly present links as a bare list stripped of the sentence around them, so a page of 'read more' links is unusable twice over
- The same anchor pointing at two pages tells a crawler both are the answer for that phrase, which is where most self-inflicted cannibalisation starts
- A destination reached only through an image link has the image's alt text as its anchor text, so an image with no alt passes nothing at all
- Varying the anchor naturally across pages reads better and describes more of the destination than repeating one exact phrase
Where the image case shows up
A card whose thumbnail and heading both link to the same page is fine as long as the heading names the destination. It stops being fine when the thumbnail is the only link, because then the alt text is the entire anchor. The image alt checker reports the images that are the whole content of a link and have nothing naming them, which is the same defect this tool sees from the other side.
What internal linking gets wrong, in order of how often
These are the findings this tool exists to surface, roughly in the order they turn up on a real page. None of them are visible from a link count.
| Finding | Why it happens | What it costs |
|---|---|---|
| No links in the body copy at all | The page was written in isolation and published on time | The page receives authority and passes none on. An editorial dead end |
| Internal links that redirect | A URL changed and the links behind it never did | A hop of crawl budget each, and a chain that breaks when the redirect is removed |
| Generic anchor text | Writing around the link rather than through it | The strongest signal you control, spent and passed on empty |
| rel="nofollow" on your own pages | A sculpting tactic that stopped working in 2009 | A withheld signal on your own site, in exchange for nothing |
| One anchor, several destinations | Two articles written months apart about overlapping subjects | Neither page is clearly associated with the phrase |
| Internal 404s | A page deleted or a slug corrected without a redirect | Wasted crawl, a dead end for readers, and lost equity |
The two at the top are worth separating in your head. A page with no editorial links is a writing problem and is fixed by an author. Redirecting links and internal 404s are maintenance, they arrive without anyone doing anything wrong, and they are the reason a page that was fine last year is not fine now.
What one page can tell you, and what needs a crawl
A single URL answers the outgoing half of the question: what this page supports and how well it does it. That is the right scope when you have just published something, or when you want to know what a template change did.
The incoming half cannot be answered from one page. Which pages have no inbound links, how deep from the homepage each one sits, where authority pools, which sections are cut off: those are properties of the graph rather than of any page in it, so they need the whole site read at once.
Which tool for which question
To pull the full list of URLs a site links to internally, the website URL extractor crawls from a starting page and returns what it finds. To check whether the links on a page still resolve, internal and external together, use the broken link checker. To audit who a page links out to and on what terms, the external link checker covers the other side of the same page.
How to analyze the internal links on a page
Six steps, ordered so the split that changes how every later number reads comes first. The tool runs all six; the sequence is what matters when you are checking a page by hand.
- 01
Split the body copy links from the template links
A nav and a footer link the same destinations from every page on the site, so they describe the theme rather than the page. Counting them together is why a page can report 90 internal links and have none that say anything about its own subject.
- 02
Group the links by destination
The same page linked four times from one page is one relationship, not four. Grouping shows which destinations this page actually supports, and it is the only view in which a missing link is visible.
- 03
Read the anchor text on the editorial links
Anchor text is the strongest on-page signal you control for the page being linked to. Generic phrasing such as 'click here' or 'read more' spends a link and passes no description with it.
- 04
Find the links that redirect or 404
Internal redirects accumulate after every URL change until a link points at a chain nobody remembers building. Each hop costs crawl budget, and an internal 404 drops whatever the link was passing.
- 05
Check for nofollow on your own pages
Nofollowing an internal link stopped redirecting equity anywhere in 2009. It now withholds a signal from your own site and gains nothing, so it is almost always a leftover from a tactic that no longer exists.
- 06
Look for the same anchor pointing at different pages
One phrase used for two destinations leaves neither clearly associated with it. This is the pattern behind most self-inflicted keyword cannibalisation, and it is invisible until the anchors are listed together.
Run it on a page you have just published, before you move on. Adding the links later is the thing nobody comes back to do, which is why a page with no editorial links in either direction is the single most common structural defect on a site that is otherwise well made.
What this tool checks
Body copy vs template
The split drawn from <main>, role="main", the longest <article>, or the body minus its furniture
Grouped by destination
Every internal destination once, with how many links point at it from where
Anchor text on each link
Including image alt text, which is what a crawler reads on an image link
Generic anchors
"click here", "read more" and the two dozen other phrasings that describe nothing
One anchor, several pages
The same phrase pointing at different destinations, which is where cannibalisation starts
Internal redirects and 404s
Live status on the first 30 destinations linked from the writing, HEAD retried as GET
Internal nofollow
rel="nofollow" on your own pages, which withholds a signal and redirects nothing
Self-links
Links back to the page you are on, usually a breadcrumb or a logo nobody excluded
Everything else, counted
Outbound links, subdomain links, on-page #anchor jumps and mailto, so nothing vanishes silently
The links that matter are the ones a template cannot add
Frequently asked questions
What is an internal link analyzer?
It is a tool that reads every link on a page pointing to another page on the same site and reports the structure behind them: which destinations the page links to, how many of those links sit in the body copy rather than in the nav and footer, what anchor text each one uses, whether any are nofollowed or point at redirects, and whether the destinations still resolve. It answers what this page is doing for the rest of the site, rather than only how many links it has.
Why separate body copy links from template links?
Because they mean completely different things. A nav, a footer and a sidebar link the same set of destinations from every page on the site, so they describe the template rather than the page. An in-content link is a choice someone made on this page about this subject, and it is the only kind that says one page is related to another. A page with 90 internal links and none in its copy is an editorial dead end, and a combined count hides that completely.
How does the tool decide what counts as body copy?
It looks for a <main> element first, then an element marked role="main", then the longest <article>, and falls back to the body with nav, header, footer, aside and form removed. The method it used is printed with the results, because where a page's content ends and its template begins has no single right answer and a figure without its method is not checkable. Pages that wrap their content in <main> get the most accurate split.
How many internal links should a page have?
There is no number worth quoting, and the old 100-links-per-page rule was a crawler constraint retired more than a decade ago rather than a quality threshold. The useful question is whether the body copy links anywhere at all. A long page with no editorial outgoing links receives whatever authority points at it and passes none on, which is a structural problem no link count reveals.
Does anchor text matter for internal links?
More than for external ones, because you control every word of it. Internal anchor text is the clearest statement you can make about what another page is about, and unlike a backlink you can change it in an afternoon. Generic anchors such as 'click here' and 'read more' spend the link and pass no description, and they are also read out of context by screen readers, which commonly present links as a bare list.
Why does the tool flag internal links with rel=nofollow?
Because they almost never do what the person who added them intended. Nofollow was used for PageRank sculpting until 2009, when Google changed how nofollowed links divide equity so that withholding it no longer sends it anywhere else. Nofollowing your own pages now costs a signal on your own site and gains nothing. If you do not want a page ranked, noindex it; if you do not want it crawled, the robots.txt rule is the honest tool.
Are self-links a problem?
Not usually. A breadcrumb, a logo, or a pagination control that links to the page you are already on passes nothing, and it is generally a template that was not told to drop the link on the current page. It is worth knowing about because it inflates internal link counts, and because a self-referencing anchor is a place where a description was written and wasted.
What does it mean when one anchor phrase points at several pages?
It means neither page is clearly associated with that phrase. If the same wording links to two different articles on the same site, you are telling a crawler that both pages are the answer for it, which is the mechanism behind most self-inflicted cannibalisation. Pick the page that should own the phrase, and re-word the other anchor around what makes that page different.
Why does it only check the status of body copy links?
Because a template link repeats on every page of the site, so one URL is the wrong place to learn that a footer link is broken. The status of the first 30 destinations linked from the body copy is fetched, which is where a broken or redirecting link is both more likely and more informative. HEAD is retried as GET when a server rejects it with a 405.
Why do internal redirects matter if they still work?
Because they compound. Each one costs a hop, and a hop is crawl budget spent reaching a page you could have pointed at directly. They arrive after every URL change, every http to https migration and every trailing-slash decision, and each redirect survives until someone updates the links behind it. Redirect chains also break the day someone tidies up the redirect map, which is usually years later and never on purpose.
Does the analyzer count anchor jumps like #section?
No. A link beginning with # moves within the page rather than to another one, so counting it as an internal link would inflate the total on any page with a table of contents, which is most long pages. Those are counted separately and reported alongside outbound and mailto links so nothing disappears without explanation.
How are links to a subdomain treated?
As neither internal nor external, and reported on their own. A link from example.com to blog.example.com leaves the host but not the organisation, so folding it into the internal count overstates the internal structure while calling it outbound overstates the endorsement. The tool matches hostnames after stripping www., so www.example.com and example.com are correctly the same site.
Does this crawl the whole site?
No. It reads one URL, which is what you want when you are working on one page or checking what a template change did. Site-wide internal linking is a different problem: the questions there are which pages have no inbound links at all, how deep from the homepage each page sits, and where authority is pooling. Those need a crawl of every page rather than a report on one.
Does it see links added by JavaScript?
No. It reads the HTML your server returns, which is the version a crawler processes first. A link injected by client-side JavaScript is not counted here, and may not be followed on a first pass either. If a page shows internal links in a browser and reports none here, that gap is the finding.
How is this different from a broken link checker?
A broken link checker asks whether the links on a page work, internal and external together. This one asks what the internal links are doing: where they sit, which destinations they support, what anchor text they carry, and which of the editorial ones now redirect. Status is one signal among several here rather than the whole report.
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 toolRedirect Chain Checker
Trace every redirect hop with status codes and response times. Detect loops, long chains, protocol downgrades, and 302 misuse.
Use toolPage 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 toolBroken 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 toolExternal 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 toolRobots.txt Tester
Analyze robots.txt to see which AI crawlers and search engines are blocked, find sitemaps, and identify access issues.
Use toolRobots.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 toolllms.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 toolRead up on internal and external links
A tool tells you what is wrong. These explain what to do about it.
Off-Page SEO Checklist 2026 (Free Template, Link Building + Authority + AI Visibility)
Read guideMoz DA vs Ahrefs DR: The Complete 2026 Comparison
Read guideAhrefs Review 2026: Pricing, Features & Honest Verdict
Read guideTerms this tool checks
- Internal Linking
Internal linking is the practice of connecting pages within your website using hyperlinks.
- Orphan Page
An orphan page is a page on your website that has no internal links pointing to it from any other page.
- 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.
See the internal link graph of the whole site, not one page
Orphan pages, click depth, and the sections where authority pools are properties of the whole graph, and no single URL will show you any of them. CrawlRaven crawls the site, builds the internal link graph, and joins it to Search Console so you can see which orphaned pages were earning impressions before anything linked to them.