LocalBusiness schema works when the properties carrying the meaning are populated: where the business is, what kind it is, where it operates, and which profiles elsewhere are the same business. A green tick from the validator says the code parses, and it says nothing else at all.

Then the ticket closes.

I audit local sites for a living, and the block is usually present and usually thin. The properties that would have earned it a place sit empty, and nobody has asked why, because nobody handed anyone a test that asks.

So here is what Google documents, what it leaves out, and where the difference costs you something.

What is LocalBusiness schema?

LocalBusiness schema is structured data on a web page that states a local business’s identity, location, contact details, category and operating details in a form machines read directly instead of inferring.

It lives in the page’s code and a visitor never sees it.

Without it, they work the facts out for themselves. The address sits somewhere on the contact page and the category is implied by the list of services. The service area surfaces in a paragraph on the about page, if it surfaces anywhere.

Why schema matters for local search and AI visibility

Schema turns facts a system would otherwise infer into facts it reads, on the one source you fully control.

Every other statement about your business sits on somebody else’s platform, in their format and on their update cycle. Your own page is the one place where the declaration is yours.

Google keeps structured data and ranking apart. Its policies on structured data say that a structured data manual action “doesn’t affect how the page ranks in Google web search”, and nothing in the guidelines offers the reverse. What the markup does is make a page eligible for the features that consume structured data. It also hands every system reading the page one unambiguous version of the business.

The second half of that is the local argument.

A search engine building a picture of your business is reconciling the website, the profile, the citations and whatever else it turns up. Where those agree, the picture is clean. Where they disagree, one version gets picked, and you do not get a vote.

AI systems work the same ground with less patience for ambiguity. An assistant answering a question about local businesses wants facts it can state plainly, and a declared fact is easier to state than an inferred one. GEO for local businesses sets out that route to visibility in full. The broader schema argument for GEO takes structured data across every kind of content rather than this one.

  1. Find out whether your site carries LocalBusiness schema at all.
  2. Ask who populated it and from what source. In my experience, a developer working from a theme template.

The subtype problem: LocalBusiness is correct but imprecise

Declare the most specific subtype that describes the business without stretching, then check it against the primary category on your Google Business Profile.

LocalBusiness is the parent type, and it is correct for any local business in the way that “shop” is correct for a pharmacy. Correct, and almost no use.

A consultancy has ProfessionalService available to it. An accountant has AccountingService to declare, and a café has CafeOrCoffeeShop. A physiotherapy practice can go further still, into MedicalBusiness or one of its children. There are dozens of them, and each one hands the reading system a classification instead of a puzzle.

The difference shows up most sharply in AI answers. A system asked for a physio has an easier time citing a page that declares itself a physiotherapy business than one declaring itself a local business of some kind.

Finding the right subtype takes about 10 minutes in the type hierarchy. It goes undone because the parent validates perfectly well.

Your subtype and your profile category should say the same thing about the business, and the Google Business Profile guide for local businesses covers how that category gets chosen.

  1. Check which type your schema declares, and treat a bare LocalBusiness as a finding.
  2. Find the most specific subtype that describes the business accurately, then match it to your Business Profile primary category.

The LocalBusiness properties Google reads

Google’s Local Business documentation requires two properties and recommends the rest. The two required are `name` and `address`. The block validates without the recommended ones, and it is thinner for it.

`name`. The trading name, in the form used on the website, on the profile and in every citation. It is the first place an inconsistency surfaces, usually because somebody typed the registered company name or appended a suburb that appears nowhere else. It should carry the canonical NAP version the rest of your listings use.

`address`. A full PostalAddress, carrying the street, the suburb, the state, the postcode and the country. A suburb and a state with no street line is a weaker declaration, and it is the commonest shortcut I find in the code.

`geo`. Google defines this as “Geographic coordinates of the business”, and it sets a precision floor on each half of it. The documentation for `geo.latitude` says precision “must be at least 5 decimal places”. It says the same of `geo.longitude`.

Coordinates make the location unambiguous to a system that would otherwise geocode the address and hope for the best. An ambiguous street name lands in the wrong suburb far more often than anyone expects. I have watched it happen to businesses who never found out.

It takes 10 minutes to find, 10 seconds to add, and I almost never find one populated.

`telephone`. Google describes this as “A business phone number meant to be the primary contact method for customers”. It adds: “Be sure to include the country code and area code in the phone number”. It is the number a customer should ring.

Call-tracking numbers that swap in for ad traffic belong outside this property. The page and the profile disagree the moment anything compares the two, and old numbers survive in schema for years because nobody thinks to look in the code.

`url`. The canonical address of the site. It goes stale on any business that moved from http to https or changed domain without revisiting the markup. I check it against the canonical tag on the same page while I am in there.

`openingHoursSpecification`. The structured form of opening hours, holding each day and its opening and closing times as separate values. Google recommends this form, and it handles split shifts, public holidays and different weekend hours properly. Its looser relation `openingHours` is a plain schema.org string that templates reach for because it is quicker to write.

  1. Check every property in this section against the live site and the profile, and note which are empty and which are wrong.
  2. Read the `geo` values to five decimal places or more, and send back anything rounded to three.

`areaServed` and `sameAs`: what they carry that Google doesn’t document

`areaServed` and `sameAs` hold the entity picture together, and neither of them appears anywhere on Google’s Local Business documentation, in any category.

Both are legitimate schema.org properties, and both stay in a block I would sign off. Google is not the only thing reading your page.

`areaServed`. The geographic area where a service or offered item is provided, in schema.org’s own words. For a business with a shopfront it adds precision to an address that already exists. For a business that travels to its customers it carries the entire answer.

Leave it empty and the question falls back to the address, which describes where the van is parked rather than where the work happens.

`sameAs`. A list of the same business’s authoritative profiles elsewhere. It tells a reading system that the entity on this page and the entity on that platform are one business. Without it, a review on one profile and a service list on another have to be joined up by guesswork.

There is an order of value to the list. The Google Business Profile goes first, then the directories that carry real authority in your industry, then social.

One rule governs all eight of these properties, documented by Google or not.

They have to be accurate.

Schema that contradicts the page it sits on, or the profile, or the citations, introduces the conflict it was put there to remove. A system reading three versions of your phone number discards two of them, and it does not ask you which.

  1. Populate the empty properties in order of what they carry, beginning with `geo`, `areaServed` and `sameAs`.
  2. Re-check every property whenever the business changes anything about itself, the hours included.

Why passing the Rich Results Test proves nothing

The Rich Results Test confirms that the code parses, which makes it the starting criterion for sign-off rather than the finish.

It establishes that the brackets close and the types exist. It says nothing about whether the properties carrying any commercial meaning are populated, accurate, or in agreement with the rest of the web. A block carrying a name, half an address and nothing else sails through it.

The sign-off convention is the thing at fault here, and it is a convention rather than anybody’s decision. Validation became the completion criterion because it was the only test anyone was handed. Ticket closed at green tick is a pattern I have watched hold in 20+ years of auditing local sites.

A better validator would not touch it. What would is a list of properties pinned next to the green tick, and somebody whose job it is to read the list.

  1. Set your sign-off criterion at a named list of populated properties, and put it in the developer brief.
  2. Ask which properties the block actually populates, and check the business type it declares against your profile category.

Schema and the rest of the Local SEO programme

Schema amplifies signals that already exist, so the local content and the NAP consistency come first and the declaration comes second.

A fully populated block on a site with no local content and contradictory listings states facts the rest of the web disagrees with. The same block on a site with strong local signals and consistent citations makes a coherent picture explicit, and it is worth more because there was something true to declare.

So schema sits late in the order a Local SEO programme runs in, after the work that gives it something to say.

By the time it arrives, the schema audit is mostly a reconciliation. Does the block say what the profile, the citations and the page say? Where it doesn’t, one of the four is wrong, and it is rarely the schema on its own.

That reconciliation is the work the Structured Data Audit does inside Belmore Digital’s Local SEO programme.

  1. Fix NAP consistency and on-site local content before commissioning a schema rebuild.
  2. Put schema review on the same schedule as profile review. The two go stale on the same day.

FAQ

What is LocalBusiness schema? LocalBusiness schema is structured data on a web page that states a local business’s name, address, phone number, business type, coordinates, service area, opening hours and profiles elsewhere. Search engines and AI systems read those facts from the code instead of inferring them from the page text.

What is the best LocalBusiness schema subtype to use? The most specific subtype that describes the business accurately, matched to the primary category on its Google Business Profile. A consultancy declares ProfessionalService and an accountant declares AccountingService. A physiotherapy practice declares MedicalBusiness or one of its children. The generic LocalBusiness parent validates and classifies nothing.

What LocalBusiness schema properties matter most for local SEO? Google requires `name` and `address`. It recommends `geo`, `telephone`, `url` and `openingHoursSpecification`, which between them fix the location, the contact number, the site and the hours. `areaServed` and `sameAs` are absent from Google’s documentation and still worth populating, because they carry where the business works and which profiles elsewhere are the same business.

TL;DR

  • LocalBusiness schema that validates is present. Whether it works depends on which properties carry a value.
  • Declare the most specific accurate subtype, and match it to the primary category on your Google Business Profile.
  • `name` and `address` are the only two Google requires. `geo`, `telephone`, `url` and `openingHoursSpecification` are recommended, and `geo` wants five decimal places on each coordinate.
  • `areaServed` and `sameAs` appear nowhere in Google’s LocalBusiness documentation, and they still belong in the block. Google is not the only thing reading the page.
  • The Rich Results Test is where sign-off starts. It is a spell-checker for brackets.
  • Schema amplifies what is already true, so fix the citations and the local content first, then declare them.

If you’d like to understand whether your LocalBusiness schema is actually doing its job, get in touch with JB.