Portfolio / A Clean Carpet Co
Carpet & Upholstery Cleaning

A Whidbey Island institution, rebuilt to win Skagit County.

A Clean Carpet Co has been cleaning carpet since 1989, and every bit of its Google footprint sits on the islands: three business profiles in Oak Harbor, Freeland, and Anacortes, 102 reviews, not one of them below five stars, plus Best of Whidbey 2025. But the company's center of gravity has moved. The owner lives in Sedro-Woolley, the rug facility is in the valley, and the growth is in Skagit County, where none of that island proof shows up in a map pack. We rebuilt the site to lead with Skagit County, and 31 households requested a quote in the first eighteen days.

Custom Website DesignMulti-Location Local SEOMonthly SEO ProgramLead Pipeline + Tracking
Visit Website
A Clean Carpet Co homepage showing a sunlit living room with a view of the water, the headline Skagit County's carpet cleaning experts since 1989, and a quote form beside it

The Challenge

Caleb Cate runs a company his family started in 1989. A truck-mounted rig on every job, and the only commercially located area rug cleaning facility in the region, which means rugs come to a real washing floor instead of being scrubbed in place on somebody's living room carpet. Across three Google Business Profiles there are 102 reviews and a 5.0 average on every one of them. In a trade where the entire buying decision is "will these people be careful in my house," that is close to unbeatable.

The catch is where those listings are. Oak Harbor, Freeland, and Anacortes: all three are on Whidbey and Fidalgo. That is where the company grew up and where the reviews accumulated. But the business has moved. Caleb lives in Sedro-Woolley now, the rug facility is on the valley floor, and the trucks are in Skagit County most days of the week. In Mount Vernon and Burlington, where the company wants to grow, it has no Google Business Profile and no review history at all. Thirty-seven years of proof, none of it visible in the market that matters most.

The website was not going to help. It was a WordPress site that had clearly begun life as a California carpet cleaner's site and been reskinned, its tag archives still stuffed with Folsom, Cameron Park, and El Dorado Hills terms, none of them with a single post behind them. Every page answered at two URLs at once, both the nested path and a copy at the site root, so the same content was crawlable twice over. And it still read as an island business.

So the brief was not "modernize the site." It was: move a 37-year-old brand's center of gravity off the island and into the county, in the eyes of Google and of a Mount Vernon homeowner who has never heard of them, without giving up a single one of the island towns that pay the bills today.

Phase 1 / Custom Website

A rebuild that kept every inch of earned equity.

A 37-year-old domain has value you can destroy in an afternoon with a careless migration. Before writing a line of the new site we mapped the old one completely, through its sitemap, the WordPress REST API, and a link crawl, and then probed for the URLs the sitemap did not admit to. Every one of the 33 real pages, plus the duplicate root-level copies of each of them, was accounted for in the redirect map before launch.

Custom Website Design in the Brand's Own Red

Editorial serif headlines against the deep brick red from the logo, photography of real Pacific Northwest rooms, and a quote form docked in the hero on every page rather than buried behind a contact link. Hand-coded on Astro and served from Cloudflare's edge. The trust signals sit in the first screen where a stranger deciding between three cleaners can see them, and the headline over them names Skagit County, because on a rebuild like this the H1 is the positioning statement.

Nine Services, Nine Pages

The eight services that existed on the old site kept their exact URLs, so those pages carried their history straight across with no redirect hop at all. Water damage response was added as a ninth:

Reviews That Match the Page They Sit On

The site pulls all three Google Business Profiles from the Persilio review sync at build time and bakes them into static HTML, so no visitor request ever touches an API and crawlers see the reviews without running JavaScript. Then a relevance scorer picks which ones to show: the dryer vent page surfaces the reviews that mention dryer vents, the Coupeville page surfaces the reviews from Coupeville customers. This matters more than it sounds like it should, because every one of those 102 reviews was written by an island customer, and the Skagit pages have to borrow them. Scoring by what a review actually says, rather than which listing it came from, is what lets a Mount Vernon page prove itself with a review about wool rugs instead of a review about Oak Harbor.

A Clean Carpet Co area rug cleaning page with a rolled oriental rug in the background, an at-a-glance list of what the job includes, and a quote form pre-set to area rug cleaning
The area rug page, built around the differentiator: a dedicated washing facility with free pickup and delivery.
Phase 2 / Multi-Location Local SEO

Three listings on the island, a county with none.

The local SEO architecture is built around that imbalance. The three verified profiles anchor the island towns they can each reach fastest, and every service page tells a visitor which crew is nearest to them. Skagit County has no listing to anchor it, so the site has to carry that side on its own, with a regional hub and a page for every valley town, all under a homepage that names Skagit County in the H1 rather than the island.

North Whidbey

Oak Harbor

5.0 stars across 64 Google reviews

South Whidbey

Freeland

5.0 stars across 24 Google reviews

Fidalgo Island

Anacortes

5.0 stars across 14 Google reviews

We took the award off the homepage

A Clean Carpet Co won Best of Whidbey 2025 in the Whidbey News Group Readers Choice Awards, and the first build put that badge in the homepage hero, because that is what you do with an award. Then we pulled it. A homepage whose whole job is to say "Skagit County" cannot lead with a trophy from the island, and a Mount Vernon homeowner reads that badge as a signal the company belongs somewhere else. The award now appears only on the Whidbey-region pages, where it is the strongest possible proof, and the homepage leads with 5.0 across 100+ reviews instead. Repositioning a brand means giving up placements that flatter the old position.

A page for every town, written for that town

The Skagit County hub talks about tulip-season mud, harvest dust off the fields in August, and a river-valley damp that never fully lifts in between. The Oak Harbor page talks about NAS Whidbey Island, PCS move-out cleans on a deadline, and the sand off West Beach that no rental machine will lift out of the bottom of a pile. These are not one template with the city name swapped in, and they read like somebody who has driven the route wrote them, because the copy was built from how the crew actually describes each stop.

Each town links back to its regional hub and out to the services that matter most there, so Skagit and Whidbey each form a tight cluster pointing at the quote form. The split is deliberately even, seven pages a side, even though only one of the seven Skagit pages has a Google listing behind it today:

A Clean Carpet Co Oak Harbor service area page with the marina at dusk behind the headline, local neighborhoods listed at a glance, and the Best of Whidbey 2025 award badge
The Oak Harbor page, tied to the North Whidbey hub and the 64 reviews that listing has earned.

Area Pages

14 unique copy

Twelve towns plus a Whidbey and a Skagit regional hub

Redirect Rules

143 mapped

Every legacy WordPress URL, including the duplicate root copies

Google Reviews

102 all 5.0

Synced from three listings and matched to the page they sit on

Schema Coverage

100% every page

LocalBusiness, Service, FAQ, and Breadcrumb structured data

Launched August 1, 2026

Thirty-one households in the first eighteen days.

Between launch and August 18, the quote form produced 38 submissions from 31 separate households, an average of nearly two a day, every one arriving in the Persilio dashboard with the search, the referrer, and the landing page attached. These are counted by household, not by submission, because a few people sent the same request twice and inflating the number would defeat the purpose of measuring it.

Organic search

24

households

Direct

5

households

AI search

2

households

Organic search is doing the work

Twenty-four of the 31 came from organic search, most from Google, the rest from Bing and DuckDuckGo. Behind the homepage, the pages people landed on most were the Freeland, Mount Vernon, Oak Harbor, Anacortes, and Burlington area pages, plus commercial carpet cleaning. Those pages did not exist before August and they are already the front door.

The Skagit pages are already landing traffic

This is the number the repositioning lives or dies on. Mount Vernon, Anacortes, and Burlington all pulled entry traffic in the first eighteen days, in a county where the company has no Google Business Profile to help it. That is organic search alone, off pages that are three weeks old, in the market the whole rebuild was aimed at. It is early and it is small, and it is the right shape.

ChatGPT, Perplexity, and Gemini all showed up

Two of the quote requests came from AI search, one from ChatGPT and one from Perplexity, and Gemini sent traffic in the same window. Assistants recommend the business that publishes clean, specific, structured answers about the thing being asked about, which is why the same page architecture that ranks in Google is the one that gets cited by a model.

And the jobs are the right jobs

Not just one-room cleanings. Move-out cleans on a lease deadline, Navy families turning over base housing, a property management company sending its rental turnovers, a 3,240 square foot assisted living facility, and a job that requires taking the ferry to Guemes Island. That mix is what an area-page and service-page structure produces: it lets a commercial buyer and a homeowner each find the page written for them.

Phase 3 / Monthly SEO, Starting August

The listing is the next unlock.

August is month one of the ongoing cleaning company SEO program. The site is the asset. The monthly work is what turns a Skagit County page tier into Skagit County map rankings, and that starts with getting the company a Google presence in the county it now calls home.

Citation program

A 35-listing worklist ranked for this business specifically, spanning the majors, the data aggregators that feed the long tail, and the local island and valley directories. Twelve are live and verified, with each of the three locations carrying consistent name, address, and phone.

The Sedro-Woolley listing

The owner's home base already has its page and its regional hub on the site, waiting on a Google Business Profile that does not exist yet. Standing that listing up is the single highest-value move on the whole account: it is the one thing that puts 37 years of company history into a Skagit County map pack instead of leaving the valley pages to compete on organic alone.

Content and reporting

Guides written against the questions the quote requests keep asking, continued expansion of the area tier into the rest of Skagit County, and a monthly report that ties booked work back to the pages and searches that produced it.

The Technical Edge

Built with Astro

Static-first, almost no JavaScript shipped, replacing a WordPress install that had to build every page on request. The whole site is HTML by the time a visitor asks for it.

Cloudflare Workers

Static assets and a small worker for the form endpoint, served from Cloudflare's edge. No hosting stack to patch and nothing to go down on a Saturday.

A Migration Nobody Noticed

143 redirect rules covering every legacy URL and every duplicate root-level copy, with the eight established service URLs kept byte-identical so they never needed one.

Build-Time Review Sync

All three Google Business Profiles pulled through Persilio at build time and baked into static HTML. The API key never reaches the browser and no visitor request ever touches a third party.

Leads With Full Attribution

Every quote request lands in the Persilio dashboard with the referrer, landing page, and visitor journey attached, and triggers both the team notification and a branded confirmation back to the customer.

Spam Defense That Spares Humans

Cloudflare Turnstile plus a honeypot field named so that password managers will not autofill it. The obvious honeypot names are ones browsers recognize, and a real customer's autofill silently marks them as a bot.

A Clean Carpet Co spent 37 years earning a reputation that three Google listings and 102 straight five-star reviews now carry. The work was never in question. The problem was that all of that proof lives on an island, and the company's future is in the valley.

So the site leads with Skagit County, gives the valley the same page depth as the island, carries the island's reviews onto the valley's pages, and holds the island award back for the pages where it belongs. In the first eighteen days that brought 31 households to the quote form, and put Mount Vernon, Burlington, and Anacortes on the board before the county listing even exists.

Want a custom website and local SEO like this?

Let's talk about home service marketing that ranks you in every town you serve, and a migration that keeps the reputation you already built.

Start Your Project
5.0 We reply within 24 hours
Message sent! We'll be in touch within 24 hours.