Marketplace · Growth / SEO Engineer · 2020–2024
Programmatic page generation
Context
Marketplace supply data already described every city, neighbourhood and space type, but none of it existed as a landing page. The work was not just building pages — it was designing the decision chain that decided which pages were worth building.
Trigger
Trigger
Search demand analysis showed the highest-intent queries were location-specific pages we simply did not have.
The build
- 01
Collaborate with SEO on keyword research
We started with demand, not inventory. The SEO team defined the keyword universe, search intent and competitive whitespace; I used that to scope which page cohorts were worth generating.
- 02
Design the template
Each page type was mapped to one intent and given a template with real, differentiated content blocks. Anything that would have produced near-duplicate pages was excluded from generation outright.
- 03
Create the pages
A Python job joined inventory, geo and demand data, then only emitted a page when it cleared thresholds for listing count and search volume. Thin pages never got created rather than being pruned later.
- 04
Audit and QA
Every cohort was checked for indexability, internal links, content variance and cannibalisation before being released to the sitemap. Bad cohorts were fixed before they reached Google.
- 05
Wait for indexing and iterate
Sitemaps were segmented by cohort so Search Console reported indexation per type. Weekly GSC pulls fed impressions and position back into the generator, which reprioritised which cohorts got expanded content next.
Stack
- Python
- SQL
- Storyblok
- Next.js
- GSC API
Result
25%
of total site traffic arriving on generated pages — marketplace, city and space-type cohorts
EARLY SIGNAL
at a second company, geo pages produced the first transactions in cities with no supply marketing at all, validating demand before any local spend
Keep in mind
Start with demand, not data
Inventory does not mean search intent. A page is only worth generating if someone is actually looking for it.
Template first, generate second
If the template cannot produce meaningfully different pages, the output will be thin regardless of volume.
Build the QA gate into the pipeline
Crawl, indexability, internal link coverage and content variance checks should block publish, not happen after.
Segment sitemaps by cohort
You need to know which page types are indexed, not just whether the whole set is. GSC reporting becomes usable.
Plan for the long index tail
Programmatic pages can take weeks or months to index. The loop is research → generate → QA → wait → learn → repeat.
Honestly
What I'd do differently
The first release published every possible location and space-type combination, including pages with two listings and near-identical copy. Google indexed a fraction of them and crawl attention drifted away from the pages that actually converted; it took about a quarter to recover after we deleted the thin cohorts. The minimum listing count and content-variance check should have been a publish gate from the first run, not something added once the damage showed up in Search Console.