Manypages
All page types
Local intent/x-in-city

LOCATION PAGES

One page per city, or per service and city pair, built from a places dataset you already have. This is the pattern behind Nomad List, Tripadvisor, and Yelp: someone searches "plumber in austin", and the site with a real page for that exact query wins. The catch is substance — each page needs that city's own facts, not a find-and-replace on the city name.

GET /plumber-in-austin

GET /coworking-in-lisbon

made famous by Nomad List, Tripadvisor, Yelp

When to use it

The right play when

  • You run a marketplace or directory with listings across many cities, and each city deserves its own landing page.
  • Your buyers search locally — "plumber in austin", "coworking in lisbon" — even though your brand doesn't rank for those queries yet.
  • Per-city numbers — listing counts, average prices, coverage — are already sitting in a spreadsheet; they just aren't pages yet.
  • You're expanding into new cities and need landing pages live before local word of mouth or reviews exist.

Your sheet

The columns you bring

servicecityregionprovider_countavg_pricetop_neighborhoods
plumberAustinTexas34$120–$160 per visitHyde Park, East Austin, Zilker

every row becomes a page — add an AI-filled column for per-row unique copy

Build it

Three steps to live location pages

01

Import your places data

Paste rows from Sheets or import a CSV — one row per service and city pair. Bring the local facts along: provider counts, average prices, neighborhoods covered. Two columns (plumber, Austin) become the slug /plumber-in-austin.

02

AI-fill the local copy

Add a column and let AI write a per-city intro grounded in that row's data — "34 plumbers, average visit $120–$160" — so Austin's page says something Lisbon's can't. No hand-writing 200 city blurbs.

03

Generate and go live

Hit generate — the whole city list ships at once as cached HTML, titles, canonicals, sitemap and robots handled. Preview on the free subdomain, index from your custom domain. Entering a new city later means adding a row and regenerating.

SEO notes

Make it rank

  • Pick one geographic level per query and stick to it — shipping /plumber-in-austin plus /plumbers-austin-tx, or a city page and five neighborhood pages chasing the same term, splits your own rankings.
  • Set a data floor before generating: a city row with two listings and no prices makes a thin page. Ship the 40 cities where your data is deep and add the rest as the dataset fills in.
  • Link every city page up to a service hub (/plumbers) and sideways to nearby cities, and mark the listings up as an ItemList of LocalBusiness entries so each city's data is machine-readable.

FAQ

Location Pages, answered

Won't Google treat these as doorway pages?

Only if they're the same page with the city swapped. When each row carries its own provider counts, prices, and neighborhoods, the pages differ in substance — that's the line between a location page and a doorway page. Rows without real local data shouldn't become pages.

Do I need an office in each city to rank?

No. These pages target organic results, not the map pack — a directory can rank for "coworking in lisbon" without a Lisbon address, as long as the page actually covers Lisbon spaces. The map pack is a separate game tied to Google Business Profile.

City pages, neighborhood pages, or both?

Start at the city level — that's where search volume concentrates. Go down to neighborhoods only in cities with enough listings that each neighborhood page stands on its own data; otherwise you're splitting one good page into five thin ones.

Related patterns

Pairs well with

Ship your first location pages

Bring your dataset, pick this pattern, and Manypages generates and hosts the pages — sitemap, robots and canonicals handled.