Programmatic SEO: a practical guide from 10 city pages to 300

How Staycation went from 10 hand-made city pages to 300 with programmatic SEO, and grew purchases from search by 90%: how to find your topics, four rules, the template, and how to produce and measure the pages.

Gabriel Amzallag
Gabriel Amzallag

12 min read

On this page

TL;DR

  • Programmatic SEO means one template, hundreds of pages, each targeting a long-tail query like "hotel spa + city". With AI, each page can carry its own content, not just a swapped city name.
  • Ignore search volume. Build pages for variations at 10 searches a month or less, straight from your own inventory. Together they bring more traffic than the head term you cannot win.
  • Four rules before you generate: ignore volume, set a supply floor, sort pages into categories, and bring an angle your competitors do not have.
  • At Staycation, 10 hand-made city pages became 300, with four times more non-brand transactional traffic in a year and 90% more purchases attributed to search.

Today I want to share one of my best client cases.

In one year, excluding brand searches, we grew non-brand transactional traffic four times, reached 2,500 impressions a day in AI search, and increased purchases attributed to search by 90%.

Search Console charts: on the left, weekly clicks rising from about 1,000 to a peak near 9,000 between May 2025 and mid-2026; on the right, daily AI search impressions jumping from about 300 to over 2,000 between July and September 2026
Search Console charts: on the left, weekly clicks rising from about 1,000 to a peak near 9,000 between May 2025 and mid-2026; on the right, daily AI search impressions jumping from about 300 to over 2,000 between July and September 2026

SEO performance (left) and GEO performance (right)

To get these results in a highly competitive market, we did programmatic SEO.

Read this as a practical guide. I will share the method we used for Staycation, so you can apply it.

By the end you will know how to:

  • Find the right topics for your site
  • Apply the 4 golden rules to create good content
  • Build a template that ranks and converts
  • Produce the pages and measure them

What is programmatic SEO?

Programmatic SEO means creating hundreds, even thousands, of pages from one page template, to target long-tail queries.

It gets even more interesting now with AI.

  • Before, we swapped a few small dynamic variables in a page.
  • Now we can create pages with the same template but with completely different content, more personalized.

For me, the real difference with programmatic is the automation that comes with it.

For example, Staycation already had 10 city pages targeting long-tail keywords "hotel spa + city". But they had to create new templates by hand. It took them about half a day per page. The foundations were there.

After we worked on it, we managed to create 300 pages, with much more content that matched the search intent, powered by one database and an AI content pipeline.

1. Find your programmatic SEO topics

There are several ways to do it. The first is to ask yourself how you can make good use of your data.

Every programmatic play is one search pattern, repeated:

Table of programmatic SEO patterns, each matched to what a company already has, with examples from the Web Anatomy library
Table of programmatic SEO patterns, each matched to what a company already has, with examples from the Web Anatomy library

You can find all the examples in the Web Anatomy library of programmatic SEO page examples.

If you already have...Start withOne page isExamples
Inventory or services in many placesLocationOne place: a city, a region, a countryHouzeo, ShipBob, Instawork
A catalogue: products, stocks, terms, modelsEntityOne catalogued thing: a stock, a term, a productTradingView, Deepgram, Hetzner
Several customer types or use casesAudienceThe product for one role or useResumeUp, Evergreen
A product that plugs into other toolsIntegrationThe product paired with one other toolRender, Railway, Typeform
Competitors people compare you toComparisonX vs Y, or alternatives to XRecall, Tailscale, Taskade
Content people browse for ideasInspirationOne idea, style or template to browseSuno, Photo AI, Craft

Staycation had proprietary data on hotels (descriptions, prices, reviews...) across many locations, so that is the pattern we decided to go all in on. But you can do it for any other pattern.

Why programmatic SEO is powerful

Programmatic SEO works when one intent repeats across many variations: a city, a tool, an integration, a job title.

Most of the time, the head term is a bloodbath and nearly impossible to rank for. At Staycation, "hotel spa" meant fighting Booking, Tripadvisor and every OTA on earth.

However, the variations around it can be won. "Hotel spa Annecy", "hotel spa Marseille" and 300 other cities in France have less volume, but also fewer competitors.

The good thing with programmatic SEO is that the day you expand your offer (pool, jacuzzi, sea view), the page inventory multiplies again without rebuilding the system around it. That is what we did at Staycation: we started with the spa, then added the pool, sea view and jacuzzi.

But before creating a single page, we followed four rules.

2. Four programmatic SEO rules before you generate anything

Rule 1: Don't care about volume

Most teams take their SEO tool, sort by volume, and fight for the 5 biggest variations (the 5 big cities, the 5 best-known tools) where the competition is maximal.

That is exactly what I do not recommend.

Instead, we focus where the volume is very low. Variations at 10 searches a month. Even under 10.

Here is why:

  1. The volume in keyword tools is not real. It is an estimate, and new searches can take months to show up.
  2. Being first on a small keyword already pays. If a keyword gets fewer than 10 searches a month and you rank first, you get most of those clicks. Across 300 pages, that adds up.
  3. If an SEO tool shows no volume, your competitors will be too lazy to build a page for it.

So how do you find these keywords?

Trust your own inventory. Start from what you have: every city where you have hotels, every product in your catalogue, every tool you integrate with.

Each one is a page candidate, whatever volume the SEO tool shows.

At Staycation, the list of pages came from the hotel database, not from Semrush. 300 winnable pages for smaller cities.

Small volume + small volume + small volume = a lot of traffic.

Rule 2: The supply floor

Demand is one thing, but you also need supply.

So the question to ask is: do I have enough inventory (products, listings, providers, integrations) to make a real page for this variation?

At Staycation: do we have enough spa hotels in this city?

A page with 2 hotels is a weak page. Google will not pay attention to it, and it drags the whole silo down.

Focus on quality rather than quantity.

So we set a floor. Below 3 bookable hotels in a city, no page.

Define your minimum inventory per page (products, listings, providers, integrations, whatever your unit is) and refuse to generate below it.

Rule 3: Put your SEO silo in categories

Before you generate anything, sort the pages of your silo into categories. At Staycation, there were three: cities, departments and regions.

You do not treat a city page like a region or a department page. The intent is different, so the categories decide two things:

  1. The template. Each category gets its own version of the template. A city page is for booking a hotel there. A region page is for exploring an area, so it shows more places and more context.
  2. The internal linking. The categories tell you which pages link to which. Cities link to the other cities nearby, regions to their departments.

The same logic works for any pattern. For an integrations silo, the categories could be tools, then tool categories (CRM, email, analytics).

Rule 4: Bring what your competitors don't

Try to bring a "unique" angle when you answer a keyword.

For us, for example, on "hotel spa Bordeaux", we thought about what we could bring that our competitors could not really do.

  • We added more geographic criteria. For example, that one spa hotel is five minutes from the center of Bordeaux.
  • We gave advice based on what the person feels like. If you are in a couple mood, we recommend this hotel. If it is winter and a bit gloomy, another one.

Try to play rather than list an inventory: go after the sub-intents, the things people hope to find and do not find on your competitors' pages.

Key takeaways

  • Rule 1, volume: don't sort by search volume. Build pages for variations at 10 searches a month or less. Together, they bring more traffic than the head term you can't rank for.
  • Rule 2, supply: set a minimum inventory per page (3 hotels at Staycation) and don't create a page below it.
  • Rule 3, categories: organize pages in levels (city, department, region) and use those levels for your internal links.
  • Rule 4, the expert angle: on each page, add something your competitors don't have: distance to the center, a mood, a season.

3. Build a programmatic SEO template that ranks and converts

The blocks below work for any programmatic page. The screenshots show them on Staycation's spa pages.

Before

When I joined, Staycation already had localized pages: the classic pSEO template you have seen a thousand times.

Staycation's old Strasbourg spa page: a full-width photo hero titled "Les hôtels spa à Strasbourg" with a search box, then a generic heading and one short paragraph
Staycation's old Strasbourg spa page: a full-width photo hero titled "Les hôtels spa à Strasbourg" with a search box, then a generic heading and one short paragraph

The old Strasbourg spa page

A hero, a title, a list of hotels, a short generic text block. Only the city name changed from one page to the next.

1. Hero: repeat the query the visitor typed

  • At Staycation: "Les hôtels spa à Strasbourg", one line of real positioning, and the search bar already set to "Autour de Strasbourg".
  • Above it, the breadcrumb (France → Grand Est → Bas-Rhin → Strasbourg),
  • and a "Mis à jour le" (updated on) date to show recency.
  • At the very top, one line of borrowed authority from the whole platform: "4,8/5 · +1M téléchargements" (4.8/5, over 1M downloads).
Before and after of the Strasbourg hero: the old version is a photo with a centered title and search box; the new one has a rating bar, a breadcrumb, an updated-on date, the title, one line of positioning, a search bar set to Strasbourg, and hotel cards right below
Before and after of the Strasbourg hero: the old version is a photo with a centered title and search box; the new one has a rating bar, a breadcrumb, an updated-on date, the title, one line of positioning, a search bar set to Strasbourg, and hotel cards right below

Before (left) and after (right): the Strasbourg hero

2. Listing: the inventory is the moat

  • Your products, listings or tools, shown for this city (not generic).
  • Provide info only you can give. At Staycation: numbered hotel cards with neighborhood, rating and review count, the spa amenities (hammam, sauna, indoor pool), the current discount.
  • Real prices go with it, because our SEO analysis showed that people were interested in them. So we added an average price, minimum and maximum for each page.
  • Every heading here targets a secondary SEO keyword: "best spa hotel", "most ranked hotel spa", "day spa hotel".
Staycation listing blocks: numbered Marseille spa hotel cards with neighborhood, rating, review count, amenities and discount; then "best rated hotels in Strasbourg" and "day offers in Strasbourg" rows with distance and price for two
Staycation listing blocks: numbered Marseille spa hotel cards with neighborhood, rating, review count, amenities and discount; then "best rated hotels in Strasbourg" and "day offers in Strasbourg" rows with distance and price for two

3. Why choose you

  • pSEO is about getting more leads or revenue from your pages, not just getting traffic to them.
  • Most pSEO templates skip this block. The visitor landed from Google and may never have heard of you, so they do not know why they should buy from you rather than from the biggest player in the results.
  • The clearer you are on your strengths, and on what makes your solution and this variation page unique, the better your conversion will be.
  • It also helps with LLMs, when users need more guidance to see the value of one service over another.
The "Ce que vous allez vivre" (what you will experience) block: three illustrated reasons to book with Staycation, exclusive access to the best hotels, stays with or without a night, and experiences designed for locals
The "Ce que vous allez vivre" (what you will experience) block: three illustrated reasons to book with Staycation, exclusive access to the best hotels, stays with or without a night, and experiences designed for locals

Ce que vous allez vivre

4. Internal linking: the more contextual the better

At Staycation, 3 tabs:

  • "Autour de Strasbourg" (the nearest cities, computed geographically),
  • "Destinations populaires en France" (popular cities), the ones with the highest competition,
  • "Strasbourg : nos autres expériences" (a bridge to the other silos).

All three lists were generated deterministically with a script. Nothing was generated with AI or by hand, which can lead to mistakes.

Internal linking block "Explorer par destination" with three tabs: around Strasbourg (Colmar, Nancy, Dijon, Lyon, Annecy), popular destinations in France, and Strasbourg's other experiences
Internal linking block "Explorer par destination" with three tabs: around Strasbourg (Colmar, Nancy, Dijon, Lyon, Annecy), popular destinations in France, and Strasbourg's other experiences

The internal linking tabs

5. Editorial: where the page earns depth

For each variation page, we have an editorial section with text visible by default.

In it, we show why the city is unique (why choose a spa hotel here, what to do during your stay, a weekend for couples).

This is AI-written but data-fed, and it is what separates a page from a database dump.

The Marseille editorial section "Tout savoir sur Marseille", with three titled blocks: why choose a spa hotel in Marseille, what to do during your spa stay, and a spa weekend for couples
The Marseille editorial section "Tout savoir sur Marseille", with three titled blocks: why choose a spa hotel in Marseille, what to do during your spa stay, and a spa weekend for couples

The Marseille editorial section

6. FAQ: the keyword maxing

We have around 9 questions per variation.

For each page, a script selects 9 questions, checks the user intent and matches it with the database in order of priority. So we prioritize a question about sea view for a location near the coast, or bike rental in the middle of France.

  • Each question is a micro-keyword the page now covers, and each answer names real hotels, linked, and their pricing.
The Strasbourg FAQ: questions such as which spa hotels have a sauna, a hammam or a balneo in Strasbourg, each answered with named, linked hotels
The Strasbourg FAQ: questions such as which spa hotels have a sauna, a hammam or a balneo in Strasbourg, each answered with named, linked hotels

The Strasbourg FAQ

7. The hub page

The URL staycation.co/fr/hotel-spa-france/strasbourg sits under the hub staycation.co/fr/hotel-spa-france.

The goal of the hub is to target the head keyword. We knew it would be difficult to rank for, so we mostly use it to distribute traffic, as you can see here with the internal linking module that expands to show all the child pages per category.

The hub page's "Explorer par destination" module with tabs for cities, departments and regions: collapsed to four rows with a "Voir plus" link on the left, expanded to the full list of cities on the right
The hub page's "Explorer par destination" module with tabs for cities, departments and regions: collapsed to four rows with a "Voir plus" link on the left, expanded to the full list of cities on the right

The hub page and its expandable internal linking module

8. The technical layer

  • Last but not least, add the structured data for the FAQ and the breadcrumb.
  • Everything needs to be rendered server side (SSR), so Google sees it and it loads faster (we had to fix it).

4. Produce the programmatic SEO pages and measure them

The strategy I am sharing here is the same as my content machine strategy (How to publish one page a day without publishing slop). If you have not read it, I strongly recommend it, because that is where I go into real detail.

Long story short, I have two elements that let me create the content:

  • The data, meaning the proprietary data I use. Here it was Staycation's data, with all the info on prices, distances, rankings and ratings. I do not change that. The idea is to refresh it from time to time.
  • On top, the prompt: section by section, we iterate on the prompts with the collected data until we are satisfied.

One page equals one row in Supabase (my database), with all the info I need on the page. Then, for each section of the page, I had a specific prompt with the logic I needed.

At the time, I built the logic on n8n, with different automations to fetch the data from Supabase, process it, run the prompts, and then send it straight to their CMS.

Today I would rather do it in Claude Code, because the models have improved enormously. (Which CMS, and whether you need one at all: see Headless CMS vs traditional CMS.)

You will not get the best prompts on the first try. You will inevitably get things the model hallucinated.

So here is what I did:

  • Create at least 1 variation per use case (one page with a lot of supply, one thin)
  • Create at least 1 variation per sub-category
  • Check for hallucinations. On my side, I removed the AI's access to outside research, so it relies only on the database info.
  • Compare the pages with the competitors' to see if they target the right keywords and intent

The more you iterate on the first batch, the better the results will be when you generate the 300.

After launch: measure like a pSEO, not like a blog

Programmatic pages have their own funnel, and it starts before traffic:

  • Indexation rate: of the pages you published, how many did Google actually index? This is the first verdict on quality. If it is low, Google is telling you which pages are weak: so add more content, be patient, and strengthen internal linking.
  • Impressions: indexed pages entering the game. Watch which level performs (cities vs departments vs regions).
  • Clicks: last, not first. On sub-10-volume pages, clicks arrive months after indexation, and in aggregate.

Pick your pattern, then write your own rules: your long-tail entry point, your supply floor number, your hierarchy. Then audit one of your existing template pages against the blocks above.

Find revenue opportunities for your website, backed by real data. Get your 3 free opportunities by email.

Adapted from A practical guide to programmatic SEO, originally published in the Web Anatomy newsletter on October 2, 2026.

Share this
Gabriel Amzallag

Written by

Gabriel Amzallag , Founder, Web Anatomy

5 years CRO + SEO at Qonto (2021–2025). After advising 15+ SaaS on their websites (Payfit, Pigment…), the same patterns kept breaking, so I decided to build the source of truth on what works on the web: the intelligence layer every tool, builder, and team uses to ship sites that perform.

[FAQ]

Questions people ask

The short answers. The article above has the details behind each one.

What is programmatic SEO?

01

Programmatic SEO (pSEO) means creating hundreds, even thousands, of pages from one page template to target long-tail queries, such as "hotel spa + city". With AI, pages built on the same template can now carry completely different content.

Does programmatic SEO still work with AI?

02

Yes, when every page brings something only you can give: your own inventory, real prices, a useful angle. At Staycation, 300 pages built this way grew non-brand transactional traffic four times in a year and drove about 2,500 impressions a day in AI search.

How many pages do you need for programmatic SEO?

03

As many as your inventory can fill, and no more. Set a minimum per page (Staycation's floor was 3 bookable hotels per city) and do not create a page below it, whatever the search volume says.

Your top 3 opportunities for more revenue

We find every way to grow your website’s visibility and conversions: SEO, AI search (AEO), backlinks and mentions, and UX/UI. 3 free opportunities, delivered by email.