How to Build Internal Links for a Small but Growing Blog

Internal linking for blogs: use a worksheet and ten-step process to choose relevant destinations, write useful anchors, verify links, and track changes responsibly.

Cover image for How to Build Internal Links for a Small but Growing Blog

Internal linking for blogs comes down to three decisions for each page: does it need a link, which post should carry that link, and what should the anchor say. Google’s documentation gives the principles. It says it uses links as a signal of relevance and to find new pages, recommends that every page you care about has a link from at least one other page on your site, placed in context, and publishes no ideal number of links. The worksheet below turns those principles into a list you can fill in today. It suits a blog with a few dozen to a few hundred posts and no dedicated SEO tooling.

Copy this header row into a spreadsheet. Add one row per page you are considering, then work through the steps that follow.

Page URL | What this page is for | Primary keyword | Priority (1-3) | Inbound contextual links (observed) | How the count was obtained | Count confidence | Source page | Source paragraph or section | Proposed anchor text | Destination exists? (Y/N) | Action | Date added | Recheck date | Notes
ColumnWhat to write
Page URLThe final, published address of the page that might receive the link, the one that loads without redirecting.
What this page is forOne sentence starting “A reader lands here because…”. If you cannot finish it, the page is not ready to be linked to deliberately.
Primary keywordThe search phrase the page is meant to answer. Use it to judge relevance, not to write anchors.
Priority (1-3)1 = must be linked, 2 = should be, 3 = nice to have. Base it on what the page does for your business.
Inbound contextual links (observed)Links from inside other posts’ body text. Write “unknown” if you have not counted. Never write zero by default.
How the count was obtained“Manual” or “crawl”, the crawler’s rendering mode if you used one, and the date.
Count confidenceHigh, medium or unknown. Unknown means the count needs research before the row becomes a work item.
Source pageThe post where the link would appear. It must differ from the Page URL.
Source paragraph or sectionThe heading or sentence where the link belongs.
Proposed anchor textA short phrase, usually the destination’s own title or a natural phrase from it.
Destination exists? (Y/N)Y only if the destination is published and you have opened it. If N, record the intended destination and add no live link.
ActionAdd link, move link, fix link, or wait for destination.
Date addedThe date the row was created.
Recheck dateWhen you will reopen the row to confirm the link still works and still fits.
NotesRedirects followed, decisions made, anything that would change the answer.

Illustrative example (hypothetical, not a measured result). A blog with 40 posts might produce this row:

/blog/content-brief-template | A reader lands here to get a brief they can reuse | content brief template | 1 | 1 | manual, 2026-11-02 | medium | /blog/how-we-plan-articles | paragraph 3, "Start from the reader's question" | content brief template | Y | Add link | 2026-11-02 | 2026-12-02 | Hypothetical row. Count taken from a manual pass of body text only.

A row for a guide you have planned but not published would have Destination exists? = N, no link in the source page, and the action “wait for destination”.

Filling in the count. Search Console’s Links report can show your top internally linked pages, but it is a poor census. Google says it “isn’t a comprehensive list of every link on your site” and shows a sample. It groups pages by canonical URL, combines duplicate links, limits tables to 1,000 rows, and groups data by root domain, so a blog in a subdirectory is mixed with the rest of the domain. Values shown as ”~” or ”-” become zeros in the downloaded data. It also does not separate a link in your text from one in your navigation. Use it to see the shape of your site, then count body links yourself. For a blog under roughly 50 posts, that is our recommendation: a manual count is usually faster than reconciling an export, and you control what counts.

Work through the worksheet in ten steps

  1. Build the list you will work from. Export your post URLs from your publishing system and compare them with your XML sitemap. Open each URL that redirects and use the final address. Decide whether the audit covers blog posts only or the whole domain, and write the date and scope at the top of the sheet. Why: a stale list or a missing source type makes your universe incomplete, and then an unmeasured page looks like a confirmed gap.

  2. Write one sentence of purpose per page, then set priority. Complete “A reader lands here because…” and mark the page 1, 2 or 3. Why: you cannot link deliberately to a page you cannot describe, and deciding which pages matter is the input everything else depends on.

  3. Count inbound links from body text only. Exclude navigation, footers, sidebars, author bios, related-post modules, category and tag archives, the blog index and pagination. Record whether you counted by hand or with a crawler, the crawler’s rendering mode and the date. Write “unknown” where you cannot establish a number. Why: template links repeat on every page and say nothing about relevance, and an unknown recorded as zero sends you to fix a problem that may not exist. If you use a crawler, check its rendering mode. Screaming Frog, for example, offers a text-only mode that reads raw HTML and a JavaScript mode that renders pages, and a text-only crawl cannot see links that only appear after rendering. Its pricing page states that the SEO Spider is free and that a licence is needed to crawl more than 500 URLs (checked 30 October 2026, and likely to change).

  4. Separate thin pages from missed opportunities. A thin page has no measured in-content link from another post. A missed opportunity has links, but not in the paragraph where a reader would want the next answer. Keep them as separate states and avoid calling a contextual gap an orphan, because “orphan” usually means a page with no internal links of any kind. Why: the fixes differ. A thin page needs a new link from a sensible source; a missed opportunity needs a link moved into the right context.

  5. Rank the work by three inputs, not by count alone. Combine page value (priority), reader relevance (does an existing paragraph genuinely need this destination?) and count confidence. Treat “unknown” as a research task. Why: sorting by lowest count first promotes whatever your counting missed and pushes your most important pages down the list.

  6. Choose the source paragraph sentence by sentence. Find the sentence after which the reader’s next question is answered by the destination, and place the link inside that prose. Link content-rich pages to content-rich pages. Why: Google asks for links in context, and says the words around a link help it understand the link. A contact or sign-up page can be the right next step for a reader, so decide case by case rather than adopting a blanket rule against them.

  7. Write anchor text that describes the destination. Google’s link best practices say good anchor text is “descriptive, reasonably concise, and relevant to the page that it’s on and to the page it links to.” Prefer the destination’s own title or a natural phrase from it, and do not place two links side by side. Why: adjacent links lose the surrounding context that makes each one clear. Some guides give a word limit for anchors. Treat that as one author’s convention, not a rule. Also use real <a href> links; the same Google page says other patterns, such as script-only click handlers, are not recommended.

  8. When there is no good destination yet, record it instead of linking. Follow the rule in the next section. Why: a recorded “not yet” is recoverable, while a live broken or misleading link is easy to forget.

  9. Verify each destination before you publish the change. Open the final URL and confirm it is the page you meant, not a login wall, a different page or an error page served with a success code. Confirm the anchor still describes what is there, and note any redirect you followed. Why: a success response shows the server answered, not that the page is right. Google’s HTTP status documentation says a 2xx response does not guarantee indexing and describes soft 404s, where a page that looks like an error is served as a success.

  10. Log the action and set the next check. Record what you did and the date against each row, and set a recheck date. Reopen destinations that may have moved or been redirected. Why: without a recheck date, the worksheet becomes another audit nobody reopens. Anobee, a practitioner who published a single-site audit, suggests quarterly reviews for most blogs and monthly if you publish often. That is one author’s suggestion, not a standard. The same author suggests, for blogs over 100 posts, that every new post link to its hub and to two siblings. On a small archive that can collide with step 8, so only apply a target like that when relevant destinations exist.

When there is no good destination yet

On a 30-post blog, the honest answer to “where should this link go?” is often “nowhere yet.” Google’s guidance is to link to other resources on your site that help readers understand a page, but a small archive may not have that resource. Two failure modes are plausible:

  • The placeholder link. You plan a post, link to its future address, and the post is never published, appears at a different address or arrives months later. The link leads to an error or to content you did not intend.
  • The forced link. Rather than leave a paragraph unlinked, you point it at the nearest available page. The anchor then misdescribes the destination, which misleads readers and works against Google’s guidance on descriptive anchors.

These are reasoned hazards, not measured ones. The next section explains why no one can yet say how common they are.

The rule that prevents both: do not publish a link to a URL that does not resolve. Record the intended destination with Destination exists? = N, and add the link on the day the destination is published and checked. One more distinction matters. A new post’s outgoing links do not give that post inbound links. It still needs a link from an older post, so schedule that edit for the day the new post goes live.

What the public record on internal linking for blogs does not tell you

No first-party data covers this question. The Blog Writer has not published an audit of its own link graph or measured results from internal-link changes, so nothing here comes from our own crawls or client work. The public record has gaps too, and they affect how much weight to give any guide, this one included.

  • Placeholder and forced links have no measured frequency. The sources we reviewed do not report how often small blogs ship links to unpublished URLs, or how often anchors misdescribe their destination. That is why the previous section calls them plausible, not common.
  • No source isolates the effect of internal links. Blogs change several things at once: they publish new posts, earn links from other sites and follow seasonal demand. No source we reviewed measures what happens to a page’s search performance when only its internal links change. The one correlation we cite below, between outbound links per post and the share of stranded posts, describes how blogs are built, not what a link edit causes.
  • The multi-site evidence is narrow. The largest published crawl covers 15 SaaS blogs, taken once, from raw HTML, with a single author’s definition. It has no independent replication and no focus on blogs under 100 posts.

Two studies would settle most of this. The first: crawl a few hundred blogs with fewer than 100 posts at regular intervals for a year, using a disclosed definition of in-content links, and record how many internal links break, redirect or point to unrelated pages as the archives grow. The second: a documented before-and-after audit on one site that makes only internal-link edits, holds the publishing schedule steady, and reports clicks and impressions for edited and unedited pages over a stated window. The Blog Writer’s own Astro blog could support the first kind of audit using the published method below, but that audit has not been done, and until it is, treat every figure in this article as someone else’s observation.

What two audits show about the problem

Two published audits, each with its method disclosed, suggest that thin in-content linking is not limited to large sites. Neither is a benchmark for your blog.

In a crawl of 15 SaaS blogs on 4 September 2026, Nadia Mohamed found 3,979 of 10,426 posts (38%) with no in-content link from another post on the same blog. Her definition excludes links from category pages, tag archives, the blog index, pagination and self-links, and she discarded any target linked from more than 30% of a blog’s posts as boilerplate, a filter that can also discard some genuine body links. The rate per blog ranged from 1.4% to 67.5%. She also states that the numeric rules often repeated on this topic, such as five links per page and nothing deeper than three clicks, have no source behind them.

In a single 64-article blog crawled on 4 October 2026, Anobee reported that 27 articles (42%) had two or fewer inbound in-body links and two had none. Its most linked URL was the author page, because every article links to the author. That is why step 3 counts body links only. These two samples show that thin in-content linking was widespread at both ends of the size range. They cannot tell you your own rate.

What internal linking will not do for you

Internal links help Google find pages and understand what they are about. They carry no ranking promise. Google’s crawling documentation says pages linked from the home page may be crawled more often, but that does not mean they will rank higher. Nothing we reviewed shows that a given set of internal links produces traffic, enquiries or AI citations.

Check whether the changes made a difference

Pick a baseline date before you edit. Record clicks and impressions for the affected pages from the Performance report in Search Console over a stated window, and log each edit with its date in the worksheet. Treat later movement as context, not proof. Your blog also publishes new posts, earns links from other sites and follows seasonal patterns, so a change in clicks cannot be credited to one set of internal links.

If you would rather hand this work to a team, The Blog Writer is a managed SEO and content service whose scope includes reviewing and improving existing content. Ask what that would cover for your archive before you decide. Either way, keep the worksheet: the destinations you have checked, the links you have placed and the dates you plan to recheck them.