In short
Internal links are how Google finds most of the pages on your site and how it learns what each of them is about. Write descriptive anchor text, link from strong pages to the pages you care about, and make every link a plain <a href>. A page with no internal links pointing to it is an orphan page: find it by comparing your crawl with your sitemap, analytics and logs, then link it, merge it or remove it.
Why internal links matter
Internal links do three jobs at once. They help Google find pages, they tell Google what those pages are about, and they show which pages you consider important.
Discovery
Google's starter guide is direct: “Google primarily finds pages through links from other pages it already crawled.” It adds that “the vast majority of the new pages Google finds every day are through links”. A new page that nothing links to has to be found some other way, through the sitemap, an external link or a manual request, and it starts life without any context from your own site.
Context
The anchor text and the words around a link describe the target before anyone opens it. Google: “With appropriate anchor text, users and search engines can easily understand what your linked pages contain before they visit.” A link with the anchor trail running shoes says far more about https://example.com/shoes/trail/ than a link that says click here.
Importance
Google describes links as a signal, not just a path: “Google uses links as a signal when determining the relevancy of pages and to find new pages to crawl.” In practice, the pages you link to from your home page, your menu and many relevant articles are the ones you are telling Google matter most. Pages buried deep, with one weak link, are telling the opposite story. Keep this in proportion, though. Google also says: “We have many ranking signals, and PageRank is just one of those.” Internal links help good pages get found and understood; they do not rescue weak content.
/old-sale/ can be reached by following links from the home page; the orphan is known only from the sitemap.What Google officially says
“Every page you care about should have a link from at least one other page on your site.”
Google Search Central — Link best practices for Google“Think about what other resources on your site could help your readers understand a given page on your site, and link to those pages in context.”
Google Search Central — Link best practices for Google“If your site's pages are properly linked, Google can usually discover most of your site.”
Google Search Central — Learn about sitemaps. Google defines it: “Proper linking means that all pages that you deem important can be reached through some form of navigation, be that your site's menu or links that you placed on pages.”Three more statements frame the whole lesson:
- “There's no magical ideal number of links a given page should contain.”
- “A sitemap helps search engines discover URLs on your site, but it doesn't guarantee that all the items in your sitemap will be crawled and indexed.”
- “Links can provide more context on a topic, both for users and search engines, which may help demonstrate your knowledge on a topic.”
What makes a link crawlable
A link only helps if Google can read it. The rule is short: “Generally, Google can only crawl your link if it's an <a> HTML element (also known as anchor element) with an href attribute.” And the flip side: “Most links in other formats won't be parsed and extracted by Google's crawlers.”
- Crawlable:
<a href="/shoes/trail/">,<a href="https://example.com/shoes/trail/">, and an<a href>that also has anonclickhandler. - Not reliable:
<span href="…">,<a onclick="goto('/shoes/')">withouthref,<a href="javascript:…">, buttons anddivs that navigate with script.
JavaScript itself is not the problem. “Links are also crawlable when you use JavaScript to insert them into a page dynamically as long as it uses the HTML markup shown above.” The risk is links that exist only after a click, a scroll or a script event that Googlebot never triggers. Google's advice for script-inserted anchors: “If you are using JavaScript to insert anchor text, use the URL Inspection Tool to make sure it's present in the rendered HTML.” Rendering, raw versus rendered HTML and framework routers are covered in depth in the lesson "JavaScript SEO and rendering".
How to write anchor text
“Anchor text (also known as link text) is the visible text of a link.” Google's standard for it fits in one sentence: “Good anchor text is descriptive, reasonably concise, and relevant to the page that it's on and to the page it links to.” The examples below are Google's own, from its link best practices page.
✕ Bad
<!-- empty link text -->
<a href="https://example.com"></a>
<!-- too generic -->
<a href="https://example.com">Click here</a> to learn more.
<!-- empty alt on an image link -->
<a href="/add-to-cart.html"><img
src="enchiladas-in-shopping-cart.jpg"
alt=""/></a>
<!-- chained links -->
I've written about cheese
<a href="/page1">so</a> <a href="/page2">many</a>
<a href="/page3">times</a> …
- Nothing for people or Google to read
- "Click here" makes no sense on its own
- Links run together, no surrounding text
✓ Better
<!-- descriptive -->
<a href="https://example.com/ghost-peppers">
ghost peppers</a>
<!-- specific, in a sentence -->
For a full list of cheese available for
purchase, see the <a href="…">list of
cheese types</a>.
<!-- alt text works as anchor -->
<a href="/add-to-cart.html"><img
src="enchiladas-in-shopping-cart.jpg"
alt="add enchiladas to your cart"/></a>
<!-- links spaced out with context -->
… who can forget the <a href="/blue-cheese-vs-gorgonzola">
controversy over blue cheese and
gorgonzola</a>, the <a href="/worlds-oldest-brie">
world's oldest brie</a> …
- Tells the reader what is behind the link
- Makes sense when read out of context
- Each link has its own words around it
The rules, one by one
- No empty links. If an
<a>has no text, Google has a fallback: “As a fallback, Google can use the title attribute as anchor text if the <a> element is for some reason empty.” Treat it as a safety net, not a method. Visible text helps people too. - Image links need alt text. “For images as links, Google uses the alt attribute of the img element as anchor text, so be sure to add descriptive alt text to your images”. An icon link with
alt=""is effectively an empty link. - Not generic. Google's test: “Try reading only the anchor text (out of context) and check if it's specific enough to make sense by itself.”
Read more,here,this articleandwebsiteall fail it. - Not weirdly long. Google's example wraps a whole sentence about a shop's grand re-opening in a link; the better version links only the shop's name and the invitation. Link the words that name the target, not the whole paragraph.
- No keyword stuffing. “Write as naturally as possible, and resist the urge to cram every keyword that's related to the page that you're linking to”. Google reminds you in the same place that keyword stuffing violates its spam policies.
- Mind the sentence. “the words before and after links matter, so pay attention to the sentence as a whole.” And: “Don't chain up links next to each other; it's harder for your readers to distinguish between links, and you lose surrounding text for each link.”
Anchor variety in practice
Real sites link to one page from many places, so anchors naturally vary: trail running shoes, our trail shoe range, shoes for muddy trails. That is healthy. Two patterns are not. The first is the identical exact-match anchor on hundreds of links, usually from a plugin that auto-links keywords. The second is the same anchor pointing to two different pages, which blurs which page is meant to rank for that phrase. That second problem is a common cause of the issues described in the lesson "Keyword cannibalisation".
Types of internal links and where to place them
Not every link says the same thing. A link in the middle of a relevant paragraph is a recommendation; a link repeated on every page in the footer is part of the furniture. Both are useful, for different jobs.
Contextual links in the main content
These are the links Google's guidance is mostly about: links placed in the body text, with descriptive anchors and relevant words around them. They carry the most context about the target page, and they are the best way to connect related topics. Add them where a reader would actually want to go next, not in a block of "SEO links" at the bottom.
Navigation: main menu and breadcrumbs
The main menu links your key sections from every page, which keeps them shallow and well linked. Breadcrumbs link each page to its parents and make the hierarchy explicit. Because these links repeat sitewide, they say less about any single page than a contextual link does. Menu design and breadcrumb markup are covered in the lesson "Navigation and breadcrumbs".
Footer links
Use the footer for utility pages (contact, delivery, privacy, terms) and a handful of top sections. A footer with dozens of keyword-rich links to city or product pages adds clutter and little context, and it is a pattern many sites have cut back for good reason.
Related-content modules
Related posts, related products and "more in this category" blocks are the most scalable way to make sure every page receives links. Two conditions make them work. Pick the related items by topic or category, not at random or by date only. And output them as real <a href> links in the HTML, not as a widget that loads on scroll or after a click.
Hub and category pages
A hub page lists and links all the pages on one topic, and each of those pages links back to the hub. This gives every child page at least one strong, relevant inbound link and keeps it a short click path from the home page. How to plan hubs from your keyword research is the subject of the lesson "Structure from keywords: hubs and depth".
Pagination
On blogs and category listings, older items are often linked only from page 2, 3 and beyond. Use normal <a href> links to each page of the series. Google no longer uses rel="prev" and rel="next", so those attributes do not replace real links. Details are in the lesson "Pagination and faceted navigation".
| Link type | Where | Best for | Watch out for |
|---|---|---|---|
| Contextual | Body text of articles and pages | Context, topical connections, pushing new pages | Generic anchors, chained links, forced links |
| Main menu | Header, every page | Top sections and money pages | Mega-menus with hundreds of links; JS-only menus |
| Breadcrumbs | Above the content | Hierarchy, links up to parents | Breadcrumbs that skip levels or point to redirects |
| Footer | Bottom, every page | Utility pages, a few key sections | Keyword-stuffed link dumps |
| Related content | End of posts, product pages | Giving every page inbound links at scale | Random picks; links loaded only on scroll or click |
| Hub / category | Section landing pages | Grouping a topic, short paths to children | Hubs that list only the newest items |
| Pagination | Bottom of listings | Reaching older items | "Load more" buttons with no href |
| XML sitemap | Separate file | Discovery hint, not a link | Treating it as a substitute for linking |
How many internal links a page should have
There is no quota. Google: “There's no magical ideal number of links a given page should contain.” It follows with a practical test: “However, if you think it's too much, then it probably is.”
In practice, ask what the reader needs. A long guide can carry many contextual links because it covers many subtopics. A product page needs links to its category, a few related products and the key help pages. If a page lists hundreds of links in its navigation, readers struggle to find anything and each link says little. Do not add links to "pass value", and do not strip useful links to "keep value". Link where it helps someone understand or act.
Linking from strong pages to new and important pages
Some pages on your site are much better placed to pass discovery and context than others. Typically these are:
- the home page and the main section hubs;
- pages with many external links (Search Console, Links report, "Top linked pages");
- pages with steady search traffic (Search Console, Performance report).
When you publish or upgrade a page that matters, link to it from those pages, not only from a new blog post that nobody has found yet. A simple routine for every new page:
- Add it to its hub or category. This gives it a permanent, relevant parent link.
- Link to it from a few existing pages on the same topic, ideally ones that already get traffic or links, with descriptive anchors.
- Link out from it to its hub and related pages, so it is part of the cluster rather than a dead end.
- Add it to the XML sitemap with an accurate
lastmod. The lesson "XML sitemaps" covers the details.
Also watch click depth, the number of clicks from the home page to a page. Keep important pages a few clicks away. Pages that sit many clicks deep, reachable only through long pagination, tend to be crawled less often and found later. Google publishes no exact limit, so treat depth as a relative signal: if your priority pages are deeper than your tag archives, fix the structure.
Orphan pages: what they are and why they happen
An orphan page is a URL that works (it returns 200) but has no internal links pointing to it from any crawlable page. A crawler that starts at the home page and follows links will never reach it. Google may still know the URL from your sitemap, an external link or an earlier crawl, but the page gets no internal anchor text, no context from related pages, and none of the importance that links from your strong pages would give it.
Google's own wording explains why large sites are prone to this: “Generally, on large sites it's more difficult to make sure that every page is linked by at least one other page on the site.” Typical causes:
- Redesigns and menu changes. A section is dropped from the menu and nothing else links to it.
- Migrations. Pages move to new URLs but the old links are not updated, or new pages are never added to templates.
- Pagination and listings. Items fall off the first pages of a category, and the later pages are not crawlable or have been cut.
- Products and posts removed from categories but left live, often discontinued or seasonal items.
- CMS-generated pages such as tag pages, attachment pages or author archives that nothing links to.
- Campaign landing pages built for ads or email, linked only from outside the site.
- Links that exist only in script events or load after interaction, so crawlers never see them.
Why the sitemap does not fix it
Listing an orphan in your sitemap helps Google discover the URL. That is all. Google says “A sitemap tells search engines which pages and files you think are important in your site”, but also that it “doesn't guarantee that all the items in your sitemap will be crawled and indexed.” A sitemap carries no anchor text and no context, and a page you call important in the sitemap while linking to it from nowhere sends mixed signals. The sitemap is a backup for discovery, not a replacement for links.
How to find orphan pages
You cannot find an orphan by crawling alone, because a crawler following links will never reach it. You find orphans by comparing the URLs your crawler found with URLs you know exist from other sources.
- Crawl from the home page. Use a crawler that follows links only, with rendering on if your site relies on JavaScript. Do not feed it the sitemap, or it will "find" orphans and hide the problem. Export every URL it reached.
- Export your XML sitemap URLs. Include every child sitemap of the index file.
- Export landing pages from your analytics and from the Search Console Performance report (Pages tab) for a long period, so pages with occasional traffic are included.
- Extract URLs from server logs that Googlebot or users requested. Logs often reveal old URLs Google still crawls that no list contains. How to collect and parse logs is covered in the lesson "Server log analysis".
- Compare. Normalise the URLs first (protocol, host, trailing slash, lowercase if your site is case-insensitive), then take everything in steps 2–4 that is not in step 1.
- Filter. Remove URLs that redirect, return 404 or 410, carry
noindex, canonicalise elsewhere or are just parameter variants. What remains are real orphans.
A note on crawl size: if your crawl was capped and stopped before the end of the site, pages it did not reach will look like orphans. Only trust the comparison when the crawl covered the whole site, or limit it to the sections the crawl finished.
How to fix orphan pages
Not every orphan deserves a link. Decide page by page:
Link itThe page is useful and should rank. Add it to its hub or category, and add contextual links from related pages with descriptive anchors.
Merge itIt overlaps a stronger page. Move any unique content into that page and 301-redirect the orphan to it.
Remove itIt is obsolete or empty. Return 404 or 410 and take it out of the sitemap.
Leave it unlinkedIt must exist but not appear in search, such as an ad landing page. Add noindex and drop it from the sitemap.
After fixing, re-run the comparison. Then stop orphans coming back: make templates add new pages to their category automatically, keep related-content modules on, and review internal links as part of every redesign or migration. Redirect mapping during a move is covered in the lesson "Redirects and site migrations".
Check the internal links on your site
OurSEO Tools runs a 69-point checklist that includes internal linking, plus a technical crawl of up to 1,000 pages with status code, canonical and indexability per URL, so broken and redirected link targets show up in one run.
Common mistakes
- ✕nofollow on internal linksAdding
rel="nofollow"to links to your own login, cart or filter pages does not "save" value for other pages. Google's advice is to “Use nofollow only when you don't trust the source”, and you trust your own site. To keep a page out of search usenoindex; to stop crawling use robots.txt. - ✕Links to redirected URLsAfter a migration, menus and old articles still point to old URLs. Each click and each crawl takes an extra hop. Update links to the final
200URL. - ✕Links to 404 pagesBroken internal links waste the visit and the crawl. Fix the target or remove the link. The lesson "Status codes, soft 404, 410" explains the status codes involved.
- ✕Links to non-canonical URLsInternal links with
?utm_source=, session IDs or the non-preferred host send signals to duplicates. Link to the canonical URL every time. - ✕"Read more" everywhereA blog index where every link says
Read moregives Google nothing to work with. Link the post title, or write a descriptive anchor. - ✕Footer link dumpsDozens of sitewide keyword links in the footer add little context and look manipulative.
- ✕Links only in script events
onclickhandlers ondivs or buttons, "load more" withouthref, menus built only after interaction. - ✕Relying on the sitemapPages listed in the sitemap but linked from nowhere are orphans, whatever the sitemap says.
Internal link audit step by step
- Crawl the whole site from the home page, following links only, with JavaScript rendering if needed.
- Export all internal links with source URL, target URL, anchor text, status code of the target and any
relvalue. - Fix links to 3xx and 4xx targets. Point them at the final
200URL, or remove them. - Fix links to non-canonical targets: parameters, tracking tags, the wrong host or protocol.
- Count inbound internal links per page. Pages with zero or one link that you care about need more, ideally from hubs and pages with traffic.
- Check click depth of your priority pages and bring the deep ones closer through hubs and contextual links.
- Review anchors: empty links, image links with empty
alt, generic text, and the same anchor pointing to different pages. - Find and fix orphans with the sitemap, analytics and log comparison above.
- Remove internal
nofollowunless there is a specific reason for it. - Spot-check rendered HTML in URL Inspection for templates whose links are inserted by JavaScript.
- Re-crawl to confirm the fixes, and repeat after every redesign, migration or large content release.
FAQ
Is a page in the sitemap but with no internal links still an orphan?
Yes. Google can discover it from the sitemap, but it gets no internal anchor text or context, and Google says a sitemap “doesn't guarantee that all the items in your sitemap will be crawled and indexed.” Link to it or decide it should not exist.
Should I use nofollow on internal links?
Almost never. It does not move value to other pages, and it can stop Google from discovering pages through those links. Use noindex or robots.txt for pages you want out of search or out of the crawl.
How many internal links per page is too many?
There is no fixed number. Google says “There's no magical ideal number of links a given page should contain.” If a reader could not realistically use the links, there are too many.
Do links in the menu and footer count?
Yes, they are normal links that Google can crawl. They mostly help discovery and structure; contextual links in the body text add more specific context about the target.
Can I use the same anchor text for every link to a page?
You can, but natural variation is normal and safer. What to avoid is stuffing keywords into anchors and using one anchor for two different pages.
Are JavaScript links bad for SEO?
No, as long as the result is an <a> element with an href in the rendered HTML. Links that only exist as click handlers or appear after user interaction are the problem.
Sources
- Google Search Central — Link best practices for Google
- Google Search Central — SEO Starter Guide
- Google Search Central — Learn about sitemaps
Quotes checked against the official pages on 30 October 2026.