Schema Markup for Local Businesses: The Types That Actually Help
Schema markup is one of those SEO tactics that sounds more complicated than it is. At its core, it is structured data added to your website that explicitly tells Google what type of business you are, what you offer, and how your information should be understood. Google can often infer this without schema. But schema removes ambiguity, and removing ambiguity is always worth doing.
JSON-LD vs Microdata: Use JSON-LD
There are two main ways to add schema to a website: JSON-LD and microdata. Microdata involves adding attributes directly into your HTML elements throughout the page. JSON-LD sits in a separate script tag, usually in the head section, and does not touch your HTML structure at all.
JSON-LD is the right choice. Google explicitly recommends it for most schema types. It is easier to add without breaking your layout, easier for developers to maintain, easier to test, and it can be injected by a CMS or Google Tag Manager without touching the underlying page code.
Microdata requires weaving attributes throughout your HTML. One wrong placement and the schema breaks. For small business websites, this is unnecessary complexity. Use JSON-LD and keep your HTML and your structured data separate.
LocalBusiness Schema: The Non-Negotiable Foundation
Every local business website should have LocalBusiness JSON-LD on the homepage and ideally on the contact page. This is the baseline. Everything else builds on top of it.
Google has over 150 subtypes of LocalBusiness. Use the most specific one that applies to your business. If you run a restaurant, use Restaurant, not LocalBusiness. If you are a dentist, use Dentist. If you are an optometrist, use Optician. The more specific your type, the more precisely Google can classify your business, which means better matching to relevant search queries.
The fields that matter most in LocalBusiness schema:
name: your exact business name as it appears on your GBPaddress: a nestedPostalAddresswithstreetAddress,addressLocality,addressRegion,postalCode, andaddressCountry("AU")telephone: in international format, +61 then the numberurl: your website URLopeningHoursSpecification: your trading hours for each daygeo: aGeoCoordinatesobject with your exact latitude and longitudepriceRange: optional but useful for restaurants and retail (use "$", "$$", etc.)image: URL of your primary business image
Here is what a complete Restaurant schema looks like in JSON-LD:
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Example Restaurant",
"address": {
"@type": "PostalAddress",
"streetAddress": "45 King William Street",
"addressLocality": "Adelaide",
"addressRegion": "SA",
"postalCode": "5000",
"addressCountry": "AU"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": -34.9285,
"longitude": 138.6007
},
"telephone": "+61 8 8000 0000",
"url": "https://examplerestaurant.com.au",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "11:30",
"closes": "22:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Saturday", "Sunday"],
"opens": "10:00",
"closes": "22:00"
}
],
"priceRange": "$$",
"servesCuisine": "Italian"
}
Place this script block in the <head> of your homepage with <script type="application/ld+json"> wrapping it.
FAQPage Schema: Rich Results for Service and Article Pages
FAQPage schema generates a rich result in Google search: expandable question and answer pairs that appear directly under your listing. More vertical space in search results means higher visibility, which means more clicks even if your ranking position stays the same.
FAQPage schema works on service pages and blog posts where you include a genuine FAQ section. The content must be visible on the page. Do not add FAQ schema for questions that do not actually appear as text on the page, Google can detect and ignore this.
Format: each FAQ item is a Question type with a name (the question) and acceptedAnswer containing a Text answer. Keep answers under 300 words. The schema can include up to ten questions, though two to five is the practical sweet spot for most pages.
Where to add it: service pages with common objections or questions ("Do you work with restaurants?", "How long does a Google Ads campaign take to see results?"), and long-form blog posts with an FAQ section near the end.
BreadcrumbList Schema: Navigation Structure
BreadcrumbList schema tells Google the hierarchy of your page within your site. For a page at /services/google-ads, the breadcrumb trail would be Home > Services > Google Ads. Google sometimes displays this breadcrumb trail in search results instead of the full URL, which is cleaner and more informative for users.
This schema type has no rich result visible in the search results in a dramatic way, but it does affect how your URL appears and it contributes to Google's understanding of your site structure. Add it to all pages below the homepage.
Service Schema: Context Without Rich Results
Service schema does not generate a rich result in Google search. You will not see a visual change in how your listing appears. Add it anyway.
Service schema, applied to your individual service pages, tells Google what specific service is offered on that page, who provides it, and the geographic area it covers. This adds contextual signals that contribute to how Google matches your pages to relevant queries.
A service page for Meta Ads management would include a Service schema with serviceType ("Social Media Advertising"), provider (referencing your LocalBusiness), and areaServed (Adelaide, South Australia). It is a few extra lines of code that strengthen the semantic accuracy of your pages.
How to Validate
After adding any schema, validate it before pushing to production. Two tools:
Google Rich Results Test (search.google.com/test/rich-results): tests whether your schema is eligible to generate rich results. Shows any errors and warnings. This is the primary validation tool.
Schema.org Validator (validator.schema.org): validates against the full Schema.org specification. More detailed than the Google tool and useful for catching property-level errors.
Test your live URL and the raw code. Fix every error. Warnings are usually fine to leave, but errors mean the schema will be ignored or rejected.
The Common Mistakes
Leaving empty fields. An empty telephone field in your LocalBusiness schema is worse than not including the field at all. It creates a conflict between what the schema says (empty phone) and what the page says (actual phone number). Include a field only if you have the correct data to populate it.
Nesting incorrectly. PostalAddress must be nested inside your LocalBusiness schema as a property called address. It does not sit at the top level. OpeningHoursSpecification must be an array even if you only have one set of hours. Get the nesting structure right or the schema will not parse correctly.
Using the wrong type. Using LocalBusiness when Restaurant exists is not wrong, but it is imprecise. Use the most specific applicable subtype. Check schema.org/LocalBusiness for the full list of subtypes and find the one that matches your business.
Adding schema for content that is not on the page. FAQ schema for questions that do not appear in the page text, or Review schema for reviews that are not displayed on the page. Google checks the schema against the visible page content. If they do not match, the schema is ignored and in egregious cases, it is treated as spam.
For Adelaide businesses wanting to get this set up correctly, schema markup is included in our website builds and SEO projects. We also run technical audits that cover every schema error on your existing site.

