Skip to content
Case Study

Clog Heroes

A WordPress-to-Astro rebuild for a Fredericksburg, Virginia plumbing company, carrying over 219 blog posts and years of indexed URLs instead of starting over.

Full-page screenshot of the Clog Heroes website

Project Overview

Clog Heroes is a plumbing, sewer, and drain company based in Fredericksburg, Virginia, serving homes, rentals, and businesses across the surrounding counties. Its website is where customers check services and pricing, read reviews, and book work. It had run on WordPress for years: archived copies show a Beaver Builder build in early 2025 and an Elementor build on the Astra theme by mid-2026.

I rebuilt the site as a static Astro site with React islands and launched it on clogheroes.com in September 2026. The rebuild kept the company's blog and search footprint intact, restructured services and service areas for local search, and connects the site's lead forms to the company's GoHighLevel CRM.

The Challenge

The old site was not small. More than 2,000 URLs were indexed on the WordPress URL scheme, including a blog of more than 200 posts, so a rebuild that changed the structure risked years of accumulated search visibility. Every old address needed a destination on the new site before launch, and none of those rules could be allowed to shadow a real page.

The company also competes across a wide area from a single Fredericksburg location. It needed service and service-area pages that cover that territory without turning into duplicate content, and copy that stays inside what the business can stand behind: licensed and insured, a price confirmed before work starts, and a clog-free guarantee scoped to the lines it clears.

My Role

I handled the rebuild end to end, from the build and content migration to launch and lead automation.

  • Building the site in Astro 7 with React islands and Tailwind CSS on the Clog Heroes design system
  • Migrating the WordPress blog: 219 posts as Markdown with their original slugs and self-hosted hero images
  • Mapping the old URL scheme to the new one and shipping the redirect rules with the site
  • Structuring services, counties, cities, and communities for local search, with structured data and a Rank Math-style sitemap index
  • Deploying on Cloudflare and connecting the estimate and contact forms to GoHighLevel through a relay Worker
  • A post-launch SEO audit and the fixes that came out of it

The Solution

Everything on the site renders from data. Services, service areas, communities, packages, and guarantees live in source-of-truth modules, and the pages, the navigation mega menu, the sitemaps, and llms.txt all read from the same lists, so adding a service or a community is a one-file change that updates the whole site.

The blog moved over as a content collection: 219 posts converted to Markdown with their original slugs, and every hero image self-hosted so nothing would break at cutover. The old WordPress URL scheme is covered by a generated redirect map, verified against the built site so that no rule shadows a real page, and shipped as Cloudflare redirect rules next to the static files.

Local search got a real architecture: two service pillars with 37 service pages, county and city pages, and community pages that carry the coverage across the region, each with its own copy and structured data (Plumber, FAQPage, and BreadcrumbList schema), plus a Rank Math-style sitemap index split by page type.

Leads go somewhere useful. A full-service estimate wizard and the contact form post to a small Cloudflare Worker that relays each lead into GoHighLevel, where the dispatcher notification and customer auto-reply emails I designed go out. The reviews section is built to pull the company's Google rating and reviews from the Google Places API at build time.

Technical Highlights

Redirects that keep rankings

A generated redirect map covers the old WordPress URL scheme, verified so no rule shadows a built page, and ships with the site on Cloudflare.

Everything renders from data

Services, areas, communities, and packages live in source-of-truth modules that feed the pages, mega menu, sitemaps, and llms.txt.

Local-SEO architecture

37 service pages and more than 100 service-area and community pages, each with structured data and its own sitemap group.

Leads into GoHighLevel

The estimate wizard and contact form post to a relay Worker that feeds GoHighLevel, with dispatcher and customer notifications.

Results & Outcome

Verified Results

  • Archived copies of clogheroes.com show the WordPress site it replaced, with Beaver Builder in January 2025 and Elementor on the Astra theme in June 2026; as of September 14, 2026 the live site is the Astro build.
  • The live sitemap index lists 37 service pages, 103 service-area and community pages, and 219 blog posts, and old WordPress addresses such as /about-us/ and /contact-us/ return 301 redirects to their new pages (checked September 14, 2026).
  • The homepage source carries Plumber, FAQPage, and BreadcrumbList structured data, and the site serves an llms.txt guide (checked September 14, 2026).

Project Outcomes

  • Replaced a page-builder WordPress site with a static build: no CMS or plugins to patch, and pages served as plain files from Cloudflare's edge.
  • Kept the company's accumulated search footprint by giving every indexed URL a destination instead of starting over.
  • Gave local search a full map of the territory: services, counties, cities, and communities, each with structured data.
  • Turned form submissions into CRM leads with automatic follow-up instead of messages waiting in an inbox.

Let's Build Something That Works

Whether you need a site built, fixed, or maintained, I'm here to help. Tell me what's going on.

General Santos City, Philippines[email protected]
Let's Work Together