Local services & programmatic SEO
AAA Plumbing and Heating
Programmatic SEO Next.js site for a UK plumbing brand—dynamic service pages, local guides, and a Supabase-backed visitor audit dashboard.

The challenge
A regional plumbing and heating business needed rankable service and location pages at scale, trustworthy NAP/phone CTAs, and operational visibility into call-funnel sessions—without building a full CMS or online booking platform.
The solution
AAA Plumbing and Heating: Programmatic SEO Next.js site for a UK plumbing brand—dynamic service pages, local guides, and a Supabase-backed visitor audit dashboard. Scalable local presence across Berkshire and Middlesex without hand-built page sprawl. Tekvers delivered a maintainable local services & programmatic seo system for AAA Plumbing and Heating using Next.js, TypeScript, Tailwind CSS, Framer Motion, with phased rollout, operator workflows, and documentation suited to long-term ownership.
Approach
Typed local content model
Services (`src/lib/services.ts`), guides registries, keyword/local guides, location data, and blogs live as typed modules and `data/` combination exports (~1,000 service×keyword rows). New coverage ships as data, not one-off page builds.
Programmatic generation + crawl hygiene
App Router routes for `/services/[slug]`, `/guides/[slug]`, and `/blogs/[slug]`; sitemap index with core and keyword chunks; middleware 308 redirects for legacy guide URL shapes; `X-Robots-Tag: noindex` on admin and non-production hosts.
Visitor audit on Supabase
Cookie consent + client beacon post events into `audit_events` and `visitor_sessions` (RLS on, service-role writes). Funnel steps track landing → browse → service → guide → contact → call; the admin UI surfaces qualified journeys and SEO category snapshots.
Deliverables
- ▸Next.js App Router marketing/SEO architecture for AAA Plumbing and Heating
- ▸Nine plumbing/heating service pages (boiler, emergency, bathrooms, landlord certificates, and more)
- ▸Programmatic guides from keyword and local registries
- ▸Blog index/detail surfaces seeded in TypeScript
- ▸Chunked sitemaps, robots/manifest, JSON-LD organization and breadcrumbs
- ▸`llms.txt` / `llms-full.txt` discovery endpoints
- ▸Consent banner, client audit beacon, and password-protected `/admin/audit` dashboard
- ▸Supabase PostgreSQL schemas for `audit_events` and `visitor_sessions`
Outcomes
- ▸Scalable local presence across Berkshire and Middlesex without hand-built page sprawl
- ▸Phone-led conversion paths with NAP consistency and structured data
- ▸Operator visibility into sessions that reach call CTAs
- ▸Expansion path for new towns/keywords as data rows, not redesigns
Impact
AAA Plumbing covers towns and services programmatically—and can see which pages push visitors toward a call. Tekvers turned SEO scale into a data problem and added a lean Supabase audit layer so organic growth is measurable, not guessed.
Tech stack
Want something similar?
I build production systems like AAA Plumbing and Heating—from architecture through launch. Tell me what you need.
Contact me →