How to build a topical map, worked on 525 real phrases
A topical map decides which pages a site needs, which belong together and which come first. The worked example here is a real file of 525 search phrases with their volumes, and every number below is counted from that file.
Before writing a single guide, I needed an answer to three questions: which topics deserve a page, which pages belong together, and which ones come first. A topical map answers all three. The example below starts from a file of 525 search phrases with Google Ads volumes for the US, dated 2026-10-22.
Four steps from seed to map
From seed topics to a topical map
keyword file · 525 phrases · 2026-10-22- Seed topics · the subjects the site can cover with its own tools, templates and data
- Expansion · every phrase people search around those subjects, each with a monthly search volume
- Clusters · phrases grouped by the need behind them; one cluster, one core page
- Map · clusters placed under pillar hubs, with one URL for each search intent
Seed topics come first: the subjects the site can cover with its own tools, templates and data. Expansion turns each seed into the phrases people actually search, each with a monthly volume. Clustering groups those phrases by the need behind them. The map then places every cluster under a pillar hub and gives each search intent exactly one URL.
In this file, expansion ended at 525 phrases, clustering at 12 clusters, and the map at 9 pillars. The rest of this page works from that output.
Clean the list before you count it
Six pasted phrases, four distinct ones
As typed: 1 string
n8n pricing, N8N Pricing; n8n cloud pricing, what is apify; apify pricing, Apify pricing
Split, trim, lowercase, dedupe
n8n pricingn8n cloud pricingwhat is apifyapify pricing
4 phrases after normalization · 1 string as typed
Phrase lists from different sources disagree on case and repeat each other. Counting before cleaning inflates every cluster. The normalizer above splits on commas, semicolons and new lines, trims, lowercases and removes repeats, in that order. The same rule fits in a few lines of JavaScript. Run on Node 26.8.2 on 2026-10-28 with the six phrases from the figure, it prints the four distinct ones:
const pasted = 'n8n pricing, N8N Pricing; n8n cloud pricing, what is apify; apify pricing, Apify pricing'
const phrases = [
...new Set(
pasted
.split(/[,;\n]/)
.map((p) => p.trim().toLowerCase())
.filter(Boolean)
),
]
console.log(phrases.length, phrases)
4 [
'n8n pricing',
'n8n cloud pricing',
'what is apify',
'apify pricing'
]
Applied to the whole keyword file, the same rule leaves 525 distinct phrases and no duplicates.
How big each cluster is
Phrases per cluster in the keyword file
Data table
| Item | phrases |
|---|---|
| SEO tools and data | 96 |
| n8n | 86 |
| Apify | 83 |
| Amazon sellers | 48 |
| YouTube research | 47 |
| AI for developers | 44 |
| AI search | 33 |
| Ad intelligence | 30 |
| Local leads | 25 |
| Data studies | 14 |
| Avatars and IndieWeb | 11 |
| Finance news data | 8 |
The three largest clusters, SEO tools and data, n8n and Apify, hold 96, 86 and 83 phrases. Those are also the three pillars the plan starts with.
Phrase count is not demand, though. The table adds up the monthly volumes in each cluster and shows its largest single phrase:
| Cluster | Phrases | Summed volume | Largest phrase | Its volume |
|---|---|---|---|---|
| SEO tools and data | 96 | 129,200 | serp api | 12,100 |
| n8n | 86 | 190,490 | n8n | 165,000 |
| Apify | 83 | 46,770 | apify | 40,500 |
| Amazon sellers | 48 | 81,270 | amazon price tracker | 27,100 |
| YouTube research | 47 | 180,070 | youtube transcript | 110,000 |
| AI for developers | 44 | 737,270 | claude code | 550,000 |
| AI search | 33 | 538,700 | google ai mode | 368,000 |
| Ad intelligence | 30 | 177,940 | meta ad library | 90,500 |
| Local leads | 25 | 572,450 | google business profile | 550,000 |
| Data studies | 14 | 1,600 | youtube statistics | 1,300 |
| Avatars and IndieWeb | 11 | 1,530 | indieweb | 1,000 |
| Finance news data | 8 | 1,560 | earnings call transcript | 480 |
One phrase carries most clusters. In Local leads, the largest phrase is 550,000 of 572,450. In AI for developers it is 550,000 of 737,270.
A summed volume like that says a head term exists, not that 44 pages would each find readers. I read the summed column as a warning, not a ranking.
The zero-volume phrases stay in the map: 57 of the 525 have a volume of 0. The plan keeps them because a page with a working tool or a download can earn its place without measured volume.
From clusters to the map
The 12 clusters became 9 pillars, and not every cluster became a pillar of its own. A small cluster folds into a broader section, and one cluster has no page at all in the first version of the map. Size alone did not decide it: a cluster earns a pillar when several of its pages can stand on a tool, a template or data of my own.
The map also sets an order. Pages with that kind of first-hand work behind them go first; clusters that only have volume wait until there is a measured signal of demand. A pillar gets its hub page only once it has 3 published pages, so the map never shows empty sections.
Do it for your own site
Start the seed list from topics where you have your own tool, data or template, not from the topics that have volume; a page you cannot back with first-hand work will not hold its place. Expand those seeds with any volume source you trust, but keep one market and one date in the file, so the numbers compare.
Group the phrases by the need behind them and settle every unclear case with one rule: a tool does the task, a template deploys it, a guide explains it. Give each intent one URL, and add a hub only when a section has 3 pages to show.
Then order the pages by what you can test and show soon, not by summed volume. A cluster with a big head term and nothing of yours behind it can wait; the map is a plan you revise, not a ranking.
What I tested and what is untested
The counts are deterministic: the same file gives the same chart. The clusters were assigned by the need behind each phrase, not by comparing search results.
I have not checked them against SERP overlap, so two clusters that share result pages would show up here as separate. The volumes are averages for the US and say nothing about other markets. Every number here comes from that one keyword file; there are no outside sources to cite.
Drafted with an agent from my keyword file and notes; the cluster counts were computed by the agent on 2026-10-23, and the code example was run by the agent on 2026-10-28.
Reviewed by David S on 2026-10-28.