# Internal links and the calendar that keeps them coming

A cluster plan draws 72 internal links across 18 posts that do not exist yet. The post we actually published carried two contextual links in about 1,260 words and never pointed at the feature page it was describing. This lesson sits in that gap: how to choose a target by what it answers, how the link inventory and the templates keep a blog from repeating itself, and how a calendar turns the plan into dates somebody can keep.

Claude SEO: do SEO inside Claude Code · Module 4 · 10 of 13 · 16 min

> This course is independent. It has no affiliation with Anthropic or with AgriciDaniel, who writes claude-seo, and nobody on their side reviewed it. Run with claude-seo v2.4.1 on 2026-10-03.

URL: https://seodraft.app/learn/claude-seo/internal-links-and-calendar
Learn: https://seodraft.app/learn/claude-seo.md

## What you will be able to do

- Read a cluster plan's link matrix and separate what it measured from what it inferred.
- Choose each internal link by what the target page answers next.
- Set a publishing gap you can hold, and let the calendar decide what comes after.

A cluster plan is a drawing of a blog that does not exist yet. Ours came back on 2026-10-03 with 18 posts, 72 internal links between them, no orphan page and at least three links pointing into each one. The post we had actually published five days earlier carried two contextual links in about 1,260 words and never pointed at the product page it spent four paragraphs describing. The distance between those two pictures is where internal linking is won or lost, and a calendar is what closes it, one article at a time. This lesson reads the plan, the live page and the inventory in between.

## What a cluster plan hands you

The plan arrives as a pillar, a set of spokes and a matrix of links between them. Ours disambiguated the term against current results, chose a pillar, generated 42 variants and proposed 18 posts in 5 clusters totalling about 28,800 words, after merging 5 near-duplicate terms so they would stop competing and dropping 5 that were navigational.

The link matrix is the part worth keeping. Every post receives at least three links and none is left orphaned, which is a property you can check on the drawing before any of it is written. Read it as an argument about which page supports which, and edit it with what you know about your own readers.

## Read the plan's limits before you commit a quarter

The same report named two limits of its own, and both change how much weight the matrix carries. It measured 11 keyword pairs for shared results and found between 0 and 2 shared URLs on every pair, against the threshold of 4 its own methodology requires to group two terms. The output marks which pairs were measured and which were inferred, and most of the groups came from inference about intent.

It also had no measured search volumes, because no data provider was connected: the pillar is labelled with a relative estimate rather than a number. A plan that writes down where its evidence runs out is more useful than one that reads as finished, and the honest response is to validate the pillar with real demand data before committing three months of writing.

## The published page is the measurement

Our live post is what the plan looks like after reality: two contextual links in about 1,260 words, where the content report asks for three to five per 1,000. The missing one was the obvious one. The post explains how a product distributes its connector and never links the page about that connector, which is the page a convinced reader would open next.

We added that link on 2026-10-03, in the first section, where the post first calls seodraft an MCP server.

That failure is ordinary and that is the point. Links get written last, when the draft is finished and the writer wants to publish, and the ones that survive are whichever came to mind. Deciding the targets inside the brief moves the decision to the moment you are still reading the competition.

## Pages about one problem with nothing between them

The architecture report of the same audit found three pages answering the same objection with zero links among them: a blog post, a product page and a free tool, written months apart, each carrying the topic alone. Its recommendation came before any new article: add the links in both directions, then write the pillar.

Orphaned utilities are the other half of that pattern. Six free tools on the site had no blog post pointing at them, so the pages most likely to earn a link from somebody else were the hardest ones to reach from inside. A tool page with no article feeding it is a page waiting for a SERP to be generous.

## Pick the target by what it answers

The right target is the page that answers the question your paragraph just raised, and that is readable from its headings. `get_linkgraph` returns each candidate with its slug, title, description and headings, so the match can be made on content. A slug is a naming decision somebody made once, and matching on the words inside it produces links that look related to a crawler and send a reader nowhere useful.

One limit is worth knowing before you plan around it. The inventory lists the workspace's own articles, so a page you published elsewhere is invisible to it, and a link to a page the gate cannot resolve fails as broken. An absolute link to your own domain counts as external and adds nothing to the minimum, which is why a new workspace starts with that minimum relaxed. Those links belong in your repository, after the draft is delivered.

## Templates keep a blog from reading as one article repeated

The inventory also records the shape each article used, and the planner reads it to avoid repeating the last two. Our blog workspace held 22 posts on 2026-10-03 across seven templates: list, how-to, guide, case-study, comparison, answer and tools. A blog where every piece is the same numbered list teaches a reader to skim, and the rotation is a cheap way to keep the next one from looking like the last one.

Templates also change what links make sense. A comparison earns links to the feature pages it compares, a case study earns links to the tool it used, and a how-to earns a link to whatever the reader needs next. The shape and the targets are the same decision made twice.

## A calendar is a promise about the next four weeks

Scheduling takes a gap between articles and writes one entry per article with its date, its status and its term. Seven days is the default, our own blog workspace runs one per day, and the right number is the largest one you can hold for a quarter. A date also tells the next article which articles already exist to link to, because the inventory grows in the order the calendar decides.

A scheduled date is a plan and a publication date is a fact, and keeping them apart matters more than it sounds. The lesson after this one takes apart what happened to us when a calendar date reached a published page as its publication date.

## Write the two links before you write the post

Decide, inside the brief, which two pages the article will link to and which page will link back to it. Write them as full sentences with the anchor you intend, so the draft is built around them instead of having them inserted afterwards. Then set the gap in the calendar and let the queue decide what comes next, which is the part that keeps a blog connected after week three.

Your next step: open the last article you published, find the one page a convinced reader would want next, and add that link in both directions today. The inventory and the targets live at [features/internal-linking](/features/internal-linking), and the queue that keeps the dates is at [features/editorial-calendar](/features/editorial-calendar).

## Steps

### Step 1 · Draw the matrix before the posts exist (claude-seo)

Run this on the term you decided to own. The command disambiguates the term against today's results, picks a pillar, generates variants and returns a map of posts with the links between them. Treat the map as an argument about which page supports which, since the pages it describes are still unwritten.

```
/seo cluster <your pillar term>
```

What you should see: A pillar, a set of spokes and a link count. Ours returned 18 posts in 5 clusters with 72 internal links and about 28,800 words, no orphan post and at least 3 links into each one, after merging 5 near-duplicate terms and dropping 5 navigational ones.

### Step 2 · Find the pages that already fight alone (claude-seo)

Ask this of a site you already have, with the audit's architecture report open. Pages written months apart about one problem are the common case, and they usually have no links between them, so each one carries the topic by itself instead of lending authority to the others.

```
Which pages of mine answer the same question as this draft, and which of them link to each other today?
```

What you should see: A short list of pages and the links missing between them. Our audit found a blog post, a feature page and a free tool all answering the same objection with zero cross-links, and asked for the links in both directions before any new article was commissioned.

### Step 3 · Read the inventory of what you can link to (seodraft)

`get_linkgraph` lists the articles of the workspace as link targets, with the slug, the title, the description and the headings of each one. The headings are what let you match by meaning: a section that answers the question your next paragraph raises is the right target, whatever its slug happens to say. Each entry also carries the template it used, so the planner can avoid repeating the last two.

```
Run get_linkgraph and show me each target with its headings, its description and the template it used.
```

What you should see: Targets you can choose between on sight. Our blog workspace held 22 posts in the inventory on 2026-10-03, across the list, how-to, guide, case-study, comparison, answer and tools templates.

### Step 4 · Turn the plan into dates (seodraft)

`plan_topics` writes the chosen topics onto the calendar with a gap between articles, one day apart or seven or whatever you can sustain, and attaches each topic's research to its entry. A date is also what lets the next article know which articles already exist to link to, because the inventory grows in the order the calendar decides.

```
Schedule these topics with plan_topics and the gap I can hold, then show me the calendar with list_calendar.
```

What you should see: One entry per article with its date, status and term. Our blog workspace runs one post per day; a gap of seven is the default, and the right number is the one you can keep for a quarter.

### Step 5 · Check that the links resolve (seodraft)

The rules resolve every internal link against the workspace inventory and count how many the article carries. A link to a page the gate cannot resolve fails `broken-internal-link`, and an absolute link to your own domain counts as external and adds nothing to the minimum. The minimum itself lives in the profile and is clamped between 0 and 10.

```
Run run_gate and show me the internal link findings.
```

What you should see: Each unresolved link named with its target. Pages you published outside seodraft are not link targets yet, which is why a new workspace starts with the minimum relaxed; write those links in your repository after delivery.

## Checklist

- [ ] My next article names the two pages it will link to, before it is written.
- [ ] I chose each target by the heading that answers my reader's next question.
- [ ] No page of mine on this topic sits with zero links from the others.
- [ ] The calendar has a gap I can hold for a quarter, with dates on the next four weeks.
- [ ] Every internal link I wrote resolves in the gate.

## Checkpoint

### A cluster plan comes back with 72 internal links across 18 posts. What has it proven?

That the plan is connected on paper, which is worth having and is the whole claim. The 18 posts do not exist, so the 72 links are instructions for a quarter of writing. Our own plan said as much about its grouping: it measured 11 keyword pairs for shared results, found between 0 and 2 shared URLs on every pair against its own threshold of 4, and marked the clusters as inferred in the output. Read the matrix as an argument you can edit, and count the links that exist on the pages you already published, where our live post carried two.

### Your draft belongs next to an article you published years ago, outside seodraft. Can you link it?

Write the link after delivery, because the gate resolves internal links against the workspace inventory and would fail a link to a page it does not know. `get_linkgraph` lists the workspace's own articles today, so an older page of yours is invisible to it, and an absolute link to your own domain counts as external and adds nothing to the minimum. That is also why a new workspace starts with the minimum relaxed. The article reaches your repository as a draft, which is the moment to add the links your CMS can resolve.

## What this lesson said

- A cluster plan is a map of links between articles that do not exist: ours drew 72 across 18 posts with no orphan and at least 3 into each.
- The same plan measured 11 keyword pairs, found 0 to 2 shared results on each against its own threshold of 4, and marked its groupings as inferred.
- Our published post carried 2 contextual links in about 1,260 words, where the report asks for 3 to 5 per 1,000, and never linked the feature page it described.
- Choose the target by the heading that answers your reader's next question: `get_linkgraph` returns headings and descriptions for exactly that.
- The calendar sets the gap and the template rotation keeps the blog from reading as one article repeated; ours ran one post per day over 22 articles.

## Questions

### How many internal links should an article carry?

Between 3 and 5 per 1,000 words is what the content report asked of our own post, which carried 2 in about 1,260 and missed the one page a reader would have wanted next. The number matters less than the choice: every link should answer the question the paragraph just raised. In seodraft the floor lives in the profile as a minimum per article, clamped between 0 and 10, and the rules count the links that resolve against the workspace inventory. The feature page at /features/internal-linking shows how the targets are offered while the article is being written.

### How do I choose which page to link to?

By what the target answers next for the reader who is in this paragraph. A slug is a naming decision somebody made once and says little about what a page covers now, so matching on words in the URL produces links that look related and send nobody anywhere useful. `get_linkgraph` returns the title, the description and the headings of every candidate so the match can be made on content. When two of your pages answer the same question, the fix is one link in each direction, which our audit asked for on three pages that had none.

### How often should I publish?

At the gap you can hold for three months, which is the only cadence that produces a linked blog instead of a burst. The scheduler takes that gap as a parameter, one day or seven or anything else, and writes one entry per article with its date. Our own blog workspace runs one post per day over an inventory of 22 articles, each recorded with the template it used so the planner avoids repeating the last two shapes in a row. The calendar is at /features/editorial-calendar, and a scheduled date is a plan rather than a publication: the human still approves.

Next lesson: [Schema and publishing](https://seodraft.app/learn/claude-seo/schema-and-publishing)
