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.

The Goal

Local SEO at Scale

PROBLEM

Every Sydney suburb is a potential customer, but manual content creation is impossible

SOLUTION

AI-generated unique content for 790 pages that passes Google's quality guidelines

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

The Scale

790
Location Pages Generated
79 locations × 9 services = 711 combinations + 79 standalone pages. All unique.
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

Google's Warning

Doorway Pages = Penalty

Google explicitly penalizes 'doorway pages' - thin content pages that exist only to rank for location keywords. We needed genuinely useful 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:

Content Strategy

What Makes Each Page Unique

  • 1

    City-specific business insights

  • 2

    Local market challenges

  • 3

    Industry presence data

  • 4

    Service-specific benefits

  • 5

    800+ words per page

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[]

Database Architecture

Two Tables Drive Everything

  • 1

    locations: slug, name, region, description, keywords

  • 2

    service_locations: service + location + unique content

  • 3

    Drizzle ORM for type safety

  • 4

    Neon PostgreSQL (AWS Sydney)

  • 5

    Data persists across restarts

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

SEO Implementation

Schema Markup on Every Page

  • 1

    ProfessionalService schema

  • 2

    Service schema with areaServed

  • 3

    BreadcrumbList for navigation

  • 4

    GeoCoordinates for local search

  • 5

    FAQ schema where applicable

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.

AI-First Messaging

Consistent Across 790 Pages

  • 1

    AI Website Development

  • 2

    AI Search Engine Optimization

  • 3

    AI Google Ads Management

  • 4

    No WordPress, no legacy systems

  • 5

    Exponentially better over time

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

System Performance

790 pages
Start
~3 min build
Mid
95+ Lighthouse
Now

100% unique content. CDN-cacheable. No runtime database queries.

JJM

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.

Key Insight

Key Takeaway
Quality at Scale

Location pages aren't about quantity. They're about relevance. AI-generated content that's useful beats hand-written content that's generic.

JJM

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 →

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 • Click to download individually or as ZIP

Download
Building JJM: Locations
1 of 8

Building 500+ Location Pages with AI-Generated Content

Building JJM: Location Pages

Local SEO at scale without duplicate content penalties

JJM
Download
Building JJM: Locations
2 of 8
790
Unique Pages

Every Sydney suburb with genuinely unique content

JJM
Download
Building JJM: Locations
3 of 8
4hrs
Development Time

From concept to 790 deployed pages

JJM
Download
Building JJM: Locations
4 of 8

Each Page Includes

  • 1

    800+ words unique content

  • 2

    Local business context

  • 3

    Schema markup

  • 4

    Service-specific info

  • 5

    City-specific data

JJM
Download
Building JJM: Locations
5 of 8

Template vs AI-Generated

Before

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

After

Contextually relevant, locally-aware content

JJM
Download
Building JJM: Locations
6 of 8

Technical Stack

  • 1

    Neon PostgreSQL

  • 2

    Static generation

  • 3

    CDN delivery

  • 4

    Incremental builds

JJM
Download
Building JJM: Locations
7 of 8
"

Google rewards relevance. We provide it at scale.

— Jordan James

JJM
Download
Building JJM: Locations
8 of 8

See the Pages

Check out the location pages in action

View Locations
JJM
Series
Part 1

Building JJM: Location Pages

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

AI Dev Session: Building Social Carousel Cards & Admin Dashboard in 3 Hours

Building social carousel cards, admin dashboard, and fixing a sneaky TOC bug—in 3 hours.

8 min read
Read →

Volume 7: Branding Our Own Blog Series

The meta moment when we built custom branding for the Pink Slips NSW blog series - pink gradients, dual logos, and conditional styling in 2 hours.

6 min read
Read →

Building a Multi-Technician Calendar System for Pink Slips NSW

Building multi-technician calendar with drag-and-drop scheduling. 5 bugs and how we fixed them.

18 min read
Read →