Skip to content
Get a quote Call +66 93 004 4098

SEO, speed and analytics

Local business schema markup: a JSON-LD walkthrough for Bangkok companies

LocalBusiness schema tells Google your exact name, address, phone and hours in code. Here is how to write it correctly for a Bangkok business.

Cover image for this guide: Schema

What does LocalBusiness schema markup do?

LocalBusiness schema markup is a block of structured data, usually JSON-LD in the page code, that states your business facts in a format search engines read without guessing: the exact name, street address, phone number, website, opening hours and business type.

For a Bangkok restaurant website, a clinic or a hotel website, it removes ambiguity between your website, your Google Business Profile and directory listings, and it makes the page eligible for richer presentation where Google chooses to show it.

It is not a ranking switch. Google's documentation describes structured data as helping it understand a page and making the page eligible for certain features, with no promise of any display. Local map rankings depend mostly on your Google Business Profile, relevance, distance and prominence. Treat schema as accurate labelling: cheap to do properly, and a source of confusion when it contradicts your other listings.

Use JSON-LD rather than microdata. JSON-LD sits in one script block, separate from the visible HTML, so a redesign does not break it and a developer can check it at a glance. Google supports both, and recommends JSON-LD where your setup allows it.

Which schema type should your business use?

LocalBusiness is the parent type on schema.org. Below it sit hundreds of more specific types, and you should use the most specific one that honestly describes you. A few that fit common Bangkok businesses:

  • Restaurant, CafeOrCoffeeShop, BarOrPub for food and drink, with servesCuisine and menu properties.
  • Hotel or Hostel for accommodation, which sit under LodgingBusiness.
  • Dentist or MedicalClinic for healthcare practices, and DaySpa or BeautySalon for wellness.
  • RealEstateAgent for property agencies, and Store subtypes such as ClothingStore or ElectronicsStore for shops with a counter.
  • ProfessionalService was long used for office-based firms, but schema.org now notes it as deprecated in favour of more specific types such as LegalService or AccountingService. Use a specific type where one fits; where none does, as for a web agency like ours, plain LocalBusiness is the honest choice, and it is what this site uses.

If nothing fits, LocalBusiness itself is acceptable. Do not stack unrelated types to cover more searches: one accurate type per location is cleaner and easier to keep in line with the category chosen in your Google Business Profile.

The properties Google reads

Google lists a small set of required and recommended properties for local business markup. Fill the ones that are true and leave out anything you cannot state accurately. An invented price range or approximate coordinates are worse than none.

PropertyExampleNote
nameWebsite Development BangkokExactly as on your signage and Business Profile
addressPostalAddress blockRequired; see the Thai address section
telephone+66930044098International format with country code
urlhttps://websitedevelopmentbangkok.com/The page for this location
openingHoursSpecificationMo to Su, 10:00 to 19:00One block per set of days sharing the same hours
priceRangeTHB 10,000+Short text; optional
imagePhoto of the premises or logoA real, crawlable image URL
geoLatitude and longitudeRecommended, but only if you have exact coordinates

A JSON-LD example for a Bangkok business

Here is the markup for our own office, using only details we publish. It has no geo block, because we have not published exact coordinates, and no rating, for reasons explained further down.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Website Development Bangkok",
  "url": "https://websitedevelopmentbangkok.com/",
  "telephone": "+66930044098",
  "email": "service@websitedevelopmentbangkok.com",
  "priceRange": "THB 10,000+",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "2056 New Phetchaburi Road, Bang Kapi, Huai Khwang",
    "addressLocality": "Bangkok",
    "addressRegion": "Bangkok",
    "postalCode": "10310",
    "addressCountry": "TH"
  },
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
    "opens": "10:00",
    "closes": "19:00"
  }]
}
</script>

A restaurant that closes on Mondays would use two or more opening hours blocks, one per group of days. Seasonal changes, such as shorter hours during Songkran, can be added with validFrom and validThrough dates rather than by editing the regular hours.

Thai addresses and two languages

Thai addresses do not map neatly onto PostalAddress, which was designed around street, city, region and postcode. A workable convention:

  • streetAddress: house number, soi, road, then khwaeng (subdistrict) and khet (district), in the order used on your letterhead.
  • addressLocality: Bangkok, or the province's city for businesses outside the capital.
  • postalCode and addressCountry set to TH.

The key is consistency. Whatever spelling you use for the soi and road, use the same one in the Business Profile, the footer and directory listings. Romanised Thai names drift easily, for example Phetchaburi and Petchburi, and each variant looks like a different place to a machine.

English and Thai pages

On a bilingual site, put the markup on both language versions of the contact or home page. Keep the same name, phone and url for the business on both, write the address in the page's language, and add the other language's name as alternateName. Set inLanguage on the page rather than inventing a second business. One business, one set of facts, two readable versions.

Several branches

Each branch gets its own page with its own markup: its own address, phone and hours, and a unique @id. Link the branches to the parent organisation with parentOrganization rather than listing all addresses on the home page.

Reviews and ratings: the rule to respect

Many plugins invite you to add a star rating to your business schema. Do not do it for your own business on your own site. Google's review snippet guidelines state that ratings for a LocalBusiness or Organization are not eligible for star display when the business itself controls the reviews, which Google calls self-serving reviews. Marking them up anyway risks a structured data manual action, which can remove rich result eligibility for the site.

Copying Google reviews into your page and wrapping them in aggregateRating is the same problem. Let your Google Business Profile carry the reviews. On your website, quote genuine customer feedback as ordinary text if you have permission, without rating markup. That is why the example above has no rating at all.

Testing and monitoring

Test every page with markup before and after launch, using two free tools:

  1. Rich Results Test from Google: shows which Google features the page is eligible for, and any errors or warnings in fields Google uses.
  2. Schema Markup Validator at validator.schema.org: checks the markup against the full schema.org vocabulary, including types Google does not display.

After launch, Search Console has rich result reports only for some types, such as breadcrumbs, products and review snippets; LocalBusiness is not one of them at the time of writing, so re-run the Rich Results Test after every change. It is still one more reason to finish your Google Search Console setup for new websites early. Schema is also one line of a wider technical SEO checklist worth running before any launch.

The bigger risk is drift. Hours change for a public holiday or a renovation, a new phone number goes on the Business Profile, and the schema still says the old thing. Put a quarterly check in the calendar: compare name, address, phone and hours across the website footer, the schema and the Business Profile, and update all three together.

Adding it on WordPress or Shopify

WordPress

SEO plugins such as Yoast and Rank Math output Organization or LocalBusiness markup from a settings screen, and dedicated local SEO add-ons extend it with hours and branches. That is fine for a single location if you fill every field carefully.

The alternative is to output the JSON-LD from the theme, generated from one business-details settings page, so the footer, contact page and schema read the same source and cannot drift apart. That is how we build it: schema markup is part of the Business package, from THB 30,000, alongside keyword mapping, English and Thai pages and a custom WordPress theme.

Shopify

Many Shopify themes output Organization and Product markup but not LocalBusiness. A shop with a physical showroom can add a JSON-LD block to the theme layout or to the contact page template. Check the theme's existing output first, so you do not end up with two conflicting organisation blocks.

What to do next

Once the markup is live, measure whether local visibility changes: our guide to GA4 setup covers the tracking, and our list of website KPIs every small business should track covers what to watch. Related reading sits under SEO, speed and analytics. If you would rather have the markup built into a new or rebuilt site, see our website development service or request a quote, by WhatsApp or call on +66 93 004 4098 or at service@websitedevelopmentbangkok.com.

Who reviewed this guide

Litesh Dhir, co-founder of Website Development Bangkok
Litesh Dhir, Co-founder, SEO and web development

Who builds your site

Litesh Dhir

Builds and ranks the websites: the systems behind the 17 client sites whose Search Console numbers we publish.

More about us

More on SEO and analytics

Sources

Litesh Dhir, co-founder of Website Development Bangkok
Reviewed by Litesh DhirCo-founder, SEO and web development

More about us

Common questions

Does LocalBusiness schema help local rankings?

Not directly. Google treats structured data as a way to understand a page and as a condition for certain search features, not as a ranking factor you can switch on. Local map results depend mainly on your Google Business Profile, relevance, distance and prominence. Accurate schema helps by confirming your name, address, phone and hours consistently, which reduces confusion. It is worth doing, but it will not replace a complete, active Business Profile.

Which schema type should my business use?

Use the most specific schema.org type that honestly describes you: Restaurant or CafeOrCoffeeShop for food, Hotel for accommodation, Dentist or MedicalClinic for healthcare, RealEstateAgent for property agencies, a Store subtype for shops, or a specific professional type such as LegalService or AccountingService for office-based firms. If none fits, plain LocalBusiness is acceptable. Keep it in line with the primary category chosen in your Google Business Profile, and use one type per location.

Can I add review stars to my own website's schema?

Not for your own business. Google's review snippet guidelines say LocalBusiness and Organization ratings are not eligible for stars when the business controls the reviews on its own site. Copying Google reviews into aggregateRating markup counts too. Doing it anyway can lead to a manual action that removes rich result eligibility. Quote genuine customer feedback as plain text if you have permission, and let your Business Profile carry the ratings.

How do I write a Thai address in schema markup?

Put the house number, soi, road, khwaeng and khet in streetAddress, in the same order as your letterhead. Use Bangkok, or the relevant city, as addressLocality, then the five-digit postalCode and TH as addressCountry. On a Thai-language page you can write the address in Thai. Most important is consistency: use exactly the same romanised spelling as in your Google Business Profile and directory listings.

Can I add schema without a developer?

Often, yes. On WordPress, SEO plugins such as Yoast or Rank Math generate business markup from a settings screen, and some Shopify apps do the same. Fill every field accurately, then test the page in the Rich Results Test and the Schema Markup Validator. A developer is useful for several branches, bilingual pages, or when a theme and a plugin both output markup and conflict.

Tell us about your website

Send a few lines on WhatsApp or through the quote form. You get a written quote with the scope, timeline and price for your project.

Or WhatsApp or call +66 93 004 4098, every day, 10:00 to 19:00 ICT. service@websitedevelopmentbangkok.com

WhatsApp Call