Skip to content

Cookie settings

Choose which kinds of cookies you allow. You can change your choice at any time via Cookie settings at the bottom of every page. Privacy statement

Necessary

Always on

Needed to log in, keep your cart and remember your choices. These are always on.

Which cookies?
  • weboke_sessie, weboke_klant, weboke_remember: your session and staying logged in
  • weboke_basket: your cart
  • wkBtwIncl: showing prices with or without VAT
  • wok_cookies: your cookie choice, 12 months

Measures which ad leads to a visit or order, so we do not pay for ads that do nothing.

Which cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), up to 90 days
  • OpenAI Ads, ads in ChatGPT
  • wok_aff: which partner referred you to us (affiliate programme), 60 days

4.6

Country and language

Each country has its own site, with prices and VAT for that country.

View

LocalBusiness: your business details in JSON-LD

Module 5: Structured data · Reading time: 13 minutes

Learning objective: After this lesson you can write and assess a LocalBusiness block in JSON-LD, with the required and recommended properties according to Google and the right subtype from schema.org.

Key concepts: LocalBusiness, subtype (Florist, Bakery, Dentist, ...), required: name and address, PostalAddress (streetAddress, postalCode, addressLocality, addressCountry), recommended: telephone, url, openingHoursSpecification, geo, image, priceRange, sameAs, openingHours as text, a single source of truth

Why this block matters

In lesson 5.1 you saw that Google uses structured data to understand your page. For a business with a shop, practice or workshop, the most important block is LocalBusiness: who you are, where you are, how to call you and when you are open. Google mentions the knowledge panel in Search and Maps as a possible use when someone searches for your business.

The block does not replace your Google Business Profile (module 6). It is one of the sources search engines take your details from. That is why it must say exactly the same as your profile, your contact page and your directory listings. Lesson 6.4 comes back to this.

Choosing the right type

Start with the question: what kind of business am I? In schema.org, LocalBusiness has thirty direct subtypes, and many more below those. A few examples:

BusinessTypePath in schema.org
Flower shopFloristLocalBusiness > Store > Florist
BakerBakeryLocalBusiness > FoodEstablishment > Bakery
DentistDentistLocalBusiness > Dentist
HairdresserHairSalonLocalBusiness > HealthAndBeautyBusiness > HairSalon
PlumberPlumberLocalBusiness > HomeAndConstructionBusiness > Plumber
AccountantAccountingServiceLocalBusiness > FinancialService > AccountingService

Google asks for the most specific type that fits. If you cannot find one, use LocalBusiness itself. If your business does two things (a bakery with a café), @type may be a list: ["Bakery", "CafeOrCoffeeShop"]. Watch the spelling: types start with a capital letter and are written exactly as in schema.org. Bloemist, florist or Flower shop do not exist; a reader will not recognise that type.

Look up a type via https://schema.org/<Type> or in the full list. If the page exists, the type exists.

Required and recommended according to Google

For a local business, Google lists only two required properties:

  • name: the name of the business, as it appears on your shopfront and in your profile;
  • address: the physical location, as a PostalAddress. Google asks you to fill in as many parts as possible.

And a series of recommended properties. The most important ones for a small business:

PropertyWhat goes in itNote
telephoneThe main numberWith country code and area code, for example +31 33 000 0000
urlThe address of the page for this locationFull address with https://, and it must work
openingHoursSpecificationOpening hours per daySee below
geoGeoCoordinates with latitude and longitudeNumbers, at least 5 decimal places
imagePhoto(s) of the businessAddresses Google is allowed to fetch and index
priceRangePrice range, such as €€ or €10-25Shorter than 100 characters
menu, servesCuisineOnly for restaurants and cafés

Because a LocalBusiness is also an Organization, Google recommends following the Organization fields as well, such as logo and sameAs (the addresses of your profiles on other sites, for example Instagram or Facebook).

What Google does not want in this block: review and aggregateRating about your own business. These are only meant for sites that collect reviews about other businesses. Lesson 5.3 explains why.

The address as a PostalAddress

The address is an object with its own type. Not a single line of text, but separate fields:

"address": {
  "@type": "PostalAddress",
  "streetAddress": "Voorbeeldstraat 12",
  "postalCode": "3811 AA",
  "addressLocality": "Amersfoort",
  "addressCountry": "NL"
}
  • streetAddress: street and house number, with any addition if there is one.
  • postalCode: the postcode.
  • addressLocality: the town or city.
  • addressCountry: the country, preferably as a two-letter country code (NL, BE, DE).
  • addressRegion (province or state) is allowed, but is not needed in the Netherlands.

A common mistake is "address": "Voorbeeldstraat 12, 3811 AA Amersfoort". That is text; a reader then has to guess which part is the postcode. Use the separate fields.

Opening hours

Google lists openingHoursSpecification: a list of blocks with days, opening time and closing time.

"openingHoursSpecification": [
  {
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Tuesday", "Wednesday", "Thursday", "Friday"],
    "opens": "09:00",
    "closes": "18:00"
  },
  {
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": "Saturday",
    "opens": "09:00",
    "closes": "17:00"
  }
]

The rules:

  • Days in English, as in schema.org: Monday to Sunday (or as a full address, https://schema.org/Monday). No ma, no maandag.
  • Times in 24-hour notation: 09:00, not 9 uur and not 9:00 AM.
  • A day that is not in the list counts as not described. If you want to state explicitly that you are closed all day, set opens and closes both to 00:00.
  • Open day and night: opens 00:00 and closes 23:59.
  • Open until after midnight (for example 18:00 to 02:00): one block with opens 18:00 and closes 02:00.
  • Temporarily different hours, such as a winter closure: the same block with validFrom and validThrough (dates such as 2026-12-24).

There is also a shorter notation from schema.org: "openingHours": ["Tu-Fr 09:00-18:00", "Sa 09:00-17:00"], with two-letter English day names. It is valid in schema.org, but it is not in Google's list. If you have the choice, use openingHoursSpecification.

The complete block for Bloemenatelier Lotte

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Florist",
  "name": "Bloemenatelier Lotte",
  "url": "https://www.example.com/",
  "telephone": "+31 33 000 0000",
  "image": "https://www.example.com/beelden/winkel.jpg",
  "priceRange": "€€",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Voorbeeldstraat 12",
    "postalCode": "3811 AA",
    "addressLocality": "Amersfoort",
    "addressCountry": "NL"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 52.15617,
    "longitude": 5.38763
  },
  "openingHoursSpecification": [
    { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Tuesday", "Wednesday", "Thursday", "Friday"], "opens": "09:00", "closes": "18:00" },
    { "@type": "OpeningHoursSpecification", "dayOfWeek": "Saturday", "opens": "09:00", "closes": "17:00" }
  ],
  "sameAs": ["https://www.instagram.com/example"]
}
</script>

Note two things. latitude and longitude are numbers, without quotation marks; latitude lies between -90 and 90, longitude between -180 and 180. And the url points to your own site, not to your Instagram (that belongs in sameAs).

Where do you put the block? Google says any page is fine, but it makes most sense on a page with information about your business, such as the homepage or the contact page. If you have several locations, each location gets its own page with its own block and its own url.

In practice: AI Builder and WordPress

The WebOké AI Builder creates this block for you, from the business details you enter for the site: the business type (a drop-down list including Florist, Bakery and HairSalon, or the general LocalBusiness), name, address, postcode, town, phone, email, opening hours and your social profiles. The block appears on the homepage and on pages with a contact block. The AI Builder currently writes the opening hours in the short openingHours notation (for example Tu-Fr 09:00-18:00). In WordPress, SEO plugins do something similar, often in a separate section for local details; other website builders work the same way.

For every builder: the block is only as good as what you enter. If you enter an old phone number in the builder, that old number also ends up in your JSON-LD. Keep your business details in one place and copy them from there to your site, your profile and your listings.

Summary

  • Choose the most specific schema.org type that fits, written exactly as on schema.org.
  • Required according to Google: name and address (as a PostalAddress with separate fields).
  • Recommended: telephone with country code, url of the location, openingHoursSpecification, geo as numbers, image, priceRange.
  • Opening hours: English day names, 24-hour times; closed is 00:00 to 00:00, open day and night is 00:00 to 23:59.
  • No reviews about your own business in this block; make sure everything matches your profile and your contact page.

Quiz

1. Which two properties does Google list as required for a LocalBusiness?



2. What is wrong with "address": "Voorbeeldstraat 12, 3811 AA Amersfoort"?



3. You are closed all day on Sunday and want to state that explicitly. What do you put in the block for Sunday?



4. Which value for geo is correct?



5. A hair salon uses "@type": "Kapper". What happens?



Exercise

Exercise A5.2: Is your LocalBusiness block correct? Enter the address of your homepage or contact page, along with your business name, postcode and phone number as they appear in your Business Profile. The program looks for the business block in the page's JSON-LD and checks the type, required fields, address, phone, opening hours, coordinates and url, and compares the name, postcode and phone with what you entered. No business site of your own? Then use the site of a shop or practice near you and leave the three comparison fields empty.

Exercise A5.2: Is your LocalBusiness block correct?

Then test the same page in Google's Rich Results Test and compare: does Google mention the same points?





What you enter and what we find isn't stored. Your browser remembers your answers and whether you've passed the exercise. If you're signed in, we only save that you got the exercise (almost) right in My courses; you can delete that there too.

Further reading

The steps in these articles apply to the WebOké control panels; other providers work in a similar way.

One moment…

Set up your domains

For each domain, arrange the nameservers, the link to your hosting and who becomes the owner.

Loading your domains…