Skip to content
KeywordsMethodClustering

Cluster keywords by result overlap, not by words

String similarity groups keywords that look alike. Result overlap groups keywords that a search engine already treats as the same question. Only one of those tells you how many pages to write.

Julien Marchand2 min read

Two keywords belong on the same page when the engine already answers them with the same set of results. That is the entire idea, and almost every clustering tool built before 2021 ignored it in favour of something easier to compute: how similar the two strings look.

String similarity is fast, free and wrong often enough to be expensive.

Where lexical grouping fails

Take "seo audit" and "seo audit checklist". Ninety percent character overlap, obviously the same topic, group them. Now look at the results. One returns agency service pages and tool landing pages. The other returns downloadable checklists and long articles with numbered steps. Different intent, different page type, and if you merge them you will write one page that half satisfies both and ranks well for neither.

Now take "why did my traffic drop" and "google core update recovery". Almost no character overlap. The results are nearly identical. Two pages here is one page too many, and the second one will quietly cannibalise the first.

Lexical clustering gets both cases backwards, which is the worst possible failure mode: it splits what should be joined and joins what should be split.

How overlap clustering works

The method is unglamorous and it works.

  1. Collect the top ten results for every keyword in the set.
  2. For each pair of keywords, count how many URLs appear in both lists.
  3. Draw an edge between two keywords when the shared count reaches your threshold.
  4. Treat each connected component of the resulting graph as one cluster, which means one page.

The threshold is the only judgement call. Three shared URLs out of ten is the common default. Four is stricter and produces more, tighter clusters, which suits a site with authority to spend. Two is loose and suits a young site that needs fewer, broader pages to concentrate its links.

The part people get wrong

Connected components chain. If A overlaps with B and B overlaps with C, then A, B and C land in one cluster even when A and C share nothing. On a set of two thousand keywords this produces one enormous blob and a long tail of singletons, and people conclude the method is broken.

It is not broken, it is under specified. Two fixes, both cheap. Raise the threshold until the giant component splits. Or switch from connected components to a proper community detection pass, which resists chaining because it optimises for density inside the group rather than mere connectivity.

What you get out of it

A cluster map answers questions a keyword list cannot. How many pages does this topic actually need? Which two existing pages are competing for the same results and should be merged? Which cluster has volume, has intent we can serve, and has nobody defending it properly?

That last question is the whole job. Everything before it is arithmetic.

A caveat worth stating

Results move. A cluster map built in January describes January. Rebuild quarterly, and rebuild immediately after a core update, because the pairs that stopped overlapping are the clearest signal you will get about what the engine changed its mind on.