
The problem
Kastle Plumbing had a WordPress and Elementor site that loaded slowly, said very little, and gave Google almost nothing to work with. A plumber competes on two searches: the trade plus the town. This site had one page trying to answer every version of both at once.
What we did
We rebuilt it as fourteen service pages and ten service-area pages, each generated from a single typed catalogue so a new service can’t be added without the sitemap, the navigation and the structured data all picking it up. Every page carries Plumber-typed JSON-LD anchored to one business node. The trickier half of the work was restraint: the service-area pages are differentiated by evidence rather than invented neighborhood color, meaning the client's own address and the towns their published reviews come from, because a page of made-up local trivia is a doorway page wearing a hat. Where the client hadn’t published a fact, we left it out and flagged it rather than filling the gap.
Where it stands
The site is built and ready behind the existing domain. It ships with a generated sitemap, robots rules, an Open Graph card rendered at build time, a gated analytics container that stays silent in development, and a contact form that escapes every field before it reaches the owner's inbox. Nothing on it claims a certification, a price, a warranty or a response time the client has not published.