SEO··15 min read

How to Generate Topical Keywords: A Marketer's Playbook for Clustered, Winnable Lists

A step-by-step playbook for generating, clustering, prioritizing, and de-duplicating topical keywords — before a single word gets written.

Bilal Ahmed
Bilal AhmedSEO Content Strategist

Keyword chips scattering from chaos into organized clusters — the transformation this playbook delivers

Intro: generation is the step most guides skip

Most "topical authority" content jumps straight to pillar-cluster architecture and internal linking diagrams. That's fine if you already have a validated keyword list. The real bottleneck for most marketers shows up earlier, at the moment you sit in front of a blank spreadsheet with a vague topic in your head and no idea which 300 keywords belong in it.

This guide covers that stage only. You'll learn how to produce, validate, prioritize, and de-duplicate a topical keyword list that's ready to hand to writers. Architecture and ongoing map maintenance are a separate job, covered in the sibling piece How to Build a Topical Content Map for SEO in 2026. I'll link it where relevant so we don't double up.

We'll use one running example the whole way through: email automation for e-commerce. Same input at every step, concrete outputs you can copy.

Before you start: what to have ready

Four things, and none of them require a paid tool.

  1. A scoped topic. "Email automation for e-commerce" works. "Email marketing" is too broad and will produce a 2,000-row mess by Step 2. If you can't describe your topic in a phrase a customer would actually type, tighten it before you continue.
  2. A free Google Search Console property, if you already publish on the site. If you don't publish yet, skip the GSC pieces; the rest still works.
  3. A spreadsheet with a fixed column schema. Lock these columns before you touch a source: keyword, source, raw volume if available, intent guess, cluster tag, winnability verdict, planned URL. Every row, every time.
  4. An LLM with a chat interface for the prompts in Step 2. Any of the current models work; a thinking/reasoning mode helps on the cluster expansion prompt.

That's it. The work from here is where the time goes.

Step 1: Build a tight seed list from free, underused sources

At the seed stage you want 8 to 15 seeds, maximum. Step 2 multiplies seed count by roughly 20 to 40 times, and a bloated seed list turns into a spreadsheet you'll quietly abandon.

For "email automation for e-commerce," good seeds look like: abandoned cart email, welcome email series, post-purchase flow, win-back campaign, browse abandonment, email segmentation, email automation platform, transactional email, klaviyo flows, shopify email automation. Ten is plenty.

Pull seeds from the usual suspects (autocomplete root, PAA, competitor nav menus) and then add the one source that most articles skip.

Mine Google Search Console pages 2-3 for inherited momentum

If the site already publishes, this is the single fastest way to generate seeds. Open GSC Performance, filter queries by average position between 11 and 30, and export. Every one of those queries already has topical relevance signals with Google. You don't have to earn relevance from zero; it's half-earned already.

Filter: GSC > Performance > Queries > add filter "Position > 10" and "Position < 31" > last 3 months.

In the running example, you might find "abandoned cart email sequence" sitting at position 14, "post-purchase email examples" at position 22, and "klaviyo vs mailchimp shopify" at position 19. Those three become top-priority seeds, not because they scored well on some rubric, but because they're almost ranking already.

Google Search Console Performance view filtered to position 11–30, surfacing page 2–3 queries with inherited topical relevance

Step 2: Expand seeds into hundreds of candidates - manual and AI paths

This is where most readers get stuck. I'll give you both a manual loop and a working prompt library, then a note on where AI tends to break.

The manual expansion loop (free sources)

Four sources, run in order, for every seed:

  • Google Autocomplete. Type the seed plus each letter of the alphabet ("abandoned cart email a...", "abandoned cart email b..."). Record everything that appears.
  • People Also Ask. Search the seed, open every PAA box (opening one reveals more), record every question. alsoasked.com renders the tree visually if you'd rather not click through manually.
  • Related Searches. Scroll to the bottom of the SERP. Record everything.
  • Reddit, top of all time. Search the seed on Reddit, sort by Top > All Time. The most-upvoted threads use language Google data misses. r/ecommerce, r/shopify, and r/emailmarketing are particularly dense for our running example.

The rhythm matters. Record source and raw phrasing, not a cleaned-up version. Later, when you're debugging a weird cluster, you'll want to know whether "cart abandonment email timing" came from PAA or from a Reddit thread, because that affects how you interpret intent.

Expect 200 to 400 candidates from 10 seeds in three to five hours of manual work. That's the honest number.

Four free keyword sources — Autocomplete, People Also Ask, Related Searches, Reddit — converging into the master keyword sheet

Four copy-paste prompts that actually produce usable output

LLMs are faster for expansion, but generic prompts like "give me keyword ideas for email automation" produce generic slop. These four are structured enough to be useful. Run them in order.

Prompt 1 - Subtopic discovery

I'm creating content about email automation for e-commerce.
What are the 10 most important subtopics I should cover?
For each subtopic, list 5 specific questions users ask about it.

Output: 10 subtopics, 50 questions. Paste the subtopics into your sheet as a second-tier seed layer.

Prompt 2 - Cluster expansion

For the subtopic "abandoned cart email sequence" within
email automation for e-commerce, generate 15 long-tail
keyword variations. Group them by search intent:
informational (learning), commercial (comparing), and
transactional (buying/acting).

Run this for each of the 10 subtopics from Prompt 1. Expect 15 phrases each, pre-tagged with intent. You'll validate the intent tags later; don't trust them yet.

Prompt 3 - Gap identification

Given these existing articles on email automation for e-commerce:
[paste your current article titles or URLs]
What subtopics and questions am I missing? Focus on areas my
competitors likely haven't covered.

This is where AI earns its keep. It's noticeably better at spotting holes in an existing map than at generating from a blank page.

Prompt 4 - Entity mapping

Map the entity relationships for email automation for e-commerce.
What are the primary entities, secondary entities, and how do
they connect? Format as a hierarchy.

You'll use this in Step 3 to decide cluster tags. Primary entities for our running topic come back as things like Triggers, Flows, Segments, Platforms, Metrics. Those are your cluster spines.

Where LLMs break. They invent keywords no one searches for. They mix intents inside a single cluster. They miss practitioner jargon (real Klaviyo users talk about "back-in-stock flows," not "inventory notification emails"). Treat every AI output as a draft and spot-check it against a live SERP before anything enters the master sheet. Prompt plus validate is the honest workflow.

When you need to re-run expansion from three more seed angles, the manual loop stops scaling and the prompt loop gets tedious. RankEarly's keyword expansion returns 80 to 2,500 real keywords with volume, difficulty, intent, and SERP snapshots from a single run, which is the input shape Step 3 actually needs. Starter plan is $29/mo if you want to skip the manual loop entirely.

Step 3: Validate clusters before you write - three checks almost no one runs

Here's the under-discussed part of cluster work: most competitor content assumes clusters are correct once an LLM or a clustering tool outputs them. They're often wrong, and writing against a bad cluster is exactly how you produce cannibalized pages six months later.

Three checks. Run all three before any keyword gets a cluster tag you trust.

Check 1: SERP overlap spot-check

For each candidate cluster, pick three to five representative keywords and search them in Google. When the top 10 URLs repeat at 70% or higher across those searches, Google treats them as one intent and the cluster is real. Diverging URLs mean you actually have two clusters wearing one label.

Worked example. "Abandoned cart email sequence" and "abandoned cart email template" sound like the same cluster. Search both. If Shopify, Klaviyo, and Omnisend dominate the first and Canva, HubSpot templates, and a grab bag of design sites dominate the second, your single cluster is two clusters. The first is about flow design; the second is about copy-paste templates. Different pages.

Check 2: Intent consistency inside the cluster

The most common cluster error is mixing intents. Same wording does not mean same intent.

Canonical example: "email segmentation strategies" (informational, SERP shows how-to guides and blog posts) versus "email segmentation software" (transactional, SERP shows product listings and comparison pages). Nearly identical phrasing. Completely different pages. If your cluster has both, split it.

Rule: check the SERP format, not the keyword phrasing. Product listings are a different intent from how-to guides, full stop.

Two near-identical queries, two completely different SERP formats: informational articles vs. transactional product listings

Check 3: Content coordinates mapping

When SERPs are borderline, the two-axis mental model is faster than more SERP reading. Plot each candidate keyword on topic similarity (y) by intent similarity (x).

Same intentDifferent intent
Same topicsame pagesplit
Different topicmerge (rare)discard

From the running topic: "abandoned cart email examples" and "abandoned cart email templates" land in same topic / same intent -> same page (the SERPs overlap heavily). "Abandoned cart email sequence" and "abandoned cart email software" land in same topic / different intent -> split. "Abandoned cart sequence" and "welcome email sequence" land in different topic / same intent -> merge is rare (these are sibling pages under the same pillar, not one page). "Abandoned cart" and "subject line psychology" land in different topic / different intent -> discard or park.

That grid is faster to apply than another round of SERP reading when the overlap check is ambiguous.

Content Coordinates 2×2: topic similarity vs intent similarity, with verdicts Same Page, Split, Merge, Discard

Step 4: Prioritize clusters by winnability, not by a scoring spreadsheet

Generic SEO scoring templates (Volume times Difficulty times Business Value times Centrality) break at the topical keyword stage. The unit you actually commission is a cluster, not an isolated keyword, and "business value" has no honest metric for a cluster you haven't written yet. CPC reflects ad competition, not revenue potential for a blog post.

Replace scoring with one filter and one ordering rule, both applied at cluster level.

Filter first: is the cluster winnable with the resources you have?

Use the cluster's representative SERP, the same one captured during Step 3's overlap check, to call each cluster winnable or parking lot.

Two free proxies when you don't have a tool:

  1. Count the top 10. If six or more results are from obviously stronger sites (think HubSpot, Shopify, Klaviyo, Zapier for our running example), park the cluster. You're not beating them in one pass.
  2. Read the top three pages and answer honestly. Can your draft match them in one pass? Not eventually, not with a three-part series. In one pass. If no, park it.

Apply this at cluster level, not keyword by keyword. If the head term is not-now, the long-tails inside that cluster don't rescue it; they're interpreted relative to the same competitive set.

Running the winnability call by hand across 200 keywords, and re-running it each time a cluster changes shape, is where the workflow breaks for most marketers. RankEarly's SERP gap analysis returns a winnable or hard-to-win verdict per keyword with the evidence that drove the call, so cluster-level filtering collapses into a spreadsheet toggle. How winnability works.

Quick-wins override: clusters containing GSC pages 2-3 jump the queue

Any cluster that includes a Step 1 GSC seed (average position 11-30) goes first, regardless of anything else. The site already holds partial topical relevance for that cluster, so a page-2 keyword hitting page 1 is cheaper than a new cluster ranking from scratch.

Running example: the "abandoned cart email sequence" cluster has a head term already at position 14. It ships before any brand-new cluster, even if the new cluster has higher aggregate volume. The momentum is already bought.

Then order remaining clusters by intent proximity to conversion

Rank the rest using the SERP-format evidence already captured in Step 3. Commercial and transactional SERPs (product listings, comparison pages) ship before informational SERPs (how-to guides, definitions). No new judgment call required, and this isn't a business-value score; it's just "clusters with an obvious next step go first."

Running example: the "email automation platforms for shopify" cluster (commercial SERP, comparison pages in the top 10) ships before "how to write abandoned cart subject lines" (informational SERP, listicles and tip posts), even when the informational cluster has higher raw search volume. The commercial page turns readers into evaluators. The informational page turns readers into readers.

Step 5: Prevent cannibalization during generation, not after publishing

Most cannibalization content is about fixing cannibalization after it's happened. By that point you're auditing traffic drops and merging pages you shouldn't have split. The generation stage is where cannibalization is cheapest to prevent.

Apply the 70%-overlap test at the pair level

You already know the test from Step 3. Reuse it here on pairs that survived clustering. Are these two candidate pages really one page?

Worked example from the running topic:

  • "Abandoned cart email examples" and "abandoned cart email templates" look different. Search both. Top 10 URLs overlap around 80%. Same page. Merge.
  • "Abandoned cart flow" and "abandoned cart funnel" sound like synonyms. Search both. Top 10 URLs overlap around 30% (flow trends toward Klaviyo/Omnisend product docs; funnel trends toward general ecom strategy blogs). Separate pages.

The surface-level similarity lies in both directions. The SERP doesn't.

Commit one URL per cluster before handing off to writers

The cheapest cannibalization fix is refusing to assign two writers to the same cluster. Add a "planned URL" column to the sheet and require it populated before any keyword leaves generation. Surviving keywords without a URL are parked, not commissioned. A ten-minute gate prevents the most common cause of duplicate pages.

The 2x2 pre-commissioning pass

Final step before handoff. Run the full cluster list through the Content Coordinates 2x2 from Step 3 one more time. Anything landing in the same quadrant either merges or gets deliberately differentiated, with the difference written down in the sheet. Twenty minutes here prevents multi-month cleanup later.

The 70% overlap test works for 50 keywords and fails at 500, which is when most marketers skip validation entirely and hope for the best. RankEarly's SERP-similarity clustering runs the same test at scale, with cluster tags pre-assigned in the shape Step 4's spreadsheet expects. Same rule, applied mechanically.

Common mistakes specific to the generation stage

Not the usual "build topical authority" mistakes. These are the ones that happen specifically at the generation stage, before a single word is written:

  1. Accepting LLM cluster output without SERP validation. The prompts in Step 2 are starting points. The validation in Step 3 is the work.
  2. Seeding too broadly and drowning in 2,000 irrelevant expansions. Ten seeds, not forty. Tight seeds beat comprehensive ones at this stage.
  3. Prioritizing by volume alone instead of winnability. A 10,000-volume cluster you can't win is worse than a 500-volume cluster you can. Raw volume is the least honest number in the sheet.
  4. Filling the spreadsheet but never assigning planned URLs. The spreadsheet without URLs isn't a keyword list; it's a reading list.
  5. Running winnability and cannibalization checks once and never re-applying. New keywords enter the sheet every week. Re-run the checks on new entries, not just on the initial batch.

FAQ

How many topical keywords do I need before I start writing? In projects I've worked on, 150 to 300 validated, cluster-tagged keywords covered the first 20 to 30 articles comfortably. Your numbers will shift with topic breadth and competition. The point isn't hitting a magic count; it's having enough for the next writing batch so you can ship while the next batch generates.

Should I generate keywords once or continuously? Continuously, in batches. Re-seed from Google Search Console every month or so. New query impressions reveal keywords your existing content is almost ranking for but wasn't explicitly written for, and those feed the next prioritization pass. Treat the sheet as a living document, not a one-time deliverable.

How do I know when my keyword list is "done enough"? When the next 50 expansions stop producing clusters with distinct SERPs. You'll start seeing the same top-10 URLs repeat across new candidates, which means you've mapped the winnable surface of the current topic scope. That's saturation. Ship what you have and widen the topic only after the current clusters are published.

keyword researchtopical authoritytopic clusterskeyword expansionSEO