How I Built an AEO-First Website for a DFW Plumbing Company in 5 Days
I built an AEO-first DFW home services website using type-aware Schema.org and 38 automated tests. Every build validates content quality. Delivered in 5 days.
Edward Chalupa
Founder, Whtnxt · Dallas, TX
38 tests pass on every build. Schema.org validates clean across five entity types. The site went from a design mockup to production DNS in five calendar days. It was built for a plumbing company operating across Dallas, Plano, Frisco, and McKinney, and it needed to rank for service-area keywords that most home service websites fail to capture.
Here is exactly how I built it and why the architecture matters more than the template.
The Situation: A Service-Area Website With No SEO Foundation
The client, No Pressure Plumbing, had been running on a site built three years ago by a generalist agency. It had a WordPress backend, a generic theme, no structured data, and city pages that were copies of each other with the city name swapped in. Google had indexed 11 pages. None ranked in the top 20 for any service-area keyword in the DFW market.
The client needed three things that the old site could not deliver. A site that actually represented their business across the home service categories they work in. Pages that rank for “plumber in [city]” searches across their DFW service areas. And a build process that would not let bad content go live.
I proposed a 5-day build using what I call AEO-first architecture. Answer Engine Optimization means structuring every page so that Google, AI answer engines, and voice assistants can extract the relevant information without guessing. For a plumbing company operating in a competitive DFW market, that distinction matters.
The Architecture: Astro 4 With AEO Guardrails
I chose Astro 4 for the framework because it ships zero JavaScript by default and produces static HTML that search engines parse immediately. I covered some of the reasoning behind choosing self-hosted tools in my post on replacing a CRM with Twenty, and the same principle applies here: control the full stack or accept the limitations someone else set.
The site has four architectural layers that differentiate it from a standard home services template.
1. Type-Aware Schema.org
Every page has a Schema.org type that matches its content. A plumbing service page uses Plumber as the schema type. An HVAC page would use HVACBusiness. An electrical page would use Electrician. The schema type is not a generic LocalBusiness tag. It is the exact type that Google expects for that service category.
I built a typed schema component that accepts only valid types for the client’s business categories. If a content editor tries to assign Restaurant to a plumbing page, the build fails. This prevents the most common structured data mistake on home service sites, which is writing generic schema that passes validation but tells Google nothing useful.
2. FAQBlock and Schema Anti-Drift Architecture
Home service websites accumulate FAQ sections over time. The question changes but the schema stays the same, or the schema gets updated but the visible content does not. I built the FAQ component so that the visible FAQBlock and the FAQPage schema draw from the same data source in the content collection. You cannot update one without updating the other. Every build checks that the visible questions match the schema entries exactly. If they drift, the build breaks.
3. Build-Time Content Quality Gates
The site has three content rules enforced at build time, not in a style guide document that nobody reads. City pages must be at least 150 words of original content specific to that city. They are not templates with city names injected. A Levenshtein-distance checker compares every city page against every other city page. If two pages are more than 60 percent similar by edit distance, the build fails. This catches the doorway-page pattern that Google penalizes and that most home service agencies produce at scale.
Banned adjectives trigger a build warning. Words like “best,” “top-rated,” “premium,” and “trusted” are flagged when they appear without third-party attribution. This is not about avoiding marketing language. It is about avoiding claims that trigger manual review in local search results.
4. AI Crawler Allowlist
The site ships an llms.txt and a robots.txt that explicitly welcome known AI crawlers and point them to the most authoritative pages. I wrote about the MCP server pattern for tool integration that makes AI-accessible content actually useful, and this site applies the same thinking at the crawler level.
DFW Service Areas: How City Pages Map to Real Plumbing Zones
The DFW metroplex is not one market. It is a collection of cities and counties where plumbing companies compete for local search traffic. The client operates in Dallas County, Collin County, and Denton County. Each county has distinct service zones, permit requirements, and competition levels.
Plano and Frisco in Collin County are newer developments with higher competition from franchise plumbers. McKinney is further north with lower competition but longer drive times. The city pages had to reflect real service availability, not aspirational coverage. I limited the initial city pages to Dallas, Plano, Frisco, McKinney, and Carrollton. Each page includes the approximate response time for that city based on the client’s dispatch data, not a generic “we serve your area” line.
The Arlington and Fort Worth pages are planned for phase two. Those markets have different competition dynamics and need separate keyword research before the client commits to serving them.
The Results After 5 Days and 38 Tests
The site launched with 38 passing tests, zero warnings, and a clean Lighthouse score on every page. The build pipeline catches schema drift, content similarity, missing meta descriptions, and orphan pages that have no internal links pointing to them.
What matters more than the Lighthouse score is what the architecture enables going forward. When the client adds a new service city, the content gates ensure the page is original and the schema is correct. When a competitor changes their pricing page, the structure holds without a theme update. When Google updates its ranking algorithm for structured data, the site already has explicit typed schema instead of generic local business markup.
I designed the template to be reusable for other home service businesses. The same architecture with different schema types works for electricians, HVAC companies, roofers, and landscapers. The content guardrails are the same regardless of the service category.
What Comes Next
The AEO-first template is now the default for every home services client site I build. The next iteration will add call-tracking analytics at the city-page level so we can measure which service areas drive actual phone calls, not just search impressions. I am also working on automating the city-page expansion process through n8n workflows, which I documented in my n8n marketing automation engine post.
If you are running a home service business in the DFW area and wondering why your website is not bringing in calls from search, the problem is usually not the design. It is the architecture. The site that ranks in 2026 is the one that answers questions instead of listing services.
Need a website built with this architecture for your home service business? I offer a fixed-price Plan 1 build that includes AEO-first design, type-aware Schema.org, and build-time content gates. Contact me to discuss your service area.