LocalBusiness schema, GBP, NAP, and service-area pages that do not spam. A weekend plan for a plumber, clinic, or shop.
A homeowner asks an assistant for an emergency plumber near them who works weekends. The model leans on Google Business Profile, local directories, and a few sites with clear LocalBusiness markup. Your shop does great work, but the website says "Serving the metro area!" with no city names, a NAP that disagrees with GBP, and a chatbot wall before any HTML. You never enter the shortlist.
AEO for local service businesses is a weekend project: LocalBusiness schema, GBP, NAP, and a few service-area pages that do not spam.
What local answer engines lean on
Local answers blend maps inventory, reviews, and web evidence. You do not control the ranker. You do control consistency.
| Asset | Why it matters | Minimum bar |
|---|---|---|
| Google Business Profile | Categories, hours, website, reviews | Exact name/NAP; correct primary category |
| Website NAP | Corroboration | Match GBP character-for-character where possible |
| LocalBusiness schema | Machine identity | name, address, telephone, url |
| Service pages | Intent match | Real services you offer; no fake cities |
| Reviews | Trust | Respond; do not fake |
| Crawler access | Retrieval | Bots not 403’d on home and service URLs |
Pew Research (March 2025) found AI Overviews on roughly 18% of searches; local queries vary, but zero-click behavior is common. SparkToro / Similarweb (Jan–Apr 2026) estimated ~68% of Google searches were zero-click. Being named inside the answer matters more than winning a blue link alone.
GBP still feeds Maps and often retrieval — treat Google Business Profile as an AEO signal, not only a Maps chore.
Weekend plan (plumber, clinic, shop)
Saturday morning — identity (2 hours)
- Open GBP: confirm business name, address, phone, website URL, categories, hours.
- Make the website footer and Contact page match that NAP exactly — follow the NAP consistency checklist.
- Add LocalBusiness (or a more specific subtype: Dentist, Plumber, etc.) JSON-LD on the homepage with the same fields.
- Link GBP and major profiles in
sameAsonly when URLs are correct.
Saturday afternoon — access (1–2 hours)
- Check robots.txt for accidental blocks on
/and service pages. - If you use Cloudflare Bot Fight or a strict WAF, allowlist answer crawlers so they are not 403’d.
- View source on mobile templates: ensure address and phone are in HTML, not only in an image or third-party widget.
Sunday — pages that help (2–3 hours)
- Create or tighten service pages for real offerings ("Water heater repair," "Pediatric cleaning") with plain descriptions.
- If you truly serve multiple cities, write honest service-area pages with unique proof (response times, landmarks, parking notes) — not spun duplicates.
- Add an FAQ only for questions you actually get on the phone.
- Claim primary directories worth your time; skip directory spam — see directories that still matter.
- Respond to two unanswered reviews on GBP.
- Re-scan the site after the weekend to confirm access and identity checks moved.
Service-area pages without spam
| Do | Do not |
|---|---|
| Pages for cities you regularly serve | 50 near-identical "[Service] in [Town]" doorways |
| Mention real constraints (stairs, permits, HOA) | Fake testimonials per city |
| Embed matching NAP once | Different phone numbers per city page unless true |
| Unique photos when possible | Stock photo rotation as "localization" |
Schema sketch (illustrative)
{
"@context": "https://schema.org",
"@type": "PlumbingService",
"name": "Riverbend Plumbing",
"url": "https://example.com/",
"telephone": "+1-555-0100",
"address": {
"@type": "PostalAddress",
"streetAddress": "100 Main St",
"addressLocality": "Springfield",
"addressRegion": "IL",
"postalCode": "62701",
"addressCountry": "US"
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Saturday", "Sunday"],
"opens": "08:00",
"closes": "18:00"
}]
}
Use your real type and data. Match Organization vs LocalBusiness guidance: local service shops usually want LocalBusiness (or subtype), not a bare Organization with no address.
Multi-location shops
If you have three locations, give each a GBP and a location page with its own NAP and LocalBusiness (or LocalBusiness + department) markup. Do not dump every address into one paragraph and hope. Assistants resolving "near me" need clean per-location entities. Parent brand naming should stay consistent across locations — same company, different addresses.
What "good enough" looks like after one weekend
You should be able to open an assistant, ask for your category plus neighborhood, and see either your name or a competitor with messier NAP than yours. If you still do not appear, check access and GBP first — not another blog post. Hypothetical: say you run 20 local prompts across two cities you serve; use the misses as a punch list (wrong hours, missing service page, blocked fetch), not as proof that AEO is hopeless.
Clinics and other YMYL locals should prioritize named practitioners on service pages over city spam. A clear practitioner bio with credentials beats ten doorway pages that never mention who performs the work.
Mistakes
- Call tracking numbers that never appear on GBP (split entity).
- Embedding the only NAP inside a third-party widget blocked to bots.
- Buying fake Google reviews.
- Publishing medical or legal claims without a named professional — local YMYL still needs E-E-A-T and real author pages when clinicians byline content.
- Chat widgets that replace the entire HTML body for first-time visitors, including crawlers.
Verify
Search your exact business name in Maps and in an assistant. Check that phone and hours match. Fetch your homepage as text; confirm schema and NAP. Re-scan the site after fixes.
BrandKnown’s free first scan takes about 60 seconds and surfaces crawler and clarity issues. Agency is $49/mo if you manage multiple locations as saved brands. A better readiness score means cleaner website checks — not a guaranteed Maps pack win.
