Seven local business schema mistakes
Most local business structured data is technically valid and still close to useless, because it uses the generic LocalBusiness type when a specific one exists, claims service areas the business does not cover, repeats unlinked copies of the same entity on every page, or invents an AggregateRating - which is the one mistake on this list that can earn a manual penalty.
1. Using LocalBusiness when something specific exists
This is the most common and the easiest to fix. Schema.org has specific subtypes that inherit
everything LocalBusiness has and add meaning: AutoRepair, CafeOrCoffeeShop, Restaurant,
LodgingBusiness, HairSalon, Dentist, Plumber, SecurityService.
{ "@type": "AutoRepair", "@id": "https://example.com/#business" }
Use the narrowest type that is still true.
2. Claiming service areas you do not serve
areaServed listing every county within fifty miles is a common piece of optimism. It does not
help you rank in those places, and claiming coverage you cannot deliver is how listings get
reported.
Mark up what you actually cover, typed properly:
"areaServed": [
{ "@type": "City", "name": "Watford" },
{ "@type": "AdministrativeArea", "name": "Hertfordshire" }
]
3. Unlinked copies of the same entity on every page
If every page declares a fresh LocalBusiness with no @id, you have told search engines you
have as many businesses as you have pages.
Declare the entity once with a stable @id, then reference it everywhere else:
{ "@type": "WebPage", "@id": "https://example.com/services/#page",
"about": { "@id": "https://example.com/#business" } }
One graph per page, one @id per real-world thing, references instead of repeats.
4. Inventing AggregateRating
This is the one that can actually hurt you. Marking up ratings that do not exist, or that you gathered yourself and presented as independent, violates Google’s structured data spam policies and earns a manual action.
If you have genuine reviews on your own site, mark them up. If you do not, leave the field out. An absent rating costs you a star in a search result; a fabricated one can cost you the rich result entirely, across the whole domain.
5. Opening hours as prose
"openingHours": "Mon-Fri 9-5" is a string. Use the structured form so it can be parsed, and
include the edge cases:
"openingHoursSpecification": [
{ "@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "09:00", "closes": "17:30" },
{ "@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday", "opens": "09:00", "closes": "13:00" }
]
Times are 24-hour. A business closed on Sunday simply omits it.
6. NAP that disagrees with itself
Name, address and phone number should be byte-identical across your markup, your Google Business Profile, your footer and every directory listing. “Street” in one place and “St” in another is a reconciliation problem you are handing to a machine that will not always get it right.
7. Services as a list instead of entities
A paragraph listing six services is not six things. Each service a business wants to be found for
deserves its own Service node, and usually its own page:
{ "@type": "Service", "@id": "https://example.com/services/cctv/#service",
"serviceType": "CCTV installation",
"provider": { "@id": "https://example.com/#business" } }
Delta Surveillance does this per offering; E R Alloy Wheels does it per job type.
Validate both ways
Run every page through the Schema.org validator and Google’s Rich Results Test. The first tells you whether the vocabulary is right; the second tells you whether Google will do anything with it. Passing one is not passing the other.
Running in production
Every technique on this page is live on a client site, not a demonstration written for the article.

Automotive services
E R Alloy Wheels
Wheel work is several distinct searches - diamond cutting, powder coating, refurbishment, crack repair - and a single page…
Read the case study
CCTV and security installation
Delta Surveillance
Security installation is a considered purchase made by people who do not know the vocabulary. They search for the problem rather…
Read the case studyQuestions we get asked
Can bad structured data actually hurt me?
Yes, in one specific way: marking up reviews or ratings that do not exist, or that you collected yourself and presented as independent, is a spam policy violation and attracts a manual action. The rest of the mistakes on this list waste the opportunity rather than cause damage, but that one is genuinely dangerous.
How specific should the business type be?
As specific as schema.org offers. If AutoRepair, CafeOrCoffeeShop, LodgingBusiness or HairSalon describes you, use it instead of LocalBusiness. The specific types inherit everything the generic one has and add meaning on top, so there is no cost to being precise and a real cost to being vague.
Do I need structured data if I have a Google Business Profile?
They do different jobs. The profile feeds the map pack; the markup describes your website and is what non-Google systems read, assistants included. They should also agree with each other - a name, address or phone number that differs between the two is a signal neither can resolve.
Tell us what you need built.
A short call, a straight answer on scope and cost, and a fixed quote. No retainer, no monthly fee, no commission on your orders.