Most local business websites have one page called "Services". A plumber lists twelve jobs on it, each with one line of text, and that's the whole site.
That page can't answer "how much is a tankless water heater install in Henderson?" And that's the kind of question people now type into ChatGPT, Perplexity and Google's AI Mode. Those tools quote passages that answer the question. If no page on the site has that passage, they quote a competitor.
A topic cluster fixes this. Every service and every town gets its own page, and the pages link to each other so people and crawlers can follow the structure. Below is the process, the folder structure in Astro, the schema for each page, and a prompt that plans the whole thing for you in about five minutes.
1. Collect questions, not keywords
Keyword tools give you "plumber henderson nv". Customers ask "can you come today?" and "do you charge a call-out fee?". Get the real questions from:
- call notes and customer emails
- Google reviews (people often say what they hired the business for)
- Google autocomplete and People Also Ask
- the search terms list in the Google Business Profile performance report
- Search Console queries, if the site already exists
Ten to thirty questions is enough to start.
2. Group them by meaning
"Who fixes leaking pipes?" and "emergency plumber near me" are the same job, so they go on the same page. One group of questions becomes one page.
If two groups need the same answer, merge them. Two thin pages competing for one question do worse than one good page.
3. Hubs, spokes and town pages
- One hub page per core service:
/water-heaters/ - One spoke page per sub-service:
/water-heaters/tankless-installation/ - One page per town the business actually serves:
/henderson/
Town pages need real local detail: neighborhoods, typical jobs there, response times. A page that only swaps the city name gets ignored by Google and by readers.
In Astro, the simple version is plain folders:
src/pages/
index.astro
water-heaters/
index.astro # hub
tankless-installation.astro # spoke
repair.astro # spoke
drain-cleaning/
index.astro
hydro-jetting.astro
henderson.astro
summerlin.astro
Once you pass a dozen or so services, move them into a content collection and build the routes with getStaticPaths(). Then every service page shares one layout, one schema component and one internal-link block, and adding a service is one new Markdown file.
4. Follow-up questions become H2s
Google's AI Overviews and AI Mode may use a "query fan-out" technique, running several related searches behind one question. For a service page those follow-ups are predictable: cost, how long it takes, licensing, financing, same-day or emergency availability, what's included.
Give each one an H2, phrased the way a customer would ask it:
## How much does tankless water heater installation cost in Henderson?
## How long does a tankless install take?
## Do you need a permit for a tankless water heater in Henderson?
## Can I finance a new water heater?
5. Answer first
Under every H2, the first 40 to 60 words answer the question, name the service and the city, and still make sense if someone quotes only that paragraph. Details, exceptions and photos come after.
Tankless water heater installation in Henderson costs $[low] to $[high] for a whole-home gas unit, including removal of the old tank, new venting and the city permit. Most installs take one day. Electric units cost less up front but may need a panel upgrade.
Fill in real numbers from the business. If they won't publish prices, give a range and say what moves it.
6. Link the cluster both ways
The hub links to every spoke. Every spoke links back to its hub and to one or two related spokes. Town pages link to the services offered there.
Use anchor text that describes the target page ("tankless water heater installation"), not "click here" or "learn more".
7. Add proof
Job photos with real captions, price ranges, reviews that mention the specific service, license numbers. An AI assistant needs something specific to quote, and the person reading needs a reason to call. Same material does both jobs.
8. Schema and Google Business Profile
Add every spoke as a service on the Google Business Profile, using the same name as the page. On the site, put LocalBusiness once (sitewide, with the same name, address and phone as the profile), plus Service and BreadcrumbList on each service page.
A small Astro component keeps it consistent:
---
// src/components/ServiceSchema.astro
const { name, description, url, cities } = Astro.props;
const schema = {
"@context": "https://schema.org",
"@type": "Service",
name,
description,
url,
areaServed: cities.map((city) => ({ "@type": "City", name: city })),
provider: { "@id": "https://example.com/#business" },
};
---
<script type="application/ld+json" set:html={JSON.stringify(schema)} />
The provider points at the @id of your sitewide LocalBusiness block, so every service is tied to one business entity.
A note on FAQs: since August 2023, Google only shows FAQ rich results for well-known, authoritative government and health websites. FAQPage markup won't get a plumber a rich result. Keep the questions and answers on the page anyway, because those are the passages that get quoted.
The prompt
Paste this into ChatGPT, Claude or Gemini and fill in the brackets:
Act as a local SEO strategist and build a topic cluster plan for my business.
Business: [name] | Main service: [service] | City + service areas: [towns] | Top services: [5-10] | Customers: [who] | Why us: [same day, financing, years in business]
Customer questions (calls, emails, reviews, autocomplete, People Also Ask, Google Business Profile searches): [paste 10-30]
1. Cluster the questions by meaning, not wording. One cluster = one page.
2. Organize pages as hubs (one per core service), spokes (one per sub-service) and one page per town.
3. Per page: title, URL slug, main question, and 6-10 H2s written as real customer questions, including the follow-ups an AI assistant would ask (cost, timing, licensing, financing, emergencies).
4. Under each H2: a 40-60 word answer first, naming the service and city, that works if quoted alone.
5. Add a table or numbered process where useful, plus 5 FAQs.
6. Map internal links: hub to spokes, spokes to hub, related spokes to each other.
7. List the schema per page (LocalBusiness, Service, BreadcrumbList) and the proof to add (job photos, price ranges, reviews, licenses).
8. Match each page to a Google Business Profile service.
Start with a summary table, then each page outline.
You get a table of every page and an outline for each one. Check it before you build anything. The model will happily add towns the business doesn't serve and services it doesn't offer, so cut whatever isn't real.
Where to start
Build the hub for the service that brings in the most money, plus two or three spokes under it, and add the matching services to the Google Business Profile the same day. Town pages come next, one at a time, each with something you can only say about that town.
Based on Search Engine Land's guide How to build topic clusters that AI will cite, adapted for local service businesses.
Top comments (0)