Say you run a small site about sourdough baking and your keyword list has these six rows in it, pulled straight from a keyword tool.
"sourdough starter not rising" 2,400 searches/mo
"why is my sourdough starter not bubbling" 720 searches/mo
"sourdough starter no bubbles" 390 searches/mo
"how to feed sourdough starter" 3,600 searches/mo
"sourdough starter feeding schedule" 880 searches/mo
"sourdough starter ratio" 1,300 searches/mo
A spreadsheet sorted by shared words puts all six under “sourdough starter” and calls it a day. A person who bakes reads two pages. The first three are one troubleshooting post, because a starter that is not rising and a starter with no bubbles are the same sick jar. The last three are one feeding guide. Two pages, six keywords, and the volume on each page is the sum of its rows.
That is keyword clustering, and it is the step most people skip between pulling a keyword list and writing a brief. Skip it and you write “sourdough starter not rising” and “sourdough starter no bubbles” as two posts, Google ranks them against each other, and both lose. Do it by shared words and you get one giant “sourdough starter” page that answers nothing well.
Claude is good at the reading half of this job, which is most of it. It is bad at the part that needs Google’s opinion, and this guide is about getting both halves right. The workflow below is the one we run with the tool we build, ContextBolt SEO, and every step says what it costs in credits.
- A cluster is one page, not one topic. Group keywords by the URL that could rank for all of them, and a 500-row list becomes 30 or 40 pages you can actually plan.
- Claude clusters by meaning, and it gets the easy cases right with no data at all. The borderline pairs are where it guesses, and Google settles those. ContextBolt SEO is a full SEO toolkit that runs inside the agent, so the SERP check and the difficulty gate happen in the same conversation as the clustering.
- Five steps. Get the list in, cluster by page, check the unsure pairs on the SERP, gate the head terms, hand the winner to a brief.
- Check the pairs Claude flags, not all 500 keywords. A pair is one page if the two top tens share three or more URLs. Ten pairs is twenty SERP lookups, and that is the whole cost of certainty.
- About 45 credits for a 500-keyword pass, 35 if you bring your own list. The 7-day free trial includes 100, so the first run is free.
What keyword clustering is, and the two ways people do it
Keyword clustering is grouping search terms that want the same page. The reason it works is that Google already did the grouping. Search “sourdough starter not rising” and “sourdough starter no bubbles” and you see mostly the same ten results, because Google has decided those two searches have one intent. Ahrefs’ own clustering guide puts it the same way, that clustering is typically done by grouping keywords with the same or similar search results. Semrush’s guide frames it as grouping terms that share one search intent and targeting them together on a single page.
Those two descriptions are the two methods, and they are not equal.
Clustering by words: Sort the list, group rows that share a phrase, name the group after the phrase. It is what a spreadsheet does and what the cheapest tools do. It is wrong in both directions at once. It merges “sourdough starter ratio” with “sourdough starter not rising” because they share three words, and it separates “not rising” from “no bubbles” because they share none. Shared words tell you two searches are about the same noun. They tell you nothing about whether one page can answer both.
Clustering by SERP overlap: Pull the top ten for every keyword, and put two keywords in the same cluster when their top tens share enough URLs. This is what the dedicated clustering tools do and it is the right idea. It is also expensive by construction, because it needs a SERP for every keyword before it can say anything, so 500 keywords is 500 lookups before the first cluster appears.
The method in this guide is the second idea at a fraction of the cost. Claude reads the list and clusters by meaning, which lands the same answer as SERP overlap on most pairs. Then the SERP is pulled only for the pairs Claude was unsure about. Meaning does the bulk work for free, and Google referees the hard calls.
Why Claude on its own gets the hard pairs wrong
Paste 500 keywords into Claude with no data connected and ask it to cluster them. The result looks good, and it mostly is. A language model is a very good reader, and reading is what separates “how to feed sourdough starter” from “sourdough starter not rising”.
The trouble is the pairs where meaning does not settle it. Is “sourdough starter ratio” part of the feeding guide, or its own page? A baker could argue either way. Google has an answer, because it ranks pages for both searches every day, and Claude cannot see that answer. It has a training cutoff and no ranking data at all, so on the borderline pairs it makes a plausible guess, and plausible guesses about page boundaries are exactly how sites end up with two thin pages fighting for one query. Finding the pairs that already do is the keyword cannibalization with Claude check, and it is the same problem read from the other end.
The fix is MCP, the open standard Anthropic introduced in late 2024 for connecting an agent to live data. Give Claude a server that can pull a SERP and it stops guessing on those pairs. It calls a tool, gets the real top ten for both keywords, counts the overlap, and decides. The reading stays with Claude. The refereeing goes to Google.
Step 1: get the whole list into one conversation
Clustering needs the list first, with a volume figure on every row, because the volume is what ranks the clusters at the end. There are three places a list comes from, and this post does not teach any of them in depth. Keyword research with Claude covers the first one properly.
Keyword ideas from seeds: In ContextBolt SEO, keyword_research takes one seed phrase and returns up to 50 related keywords with monthly volume, difficulty, cost per click and an intent label. One credit per seed. Ten seeds gets you 500 rows for ten credits. Give it the seeds by name in one message, because the tool runs once per seed you ask for and does not invent variants of its own.
Your own Search Console: search_console_performance returns the queries your site already gets impressions for, up to 100 rows a call, and it costs nothing. Ask for your top 100 queries over 90 days, then the queries for each of your five biggest pages. That list is the one most sites should cluster first, because a cluster of queries you already rank at position 20 for is a page you should fix before any page you should write.
A CSV you already have: Paste it. Claude reads a few hundred rows without trouble.
Copy this prompt
Pull keyword ideas for these ten seeds, 50 each:
sourdough starter, sourdough bread recipe, sourdough discard,
sourdough hydration, sourdough proofing, sourdough scoring,
sourdough baking schedule, sourdough flour, sourdough troubleshooting,
sourdough for beginners.
Then pull my top 100 Search Console queries over 90 days.
Keep every row in the conversation with its volume. Do not group anything yet.
The last line matters. You want the raw rows held in context, not a summary of them.
Step 2: cluster by the page that would rank
This is the step that earns the setup, and the prompt has to say what a cluster is, or you get topics instead of pages. A topic is “sourdough starter”. A page is “why your sourdough starter is not rising”. The first one is a category on your site. The second one is something you can write on Tuesday.
Copy this prompt
Cluster every keyword in the conversation into pages.
A cluster is one URL that could rank for all of its keywords.
Rules:
- Name each cluster by its head term, the keyword with the most volume.
- List every keyword in the cluster with its volume, and total the volume.
- Do not group by shared words. Group by what the searcher wants.
- Treat "best", "cheap", "vs" and "how to" as intent, not decoration.
- If you are unsure whether two clusters are one page or two,
keep them separate and add the pair to an UNSURE list at the end,
with one line on why.
Sort clusters by total volume. Cap the UNSURE list at ten pairs.
Two of those rules do most of the work. “Group by what the searcher wants” is the instruction that stops word-matching. “Keep them separate and flag it” is the instruction that turns Claude’s uncertainty into a short list you can check, rather than a confident guess buried in row 214.
The modifier rule is the one people push back on, so here is the case. “Best sourdough proofing basket” and “how to use a sourdough proofing basket” share every important word. They are two pages. One searcher is holding a credit card and one is holding a basket. A cluster that merges them will rank for neither, because a “best” search gets product roundups and a “how to” search gets tutorials, and no single page is both.
What comes back for the sourdough list looks like this near the top.
| Cluster (head term) | Keywords in the cluster | Total volume | Flagged? |
|---|---|---|---|
| How to feed sourdough starter | how to feed sourdough starter, sourdough starter feeding schedule, feeding sourdough starter twice a day, how much to feed sourdough starter | 5,650 | Unsure vs ratio |
| Sourdough starter not rising | sourdough starter not rising, why is my sourdough starter not bubbling, sourdough starter no bubbles, sourdough starter not doubling | 3,830 | Settled |
| Sourdough starter ratio | sourdough starter ratio, 1:1:1 sourdough starter, sourdough starter ratio by weight | 2,070 | Unsure vs feeding |
| Sourdough discard recipes | sourdough discard recipes, what to do with sourdough discard, easy sourdough discard recipes | 9,100 | Settled |
Thirty or forty rows like that out of 500 keywords, and a ten-line UNSURE list underneath. The flagged pair here is the one from the top of this post. Is the starter ratio its own page or a section of the feeding guide? Claude does not know, and it has said so, which is the correct output.
Step 3: settle the unsure pairs on the live SERP
Now the part only live data can do, and the part where the cost stays small because Step 2 narrowed it. For each flagged pair, pull the top ten for both head terms and count the URLs they share. serp_overview returns the top organic results for a keyword with position, domain, title and URL, one credit each, so a pair is two credits and ten pairs is twenty.
The rule we use is simple. Three or more shared URLs in the top ten means Google is ranking the same pages for both searches, so they are one page and the clusters merge. One or none means two pages, and they stay apart. Two is a judgment call, and it should go the way your site is built. A site with 40 posts merges, because it needs fewer and stronger pages. A site with 400 splits, because it can afford to be specific.
Copy this prompt
For each pair on the UNSURE list, show the top 10 results for both
head terms. Count the URLs that appear in both lists.
3 or more shared: merge the clusters and re-total the volume.
0 or 1 shared: keep them separate.
Exactly 2: keep them separate but mark the pair MAYBE.
Show me a table of pairs, shared URLs, and what you decided.
For the ratio-versus-feeding pair, say the two top tens come back sharing five URLs, all of them long feeding guides with a ratio section. Merged. The feeding cluster is now 7,720 searches a month and it is one page with a ratio heading in it, not two pages that would each get half the links.
This is the step that a spreadsheet cannot do and that clustering tools do for every keyword whether or not it needs doing. Doing it for ten pairs instead of 500 keywords is the whole economic argument of this post, and it only works because the reading pass in Step 2 was honest about where it was unsure.
Step 4: gate the head terms before you fall in love with a cluster
A big cluster is a big opportunity and also, usually, a big SERP. The feeding guide at 7,720 searches a month is going to be ranked by sites with a lot more links than a 40-post sourdough blog. Total volume ranks the clusters, and it says nothing about whether you can win any of them.
keyword_difficulty answers that for one keyword. It returns the difficulty score, the volume and the intent, and the line that actually decides it, the average number of referring domains pointing at the pages in the current top ten. Compare that average with what your own site has. If the top ten average 140 referring domains and you have 15, that cluster stays on the list and moves to the bottom of it. One credit per head term, so gate the 15 clusters you would write first and come back for the rest when those are done.
Copy this prompt
For the 15 clusters with the most total volume, run keyword difficulty
on the head term. Show volume, difficulty and the average referring
domains of the top 10.
My site has about [your referring domain count] referring domains.
Re-rank the 15 by how likely I am to reach page one, and give me the
top five as one-line briefs: page title, head term, keywords covered,
total volume.
The bracket is your own referring-domain count. If you do not know it, ask for a backlink overview of your domain first, which returns it and costs three credits. The re-rank is where the list stops being a spreadsheet and starts being a plan. The discard recipes cluster at 9,100 searches might drop to fifth because its top ten is all food publishers. The “starter not rising” cluster at 3,830 might climb to first because its top ten is forums and a decade-old blog post. That is a page you can write this week and expect to rank for.
Step 5: hand the winner to a brief
The top cluster goes into a content brief with the head term as the primary keyword and the rest of the cluster as the secondary keywords, each one mapped to a section. That is a separate job with its own data, the live top ten and your own Search Console numbers, and it is covered in content brief with Claude. The one thing worth saying here is that the brief gets the whole cluster, not the head term. Writing the feeding guide without the ratio section is how the ratio search goes to someone else.
If the list came from your own Search Console rather than from seeds, the winner is often a page that already exists. A cluster where you rank at position 18 for the head term and position 40 for three siblings is one weak page, and the brief is a rewrite. That is a cheaper win than a new page and it is the reason to cluster your own queries before anyone else’s. The same move on a rival’s keyword list is content gap analysis with Claude, where the clusters are pages you never built.
The whole thing as one prompt
Once you have run the steps by hand once, they collapse into a single instruction. This is the version worth saving.
Copy this prompt
Cluster my keywords into pages.
1. Pull keyword ideas for these ten seeds, 50 each: [ten seeds].
Then pull my top 100 Search Console queries over 90 days.
Keep every row with its volume.
2. Cluster everything into pages, one cluster per URL that could rank
for all of its keywords. Name each by its head term, total the
volume, and treat best / cheap / vs / how to as intent.
Put up to ten pairs you are unsure about on an UNSURE list.
3. For each UNSURE pair, show the top 10 for both head terms.
Merge at 3 or more shared URLs, split at 0 or 1, mark 2 as MAYBE.
4. For the 15 biggest clusters, run keyword difficulty on the head
term and show the average referring domains of the top 10.
My site has about [your referring domain count] referring domains.
5. Re-rank those 15 by likelihood of reaching page one and give me the
top five as one-line briefs.
Tell me the credits this will cost before you start.
The two brackets, your seeds and your referring-domain count, are the only things to fill in, and the last line is a habit worth keeping on every multi-step ask. The agent quotes the cost, you say go, and there is no surprise on the balance.
What it costs, in credits
Every tool above is a ContextBolt SEO tool with a fixed price, so the bill for a 500-keyword pass adds up before you start.
| Step | Tool | Calls | Credits |
|---|---|---|---|
| Pull keyword ideas | keyword_research | 10 seeds, 50 each | 10 |
| Read your own queries | search_console_performance | Up to 6 | 0 |
| Cluster by page | Claude, reading | 1 | 0 |
| Settle the unsure pairs | serp_overview | 10 pairs, 2 each | 20 |
| Gate the head terms | keyword_difficulty | 15 | 15 |
| Total | 45 |
Forty-five credits out of 1,000 a month on the $35 plan, and 35 if you paste a list you already have and skip the first row. The 7-day free trial comes with 100 credits, so the first pass is covered with room for a second. Clustering is a planning job you do a few times a quarter, not every day, and a flat monthly price with a trial in front fits that better than a per-keyword clustering tool that charges for every SERP it pulls, including the 480 that did not need pulling.
Running it with ContextBolt SEO
ContextBolt SEO is a hosted SEO MCP server. Start a 7-day free trial, paste one URL into Claude, Cursor, Codex or ChatGPT, and ask in plain language. There is nothing to install and no data vendor account to fund. The keyword, SERP and difficulty tools above are the research half of the toolkit, next to site audits, backlinks, AI visibility checks and your connected Search Console, and you never pick a tool. You describe the job and the right one runs.
Every lookup saves to your SEO Board automatically, a live dashboard where each seed’s 50 ideas and each SERP you pulled sit with the date you pulled them. The clustered table itself is the conversation’s output, so paste it into wherever you plan work. When you come back next quarter to cluster the next 500, the old lookups are on the Board, and the agent can read them back from your saved research without spending a credit on a fresh lookup. A repeated lookup does cost a credit, so ask for what you already have before you pull it again.
On the numbers, the volumes and difficulty scores are estimates from a large keyword index, decision-useful and directionally right, not a copy of Google’s own data. No third-party tool has that. For deciding whether a cluster is one page or two, and which of 40 pages to write first, an estimate that is right about the order is all you need. Where a single figure matters, read it as an estimate, the way you would read any tool’s number.
Where clustering goes wrong
Four ways, all of them common, and the first one is the reason this post exists.
Clustering by shared words: Covered above, and worth repeating because it is the default behavior of every spreadsheet and of a model that has not been told otherwise. If your clusters are named after nouns, “sourdough starter”, “proofing basket”, they are topics and you have not clustered yet.
Over-merging to make the volume look good: A 12,000-search cluster is exciting until you notice it contains a recipe, a troubleshooting question and a product roundup. Google is not going to rank one page for all three, so the number is fiction. The modifier rule in Step 2 and the SERP check in Step 3 exist to stop this, and if a cluster survives both and still looks too good, pull the SERP for its third-biggest keyword and see whether the same pages are there.
Trusting the intent label: The keyword tools return an intent for every row, informational, commercial, transactional, navigational. It is a useful hint and a bad boundary. Two informational keywords can be two pages, and Google’s own guidance on helpful content keeps coming back to whether one page serves the need, not whether two searches share a label. Use the label to split commercial from informational and then stop using it.
Clustering more than one conversation can hold: Five hundred keywords is comfortable. Five thousand is not, and the failure is quiet, because the model summarizes the rows it can no longer see and the clusters near the bottom get vague. If your list is that long, cluster it in sections by seed, then run one more pass on the head terms to merge across sections. It is more prompts and it is the honest way to do it.
The list you are left with is 30 or 40 pages, each with the keywords it will carry, the volume it could capture, a settled boundary against its neighbors, and a read on whether you can reach page one. That is what a content plan looks like when it is made of pages rather than rows, and it came from one conversation. ContextBolt SEO starts with a 7-day free trial, so the first one costs nothing.