LocalBusiness Schema Markup: A Practical Guide for Owners

Learn which LocalBusiness schema fields matter, see a JSON-LD example to adapt, and test it with free tools before your business details go live.

If you run a café, a dental practice, a plumbing firm or a yoga studio, search engines need the basics about you: name, address, phone number and opening hours. Schema markup is a small block of structured data that states them in a format machines can read, instead of leaving them to guess from your page layout.

This guide is for owners and the people who look after their websites. By the end you will know which fields to fill in, have a working example to adapt, and be able to test it before you leave it live.

In short: LocalBusiness markup (written as JSON-LD) labels your business details for search engines. It does not control rankings or what Google shows. Use the most specific type that fits, fill in only true facts, and make sure they match your visible page and your Google Business Profile.

Three things that are easy to confuse

  • The Schema.org vocabulary. The full list of types and properties you may use. The Schema Markup Validator checks against it.
  • Google's rich-result features. A smaller set of markup that Google documents and may use in search results. Google decides whether and where anything appears.
  • Your Google Business Profile. A separate product you manage directly, which Google uses for local results. Your website markup does not replace it.

Your markup sits in the first two groups. It does not control the third.

Three groups: the Schema.org vocabulary and Google's rich-result features are where your markup sits; your Google Business Profile is a separate product your markup does not control.

What it will and won't do

LocalBusiness markup helps search engines interpret details that are already on your page. It will not:

  • rank a brand-new site by itself;
  • fix a page with no visible address, hours or contact details;
  • override a different set of details in your Business Profile;
  • earn review stars from reviews you wrote about yourself. Google's review snippet guidelines don't allow self-serving reviews in LocalBusiness or Organization markup.

Treat it as a layer on top of a page that already says clearly who you are and where you are.

The fields that matter

Google's LocalBusiness structured data documentation lists name and address as required. It lists many others as recommended, such as geo, telephone, url, openingHoursSpecification and priceRange. Check that page for the current list before you rely on any single field.

FieldWhat to put
nameThe name you trade under
urlYour main website address
telephoneFull international format, e.g. +44-20-7946-0000
addressStreet, city, region, postcode, country
geoLatitude and longitude of the premises, to at least 5 decimal places
openingHoursSpecificationRegular days and hours
image, logoFull URLs of a storefront photo and your logo
priceRangeA short symbolic range such as $$
sameAsProfiles you control, such as social pages
@idA stable identifier, e.g. https://yourbusiness.com/#business

Only include what you can fill in truthfully. A missing field is better than an invented one.

If you work from home

Never publish a private address just to satisfy a schema field. Google lists address as required for this markup, but its page doesn't cover service-area businesses, so check Google's current guidance before deciding what to publish. Your privacy comes first. A page can still be valid Schema.org markup without being eligible for any Google feature.

Pick the most specific type

LocalBusiness is the general type. Schema.org has many sub-types, and Google advises using the most specific one that fits. Examples include:

  • Restaurant, CafeOrCoffeeShop, Bakery
  • Dentist, MedicalClinic
  • HairSalon, BeautySalon
  • Plumber, Electrician, Locksmith
  • Store, ClothingStore
  • LegalService, AccountingService

Browse the list at schema.org/LocalBusiness and check the exact spelling. Names you might expect, such as Cafe, are not real types. If nothing fits, stay with LocalBusiness.

A working example

This block is for a fictional café. Replace every value with your own, including the URLs, address and coordinates. The values below are placeholders, so don't copy them to a live site.

Four lines from the café example with notes: the most specific type, phone with country and area code, latitude with at least 5 decimal places, and 24-hour opening times.
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "CafeOrCoffeeShop",
  "@id": "https://yourbusiness.com/#business",
  "name": "Your Business Name",
  "url": "https://yourbusiness.com/",
  "image": "https://yourbusiness.com/photos/storefront.jpg",
  "logo": "https://yourbusiness.com/logo.png",
  "telephone": "+44-20-7946-0000",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1 Example Street",
    "addressLocality": "Your City",
    "addressRegion": "Your Region",
    "postalCode": "AB1 2CD",
    "addressCountry": "GB"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 51.50000,
    "longitude": -0.10000
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "18:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Saturday", "Sunday"],
      "opens": "09:00",
      "closes": "17:00"
    }
  ],
  "sameAs": [
    "https://www.facebook.com/your-own-page",
    "https://www.instagram.com/your-own-account"
  ]
}
</script>

Notes on the details:

  • Phone: include the country code and area code, as Google's documentation asks.
  • Coordinates: Google asks for latitude and longitude with at least 5 decimal places, so don't round them. Use the real position of your premises.
  • Country: use a two-letter country code such as GB, US, AU or SG.
  • Hours: use 24-hour times (14:30, not 2:30pm). Leave out days you are never open.
  • Holiday closures: Google's documentation handles closures within OpeningHoursSpecification. For a day closed all day, set opens and closes to 00:00. For seasonal hours, use validFrom and validThrough with dates in YYYY-MM-DD format. Check Google's page for current details.
  • sameAs: list only profiles your business actually controls.
  • Several locations: give each location its own page and its own block with a distinct @id.

Where to put it

Put the block on the page where the same details are visible to visitors. That is usually the contact page or a location page, and a single-site business may also use the home page. Markup and visible content on a page should agree.

Before adding anything, check whether your theme, SEO plugin or another extension already outputs LocalBusiness markup. Two conflicting blocks cause more trouble than one tidy one.

How you add it depends on your platform:

  • WordPress: many SEO plugins have local-business or schema settings. Which features you get can depend on the plugin and its plan, so read its current documentation.
  • Shopify, Wix, Squarespace: these generally offer some form of custom code or header injection. Where it lives and what it can target varies by plan and template, so use your platform's help pages.
  • Hand-built sites: paste the block into the page's <head>, or just before </body>. JSON-LD works from either place.

How to test it

  1. Look at the live page. View page source shows what your server sent. Developer tools (F12, then Elements) show the page after JavaScript has run. If a plugin or script adds your markup, check both.
  2. Run Google's Rich Results Test on the live URL. It covers only features Google supports, and a pass doesn't mean anything will be displayed.
  3. Run the Schema Markup Validator. It checks your markup against the Schema.org vocabulary itself.

Fix any errors. Treat warnings one by one: add recommended details where you have accurate ones, and never invent values just to clear a warning.

Three test steps: look at the live page source and rendered page, run Google's Rich Results Test (a pass doesn't mean anything will be shown), and run the Schema Markup Validator.

Check: the page must be reachable. It shouldn't sit behind a login or carry a noindex tag, and your robots.txt file shouldn't block it.

Common problems

SymptomLikely causeFix
Tool finds no markupScript added by JavaScript, or wrong page testedTest the live URL and compare source with rendered HTML
Duplicate or clashing entriesTheme and plugin both output itSwitch one off
Missing field warningOptional detail not suppliedAdd it only if it is true
Hours differ across the webWebsite not updated after a changeAlign schema, page and Business Profile

Keep it honest and in sync

The quickest way to cause problems is to publish details that disagree with the rest of your online presence. If your schema says you close at 20:00 and your Business Profile says 18:00, customers and search engines get conflicting answers.

Checklist: opening hours match on page, schema and Business Profile; phone digits identical; address matches including unit numbers; sameAs links work and are yours; live URL retested.

Run through this whenever something real changes, such as a new number, new hours, a new address or a holiday closure. It is also worth doing after plugin or theme updates:

  • Opening hours match on the page, in the schema and on your Business Profile.
  • Phone digits are identical in all three places.
  • The address matches, including unit or suite numbers.
  • Every sameAs link still works and belongs to you.
  • The live URL has been retested.

Schema is only one part of local SEO. The page still needs clear content, a sensible title and description, and links from the rest of your site. To see how a page of yours looks on those basics, you can run Lordevo's free single-page SEO scan. If you later get a full audit, how to read an SEO audit helps you decide what to fix first.

Key takeaways

  • Use JSON-LD with the most specific LocalBusiness sub-type that fits.
  • Include name and address, plus every recommended field you can answer truthfully.
  • Keep schema, visible page content and your Google Business Profile identical.
  • Put the block on the page that shows those details, and remove duplicate markup from themes or plugins.
  • Test the live page with the Rich Results Test and the Schema Markup Validator.
  • Retest after plugin or theme updates, and update the markup whenever something real changes.

FAQ

Will LocalBusiness schema get me into the local pack?

Not on its own. Google decides what appears, and your Business Profile plays a separate, central role. Markup helps search engines understand your page. It doesn't promise any placement.

Do I need a developer?

Not always. Some SEO plugins can output the markup from a settings screen. If you paste it by hand, change every placeholder value and test it afterwards.

Can I add star ratings from my own reviews?

Google's guidelines don't allow self-serving reviews about your own business in LocalBusiness markup, so leave them out.

Should every page of my site include it?

Usually not. Put it where your business details are shown, such as the contact page or a location page. Multi-location businesses should give each location its own page and block.