Local website SEO

How do you add LocalBusiness schema to a local business website?

LocalBusiness schema is a block of structured data that states your business name, address, phone, hours and location in a format search engines read reliably. It takes an hour to add, describes what your page already says and should match your Business Profile exactly.

By the ShoutEx Team · Updated October 2026 · Facts checked October 7, 2026
Schema does not make a business more relevant. It makes the facts you already publish unambiguous.Local SEO · Updated October 2026
2 required
Google lists name and address as required for local business markup
5+ decimals
Recommended precision for latitude and longitude
JSON-LD
The format Google recommends for structured data

What is LocalBusiness schema?

What is LocalBusiness schema?

LocalBusiness schema is structured data, written in the schema.org vocabulary, that describes a business with a physical location: its name, address, phone, opening hours, coordinates and website. You add it to a page as a JSON-LD script, invisible to visitors and read by search engines.

It is one of many schema.org types. LocalBusiness itself has dozens of more specific subtypes, such as Plumber, Dentist, BicycleStore or AccountingService, and Google asks you to pick the most specific one that fits.

Google's introduction to structured data explains that markup gives explicit clues about the meaning of a page, that JSON-LD is the recommended format, and that correct markup makes a page eligible for enhanced results without guaranteeing them. For local businesses the main value is clarity: the address and hours on your site are stated in a way no parser can misread. It complements, not replaces, consistent business information.

Which pages should carry LocalBusiness markup?

Put LocalBusiness markup on the page that represents each physical location, and nowhere it does not belong.

Site typeWhere LocalBusiness goesElsewhere
Single locationHomepage or contact page (one place, not both with different data)Organization details can sit in the same block
Multi-locationEach location page, with that branch's dataOrganization markup on the homepage
Service-area business with hidden addressOnly if you show an address on the site; ShoutEx view: otherwise rely on Organization markupService pages need no LocalBusiness block
Departments in one buildingThe main location, with department entriesEach department's page can link to it

For multi-location sites, this ties directly into location pages: the page, the markup and the profile all describe the same branch.

Which properties does Google require and recommend?

Google's local business structured data documentation sets out what to include. The table summarizes it for a typical local business.

LocalBusiness propertiesFrom Google's local business structured data documentation
PropertyStatusWhat to enter
nameRequiredThe business name as on the storefront and profile
address (PostalAddress)RequiredStreet, city, province, postal code, country CA
geoRecommendedLatitude and longitude with at least 5 decimal places
telephoneRecommendedIncluding country and area code, e.g. +1-519-555-0147
urlRecommendedThe page for this specific location
openingHoursSpecificationRecommendedEach day's opening and closing times
priceRangeRecommendedA short range such as $$, under 100 characters
departmentRecommended where relevantSeparate departments, each with its own details
Source: Google Search Central, local business structured data (checked October 7, 2026).

What does a complete JSON-LD example look like?

Here is markup for a fictional bicycle shop in Cambridge, Ontario. It uses the BicycleStore subtype, a Canadian address with province code, a phone number with country code and two sets of opening hours.

JSON-LD · fictional business
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BicycleStore",
  "@id": "https://grandrivercycle.example/#store",
  "name": "Grand River Cycle",
  "url": "https://grandrivercycle.example/",
  "telephone": "+1-519-555-0147",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "455 Hespeler Rd, Unit 2",
    "addressLocality": "Cambridge",
    "addressRegion": "ON",
    "postalCode": "N1R 0A1",
    "addressCountry": "CA"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 43.39712,
    "longitude": -80.31478
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "10:00",
      "closes": "18:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "09:00",
      "closes": "17:00"
    }
  ]
}
</script>
  • @type is the specific subtype, not plain LocalBusiness.
  • @id gives the business a stable identifier other markup can refer to.
  • telephone includes +1 and the area code.
  • geo uses five decimal places. Take coordinates from the pin you placed on your Business Profile.
  • openingHoursSpecification groups days with the same hours. Add special hours for holidays when they apply.
  • Every value matches what is printed on the page and on the profile.
ShoutEx rule

Markup must match the page, and the page must match the profile.

Every value in your JSON-LD should be visible on the same page and identical to the Business Profile for that location. Three versions of your hours is worse than none.

Which LocalBusiness subtype should you choose?

Choose the most specific schema.org type that describes what the business is. If nothing specific fits, use the closest parent type rather than inventing one.

BusinessSpecific typeParent type
Plumber or electricianPlumber, ElectricianHomeAndConstructionBusiness
Physiotherapy clinicPhysiotherapyMedicalBusiness
Bicycle shopBicycleStoreStore
Auto repair garageAutoRepairAutomotiveBusiness
Bookkeeping or accounting firmAccountingServiceFinancialService
Hair salonHairSalonHealthAndBeautyBusiness

The schema type does not need to match your Google Business Profile category word for word; the two systems use different lists. Pick each one on its own terms. Categories are covered in Business Profile categories.

What mistakes break LocalBusiness markup?

  • Self-serving review stars. aggregateRating on your own business is reserved for sites that review other businesses.
  • Head office data on every branch page. Each location needs its own address, phone and hours.
  • Markup that disagrees with the page. Hours in the JSON-LD that differ from the visible hours.
  • Plugins adding duplicate blocks. A theme and an SEO plugin both outputting LocalBusiness with different values.
  • A P.O. box or virtual office as the address. Use the real location customers visit.
  • Forgetting updates. Holiday hours and moves must change the markup too.

How do you test and monitor schema?

Test before publishing and check monthly afterwards.

Testing routineFree tools from Google and schema.org
StepToolWhat to look for
Validate syntaxSchema Markup ValidatorNo errors; the type and properties are read correctly
Check Google eligibilityRich Results TestDetected items and any warnings
Compare with the pageView the page as a visitorEvery value visible and identical
Monitor at scaleA site crawler that extracts structured dataMissing or changed blocks after site or plugin updates
Source: ShoutEx testing routine.

On larger sites, add a schema check to every release. See site architecture for where each block belongs and the local SEO audit for the full checklist.

Frequently asked questions

Does LocalBusiness schema improve local rankings?

It makes your business details unambiguous to search engines. It does not replace relevance, distance and prominence, and correct markup does not guarantee any enhanced result.

Which format should I use for schema markup?

JSON-LD, which Google recommends. It sits in a script block and does not change how the page looks.

What properties are required for LocalBusiness?

Google lists name and address as required, and recommends geo, telephone, url, opening hours, price range and department where relevant.

Can I add review stars to my own business schema?

No. Google reserves review and aggregateRating markup in local business data for sites that review other businesses. Self-serving ratings will not show stars.

Do I need separate schema for each location?

Yes. Put a LocalBusiness block on each location page with that branch's own address, phone, hours and coordinates.

What if my exact business type is not in schema.org?

Use the closest more general type, such as Store, ProfessionalService or HomeAndConstructionBusiness, rather than plain LocalBusiness if a better parent fits.

How do I write a Canadian phone number in schema?

Include the country and area code, for example +1-519-555-0147.

How do I test my schema?

Use the Schema Markup Validator for syntax and Google's Rich Results Test for eligibility, then re-test key pages after site or plugin updates.

Sources & further reading

Regulator rules, platform policies and local data change. These sources let you check the facts on this page, last checked October 7, 2026.