SEO
LocalBusiness Schema for Service Businesses: A Practical JSON-LD Guide
Build accurate LocalBusiness schema for a service business, choose the right type, handle address limits, validate JSON-LD, and avoid common mistakes.
Overview
LocalBusiness schema can help search engines understand factual information about a real business.
It cannot manufacture a location, create authority that does not exist or guarantee a Map Pack position.
That difference is the foundation of a safe implementation.
For service businesses, the trickiest part is usually not the JSON. It is deciding which real-world entity the markup describes, which facts are public and verifiable, and whether the business actually meets Google’s documented requirements for its LocalBusiness search feature.
What LocalBusiness schema is
LocalBusiness is a Schema.org type for a particular physical business or branch of an organization.
It can describe facts such as:
Google has its own LocalBusiness structured-data documentation for search features. Google’s documentation does not mean every valid Schema.org implementation receives a special search appearance.
Think of this as two overlapping layers:
A markup block can be syntactically valid Schema.org and still fail to satisfy Google’s documented feature requirements.
- business name;
- URL;
- physical address;
- phone;
- opening hours;
- geographic coordinates;
- image;
- price range;
- a more specific business subtype.
- Schema.org vocabulary defines ways to describe entities and properties.
- Google Search eligibility adds Google-specific requirements and guidelines for a particular search feature.
What LocalBusiness schema is not
LocalBusiness schema is not:
Structured data should describe what is true on the page and in the real business.
- a guaranteed local-ranking boost;
- a way to rank in a city where the business does not operate;
- a substitute for an accurate Google Business Profile;
- permission to publish a fake address;
- a review-star generator;
- a reason to copy every possible schema property into one giant object;
- a guarantee that Google will display a rich result.
Start with the actual business entity
Before writing JSON-LD, answer:
What real-world entity does this page represent?
For a single-location salon, it may be the salon at that address.
For a company with three independently operating branches, each location is a distinct local-business entity even though they share one brand.
For a mobile service business that does not receive customers at its base, the situation is different because the public location model and Google’s LocalBusiness rich-result address requirement can conflict with the temptation to hide or invent address information.
Do not start from “which schema will rank better?” Start from the entity.
Choose the most specific LocalBusiness type that fits
Google recommends using the most specific LocalBusiness subtype possible.
Examples in Schema.org include types such as:
The right type is the one that truthfully describes the business.
Do not select a subtype simply because:
If no narrow subtype fits well, use a broader truthful type instead.
- BeautySalon;
- DaySpa;
- HealthAndBeautyBusiness;
- HomeAndConstructionBusiness;
- ProfessionalService;
- Store;
- SportsActivityLocation.
- its label contains a keyword you want;
- a competitor uses it;
- a schema generator recommends it;
- it sounds more specific even though it is inaccurate.
Google’s current required properties matter
Google’s current LocalBusiness documentation lists these required properties for its LocalBusiness search feature:
Google describes address as the physical location of the business.
That creates an important implementation boundary for service-area businesses.
- name;
- address.
Do not treat areaServed as a magic replacement for Google’s required physical address
Schema.org offers ways to describe an area served. But Google’s current LocalBusiness feature documentation still lists a physical address as required.
So this advice is unsafe:
“If you hide your address on Google Business Profile, just omit address, add areaServed, and you are fully eligible for Google LocalBusiness rich results.”
The markup may still express useful Schema.org facts, but that is not the same as satisfying Google’s documented LocalBusiness feature requirements.
A basic storefront LocalBusiness JSON-LD example
The example below is fictional. Replace every value with real visible business information.
The code is not valuable because it is long. It is valuable only if the values are accurate.
{
"@context": "https://schema.org",
"@type": "BeautySalon",
"name": "Harbor Beauty Studio",
"url": "https://www.example.com/",
"telephone": "+1-555-555-0100",
"image": "https://www.example.com/images/studio-front.jpg",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "125 Example Avenue",
"addressLocality": "Portland",
"addressRegion": "OR",
"postalCode": "97205",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 45.000000,
"longitude": -122.000000
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"opens": "09:00",
"closes": "18:00"
}
]
}Match structured data to visible business information
A practical rule:
If a customer would be surprised by a fact in the markup because the page says something different, fix the inconsistency.
Check:
Structured data should not become a hidden alternate version of the business.
The service-business homepage template can help make the public business identity clear before you start adding technical markup.
- business name;
- physical address;
- phone;
- opening hours;
- URL;
- location identity;
- business type;
- images;
- price indicators where used.
How to handle a service-area business
A service-area business may travel to customers and intentionally hide its residential or administrative address from the public.
The Google Business Profile service-area guide explains the profile-side distinction.
For structured data, use a conservative process.
Step 1: Do not invent a storefront address
Never add:
- a virtual office you do not genuinely occupy;
- a mailbox;
- a coworking address that is not a real eligible operation;
- a random central-city address;
- a customer’s address;
- a private home address solely to make a test pass.
Step 2: Do not expose a private base just for schema
JSON-LD is page source. Publishing a hidden home address in structured data can expose information the business intentionally does not make public.
Do not treat privacy as an obstacle to bypass.
Step 3: Separate Schema.org description from Google feature eligibility
You can use truthful structured data to describe an organization, services and areas served where appropriate.
But if you omit a physical address, do not promise that the page qualifies for Google’s LocalBusiness rich-result feature under the current documentation.
That is a limitation to explain, not a hole to fill with invented data.
Step 4: Focus the page on useful service-area content
A service-area page should answer real customer questions: what is offered, where the business travels, constraints, timing, examples and next steps.
The service-area page template keeps that content useful instead of producing thin city-name swaps.
Multiple locations need multiple real entities
A chain or multi-location business should not describe three branches as if they were one addressless super-location.
Google recommends defining each local business location.
For each real branch, keep the facts distinct:
- location-specific address;
- local phone where applicable;
- location URL;
- opening hours;
- geo coordinates;
- location-specific images where useful;
- location identity.
Example: two studio locations
If a photography business operates two actual studios:
each location can have its own page and its own appropriate LocalBusiness entity.
Do not publish Address A on the Riverside page merely because the Downtown branch is older.
- Downtown Studio at Address A;
- Riverside Studio at Address B;
Use stable entity identifiers where appropriate
For more advanced implementations, an @id can provide a stable identifier for an entity.
A common pattern is an absolute URL with a fragment:
The identifier should be stable and point to the same conceptual entity over time.
Do not generate a new random identifier on every page load.
"@id": "https://www.example.com/locations/downtown#business"Opening hours: encode the schedule you really publish
Opening-hours markup is useful only when it matches customer-facing hours.
If the business website says:
Monday–Friday, 9:00 AM–6:00 PM
but schema says:
Monday–Sunday, 24 hours
the problem is not that Google “misread” the page. The data is inconsistent.
For businesses with seasonal or special hours, maintain a process for updating visible information and structured data together when needed.
Structured data should not become a forgotten time capsule.
Phone and URL
Use the actual public business phone and canonical website URL for that location or business.
Avoid:
If a domain changes, update the structured data as part of the migration checklist rather than months later.
- tracking URLs that unexpectedly redirect through unrelated domains;
- phone numbers that belong to a former employee;
- URLs for a different location;
- HTTP versions when the site’s canonical public version is HTTPS.
Geographic coordinates
geo can describe a real physical location with latitude and longitude.
Use accurate coordinates for the business location, not the center of a city or a neighborhood you want to target.
If your map pin is wrong, fix the underlying location information rather than manipulating schema coordinates as a ranking tactic.
Images
Use real business images that are accessible to crawlers and relevant to the entity.
Good candidates can include:
Do not use an unrelated stock image merely because a schema generator requires an image field in its template.
- storefront exterior;
- interior;
- studio;
- team at work;
- representative location image.
Price range
priceRange is a descriptive property, not a substitute for a real pricing page.
If you use it, keep it truthful and consistent with the business.
For businesses debating how much price information to show publicly, the website pricing guide offers a separate decision framework.
Be extremely careful with reviews and aggregateRating
Review markup is one of the easiest areas to get wrong.
Google’s current LocalBusiness documentation describes aggregateRating as a recommended property only for sites that capture reviews about other local businesses.
That is an important guardrail for a business marking up its own website.
Do not paste an aggregateRating block onto your own LocalBusiness entity simply because:
Structured-data policies around reviews have changed over time, and self-serving review markup is a common source of confusion.
A customer testimonial section can still be useful to people. The testimonial placement guide focuses on the website-content side without promising search-result stars.
- you have a five-star Google rating;
- a schema plugin offers a “review stars” switch;
- a competitor has stars in an old screenshot;
- a generator says it can “unlock star ratings.”
Do not mark up content that is not really there
Google’s general structured-data guidelines require the markup to represent the page and comply with Search policies.
Avoid hidden fantasy data such as:
Structured data is machine-readable, not invisible.
- services the business does not offer;
- locations it does not operate;
- hours that are more generous than reality;
- fake prices;
- fake ratings;
- fake awards;
- misleading business categories.
Where should LocalBusiness schema go?
Google says LocalBusiness structured data can be added to a page on the site, and it makes sense to place it on a page that contains information about the business.
For a single-location service business, a strong home or location page is often the natural place.
For multiple locations, each location page can describe its real local entity.
Avoid spraying multiple contradictory LocalBusiness objects across every page.
Google’s Organization guidance also says Organization markup does not need to be repeated on every page.
The goal is a coherent entity model, not maximum JSON-LD volume.
LocalBusiness vs Organization schema
Organization describes the organization more broadly.
LocalBusiness is a subtype of organization/place concepts focused on a local physical business.
A company can have an organization-level entity and local branch entities without forcing every page to pretend it represents the same thing.
For example:
Keep the model understandable.
- home page: Organization or main business identity;
- Downtown location page: LocalBusiness entity for Downtown;
- Riverside location page: LocalBusiness entity for Riverside;
- service page: Service information connected to the correct provider where appropriate.
LocalBusiness schema does not replace Google Business Profile
A Business Profile and website structured data are different systems.
A business should keep both accurate.
A good local workflow includes:
The published local SEO guide for service businesses provides the broader system. This Guide stays focused on structured-data implementation.
- accurate Business Profile name;
- correct category;
- correct storefront/service-area setup;
- useful services;
- current website link;
- useful location/service content;
- consistent public business information;
- technically valid structured data where appropriate.
LocalBusiness schema does not guarantee Map Pack rankings
Avoid statements such as:
Structured data can help systems understand declared information. That is not the same as a guaranteed ranking outcome.
Use it because accurate machine-readable information is good technical hygiene, not because a generator promises a ranking shortcut.
- “Add schema and rank in the Map Pack.”
- “Schema is a direct local ranking factor.”
- “JSON-LD guarantees AI citations.”
- “Adding every nearby city to areaServed expands your ranking radius.”
How to validate your markup
Use two different validation questions.
Question 1: Is the syntax and Schema.org vocabulary valid?
The Schema Markup Validator can help identify vocabulary/syntax problems.
Question 2: Does it satisfy Google’s requirements for a supported feature?
Use Google’s Rich Results Test and Google Search Central documentation.
A Schema.org-valid object can still be ineligible for a Google rich result if required properties or policies are not satisfied.
A validation workflow
Do not treat “0 syntax errors” as proof of ranking eligibility.
- Put the JSON-LD on a testable page.
- Confirm the page is accessible.
- Run the Rich Results Test.
- Review errors separately from warnings.
- Compare required fields with the current Google documentation.
- Run a Schema.org validator when you need broader vocabulary checks.
- Inspect the live rendered/source page to ensure the deployed markup is the version you tested.
- Confirm the visible business information matches.
- Re-test after significant website/template changes.
Common LocalBusiness schema mistakes
Using LocalBusiness when a more specific type exists
Prefer a truthful more specific subtype.
Omitting the address and assuming areaServed satisfies Google’s current LocalBusiness feature requirement
Google currently lists the physical address as required.
Publishing a private or fake address
Do not sacrifice privacy or accuracy to make markup pass.
Adding self-serving aggregate ratings
Google’s current LocalBusiness documentation restricts the aggregateRating recommendation to sites capturing reviews about other local businesses.
Copying one location’s details to every location page
Each real location should have its own facts.
Marking up information that conflicts with the page
Fix the business data, not just the JSON.
Using schema as a city-keyword container
Do not stuff areaServed with every city in the state to simulate relevance.
Forgetting schema after a move
Address, phone, hours and URLs can go stale.
Example: a one-location beauty studio
A useful implementation sequence:
No ranking promise is needed.
- confirm the studio is a genuine customer-facing location;
- choose an accurate subtype such as BeautySalon if appropriate;
- publish the correct name and address visibly on the site;
- add matching LocalBusiness JSON-LD;
- include useful recommended properties that are accurate;
- validate;
- keep the Business Profile and website aligned;
- re-test after an address, phone or hours change.
Example: a mobile cleaning company
The company travels to customers and does not receive customers at its home base.
A safe sequence:
That is more honest than converting the owner’s kitchen table into a public “office” in JSON-LD.
- keep the customer-facing website honest about the service area;
- do not publish a private home address merely to satisfy a rich-result field;
- use truthful organization/service structured data where appropriate;
- understand that omitting a physical address means you should not promise eligibility for Google’s current LocalBusiness rich-result feature;
- build useful service-area content instead of fake location signals;
- validate whatever structured data you do publish.
Example: a three-location studio brand
For three genuine branches:
The service page template can then connect services to the appropriate business context without turning every service page into a duplicate location page.
- create or maintain useful location pages;
- give each location its actual name/address/hours/contact information;
- use the appropriate local subtype for each location;
- give each entity a stable identifier;
- validate each page;
- keep cross-location facts consistent where they truly are shared;
- do not merge all addresses into one LocalBusiness object.
Maintenance checklist
Review structured data when:
Structured data is part of the website’s operational truth.
- the business moves;
- a phone number changes;
- hours change materially;
- a location opens or closes;
- the canonical domain changes;
- the brand name changes;
- a location page URL changes;
- a template migration changes structured-data output;
- the business adds/removes a meaningful public service;
- Google updates its structured-data documentation.
Build the website truth first
Good schema starts with good source information.
OneStudio helps service businesses manage customer-facing website content, online booking and business operations in one system. It does not need to be presented as a schema “ranking button.” Use OneStudio features to keep the underlying website and customer journey useful, then add structured data that accurately describes what is actually there.
Questions businesses ask
Does LocalBusiness schema improve Google Maps rankings?
Google does not guarantee a Map Pack ranking improvement from adding LocalBusiness structured data. Use it to describe accurate business information and follow Google’s search-feature requirements, not as a ranking hack.
Is areaServed enough for a service-area business?
areaServed can describe areas in Schema.org, but Google’s current LocalBusiness search-feature documentation lists a physical address as required. Do not describe areaServed as a substitute for that Google requirement.
Should a service-area business publish its hidden home address in schema?
Not simply to satisfy a markup requirement. Structured data is published page source. Do not expose a private or non-customer-facing address just to make a validator happy.
Can I add my Google review rating as aggregateRating?
Be cautious. Google’s current LocalBusiness documentation describes aggregateRating as recommended only for sites that capture reviews about other local businesses. Do not assume your own Google rating can be marked up to earn review stars.
Should LocalBusiness schema be on every page?
Not by default. Keep entity placement coherent. Google says LocalBusiness markup can be placed on a page containing business information, and its Organization guidance says organization markup does not need to be repeated everywhere.