Marketplace · Growth / SEO Engineer · 2020–2024

Programmatic page generation

ARCHIVED

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

Search demand analysis showed the highest-intent queries were location-specific pages we simply did not have.

SEO & KWTEMPLATEGENERATEAUDIT / QAINDEXING
  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  • Python
  • SQL
  • Storyblok
  • Next.js
  • GSC API

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

  • 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.

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.

Share this

Next case study — 202280k companies, one lookup tool