Website Speed Optimization: How a Regional Home Services Brand Achieved 95+ PageSpeed Scores Across 1,122 Programmatic Pages

95+
PageSpeed Score
1,122
Pages Optimized
TL;DR
A regional home services brand with only 15 legacy pages needed a scalable, high-performance web presence. BFM rebuilt the site on a Next.js static architecture, generating 1,175+ pages at build time — including 1,122 programmatic product-location pages — while achieving 95+ Lighthouse PageSpeed scores, sub-200ms server response times, and a 7,733% increase in total content. Phone conversions are tracked at $150 per call.
The Challenge: A 15-Page Legacy Site With No Path to Scale
When this regional home services brand approached BFM, their web presence was a liability, not an asset. The site consisted of just 15 manually-coded HTML pages with no templating system, no component reuse, and no modern build pipeline. Every new page required a developer to write raw HTML from scratch — a process that made scaling to cover their full service territory practically impossible. Duplicate code was scattered across files, branding was inconsistent, and page load performance was poor enough to measurably affect conversion rates. There was no programmatic content strategy, no structured approach to local SEO, and no infrastructure capable of supporting the kind of location-based page coverage that drives organic visibility for home services businesses competing across a multi-city market.
The core business problem was equally clear: slow website performance was costing real revenue. With phone calls valued at $150 per conversion, every visitor who bounced due to a slow-loading page represented a direct and measurable loss. The brand operated across 66 service locations but had almost no dedicated landing pages for those areas — leaving enormous amounts of local search traffic uncaptured. The gap between where the site was and where it needed to be was not a gap of incremental improvement. It required a complete architectural rebuild designed for speed, scalability, and programmatic content generation from the ground up.
Key Performance Metrics
Lighthouse PageSpeed Score
Programmatic Pages Optimized
Server Response Time (TTFB)
Full Site Build Time
Content Growth
Phone Conversion Value
Our Approach: Static-First Architecture Built for Page Speed Optimization
BFM's strategy centered on one non-negotiable principle: every page delivered to a visitor must be pre-rendered static HTML. For a home services brand where every organic visit has a direct conversion value attached to it, there is no acceptable trade-off between content freshness and page speed. The solution was a Next.js application configured for full static export, generating all pages at build time using data-driven route parameters. This approach allowed the team to define products and locations as structured data, then use Next.js's generateStaticParams pattern to enumerate every valid combination — producing 1,122 product-location pages in a single automated build process. No manual page creation. No CMS bottlenecks. No server-side rendering overhead on the critical path.
The architecture was also designed to support multiple layout contexts without polluting the URL structure. Route groups — a Next.js App Router pattern — allowed the team to create distinct header and footer configurations for the main site, the programmatic SEO pages, and internal tools, each with its own optimized layout. This meant the 1,122 high-volume landing pages could use a streamlined, performance-optimized layout while the main product and service pages retained full navigation and conversion-focused components. Infrastructure was provisioned alongside the application, with Nginx serving static assets from disk with one-year cache headers, gzip compression enabled for all text-based content, and automated CI/CD pipelines keeping deployment time to a minimum.
Scaling Location Coverage
The Challenge
15 original pages covered almost none of the brand's 66 service locations, leaving local search traffic uncaptured.
Our Solution
Data-driven generateStaticParams loops across all 66 locations to produce dedicated pages at build time automatically.
- +2,100% growth in location coverage
- +66 service area pages generated without manual work
- +Consistent on-page structure and metadata across all locations
Maintaining 95+ PageSpeed at Scale
The Challenge
Generating 1,122 pages risks performance regressions if components are not optimized for static rendering.
Our Solution
Static HTML export with Nginx caching, optimized font loading via next/font, and 129 purpose-built React components.
- +95+ Lighthouse score maintained across all programmatic pages
- +Sub-200ms server response time
- +No per-request server computation on landing pages
Build Speed at 1,175+ Pages
The Challenge
A site with over 1,175 pages risks slow build times that impede deployment frequency.
Our Solution
TypeScript incremental compilation, pnpm dependency caching in CI, and optimized static export configuration.
- +Full build completes in under 60 seconds
- +Daily deployments are operationally viable
- +Artifact-based deployment prevents environment inconsistencies
Implementation Deep Dive: From 15 Pages to 1,175+ in Four Phases
Before & After
Total Site Pages
Before
15 pages
After
1,175+ pages
7,733% content growth
Location Pages
Before
Minimal coverage
After
66 dedicated location pages
2,100% location coverage growth
Lighthouse PageSpeed Score
Before
Unoptimized — no modern build pipeline
After
95+ across all 1,122 programmatic pages
95+ score achieved at scale
Server Response Time (TTFB)
Before
Unoptimized static HTML delivery
After
<200ms
Sub-200ms TTFB via Nginx static caching
Programmatic Pages
Before
0 — manual HTML only
After
1,122 product-location pages
1,122 pages generated from data at build time
Build Time
Before
No build pipeline — manual file editing
After
Under 60 seconds for 1,175+ pages
Full site generates in under 60s
The project was structured across four sequential phases, each with defined deliverables and acceptance criteria. Phase one focused exclusively on architecture design — establishing the route group structure, layout hierarchy, and static export configuration before a single component was written. This upfront investment paid dividends throughout the build: because the file structure and data patterns were agreed upon before implementation, the development team never had to refactor routing decisions mid-project. Phase two executed the full Next.js application build, including TypeScript configuration with strict mode enabled, all 129 React components, and the dynamic route files with generateStaticParams for every content type. Phase three addressed infrastructure — provisioning cloud hosting, configuring Nginx as a reverse proxy with aggressive caching rules, and establishing the automated CI/CD pipeline via GitHub Actions.
Phase four covered performance validation and deployment hardening. Each of the 1,122 programmatic pages was verified against Lighthouse benchmarks, with the 95+ threshold treated as a hard requirement rather than a target. Server response times were measured under the production Nginx configuration to confirm sub-200ms TTFB across all route types. Deployment pipelines were tested end-to-end on the staging environment before production promotion, and backup archives were confirmed to enable rollback within minutes if needed. The entire project — from architecture design through production launch — was completed inside a tight delivery window, demonstrating that disciplined phased execution is as important to website performance outcomes as any individual technical decision.
Technical Architecture: The Systems Powering 95+ Core Web Vitals Optimization
The application is built on Next.js with App Router and TypeScript in strict mode, exported as fully static HTML at build time. The route structure uses three route groups: a main group for full-navigation pages, a minimal group containing all 1,122 programmatic product-location pages with a streamlined layout optimized for conversion and speed, and an admin group for internal tooling. Fonts are loaded via next/font with CSS variable injection and font-display swap, eliminating render-blocking font requests — a common source of poor Largest Contentful Paint scores. All 129 React components were built with static rendering compatibility as a baseline requirement; no component in the programmatic page tree introduces client-side data fetching on the critical rendering path.
On the infrastructure side, Nginx is configured as the primary traffic handler with separate upstream blocks for production and staging environments. Static assets — JavaScript bundles, CSS, images, and web fonts — are served directly from disk with one-year immutable cache headers, bypassing the Node.js process entirely for the majority of byte transfers. The Node.js process managed by PM2 handles only dynamic routes and API endpoints, keeping its memory footprint well within the allocated limit. Gzip compression is enabled for all text-based MIME types, SSL terminates at Nginx with TLS 1.2 and 1.3 only, and security headers including HSTS, X-Frame-Options, and X-Content-Type-Options are applied globally. The result is a hosting stack where the 95+ PageSpeed score is a product of architecture, not luck.
-Legacy HTML Site — Before Optimization
- -15 manually-coded HTML pages
- -No templating or component reuse
- -Duplicate code across all pages
- -No CI/CD pipeline — manual deployments only
- -No location-specific landing pages for 66 service areas
- -Unoptimized assets and no build pipeline
- -Poor Lighthouse scores impacting local search visibility
+Next.js Static Architecture — After Optimization
- +1,175+ pages generated at build time
- +1,122 programmatic product-location pages
- +129 reusable React components including 5 GEO components
- +95+ Lighthouse PageSpeed score across all pages
- +Sub-200ms server response time (TTFB)
- +Full site builds complete in under 60 seconds
- +Automated CI/CD with staging and production environments
Results & Impact: Website Performance Metrics That Drive Revenue
The results of this website speed optimization engagement are measurable at every layer of the stack. At the page performance level, all 1,122 programmatic pages achieve 95+ on Lighthouse across Performance, Accessibility, and Best Practices — with the SEO audit returning a perfect 100. Server response time sits under 200ms, meaning visitors begin receiving HTML within a fifth of a second of their browser making a request. These numbers matter specifically in home services, where the primary conversion action is a phone call valued at $150. Faster pages reduce the friction between a local search and a dialed number. At the content scale level, the site grew from 15 pages to 1,175+ — a content expansion of 7,733% — covering all 66 service locations that were previously unrepresented in the site's page inventory.
Location coverage grew by 2,100%, from a handful of city references in page copy to 66 dedicated service area pages each with unique metadata, structured location data, and product-specific content combinations. The build infrastructure supporting these results is deliberately lean: the full 1,175+ page site builds in under 60 seconds, enabling deployment frequency that most agencies reserve for small brochure sites. The CI/CD pipeline auto-deploys to staging on every push to the main branch and promotes to production via a protected branch, with HTTP health checks confirming successful deployment before the workflow completes. This combination of front-end performance, content scale, and operational automation is what separates a website speed optimization engagement from a simple performance audit.
Total Pages Generated at Build
Location Pages Covering Full Service Territory
React Components Built
Specialized GEO Components
Location Coverage Growth
Total Content Growth
Implementation Timeline
Architecture Design
1 weekDesigned the full Next.js App Router route group structure, layout hierarchy for main, minimal, and admin contexts, static export configuration, and generateStaticParams patterns for all dynamic route types. Established the data model separating SEO products from GEO location data to enable the 1,122-page programmatic matrix.
Application Build
2 weeksBuilt the Next.js application with TypeScript strict mode, implementing all 129 React components including 5 specialized GEO components. Developed dynamic route files for the 1,122 product-location pages, 66 service area pages, and gallery project pages. Configured next/font for performance-optimized typography and implemented dynamic metadata generation for all programmatic routes.
Infrastructure & CI/CD
1 weekProvisioned cloud hosting with Nginx reverse proxy configured for static asset caching with immutable headers, gzip compression, and TLS 1.2/1.3 SSL. Implemented GitHub Actions CI/CD pipeline with automated staging deployment on main branch push and protected production promotion. Configured PM2 process management with auto-restart and health check endpoints.
Performance Validation & Launch
Concurrent with Phase 3Validated 95+ Lighthouse scores across all 1,122 programmatic pages, confirmed sub-200ms server response time under production Nginx configuration, and verified full site build completing in under 60 seconds. Executed end-to-end deployment pipeline testing on staging before production promotion. Confirmed backup and rollback procedures functional.
Key Takeaways: What Makes This Page Speed Optimization Approach Repeatable
*Key Takeaways
- 1Static-first architecture is the single highest-leverage decision for achieving 95+ PageSpeed scores at scale — it eliminates server computation from the critical rendering path entirely.
- 2Data-driven generateStaticParams patterns allow a single route file to produce 1,122 pages without manual intervention, making content scaling a configuration change rather than a development project.
- 3Nginx-level caching for static assets — with one-year immutable headers on versioned files — is essential to achieving sub-200ms server response time regardless of traffic volume.
- 4Route groups in Next.js App Router enable distinct layout optimization per page category without polluting URL structure, allowing programmatic SEO pages to use a leaner layout than marketing pages.
- 5Build speed is a deployment enabler: a full site build completing in under 60 seconds means the team can deploy fixes, content updates, and new location pages multiple times per day without friction.
- 6For home services brands where phone calls are valued at $150 per conversion, website performance is a direct revenue variable — not a technical vanity metric.
- 7129 reusable React components including 5 GEO-specific components ensure that adding new locations or products to the 1,122-page matrix requires only data updates, not new component development.
Lessons Learned: What We'd Replicate on Every Home Services Website Optimization
The most important validation from this project is that architecture decisions made before a single line of application code is written determine the performance ceiling of the final product. The choice to use static export over server-side rendering was made in phase one, and every subsequent technical decision — component design, caching strategy, infrastructure configuration — was made in service of that constraint. Teams that attempt to optimize performance after architecture is set are fighting uphill. The route group structure, the TypeScript strict mode configuration, and the data separation between SEO products and GEO locations all traced back to deliberate upfront design. On any future engagement of similar scope, BFM would replicate this architecture-first sequence without modification.
One operational lesson that applies broadly: build time is a proxy metric for deployment health. When the full 1,175+-page build completes in under 60 seconds, the team has immediate feedback that nothing in the generateStaticParams pipeline is broken, that TypeScript compilation succeeded, and that the artifact is ready for deployment. Longer build times create uncertainty and discourage frequent deployment. Investing in incremental TypeScript compilation, pnpm caching in CI, and a lean dependency tree is not a developer experience optimization — it is a reliability investment. The second operational lesson: always deploy to a staging environment first. The branch-based workflow where the main branch auto-deploys to staging and a protected production branch gates production promotion caught configuration issues before they affected live traffic or the 95+ PageSpeed scores the site had earned.
“We went from manually updating HTML files to having over a thousand optimized pages go live automatically. The site loads faster than anything we've had before, and we're finally showing up in searches for every area we actually serve. The build process is so fast that our team isn't afraid to make updates anymore.”
— Operations Director, Regional Home Services Brand, Midwest Market
Frequently Asked Questions About Website Speed Optimization at Scale
Home services brands and their marketing teams consistently ask the same questions when evaluating a website performance engagement of this scope. The answers below are drawn directly from the implementation documented in this case study — every metric referenced traces to the verified results of this project.
Technology Stack
Frequently Asked Questions
The brand achieved a 95+ Lighthouse PageSpeed score across all 1,122 programmatic pages, including Performance, Accessibility, and Best Practices categories — with SEO scoring 100.
1,122 programmatic product-location pages were optimized as part of the static site build, contributing to a total footprint of 1,175+ pages generated at build time.
Server response time (Time to First Byte) is under 200ms, achieved through static HTML delivery via Nginx with aggressive caching headers and gzip compression.
The full static site build — generating all 1,175+ pages including the 1,122 programmatic pages — completes in under 60 seconds using Next.js with pnpm and optimized TypeScript compilation.
Each inbound phone call is valued at $150 per conversion. Faster page loads reduce bounce rates and increase the likelihood that local searchers complete a call-to-action, directly impacting revenue from the 1,122 location-specific landing pages.
Content grew by 7,733% — from just 15 original pages to a programmatically generated site with 1,175+ pages covering 66 service locations.
129 React components were developed, including 5 specialized GEO components designed to render location-specific content efficiently without sacrificing page performance or Core Web Vitals scores.
Related Case Studies
Ready to achieve similar results?
Get a custom growth plan backed by AI-powered systems that deliver measurable ROI from day one.
Start Your Growth Engine