Give each customer-facing location its own LocalBusiness entity and describe the facts visitors can verify on that page. Start with the business name and physical address. Add the location’s phone, hours and other details when you can keep them current.
Start with one verified location. Give it a stable @id, add a separate entity for each real branch, and test the page with Google’s Rich Results Test before repeating the pattern.
What Schema.org LocalBusiness Actually Does
Schema.org is a vocabulary of types that describe entities on the web. LocalBusiness is the type for physical businesses with a location clients can visit. When you mark up a page with LocalBusiness JSON-LD, you’re telling Google:
- This page represents a real business at a specific physical address.
- Here are the verifiable facts: name, phone, hours, geo-coordinates.
- Here’s the relationship to a parent brand (if any).
- Here are the services offered and the geographic area served.
Google uses supported structured data to understand details such as opening hours and departments. Eligibility for a rich result depends on the page and the search. The markup itself carries no guaranteed placement. Read Google’s LocalBusiness documentation.
Map the details from a real Dallas office
Aurum Title publishes one Dallas office with a suite number and a main phone. Begin with those details and match the visible page when filling in the JSON-LD.
| Public detail | Schema field | What to enter |
|---|---|---|
| Business name | name | Aurum Title |
| Office and suite | address | 8150 N Central Expy, Suite 1100, Dallas, TX 75206 |
| Main phone | telephone | +1-214-306-8606 |
| Location details page | url | Aurum Title’s public Dallas contact page |
Before adding opening hours or coordinates, verify them with the office and add the relevant information to the page. Keep the same suite number and primary phone everywhere customers use them.
Which LocalBusiness fields does Google require?
Google lists name and address as required properties for LocalBusiness rich result eligibility. Use the most specific business subtype that applies. Add other supported properties when the details are accurate and relevant.
| Property | Status | What to check |
|---|---|---|
name | Required | Use the business name customers see. |
address | Required | Use a PostalAddress object for the physical location. |
telephone and url | Recommended | Use the primary phone with a country code and a working URL for that location. |
openingHoursSpecification | Recommended | Use the location’s published hours and update seasonal changes. |
geo and priceRange | Recommended when relevant | Verify coordinates for the real address. Publish an accurate price range where it helps customers. |
Keep the node’s @id stable and distinct for each location. Schema.org properties such as parentOrganization can describe the brand relationship. For review markup, follow Google’s review snippet rules.
A Complete Single-Location JSON-LD Example
This fictional Plano dentist example shows the shape of a single location. Put the JSON-LD on a page with the relevant public business details, then substitute your verified values.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Dentist",
"@id": "https://example.com/#business",
"name": "Plano Family Dental",
"image": "https://example.com/storefront.jpg",
"url": "https://example.com",
"telephone": "+19725550100",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "1234 Park Blvd",
"addressLocality": "Plano",
"addressRegion": "TX",
"postalCode": "75093",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 33.01984,
"longitude": -96.69892
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00:00",
"closes": "17:00:00"
}
],
"sameAs": [
"https://www.facebook.com/planofamilydental",
"https://www.instagram.com/planofamilydental"
]
}
</script>
The @type deserves special attention. Choose the most specific subtype that applies to your business:
- Restaurant, Cafe, Bakery — food and beverage
- Dentist, MedicalClinic, Physician — healthcare
- AutoRepair, Plumber, Electrician — home services
- AttorneyLaw, AccountingService, FinancialService — professional services
- Store, ClothingStore, FurnitureStore — retail
- HealthClub, SportsActivityLocation — fitness
- Otherwise, default to
LocalBusiness
@id for Entity Reconciliation
The @id property gives your business a stable, machine-readable identifier. Use the URL of the page plus a fragment like #business or #organization. This lets you reference the same entity across multiple schema blocks (e.g., your Organization schema and your LocalBusiness schema) so Google understands they describe the same thing.
Multi-Location Pattern 1: One Page Per Location (Recommended)
For brands with several customer-facing offices, a practical pattern is one dedicated URL per location, each with its own LocalBusiness schema. URL structure looks like:

example.com/locations/plano/
example.com/locations/frisco/
example.com/locations/mckinney/
Each location page contains a full LocalBusiness schema as shown above, PLUS a reference to a parent Organization. The parent Organization is declared once (on the homepage or an “about” page) and referenced from each location.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Smile Dental Group",
"url": "https://example.com",
"logo": "https://example.com/logo.png",
"sameAs": ["https://facebook.com/smiledentalgroup"]
}
</script>
On each location page, use its own business entity and link it back to the parent.
{
"@context": "https://schema.org",
"@type": "Dentist",
"@id": "https://example.com/locations/plano/#business",
"name": "Smile Dental Group",
"parentOrganization": { "@id": "https://example.com/#organization" },
"address": {
"@type": "PostalAddress",
"streetAddress": "1234 Example Street",
"addressLocality": "Plano",
"addressRegion": "TX",
"postalCode": "75075",
"addressCountry": "US"
},
"telephone": "+1-972-555-0100"
}
Multi-Location Pattern 2: Single Page with Array of Branches
If the site has a shared locations directory, it can list the offices and link to their pages. The schema below illustrates how subOrganization relates each branch to the parent brand. Use separate IDs and complete public address fields for the offices you describe.
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Quick Wash Car Care",
"url": "https://example.com",
"subOrganization": [
{
"@type": "LocalBusiness",
"@id": "https://example.com/locations/plano-park/#business",
"name": "Quick Wash — Plano Park",
"address": {
"@type": "PostalAddress",
"streetAddress": "100 Example Street",
"addressLocality": "Plano",
"addressRegion": "TX",
"postalCode": "75075",
"addressCountry": "US"
},
"telephone": "+19725550101"
},
{
"@type": "LocalBusiness",
"@id": "https://example.com/locations/frisco-main/#business",
"name": "Quick Wash — Frisco Main",
"address": {
"@type": "PostalAddress",
"streetAddress": "200 Example Street",
"addressLocality": "Frisco",
"addressRegion": "TX",
"postalCode": "75034",
"addressCountry": "US"
},
"telephone": "+19725550102"
}
]
}
A dedicated page gives customers one place to find the office’s address, hours and services. A directory can help visitors find those pages.
Service-Area Businesses (Mobile Plumbers, Roofers, etc.)
If you serve clients at their location rather than yours (think: mobile car detailing, roof repair, locksmith), you’re a “service-area business” in Google’s terminology. Use areaServed instead of relying solely on address:
{
"@type": "Plumber",
"name": "DFW Emergency Plumbing",
"telephone": "+19725550199",
"address": {
"@type": "PostalAddress",
"addressLocality": "Dallas",
"addressRegion": "TX",
"addressCountry": "US"
},
"areaServed": [
{
"@type": "City",
"name": "Plano"
},
{
"@type": "City",
"name": "Frisco"
},
{
"@type": "City",
"name": "McKinney"
}
]
}
Use areaServed to describe the service territory. Google lists a physical address for its LocalBusiness rich result feature. Businesses that visit customers should follow Google’s service-area guidance and keep private dispatch addresses private.
Six checks before publishing LocalBusiness markup
- Match the name, physical address and phone to the location page.
- Check that the primary phone includes a country code and reaches the right branch.
- Use a business subtype that describes the actual location.
- Keep each location’s
@iddistinct and consistent across pages. - Compare any coordinates and opening hours to verified office details.
- Check review fields against Google’s policy, which excludes self-serving LocalBusiness reviews from review snippets.
Use Google’s Rich Results Test (search.google.com/test/rich-results) on every URL with LocalBusiness schema. It catches syntax errors AND eligibility issues. Schema that “validates” in a generic JSON-LD validator may still fail Google’s specific requirements for rich features. We cover this validation workflow in more depth in how broken schema markup hides your business details from search engines.
Worked Example: Structuring a 14-Location Dental Group
Consider a 14-location dental group with offices across DFW. Its existing schema: a single LocalBusiness block on the homepage covering only the original Dallas location. The other 13 locations need their own verified details and entity IDs.
What to build:
- One Organization schema on the homepage (parent entity).
- 14 dedicated location pages (
/locations/plano/,/locations/frisco/, etc.) following Pattern 1. - Each location page: full LocalBusiness schema with Dentist subtype, complete NAP, geo coordinates, hours, parent reference, sameAs (links to per-location GBP profiles).
- Synchronized NAP across schema, GBP profiles, and on-page content for every location.
- Internal links from the main “Locations” index page to each location page using descriptive anchor text.
Special Case: Franchises with Independent Owners
Franchise businesses have a unique schema challenge: each location is independently owned and operated, but clients perceive them as a single brand. Use this pattern:
- Describe the actual local operator and publish the address, phone and hours customers use for that location.
- Use
Organizationto identify the corporate brand on its main site. - Give each local operator a distinct identifier and describe its relationship to the brand accurately.
For deep franchise SEO strategy (which extends well beyond schema), see our service breakdown of franchise and multi-location SEO services.
The 3-Step Validation Workflow Before Every Deploy
- Validate the vocabulary. Use the Schema Markup Validator to check the properties and types.
- Check Google eligibility. Run the Rich Results Test and address errors before publishing.
- Confirm the deployed page. Test the public URL and use URL Inspection in Search Console to check that Google can access the page and its markup.
When to Update Your LocalBusiness Schema
Schema is not “set and forget.” Update it whenever:
- Hours change (holidays, seasonal, permanent)
- You open or close a location
- NAP changes (phone, address)
- You add a new service worth marking up
- You start accepting new payment types
- Your reviews/ratings change visibly on the page
For multi-location brands changing addresses or consolidating locations, also implement proper 301 redirects from old location URLs to new ones. The 301 redirect playbook applies to location migrations too.
Frequently Asked Questions
They serve different purposes. A Google Business Profile manages business details on Google. LocalBusiness structured data describes the business on your website and can help Google understand those details.
Google allows it on any page. Add the full entity where visitors can see the relevant business details. For a branch, use its location page and reuse the same stable identifier when referring to that branch elsewhere.
There is no guaranteed time frame for ranking changes. Use the Rich Results Test to check eligibility and URL Inspection to check that Google can read the published page.
Organization describes the parent company or brand. LocalBusiness is a subtype you can use for an individual location. Use separate identifiers when they represent different entities.
Google excludes self-serving LocalBusiness reviews from review snippets, including reviews displayed through third-party widgets. Follow Google’s review snippet guidelines for any review markup.
Need multi-location schema deployed correctly?
We’ll audit your existing structured data, build per-location schema for every storefront, sync your Google Business Profiles, and validate everything against Rich Results Test — typically within 10 business days.
Get a Local SEO Audit Explore Multi-Location SEO ServicesCall (346) 244-8617Book a free 30-minute call
Dallas, Texas · no obligation · you speak to Mantas, not a sales desk



