Local pillar / check local-business-schema

LocalBusiness schema (type presence)

Checks whether the page declares a LocalBusiness-class @type in JSON-LD. It verifies the type is present, not that individual fields such as address or opening hours are complete.

By Shimon Carroll, Founder, SEO for AI Agents · Last updated

What this check measures

The check reads the JSON-LD blocks in the crawled HTML and looks for at least one @type that is LocalBusiness or any of its subtypes in the schema.org vocabulary (V30.1: 131 types, for example AccountingService, LegalService, Attorney, MedicalClinic, Dentist, Physician, RealEstateAgent, HVACBusiness, Plumber, Restaurant and Store). That is the whole test today. It does NOT verify that address, geo coordinates, opening hours, telephone, or sameAs are present or valid, and it does not compare the schema with your Google Business Profile. Opening hours are covered by a separate check. For field-level validation, run the block through the Schema Markup Validator.

Why it matters

LocalBusiness schema is the structured-data signal that lets Google associate the business entity with the location-aware SERP (local pack, Maps, Places API) and that AI engines use to resolve "near me" and "in [city]" queries. A missing or malformed LocalBusiness block forces the engines to fall back on NAP fragments in unstructured text, which is brittle and silently demotes the entity on location-aware queries. The subclass match (AccountingService vs generic LocalBusiness) is a non-trivial signal: vertical-specific subclasses carry additional fields the generic class does not, and Google has documented increased rich-result eligibility for the subclasses.

How we score it

PASS if at least one JSON-LD block on the page declares a @type from the list above. FAIL if none does. Field completeness does not change the result. Severity defaults to MEDIUM. Vertical adapters override per business type: doctors and lawyers get HIGH on practice pages; MCA gets LOW because most MCA brokerages are not local businesses in the GBP sense; AI agencies get N/A. When the local checks run: for accountants, lawyers, medical practices and real estate audits they always run, because a missing address or Maps link is itself the finding. For every other audit they run only when the pages we read show a physical location or a service area: a street address or a city and state, a Maps link or embedded map, LocalBusiness, opening-hours, geo or address schema, locations or service-area pages or wording, or a city or state in the title or headings. When none of these appear, each local check is marked not applicable with that reason. It does not score, it is left out of coverage and of the overall, and it never enters the action plan.

Confidence-flag rules

Confidence is HIGH on a pass, because a declared type in the crawled HTML is a deterministic read. Confidence is MEDIUM on a fail, because a block injected only by JavaScript after load may not be in the crawled HTML; AI crawlers that do not run JavaScript would not see it either.

Common mistakes

  • Declaring address as a plain string instead of a PostalAddress object.
  • Omitting geoCoordinates because "Google can figure it out from the address"; this is true for classic Google but the explicit coordinates are required signal for AI engines.
  • Forgetting the GBP URL in sameAs; without it the schema entity does not connect to the canonical Google entity record.
  • Using LocalBusiness as the @type when a more specific subclass (AccountingService, LegalService, MedicalBusiness) is available; the generic class loses rich-result eligibility.

How to fix it

Recommended beyond what the check verifies: use the vertical-appropriate subclass (AccountingService for CPAs, LegalService for lawyers, MedicalBusiness for medical practices, RealEstateAgent for real estate). Populate address, geoCoordinates, openingHoursSpecification, telephone, priceRange, and sameAs with the GBP URL, your social profiles, and any directory listings relevant to your vertical (Justia for lawyers, Healthgrades for doctors, Zillow agent profile for real estate, AICPA member directory for CPAs). Validate with the Schema Markup Validator.

Primary sources

Changelog

  • · Local checks now apply only to businesses that show a physical location or service area on the pages we read, unless the industry always runs them. Online-only sites see each local check marked not applicable with the reason, and the local pillar does not score.
  • · Every LocalBusiness subtype in the schema.org vocabulary (V30.1, 131 types) now passes. The check used to accept 13 hand-picked types, so a page declaring MedicalClinic, HVACBusiness, ProfessionalService or InsuranceAgency was told it had no LocalBusiness schema.
  • · Corrected to match the executor: the check verifies LocalBusiness-class type presence only. Field-level requirements are now listed as recommendations, not as verified.
  • · Initial publication. Subclass requirements documented per launch vertical (AccountingService, LegalService, MedicalBusiness, RealEstateAgent).