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.
Building JJM: Site Infrastructure Series
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.
500+ Location Pages
Part 2 of Site Infrastructure
Local SEO at scale without duplicate content penalties

The Math
79 Sydney suburbs × 9 services = 711 service-location pages + 79 standalone location pages
Location Coverage
79 locations × 9 services = 790 unique pages

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
Every Sydney suburb with genuinely unique content

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:
Service × Location
SYD
MEL
BRI
SYD
MEL
BRI
SYD
MEL
BRI
Each cell = unique landing page with local context

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[]
Template vs AI-Generated
'We offer [service] in [location]' - duplicate
Contextually relevant, locally-aware content

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
From concept to 790 deployed pages

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.
Google rewards relevance. We provide it at scale.
— Jordan James

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
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.
See the Pages
Check out the location pages in action

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:
- SEO Services - Our core SEO offerings
- Local SEO - Location-specific optimization
- Web Development - AI-first sites
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.
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?▼
How long does it take to generate all 790 pages?▼
Can you add new locations without rebuilding everything?▼
What schema markup do you include on each page?▼
How do you maintain consistent messaging across 790 pages?▼
Building JJM: Site Infrastructure Series
Social Media Carousel
8 cards • Download as ZIP (images) or PDF (LinkedIn)
500+ Location Pages
Part 2 of Site Infrastructure
Local SEO at scale without duplicate content penalties

Location Coverage
79 locations × 9 services = 790 unique pages

Every Sydney suburb with genuinely unique content

Service × Location
SYD
MEL
BRI
SYD
MEL
BRI
SYD
MEL
BRI
Each cell = unique landing page with local context

Template vs AI-Generated
'We offer [service] in [location]' - duplicate
Contextually relevant, locally-aware content

From concept to 790 deployed pages

Google rewards relevance. We provide it at scale.
— Jordan James

See the Pages
Check out the location pages in action

Building JJM: Site Infrastructure
Share This Article
Spread the knowledge