Hardscape / Outdoor Living

Full-Stack Digital Transformation for a Premium Hardscape Contractor

We tore down a failing WordPress site, rebuilt the entire platform on Next.js, restructured Google Ads from scratch, and deployed a 176-page local SEO engine, turning a broken digital presence into a lead generation system built for 2026.

42→90+
Mobile PageSpeed
342+
Pages Built
176
City/Service SEO Pages
92
Redirects Mapped
7
Ad Groups (from 2)

The Situation

Sequoia Stonescapes is a premium hardscape contractor serving the Willamette Valley in Oregon through Vancouver, WA. The owner is CMHA-certified, has completed commercial projects for Oregon State University, maintains a partnership with Western Interlock, uses no subcontractors, and backs every job with a 5-year craftsmanship warranty. The company builds driveways, patios, retaining walls, pool decks, and full outdoor living spaces using 100% American-made materials.

None of that came through in the digital presence. When we took over the account, the owner had been working with an agency running a playbook built for 2020, not 2026. The tactics were outdated, the targeting was sloppy, and the results were getting worse every quarter.

This engagement covered everything: website rebuild, paid media management, SEO strategy, analytics infrastructure, conversion tracking, structured data, and content strategy.

What We Inherited

The previous agency had left the client with a WordPress site scoring a 42 on Google's mobile PageSpeed test. For context, Google considers anything below 50 to be "poor" performance, and mobile speed directly impacts both search rankings and conversion rates. During Q4 2025, the Largest Contentful Paint metric degraded so badly that Google Search Console flagged a large number of URLs as having "Poor" mobile performance.

Traffic That Went Nowhere

The site was pulling roughly 20,000 annual visitors, but the traffic was almost useless. About 60% of organic sessions came from informational searches like "brick paver patterns" and "paver driveway advantages." These are DIY researchers in Los Angeles, Atlanta, and Dallas looking for ideas, not homeowners in Salem or Portland ready to hire a contractor. January 2026 analytics showed top organic sessions coming from Los Angeles, San Jose, Atlanta, Dallas, Pocatello, and Las Vegas. Not Portland. Not Salem. Not Corvallis.

Collapsing Local Rankings

While blog posts attracted a national audience, the local, transactional keywords that actually generate leads were collapsing. Rankings for terms like "hardscape installer near me," "hardscaping companies," and "paver patio contractors" dropped an average of 19.44 positions over the course of the year. Overall organic visibility declined 24.68%, with 189 keywords losing rank compared to only 48 improving. The site was converting at 0.3% and generating 5 to 7 leads per month.

Paid Media Waste

Over $8,200 of $13,200 total annual Google Ads spend was dumped into a Performance Max campaign that lost 56.32% of its conversions year over year. A Display campaign spent $580 and produced exactly 2 conversions at $290 each. The one thing that was actually working, a tightly targeted Search campaign, was underfunded and undermaintained. The "General Hardscape" ad group within that Search campaign grew conversions 173.81% year over year, but its gains were completely buried by waste everywhere else.

The Core Problem: Intent Mismatch

We diagnosed the core problem as an "intent mismatch." The marketing was successfully reaching people at the top of the funnel who wanted to learn about hardscaping as a concept, while completely failing to reach people at the bottom of the funnel who were ready to hire a contractor in the Willamette Valley.

What We Built

This wasn't a tune-up. We rebuilt every layer of Sequoia Stonescapes' digital presence from the ground up: site architecture, content, paid media, SEO, analytics, and infrastructure.

Complete Website Rebuild: WordPress to Next.js

We tore down the WordPress site and rebuilt the entire platform on Next.js 14 with TypeScript and Tailwind CSS, deployed on Vercel. This wasn't a theme swap or a migration. It was a ground-up rebuild of the site architecture, content structure, and technical foundation.

The new site launched with 342+ static pages: 8 service pages, 22 city landing pages, a 176-page city-by-service matrix, 143 migrated and reformatted blog posts, case studies, a gallery, and supporting pages including About, Contact, Privacy, and a Financing page integrated with Lyon Financial.

Every service page was written from voice memo transcripts recorded by the owner. No AI-generated filler copy. We provided targeted questions for each service, the owner recorded thoughts on a phone, and we rewrote the transcripts in their voice. The result is copy that sounds like a real contractor talking about the work, because it is.

The city-by-service matrix pages are the local SEO engine. Each page targets the exact keyword pattern homeowners search: "paver driveway installation Portland," "retaining wall contractor Salem," "patio paver installer Lake Oswego." Rather than spinning up 176 pages with the city name swapped into template copy, we built a system where 70-80% of the service content is shared from centralized data files and the remaining 20-30% is a genuine localization layer with city-tagged reviews, regional photo fallbacks, and localized headlines and meta descriptions.

Lead Capture & Conversion Infrastructure

We replaced a broken contact form with a multi-step ProjectPlanner form and a CostEstimator widget. The lead pipeline is fully wired: form submissions trigger a Resend email notification to the owner and a branded confirmation email to the prospect, then fire through a Zapier webhook into SynkedUP, the client's existing CRM for estimates, proposals, and job costing. reCAPTCHA v3 is configured for spam protection.

We also built a feedback funnel page that routes happy customers directly to Google Business Profile to leave a review, and unhappy customers to a private internal feedback form. The page is excluded from navigation, the sitemap, and search indexing. It exists purely as a link sent after completing a project.

Google Ads Rebuild

We rebuilt the Search campaign from scratch. The old structure had two broad ad groups. The new structure has 7 tightly themed ad groups: Paver Patios, Paver Driveways, Retaining Walls, Outdoor Living, Hardscape General, Pool Decks, and Walkways & Steps. Every keyword uses exact or phrase match only. Broad match is disabled until there's enough conversion data to let the algorithm work responsibly.

We added 80+ negative keywords across 5 categories (DIY/informational queries, material/wholesale searches, competitor names, job seekers, and irrelevant terms) to stop budget from leaking into searches that will never produce a lead.

Each ad group points to its corresponding service page on the new site, not the homepage. Full ad extensions are configured: sitelinks to service pages, callout extensions highlighting free estimates and the 5-year warranty, call extensions, and structured snippets.

Geographic targeting is set to "Presence" only, not "Presence or interest," the default that causes ads to show to people researching an area rather than living in it. Targeting is scoped to specific Oregon counties plus Clark County, Washington. The dead Display campaign was paused. Duplicate and irrelevant conversion actions, including an "Android installs" action for a business that doesn't have an app, were identified for cleanup.

Conversion Tracking & Analytics

We set up a GA4 property, connected Google Search Console as a domain property, and implemented Google Ads conversion tracking via direct code on the Next.js site. Active conversion actions include website call click tracking with call forwarding, calls from ad extensions, and lead form submissions.

We audited the existing conversion actions and identified dead weight: a duplicate "Submit lead form" action, a "Phone Lead" action recording zero conversions, and the Android installs action, all of which were cluttering the account and potentially confusing Smart Bidding.

Structured Data & AI Search Optimization

We consolidated the site's schema markup into a single, comprehensive LocalBusiness entity served from the root layout. This isn't just about traditional rich results in Google Search. Structured data is increasingly how AI systems like Google AI Overviews, ChatGPT search, and Perplexity identify and recommend local businesses.

The schema includes the owner as a named founder with typed credentials (CMHA certification, Belgard partnership, Western Interlock relationship), the business's service area defined by county-level AdministrativeArea objects aligned to the Google Business Profile, service catalog markup, and blog authorship attributed to the owner as a named Person entity.

Every city-by-service matrix page generates its own FAQPage schema. Case study pages carry structured data for the projects described.

Pre-Migration SEO Audit & Redirect Mapping

Before cutting over to the new site, we ran a complete pre-migration audit using Screaming Frog, a Google Search Console pages export, and the existing WordPress sitemap. We cross-referenced every indexed URL against the new site's routes and redirect map, identifying gaps where live URLs with traffic or backlink equity would have 404'd after cutover.

92 redirects were configured in the final build. We caught a missing redirect variant for the Eugene city page and fixed 4 broken internal href paths that the audit surfaced. The redirect strategy used middleware with slug validation rather than wildcard redirects in next.config.mjs, because wildcard patterns are dangerous on a site with a city/service matrix where slug collisions can silently swallow legitimate pages.

The site's existing backlink profile of 581 links across 280 referring domains was preserved through the migration.

The Results

A complete digital transformation, from a failing WordPress site to a 342+ page lead generation platform built on modern infrastructure.

Site Performance

42→90+

Mobile PageSpeed Score

342+

Total Indexed Pages

198

City-Level Landing Pages

92

Verified Redirects

Full

CRM Pipeline (Resend + Zapier + SynkedUP)

Full

Consolidated Schema (LocalBusiness, FAQ, Person)

Paid Media Restructure

2→7

Service-Specific Ad Groups

80+

Negative Keywords (5 Categories)

Exact

& Phrase Match Only

1:1

Ad Group → Service Page Alignment

Presence

Only Geo Targeting (County-Level)

Paused

$290/Conv Display Campaign

Organic Search Positioning

The city-by-service matrix created 176 new pages targeting the exact local, transactional keywords the site was losing rank for. Instead of relying on a handful of blog posts to rank for "paver patio" nationally, the site now has dedicated pages targeting "paver patio installation Portland," "paver patio installation Salem," "paver patio installation Lake Oswego," and so on across all 8 services and 22 cities.

The schema markup positions the business for AI-driven search, where structured data about credentials, service areas, and expert attribution helps AI systems recommend the business accurately.

Key Decisions and Why They Mattered

Voice Memos Over AI Copy

Every word of service page content comes from the owner talking about the work. This was non-negotiable. The owner's expertise and personality are the competitive advantage. AI-sounding copy would have made the business sound like every other contractor website. The extra effort of recording, transcribing, and rewriting produced pages that convert because they sound like a real person who knows what they're doing.

Exact Match Over Broad Match

The previous agency had broad match enabled, letting Google show ads for whatever it felt was "related" to the keywords. For a local contractor, that means budget bleeds into searches for DIY tutorials, material suppliers, and contractor jobs in other states. We locked everything to exact and phrase match until the account builds enough conversion history to responsibly expand.

Middleware Redirects Over Wildcard Redirects

A subtle technical decision that prevented a real problem. Wildcard redirect patterns in Next.js config files will silently match and redirect URLs that should be real pages on a site with a complex slug structure. Using middleware with explicit slug validation ensures redirects only fire for the old URLs they're intended to catch.

Consolidated Schema Over Fragmented Snippets

Rather than scattering disconnected schema snippets across individual pages, we built a single LocalBusiness entity that serves as the authoritative structured data source for the entire site. Individual pages layer on additional schema (FAQPage, case study data) but inherit from the centralized business entity. This gives search engines and AI systems one clean, comprehensive picture of the business.

Data-Driven Architecture Over Hardcoded Content

All content lives in TypeScript data files with typed interfaces. Service descriptions, city data, case studies, core values, and testimonials are all pulled from centralized data files. This means updating a service description, adding a new city, or swapping in a real customer review is a data file change, not a hunt through 30 different page files.

Scope of Work

Website

Full Next.js 14 / TypeScript / Tailwind CSS rebuild on Vercel. 342+ static pages. Multi-step lead form. Cost estimator. Financing integration. Feedback funnel. Branded email templates. Blog migration with 143 posts.

Paid Media

Google Ads account audit and full Search campaign rebuild. 7 ad groups, 80+ negative keywords, full ad extensions, conversion tracking audit, geographic and match type corrections.

SEO

92 redirect map. Pre-migration crawl audit. City-by-service matrix (176 pages). Consolidated structured data. FAQPage schema. Blog authorship attribution.

Analytics

GA4 property. Google Search Console domain property. Google Ads conversion tracking. Zapier integration to SynkedUP CRM.

Content Strategy

Voice memo workflow for service page copy. Case study development. Review request email system. Feedback funnel for review generation.

Infrastructure

DNS cutover planning (preserving existing email). Resend transactional email. reCAPTCHA v3. Environment variable management. Domain verification.

Want Results Like This for Your Business?

Score your marketing in 3 minutes. See how your website, ad campaigns, and SEO stack up, then get a clear path to growth.

Last updated: