Keyword modifiers: turning a query pattern into a page list
Programmatic projects do not start from a keyword list. The keyword list is the output. What you start from is a pattern, and the quality of that pattern determines everything downstream.
Anatomy of a pattern
[head] + [modifier] + [entity]
"alternative" + "free" + "to Notion"
"salary" + "junior" + "python developer"
"how to" + "export" + "an Airtable table"
The head sets intent. The modifier sets the segment. The entity sets the data row. A workable pattern pairs a high-cardinality entity (hundreds of values) with a low-cardinality modifier (two to five values). Invert that ratio and you get near-identical pages competing with each other.
| Entity values | Modifier values | Pages | Verdict |
|---|---|---|---|
| 400 | 3 | 1,200 | Healthy — entity carries the differentiation |
| 12 | 40 | 480 | Risky — 40 near-identical pages per entity |
| 2,000 | 1 | 2,000 | Healthy if data per entity is rich |
Where real modifiers come from
Modifiers are observed, never invented. Four sources, ordered by signal quality:
- Search Console query report — queries already producing impressions on your pages. The only source that reflects your site specifically.
- Autocomplete and related searches — frequency-driven, and not filtered out by a volume threshold the way keyword tools are.
- People Also Ask — Google's own view of adjacent questions. Excellent raw material for subheadings.
- Subheadings of ranking competitors — the H2s in the top five reveal the structure the SERP rewards.
A modifier absent from all four sources does not exist. Generating it produces a page with no demand behind it.
The 20-page pilot
Before generating N pages, generate 20 chosen to span the whole distribution — the five highest-demand variants, the five lowest, ten in between — then wait six to ten weeks and read the outcome.
| Observed on the pilot | Decision |
|---|---|
| Over 70% indexed, impressions on most | Ship the full batch |
| Indexed, no impressions | Intent mismatch — revisit the gate |
| Crawled, not indexed | Perceived value too low — add data |
| Discovered, not crawled | Linking or sitemap problem |
The last two rows are diagnosed in crawl budget on large sites and internal linking at scale.
Unit economics decide the cutoff
page_value = monthly_volume x expected_CTR x conversion_rate x conversion_value
page_cost = generation_cost + (annual_maintenance / 12)
keep the page if page_value > page_cost x 3
The factor of three absorbs uncertainty about the position you actually reach. On a 20-searches-a-month variant, a page is only viable when a conversion is worth a lot — which is why programmatic works better in B2B SaaS than in ad-funded publishing, and why the ad-funded version of this model collapsed into the content farm pattern.
Cluster before you generate
Two variants whose SERPs overlap by more than 60% should not become two pages: they will compete. Merge them into one page that handles both phrasings — one in the H1, the other as an H2.
overlap = |top10(query_A) ∩ top10(query_B)| / 10
if overlap > 0.6: merge
This clustering step determines the final page list, and therefore the URL structure and where canonicals need to sit.
Frequently asked questions
How much search volume justifies a long tail page?
It depends entirely on conversion value. In B2B SaaS a ten-searches-a-month query can pay for itself; in ad-funded publishing it usually takes several hundred.
How do I spot cannibalisation between two generated pages?
Compare the SERPs for the two queries. If more than 60% of the top ten URLs are shared, Google treats them as one intent and two separate pages will compete.
Are keyword tools enough for a programmatic project?
No. They under-report or omit very low volume queries, which make up most of a programmatic batch. Autocomplete, related searches and Search Console fill the gap.
SEOFactory
Want to apply this to your own site?
SEOFactory designs the SEO architecture, produces structured content and strengthens internal linking to grow organic visibility over time.
Get in touch