Web Development

Building 500+ Location Pages with AI-Generated Content

Building 790 location pages with AI content, database schema, and SEO implementation.

Dec 7, 2025
20 min

Building With AI?

Learn how to build features like this yourself. I offer 1-on-1 AI web development coaching to help you ship faster with tools like Claude, Cursor, and ChatGPT.

Every suburb in Sydney is a potential customer. But creating unique, valuable content for hundreds of locations manually? Impossible. We needed a system that scales.

790 Pages. Each One Unique.

Every Sydney suburb is a potential customer. We built a system that generates unique, valuable content for each location—without templates, without thin content, without penalties.

Someone searching "web design Parramatta" or "SEO services Bondi" should find us. But creating unique, valuable content for hundreds of locations manually? Impossible. And simple templates like "We offer [service] in [location]" get penalized by Google.

We needed a system that could generate 500+ location pages with genuinely unique content, proper SEO, and maintainable code. Here's how we built it.

Download

500+ Location Pages

Part 2 of Site Infrastructure

Local SEO at scale without duplicate content penalties

JJM

The Math

79
Locations
9
Services
711
Combinations
790
Total Pages

79 Sydney suburbs × 9 services = 711 service-location pages + 79 standalone location pages

Download

Location Coverage

Sydney
9 services
Melbourne
9 services
Brisbane
9 services
Perth
9 services
Adelaide
9 services
Gold Coast
9 services
790location pages

79 locations × 9 services = 790 unique pages

JJM

What Google Penalizes

Before building, we had to understand what Google explicitly penalizes: "doorway pages."

Doorway Pages (BAD)

"Sites or pages created to rank for specific, similar search queries" — Google

"We offer web design in Parramatta. Contact us for web design in Parramatta today!"
"We offer web design in Bondi. Contact us for web design in Bondi today!"
"We offer web design in Chatswood. Contact us for web design in Chatswood today!"

This is thin content. Google sees through it. Users bounce. Rankings tank.

What Google WANTS

  • Unique, helpful content for each location
  • Local relevance — content that relates to the specific area
  • User value — information that helps someone in that location
  • Minimum 800-1200 words of unique content per page
Download
790
Unique Pages

Every Sydney suburb with genuinely unique content

JJM

The challenge: create 790 pages that each have 800+ words of genuinely unique content, without manually writing 632,000 words. AI-generated content was the only viable solution.

Content Generation Strategy

The seed script contains detailed insights for major cities that feed into content generation:

Sydney CBD

Australia's largest business hub with 500,000+ registered businesses

Parramatta

Western Sydney's CBD, gateway to 2.5 million residents

Newcastle

Hunter Region's economic center, diversifying beyond mining

Canberra

Government hub with unique B2G opportunities

Each service has its own content generator that creates unique paragraphs based on location attributes:

Download

Service × Location

SYD
MEL
BRI
SEO
SEO
SYD
SEO
MEL
SEO
BRI
Ads
Ads
SYD
Ads
MEL
Ads
BRI
Web
Web
SYD
Web
MEL
Web
BRI

Each cell = unique landing page with local context

JJM

Service-Specific Content Generators

Web Design

Local business needs, mobile-first, conversion focus

SEO

Local search optimization, Google Business Profile

Google Ads

Geographic targeting, local competition analysis

The content generators use city-specific data (business environment, digital landscape, local challenges, opportunities, industries) to create paragraphs that actually make sense for each location. Not templates—genuinely contextual content.

Database Architecture

Two Tables Drive Everything

locations

• slug, name, state, region

• description (AI-generated)

• population, coordinates

• target_keywords[]

• nearby_suburbs[]

service_locations

• service_slug, location_slug

• title, meta_description

• hero_headline, hero_subheadline

• main_content (800+ words)

• benefits[], faqs, target_keywords[]

Download

Template vs AI-Generated

Before

'We offer [service] in [location]' - duplicate

After

Contextually relevant, locally-aware content

JJM

Tech Stack

Neon PostgreSQL

AWS Sydney, serverless

Drizzle ORM

Type-safe queries

React + TypeScript

Frontend framework

TailwindCSS

Styling

Seed Script

npx tsx scripts/seed-locations.ts

~3 min build

All 790 pages

SEO Implementation

Every page includes three types of structured data:

ProfessionalService

Name, description, areaServed, serviceArea with GeoCoordinates

Service

serviceType, provider, areaServed, description

BreadcrumbList

Home → Locations → City → Service

Download
4hrs
Development Time

From concept to 790 deployed pages

JJM

Internal Linking Strategy

Each page links to:

Parent location page

Service-location pages link up to their location

Related services

Other services in the same location

Nearby suburbs

Same service in geographically close areas

Main service page

The canonical service page

This creates a strong internal link structure that helps both users and search engines. Users can navigate from Parramatta → Web Design → Nearby suburbs. Search engines can crawl the entire location hierarchy efficiently.

Download
"

Google rewards relevance. We provide it at scale.

— Jordan James

JJM

AI-First Messaging Across All Pages

Every location page reinforces the AI-first positioning with consistent but contextual messaging:

Parramatta

"Parramatta businesses are future-proofing with AI-powered marketing"

Bondi

"Bondi's competitive market demands AI-powered marketing that evolves"

Chatswood

"Chatswood businesses gain an edge with AI-first digital strategies"

The messaging is consistent across all 790 pages, but the context changes. Same positioning, different local relevance.

Results

790
Total Pages
100%
Unique Content
800+
Words/Page
95+
Lighthouse
~3m
Build Time
4h
Dev Time
0
Runtime Queries
Scalability

Lessons Learned

5 Key Takeaways

  • Quality over quantity - Google penalizes doorway pages. Each page needs genuine value.
  • City-specific insights matter - Generic templates fail. Local context makes content believable.
  • Schema markup is essential - ProfessionalService, Service, and BreadcrumbList schemas help Google understand the content.
  • Internal linking compounds - Strong link structure helps both users and search engines navigate.
  • AI-first messaging scales - Consistent positioning across 790 pages without repetition.
Download

See the Pages

Check out the location pages in action

View Locations
JJM

Explore Our Location Pages

See the hub & spoke architecture in action. Our locations hub links to 21 Australian cities, each with 9 service-specific pages.

Example Location Pages:

Related Services:

Each matrix page (e.g., SEO Sydney) combines service expertise with local market knowledge.

The Power of AI-First Development

790 pages. Each one unique. Each one valuable. Location pages aren't about quantity—they're about relevance. AI-generated content that's actually useful beats hand-written content that's generic.

The system scales because the content quality scales with it.

Need Location Pages for Your Business?

We build AI-powered location page systems that scale with your growth. Unique content for every location, proper SEO, and maintainable code—all without manual content creation.

✓ AI-generated unique content✓ Schema markup included✓ Internal linking strategy
View AI SEO Services →

Get More AI-First SEO Insights

Weekly deep dives into AI-powered SEO, location page strategies, and building systems that scale. No fluff, just actionable insights.

Join 500+ marketers building AI-first systems

Frequently Asked Questions

How do you avoid Google's doorway page penalty?
Each page has 800+ words of genuinely unique content based on city-specific data. We don't use simple templates like "We offer [service] in [location]." Instead, the content generator uses local business environment data, industry presence, challenges, and opportunities to create contextually relevant paragraphs. Google rewards relevance; we provide it.
How long does it take to generate all 790 pages?
The seed script runs in about 30 seconds to generate all database records. The build process (static generation of all pages) takes about 3 minutes. Total development time for the entire system was approximately 4 hours. Once built, pages are served from CDN with no runtime database queries.
Can you add new locations without rebuilding everything?
Yes. New locations can be added to the seed script and run incrementally. The database persists across restarts (Neon PostgreSQL), so you only need to add new records. Then rebuild the affected pages. The system is designed for incremental expansion—we plan to add Melbourne, Brisbane, Perth, and Adelaide in future updates.
What schema markup do you include on each page?
Every page includes ProfessionalService schema (with areaServed and GeoCoordinates), Service schema (serviceType, provider, description), and BreadcrumbList schema (Home → Locations → City → Service). This helps Google understand the content structure and improves chances of rich results in search.
How do you maintain consistent messaging across 790 pages?
The content generators use a shared set of AI-first messaging phrases ("exponentially better," "no WordPress," "future-proof") that are woven into location-specific context. The positioning document (AI-FIRST-POSITIONING.md) defines the approved phrases. Each page uses the same messaging but with different local context, so it's consistent without being repetitive.

Social Media Carousel

8 cards • Download as ZIP (images) or PDF (LinkedIn)

Download
1 of 8

500+ Location Pages

Part 2 of Site Infrastructure

Local SEO at scale without duplicate content penalties

JJM
Download
2 of 8

Location Coverage

Sydney
9 services
Melbourne
9 services
Brisbane
9 services
Perth
9 services
Adelaide
9 services
Gold Coast
9 services
790location pages

79 locations × 9 services = 790 unique pages

JJM
Download
3 of 8
790
Unique Pages

Every Sydney suburb with genuinely unique content

JJM
Download
4 of 8

Service × Location

SYD
MEL
BRI
SEO
SEO
SYD
SEO
MEL
SEO
BRI
Ads
Ads
SYD
Ads
MEL
Ads
BRI
Web
Web
SYD
Web
MEL
Web
BRI

Each cell = unique landing page with local context

JJM
Download
5 of 8

Template vs AI-Generated

Before

'We offer [service] in [location]' - duplicate

After

Contextually relevant, locally-aware content

JJM
Download
6 of 8
4hrs
Development Time

From concept to 790 deployed pages

JJM
Download
7 of 8
"

Google rewards relevance. We provide it at scale.

— Jordan James

JJM
Download
8 of 8

See the Pages

Check out the location pages in action

View Locations
JJM

Share This Article

Spread the knowledge

Free Strategy Session

Stop Guessing.
Start Growing.

Get a custom strategy built around your goals, not generic advice. Real insights. Measurable results.

No obligation
30-min call
Custom strategy

Continue Your Learning Journey

Explore these related articles to deepen your understanding of web development

How to Use Claude Code Agent Teams: The Complete Guide

Learn how Claude Code Agent Teams coordinate parallel AI agents to tackle complex projects. Real case study: 7 deliverables in 15 minutes across a plumbing franchise.

11 min read
Read →

Claude Code Background Tasks: How AI Agents Work While You Sleep

Learn how Claude Code background tasks let AI agents run builds, audits, and research autonomously. Discover how we use async agents to manage multiple clients simultaneously.

11 min read
Read →

Claude Code Checkpoints and Rewind: Never Fear a Bad AI Edit Again

Learn how Claude Code's checkpoints and rewind feature automatically saves your code before every AI edit, letting you instantly roll back changes. Complete guide for developers and agencies.

11 min read
Read →