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.