Why internal links matter for SEO
Google says it "uses links as a signal when determining the relevancy of pages and to find new pages to crawl" (source). That gives internal links two jobs:
- Discovery. Googlebot follows links. A page with no links pointing to it (an orphan) may only be found through your sitemap, and a buried page gets visited less.
- Meaning. The words in a link, and the sentence around it, tell Google what the target page is about.
Internal links are also the one link type you fully control. You do not need anyone's permission to add them.
Step 1: Find weak and orphan pages in Google Search Console
Search Console shows you which pages need links most. Check these four places:
| Where in Search Console | What to look for | What it means |
|---|---|---|
| Performance > Pages (last 3 months) | Many impressions, few clicks, position about 8 to 20 | Google finds the page relevant but it sits low. Links can help. |
| Your sitemap vs the Performance export | URLs in the sitemap that are missing from the export | Zero impressions. Often orphaned or buried. |
| Links > Internal links > Top linked pages | Pages with 0 to 2 internal links | Your site barely points to them. |
| Indexing > Pages | "Discovered, currently not indexed" and "Crawled, currently not indexed" | Google knows the URL but did not index it. Check its referring pages with URL Inspection. |
Two limits to know. The Performance export holds at most 1,000 rows, so filter by folder on big sites. And the Links report "shows a sample of internal and external links," with tables "limited to 1,000 rows" (Links report help). Treat it as a clue. A crawl gives the exact count. Our Search Console internal links report guide shows how to read it.
Step 2: Crawl your site to confirm orphan pages
An orphan page has no internal links at all (full orphan page method). A crawler finds pages by following links from your homepage, just like Google. So a page your crawler cannot reach is a page nothing links to.
The free version of Screaming Frog SEO Spider crawls up to 500 URLs (screamingfrog.co.uk). Crawl your homepage, export the Internal > HTML list, and put three lists in one spreadsheet: the crawl, your sitemap URLs and your Search Console pages. Then flag every sitemap URL the crawl never reached:
=IF(COUNTIF(Crawl!A:A, A2)=0, "ORPHAN", "linked")While you have the crawl open, read two columns:
- Unique Inlinks: how many different pages link to this page. One or two, both from menus, is weak.
- Crawl Depth: clicks from the homepage. Our rule of thumb: keep pages that earn money within 3 clicks.
Before you add links, ask: is the page worth keeping, and is it indexable? Links to a noindexed page, a redirect or a non-canonical duplicate are wasted. Google says: "When linking within your site, link to the canonical URL rather than a duplicate URL" (source).
Step 3: Link from pages Google already shows
This is the step most guides skip. "Link from relevant pages" is only half the rule. Link from relevant pages that already get clicks or impressions. Google revisits them often, so your new link is found fast.
Our source page rule. All four must be true:
- It is seen: clicks, or a few hundred impressions, in the last 3 months.
- It is on topic: a reader would honestly want the target page next. Tip: both pages rank for at least one shared query.
- It is indexable: status 200, no noindex, canonical points to itself.
- It has a natural spot: you can point to the exact sentence where the link fits.
The quickest way to find candidates: in the Performance report, filter Query by the target page's main term and open the Pages tab. Every page listed ranks for that term. Start with the one that has the most clicks.
Step 4: Write anchor text that helps readers
Google's guidance is that anchor text should be "descriptive, reasonably concise, and relevant to the page that it's on and to the page it links to," and it lists "Click here" and "Read more" as weak examples. It also warns: "resist the urge to cram every keyword" (source).
| Weak anchor | Better anchor |
|---|---|
| To learn more, click here. | Before a long hike, waterproof your hiking boots with a wax or spray. |
| Our best waterproof hiking boots waterproofing guide boots. | Our boot waterproofing guide covers wax, spray and leather care. |
| We sell gaiters. Read more. | In deep snow, trail gaiters keep boots dry from the top. |
More examples are in our internal link anchor text guide. Three rules that cover most cases: keep anchors to about 2 to 6 words (our rule of thumb), vary the wording naturally across source pages, and never use the same anchor for two different pages.
Step 5: Use hubs and step pages
Two patterns cover most sites:
- Hub and spoke. A hub page (for example, "Hiking boots guide") links to every page on the topic. Each spoke links back to the hub. Spokes link to each other only when a reader would want that page next. See hub and spoke internal linking for diagrams.
- Step pages. When a task spans several pages, each step links to the next one ("Next: get permits") and back to the overview. The anchor names the next step, not "Next page".
How many internal links per page?
Google has no fixed number (more on the number): "There's no magical ideal number of links a given page should contain. However, if you think it's too much, then it probably is" (source).
Our rule of thumb, not Google's: give each weak target 3 to 5 new in-body links from different on-topic pages, use about one in-body link per 150 to 250 words on a source page, and stop sooner if the link would not help the reader right there.
Common internal linking mistakes
| Mistake | Fix |
|---|---|
rel="nofollow" on internal links | Remove it. Google's guide reserves nofollow for links you don't trust (source). |
JavaScript links with no href | Google "can only crawl your link if it's an <a> HTML element with an href attribute." Use real links. |
| Internal links that hit redirects | Point them to the final URL. Google advises "redirecting to the final destination directly" (source). |
| Orphans after a redesign | Crawl before and after. Compare URL lists. |
| Huge sitewide footers | Keep the footer short. Move the long list into hub pages. |
| One anchor for two different pages | Give each page its own anchor. |
The PDF covers all eight mistakes, with where to find each one in a crawl.
A short sample from the playbook (worked example)
From the fictional shop northwind-outdoors.com. All numbers are made up to show the method.
| From | To | Anchor | Placement sentence |
|---|---|---|---|
| /guides/best-hiking-boots | /guides/waterproof-hiking-boots | waterproof your hiking boots | Leather boots need care: waterproof your hiking boots every few months, and after every muddy trip. |
| /blog/day-hike-packing-list | /products/trail-gaiters | trail gaiters | On wet or snowy trails, pack trail gaiters to keep water and grit out of your boots. |
The gaiters page had been in the sitemap but had zero internal links after a theme change. Three links later, the crawl reached it at depth 2. The PDF walks through all six links and the before and after numbers.
Who this is for
- Site owners and marketers who run a WordPress, Shopify, Webflow, Wix or Squarespace site and have Search Console set up
- Small teams with a blog or guides section that has grown without a plan
- Agencies that want a repeatable internal linking audit for clients
- Anyone who just redesigned a site and wants to catch the pages that lost their links
How to use this with an AI assistant
You can run this playbook from Claude, ChatGPT, Cursor or any assistant that supports MCP. Connect SEOmatic: https://seomatic.ai/mcp, then paste one of the prompts below.
Reading and planning work on the free plan. Staging fixes for approval needs the 14-day trial. Nothing goes live until you approve it, and every change can be undone.
Updated October 2026. Works in any AI assistant that supports MCP (Claude, ChatGPT, Cursor and others).
Step 1. Connect SEOmatic: https://seomatic.ai/mcp
Step 2. Paste this prompt (replace mysite.com):
Use SEOmatic to run the Internal Linking Playbook on mysite.com.
1. Run check_site on mysite.com first, so we know Google can index the site.
2. Run connect_seomatic so I can sign in and connect Google Search Console.
3. Pull my pages from the last 3 months with gsc_performance action top_pages. Mark "weak" pages: many impressions, few clicks, average position about 8 to 20.
4. Get my full page list with site_pages action inventory. Any page in the inventory with no clicks or impressions in step 3 is a candidate orphan.
5. Run site_audit and list any broken internal links, noindex pages and canonicals pointing elsewhere. Do not add links to those pages until fixed.
6. Pick my 5 to 10 most important target pages (products and services first).
7. For each target, find source pages: use gsc_performance action query_pages with the target's main query. A good source page has clicks, is on the same topic, and is indexable. Use site_pages action crawl on each source to see its current links and where a new link fits.
8. For each pair, write a short descriptive anchor (2 to 6 words, no "click here", never the same anchor for two different pages) and the exact sentence the link goes in.
9. Show me the plan as a table: From, To, Anchor, Sentence.
10. Stage the links with task_manage action create, type internal_links, as proposals for my approval, then show them with show_approval_cards. Do not publish anything I have not approved.
11. If I approve a link and later change my mind, undo it with task_manage action rollback.What each tool does here
| Step | Tool (MCP name) | What it does | Sign-in needed? |
|---|---|---|---|
| 1 | check_site | Free first check: can Google index the homepage, a sample of up to 10 sitemap pages, top fixes. No Search Console data. | No |
| 2 | connect_seomatic | Shows the free sign-in prompt. | No |
| 3 | gsc_performance action top_pages [get_top_pages] | Top pages by clicks with impressions, CTR, position. | Yes (free) |
| 4 | site_pages action inventory [get_site_inventory] | Pages of your real site as synced from your CMS or crawl. | Yes (free) |
| 5 | site_audit | Crawl of up to 30 pages: broken internal links, noindex leaks, canonicals pointing elsewhere, dead pages and more. | Yes (free) |
| 7 | gsc_performance action query_pages [get_query_pages] | Which of your pages rank for given queries, with clicks, impressions, CTR, position. | Yes (free) |
| 7 | site_pages action crawl [crawl_page] | Title, headings, word count and links of one page. | Yes (free) |
| 10 | task_manage action create [create_seo_tasks], type internal_links | Stages the links as proposals. Never publishes on its own. | Trial or paid |
| 10 | show_approval_cards | Shows Approve / Dismiss cards in the chat. | Trial or paid |
| 11 | task_manage action rollback [rollback_seo_task] | Undoes a change that went live, restoring the stored version. | Trial or paid |
Good to know
- Reading and planning (steps 1 to 9) work on the free plan. Staging fixes for approval needs the 14-day trial ($1 card check, credited to your first payment).
- Nothing goes live until you approve it. Every change is recorded and can be undone.
- The Search Console Links report and the Page indexing reason list are not read in bulk by these tools. For those, open Search Console yourself: *Links > Internal links* and *Indexing > Pages*. To check one URL's index status, ask the assistant to use
gsc_indexingactioninspect. site_auditchecks up to 30 pages per run. For a bigger site, run it on your target pages and their source pages.
Go deeper
- GuideWhat is an internal link? The HTML, real examples and a 30-second test
- GuideHow to find orphan pages (free method)
- GuideInternal link anchor text: rules and examples
- GuideHow many internal links per page?
- GuideHub and spoke internal linking, with diagrams
- GuideHow to use the Search Console internal links report
Sources (10)
- developers.google.com/search/docs/crawling-indexing/links-crawlable
- developers.google.com/search/docs/fundamentals/seo-starter-guide
- developers.google.com/search/docs/crawling-indexing/qualify-outbound-links
- developers.google.com/search/docs/crawling-indexing/site-move-with-url-changes
- developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls
- support.google.com/webmasters/answer/9049606
- support.google.com/webmasters/answer/7440203
- support.google.com/webmasters/answer/9012289
- developers.google.com/search/blog/2022/10/performance-data-deep-dive
- screamingfrog.co.uk/seo-spider/


