← Field Notes · July 4, 2026

Schema for service-area businesses: LocalBusiness done right (when you don’t have a storefront)

Geographic shape with central point and radius on a green-to-yellow brand gradient representing service area business schema
Part ofSchema for AI Search →
Updated August 20, 2026Originally published July 4, 2026
Key Takeaways
Service-area businesses are mis-served by standard LocalBusiness schema. Here is what to ship instead and why most agencies get this wrong.

Most LocalBusiness schema in 2026 is written for businesses with a storefront. The schema assumes a customer walks in, the address is meaningful for retail, and the hours field describes when the storefront opens. Schema generators output it by default.

Service-area businesses are different. They go to the customer instead of the customer coming to them. Plumbers, electricians, mobile detailing, in-home health aides, traveling specialists, home cleaners, fitness trainers who travel to clients.

The standard storefront-shaped LocalBusiness schema fits these businesses badly. The result is that Google and AI engines mis-classify them, mis-extract their service area, and route relevant queries to competitors with cleaner schema.

If you run a service-area business or you’re shipping schema for one, here’s the working setup and what most agencies get wrong.

Why the standard schema fails for service-area businesses

Three structural mismatches.

The address gets used as the primary location. Storefront businesses have an address that customers visit. Service-area businesses have an address that customers don’t visit (the home office, the garage, the operator’s house). Shipping standard LocalBusiness schema with the operator’s home address can produce wrong map placements, wrong distance calculations for nearby searches, and privacy issues for solo operators.

Hours represent when the storefront is open. For a plumber, hours represent when they take service calls. That’s different from when they show up at a customer’s house. The standard hours field forces these into one bucket, which mis-represents the actual availability.

Geographic targeting via a single address. Storefront businesses serve customers near the address. Service-area businesses serve customers across a defined area. The standard schema doesn’t have a clean way to express “we serve this entire metro area,” so most agencies ship it as a single address with no service area definition.

What the right setup looks like

LocalBusiness with no public address, a fully-defined areaServed field, and an optional serviceArea GeoCircle.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "@id": "https://yourdomain.com/#localbusiness",
  "name": "Pacific Plumbing Co",
  "description": "Mobile plumbing service across Seattle and Eastside.",
  "url": "https://yourdomain.com/",
  "telephone": "+1-206-555-0100",
  "image": "https://yourdomain.com/wp-content/uploads/logo.png",
  "priceRange": "$$",
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "07:00",
      "closes": "19:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "08:00",
      "closes": "16:00"
    }
  ],
  "areaServed": [
    {
      "@type": "City",
      "name": "Seattle",
      "containedInPlace": {
        "@type": "State",
        "name": "Washington"
      }
    },
    {
      "@type": "City",
      "name": "Bellevue"
    },
    {
      "@type": "City",
      "name": "Kirkland"
    },
    {
      "@type": "City",
      "name": "Redmond"
    },
    {
      "@type": "City",
      "name": "Renton"
    }
  ],
  "serviceArea": {
    "@type": "GeoCircle",
    "geoMidpoint": {
      "@type": "GeoCoordinates",
      "latitude": 47.6062,
      "longitude": -122.3321
    },
    "geoRadius": "40000"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "127",
    "bestRating": "5"
  }
}
</script>

Three things about this setup that differ from the standard template.

No address field. This is intentional. Service-area businesses shouldn’t publish their operating address in schema unless they have a real public storefront. Google’s documentation specifically addresses this. The combination of no address and a defined areaServed tells Google the business is service-area, not storefront.

Both areaServed (city list) and serviceArea (geographic circle). The two together provide redundant signal. The areaServed list is what AI engines and Google extract directly for queries like “plumber in Bellevue.” The serviceArea GeoCircle is what Google uses for distance calculations. Both matter.

Specific business type, not generic LocalBusiness. Schema.org has dozens of LocalBusiness subtypes: Plumber, Electrician, AutoBodyShop, HomeAndConstructionBusiness, MedicalBusiness, ProfessionalService. Use the most specific one that applies. Generic LocalBusiness produces weaker classification signals than the specific type.

Six mistakes agencies make on service-area schema

Shipping the operator’s home address. The home address gets indexed, appears in Knowledge Panel results, and creates privacy issues. Some operators are okay with this. Most aren’t, and they didn’t know it was happening.

Skipping areaServed entirely. Without areaServed, the engine guesses the service radius from the address. The guess is wrong. The business misses queries from areas it actually serves.

Listing every city in the state. Some agencies pad areaServed with 30+ cities to maximize coverage. Engines detect padding and de-weight the schema. The right list is the actual cities the business serves, not the aspirational coverage.

Using the wrong LocalBusiness subtype. A solo electrician shipping @type: LocalBusiness instead of @type: Electrician. The classification is weaker. Use the most specific subtype.

Outdated hours. Service businesses often have seasonal hours, vacation closures, or operator-specific schedules. Schema hours that don’t match reality train Google and AI engines that the schema is unreliable. Update at least quarterly.

Missing review schema. Service-area businesses with public reviews on Google Business Profile, Yelp, or Angie’s List should mirror the aggregate rating into schema. Without it, the AI engine has no quick signal of quality and citation candidacy drops.

How different engines handle service-area schema

The picture varies by engine.

Google AI Overviews uses areaServed and serviceArea together. A query like “plumber in Bellevue” preferentially surfaces businesses where Bellevue is in the areaServed city list. The GeoCircle is used as a secondary filter for distance.

ChatGPT browse and Perplexity extract from areaServed more than serviceArea. The city list is what gets cited when the user asks for a vendor in a specific city. The geographic circle is mostly ignored.

Microsoft Copilot uses both, similar to Google. Copilot is stronger on local queries when the business has structured areaServed data.

Voice assistants (Alexa, Siri, Google Assistant) use the structured area data to filter results. A voice query for “find a plumber in Kirkland” preferentially surfaces businesses with Kirkland in areaServed.

The cross-engine pattern: ship areaServed as a clean list of actual service cities. Ship serviceArea as a GeoCircle covering the realistic radius. Skip the home address. Use the specific LocalBusiness subtype.

What to do about Google Business Profile alongside the schema

Google Business Profile is the dominant local SEO signal. Schema is secondary. For service-area businesses, the right setup combines both.

Google Business Profile for service-area businesses has its own configuration. The profile can be set to “I deliver goods and services to my customers” with a defined service area instead of a public storefront. This setting must match the schema. If GBP says “service area business” but schema ships a public address, the two contradict each other and Google de-weights both.

The right discipline: configure GBP first as service-area business with the actual cities. Ship matching schema with the same cities in areaServed. Update both whenever the service area changes.

What you can do this week

Service-area businesses with correctly-configured schema and matching GBP typically see better candidate selection for “near me” voice queries (Alexa, Siri), higher inclusion rate in Google’s Local Pack for relevant city queries, citation in AI engine responses when users ask for vendors in specific neighborhoods, and cleaner Knowledge Panel results without operator privacy issues.

The lift is meaningful for solo operators and small teams. The work is one block of JSON-LD plus matching GBP configuration plus quarterly maintenance.

If you want us to ship correct service-area schema for your business along with matching GBP discipline, the fit call covers it. The first ship happens in week one.

Start ranking easier →


Sources and further reading

Related reading:
– Speakable schema: the underused signal that helps voice assistants find your content
– Your Organization schema is probably costing you AI citations
– Schema markup for AI search 2026: field guide
– Product schema for SaaS: turning your pricing page into a citable answer
– GEO 101: Generative Engine Optimization Explained

Like this:

Discover more from Net Page Two

Subscribe now to keep reading and get access to the full archive.

Continue reading