Local-Business SEO Sites.
A repeatable programmatic local-SEO system for local service businesses, used on four client sites, from 75 to 2,755 generated service-in-city pages each.
Each site turns a keyword-and-location plan into service-in-city pages (pre-rendered, or rendered on first visit and cached) with local proof, LocalBusiness structured data and internal links. Content comes from typed files, a Sanity CMS with webhook revalidation, or an SEO spreadsheet, and content checks run before deploy. Old-site URLs are redirected so existing rankings survive the move, and a sticky call bar and quote form turn visits into leads.
- Role
- Solo developer · Softaims
- Time
- 2026
- Stack
- Next.js · TypeScript · Sanity · PostgreSQL
- Access
- Private: client projects
Constraints
Dozens to thousands of pages per site, each of which has to be genuinely different, fast, and safe to launch over an existing site without losing its search rankings.
Key decision
On the 75-page site I made content quality a build-time gate: a validator compares page intros for similarity and fails the build on near-duplicates, or on any page without its own local details and FAQs. On all four, indexing stays off until it's explicitly switched on, so a staging site can't be indexed by accident. The playbook got better with each site: typed content, then a CMS, then a spreadsheet-driven build. It isn't a shared package yet.
- Plan: A keyword-and-location plan (typed files, a Sanity CMS or an SEO spreadsheet) drives every page.
- Generate: It becomes service-in-city pages, pre-rendered or rendered on first visit and cached, each with local proof, LocalBusiness structured data and internal links.
- Check: On the 75-page site, a validator compares page intros at build time and fails the build on near-duplicates.
- Deploy: Once every page is distinct, it deploys. On all four sites, indexing stays off until it's switched on, so a staging site can't be indexed by accident.
- Launch: When a site launches, old URLs redirect to their new pages, so the rankings they'd earned survive the move.
Plan. A keyword-and-location plan (typed files, a Sanity CMS or an SEO spreadsheet) drives every page.
4 sites · 75 to 2,755 generated pages each
Stack
Next.js · TypeScript · Sanity · PostgreSQL · Tailwind CSS · GSAP · Vitest · Playwright
Want to talk about this build?
I'm open to remote full-time roles and freelance work, and happy to walk through the decisions behind it.