Use ChatGPT to Cluster 200 Keywords Into Topical Groups with Intent Labels
Contents
Last month I exported 1,247 keywords from Ahrefs for a client's site. The CSV opened fine. The plan was to manually sort them into topic buckets over the next two days — a chore I had done maybe 50 times before in my SEO career. I sat there for 10 minutes, scrolled past row 200, and closed the file. There had to be a better way.
I spent the next 90 minutes testing prompts in ChatGPT. By lunch I had the entire 1,247-keyword list reduced to 34 topical clusters, each one tagged with intent (informational / commercial / transactional / navigational). The output went straight into our content plan. The team shipped a 3-month editorial calendar that Friday.
Here's the exact 4-step workflow I used. No theory, no "AI is the future" — just the prompts and the cleanup steps that actually produced a usable CSV.
Step 1 — Export the right columns from Ahrefs or Semrush
Most people export way too much. A clean clustering input is four columns:
Keyword— the actual queryVolume— monthly search volumeKD(or Difficulty) — keyword difficultyParent Topic— Ahrefs auto-suggests one; Semrush calls it "Topic Cluster"
Sort by Volume descending, then filter out branded queries (anything containing your client's brand or competitors' brand names — those belong in a separate list). Drop anything below volume 10 for the first pass; we'll add them back later as long-tail.
That's it. The model doesn't need 15 columns of metadata — it just needs to see what humans actually search for and how often.
Step 2 — The prompt that actually produces clusters
I burned through six prompts before landing on one that didn't hallucinate wildly. Here's the version I now use verbatim:
You are an SEO content strategist. I will give you a list of keywords with search volume and difficulty. Group them into topical clusters.
For each cluster return:
- A short cluster name (2–4 words, e.g. "best running shoes")
- The search intent for the cluster as a whole: informational, commercial, transactional, or navigational
- The recommended content type: pillar page, comparison post, how-to guide, product page, or listicle
- The 5–15 keywords that belong in the cluster, with their volume
- A one-sentence "content angle" — what the article should be about
Rules:
- Every keyword must appear in exactly one cluster
- Don't invent keywords that aren't in the list
- Don't merge semantically related but intent-different clusters (e.g. "best CRM software" and "CRM software pricing" stay separate — one is commercial, the other is transactional)
- If a keyword doesn't fit any cluster, put it in a "Misc / Unclassified" section
- Output as a markdown table
Here are the keywords: [paste your CSV or list]
Two details that matter: the "every keyword in exactly one cluster" rule prevents the model from silently dropping 30% of your list. The "don't merge intent-different clusters" rule is the one most prompts get wrong — without it, ChatGPT will happily shove informational and transactional queries into the same bucket because they share head terms.
Step 3 — Run it in batches of 80–100 keywords
ChatGPT's context window handles 200 keywords fine, but the quality drops after about 100. The clusters get vaguer, intent labels get lazy, and the model starts merging things that shouldn't be merged.
I split the export into chunks of ~80 keywords (sorted by volume) and ran each chunk as a separate conversation. Then I merged the outputs in a spreadsheet using a simple VLOOKUP on keyword → cluster.
If you're on a paid plan, Advanced Data Analysis makes this faster — paste the CSV as a file, get a CSV back. If you're on free, the markdown table is easy enough to copy-paste and re-format.
Step 4 — The review pass most people skip
This is the step that determines whether your clusters are usable or garbage. Open the merged CSV and check for three things:
- A keyword showing up in the wrong cluster. Common offenders: anything containing "vs" usually belongs commercial, not informational. Anything with "how to" usually belongs informational, not transactional. The model gets these right ~85% of the time.
- Clusters with only 1–2 keywords. These are usually noise — a single odd query that doesn't belong to any real topical group. Either assign it to a larger nearby cluster or move it to the "Misc" bucket for separate handling.
- Two clusters that should be one. This is the harder call. "best running shoes for flat feet" and "best trail running shoes" could be one cluster or two depending on how your content team wants to plan. I tag these with a
needs_mergeflag and let the content lead make the call — they're closer to the product than I am.
A real cluster from that 1,247-keyword job, by way of example:
| Cluster | Intent | Type | Top keywords | Content angle |
|---|---|---|---|---|
| CRM for small business | Commercial | Comparison post | crm for small business (8.1K), best crm for small business (5.4K), crm software for startups (2.1K) | Compare 6 CRMs priced and sized for under-50-person teams, with the pricing table small business owners actually want to see. |
That one cluster alone covered 23 keywords and produced a 2,400-word comparison post that ranked on page one for 7 of them within 5 months.
What to watch out for
- Brand-vs-generic confusion. Always pre-filter branded terms. ChatGPT will happily build a cluster around "HubSpot CRM pricing" alongside generic CRM queries, and the resulting content strategy will be wrong.
- Volume-vs-difficulty bias. The prompt treats them equally. If your site is a new domain, you probably can't win the 20K-volume head terms — re-run the prompt with the rule "exclude keywords with KD above 40 from cluster centers, but keep them in supporting keyword lists."
- Single-word keywords. "CRM" alone, "marketing" alone — these often need their own treatment. Pre-filter them out and handle the head terms separately, or your clusters will all anchor on the same 4–5 massive queries.
The output
A clean CSV with columns: keyword, volume, kd, cluster_name, intent, content_type, content_angle. That single file replaces what used to be a 2-day spreadsheet project. The content team uses it to plan, the writers use the content_angle column to brief themselves, and I use the intent column to decide which clusters deserve a pillar page vs. a supporting post.
Keyword clustering is a thinking exercise disguised as a sorting exercise. Most of the time spent "sorting" is actually deciding which two similar queries deserve the same article and which ones don't. ChatGPT doesn't make those decisions for you — it makes the sorting fast enough that you can spend your actual brain cycles on the decisions that matter.