Schema Markup for Local Business and Service Websites: A Practical Guide

What schema markup is, how it works, and which types a local business or service website actually needs: Organization, LocalBusiness, Service, FAQPage, Article and BreadcrumbList, with examples.

Schema markup for local business websites is structured data, written in JSON-LD with the Schema.org vocabulary, that tells search engines exactly who the business is, where and when it operates, what services it offers, and how its pages relate. The essentials are LocalBusiness (or Organization), WebSite, Service and BreadcrumbList, plus Article and FAQPage on content pages.

This supports my pillar on entity SEO; schema is how you state your entity’s facts in machine-readable form.

What is schema markup and how does it work?

Schema markup is a block of code added to a page that labels its content: “this is a business named X at this address, open these hours, offering these services.” Search engines parse it, compare it with the visible page, and may use it for rich results, knowledge panels and understanding. It makes pages eligible for features; it does not guarantee them or directly raise rankings.

JSON-LD: the format to use

Google recommends JSON-LD when your setup allows it. It sits in a <script type="application/ld+json"> tag, separate from the HTML layout, which makes it easier to maintain than microdata.

The schema types a service business needs

1. LocalBusiness or Organization

Use LocalBusiness (or a more specific subtype such as ProfessionalService, Dentist, Restaurant) if customers visit you or you serve a defined area. Otherwise Organization. For freelancers, a Person entity often fits better.

{
  "@context": "https://schema.org",
  "@type": "ProfessionalService",
  "@id": "https://example.com/#business",
  "name": "Example Web Studio",
  "url": "https://example.com/",
  "logo": "https://example.com/logo.png",
  "image": "https://example.com/office.jpg",
  "telephone": "+20-000-000-0000",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "12 Example Street",
    "addressLocality": "Alexandria",
    "addressCountry": "EG"
  },
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Sunday","Monday","Tuesday","Wednesday","Thursday"],
    "opens": "09:00",
    "closes": "17:00"
  }],
  "areaServed": ["EG", "SA", "AE"],
  "sameAs": ["https://www.linkedin.com/company/example"]
}

The NAP (name, address, phone) must match your Google Business Profile and the page exactly.

2. WebSite

Identifies the site and its publisher, and references the organization by @id.

3. Service

Describe each main service on its own page:

{
  "@context": "https://schema.org",
  "@type": "Service",
  "name": "WooCommerce store development",
  "serviceType": "Ecommerce development",
  "provider": { "@id": "https://example.com/#business" },
  "areaServed": "EG",
  "url": "https://example.com/services/woocommerce/"
}

4. BreadcrumbList

Mirrors the breadcrumb navigation and helps search engines understand site hierarchy.

5. Article / BlogPosting

On blog posts: headline, dates, author (referencing your Person @id), image and publisher.

6. FAQPage

For pages with genuine questions and answers visible on the page. Google limited FAQ rich results in 2023 to a small set of authoritative sites, so do not expect the dropdowns in results. The markup still clearly structures Q&A content, which can help machines, including AI systems, extract answers.

7. Review and AggregateRating

Only for reviews visible on the page and collected in line with Google’s policies. Google does not show review stars for self-serving reviews about your own business placed on your own site (LocalBusiness and Organization). Never invent ratings.

Connecting the graph with @id

Instead of repeating the business details everywhere, give each entity an @id and reference it:

  • WebSite publisher → #business
  • Service provider → #business
  • Article author → #person
  • Organization founder → #person

This produces one connected graph rather than disconnected snippets.

How to add schema in WordPress

  • SEO plugins such as Rank Math or Yoast generate Organization, WebSite, Article and Breadcrumb schema and offer settings for business details.
  • Theme-level output works when you need precise control, but make sure it switches off when an SEO plugin provides the same types, to avoid duplicates.
  • Custom fields let editors maintain FAQ items or service details without touching code.

Duplicate schema from a theme, a plugin and a page builder at the same time is very common. Check the page source and clean it up; a plugin audit often finds the cause.

Validation

  1. Rich Results Test (Google) shows which rich results the page is eligible for and any errors.
  2. Schema Markup Validator (schema.org) checks general validity against the vocabulary.
  3. Search Console enhancement reports show issues across the site over time.

Rules to stay safe

  • Mark up only content visible to users.
  • Keep facts consistent with the page, your Google Business Profile and other profiles.
  • Do not mark up content that is misleading or hidden.
  • Update schema when hours, address or services change.

Checklist

  • One main business or person entity with @id
  • WebSite and BreadcrumbList on all pages
  • Service schema on each service page
  • Article schema with author on posts
  • FAQPage only where Q&A is visible
  • No duplicate schema from multiple sources
  • Validated with both tools

Common mistakes

  • Copying a schema template with someone else’s address still in it.
  • Marking up five-star ratings with no visible reviews.
  • LocalBusiness for a fully remote company with no address.
  • Forgetting to update opening hours in schema after changing them on the site.

A worked example: one service business, one connected graph

Abstract advice about schema is easy to agree with and hard to apply. Here is how the pieces fit for a typical case: a dental clinic in Nasr City, Cairo, with a bilingual WordPress site, three service pages (implants, whitening, orthodontics) and a blog. The example is illustrative, not a real client.

  • Homepage: one Dentist node (a LocalBusiness subtype) with @id set to https://example.com/#business, the exact name, address and phone shown in the footer, geo coordinates, openingHoursSpecification that matches the visible hours, and sameAs links to the Google Business Profile, Facebook and Instagram pages.
  • Service pages: a Service node per page whose provider points to #business by reference instead of repeating the address. areaServed lists the districts you actually serve.
  • Blog posts: BlogPosting with an author that points to a Person node for the dentist who wrote or reviewed it, and a publisher that points back to #business.
  • Arabic pages: the same @id values, with inLanguage set to ar and the Arabic business name in alternateName if customers know it by that name.

The point of this structure is that every page describes the same entity in the same way. Search engines do not have to guess whether “Smile Clinic” on the homepage and “عيادة سمايل” on the Arabic contact page are the same business.

Choosing the most specific type

Schema.org has dozens of LocalBusiness subtypes: Dentist, LegalService, AutoRepair, RealEstateAgent, Restaurant and many more. Google’s local business documentation recommends using the most specific type that fits. Practical rules:

  • If a precise subtype exists, use it. A law office should be LegalService (or Attorney), not plain LocalBusiness.
  • If nothing fits, use LocalBusiness or ProfessionalService rather than forcing a wrong subtype.
  • Agencies and freelancers who meet clients online only are usually better described as Organization or Person with a ProfessionalService offering, without a street address.
  • Businesses with several branches (common for clinics and gyms across Cairo, Alexandria, Riyadh or Dubai) need one node per branch, each on its own location page, plus a parent Organization linked with parentOrganization.

Keeping schema in sync with your Google Business Profile

For local businesses, the Google Business Profile is often the first thing people see in Maps. Schema on your site does not replace it, but the two should agree. Mismatches create doubt about which version is correct.

  • Use the same business name, without keyword stuffing. Google’s Business Profile guidelines ask for your real-world name.
  • Match the phone number format and the primary category.
  • When hours change for Ramadan or public holidays, update the profile, the visible hours on the site and the schema together. Seasonal hours are one of the most common mismatches in Egypt and the Gulf.
  • Add the profile URL to sameAs so the connection is explicit.

A quick note on FAQ and review rich results

Many older tutorials promise star ratings and FAQ dropdowns in search results. Since August 2023, Google shows FAQ rich results mainly for well-known government and health sites, and self-serving review markup (a business rating itself) is not eligible for review stars. You can still use FAQPage when real Q&A is visible, because it describes the page accurately, but do not expect a visual change in results. Never add ratings you collected elsewhere or invented.

How to measure whether schema is working

  • Search Console enhancement reports: look for valid items and new errors after each theme or plugin update.
  • URL Inspection: confirm Google sees the rendered structured data on key pages.
  • Rich result performance: in the Performance report, filter by search appearance where eligible types show up.
  • Change log: note when you changed schema. Without dates, you cannot connect any later change in clicks or impressions to your work.

Treat schema as maintenance, not a one-off job. Review it whenever you change your address, phone, hours, services or plugins.

FAQ

Does schema markup improve rankings directly?

Google describes structured data as a way to help it understand page content and to enable certain search features. It is not presented as a direct ranking boost. The practical value is clarity and eligibility, not a guaranteed position.

Can I use two SEO plugins that both output schema?

You can, but you should disable schema output in one of them. Two plugins often produce two conflicting Organization nodes, which is worse than one clean graph.

Should a freelancer use LocalBusiness?

Only if clients visit a real address. A remote freelancer is better described as a Person who offers services, with links to verified profiles.

Schema is one part of a wider technical SEO audit. If you want your structured data set up and validated, contact me.

Frequently asked questions

What is schema markup?

Schema markup is code, usually JSON-LD, that uses the Schema.org vocabulary to describe what a page is about: a business, a product, an article, an FAQ. It helps search engines and other systems understand and display your content.

How does schema markup work?

Search engines read the structured data, match it with the visible content, and may use it for rich results and to understand entities. Markup makes a page eligible for some features but does not guarantee them.

Do I need LocalBusiness schema if I work remotely?

LocalBusiness is meant for businesses with a physical location customers visit or a defined service area. Remote service providers often use Organization or ProfessionalService, or Person for individuals.

Do FAQ rich results still show in Google?

Since August 2023 Google shows FAQ rich results only for a limited set of well-known authoritative government and health sites. FAQPage markup is still valid structured data and can help machines understand Q&A content.

Muhamed Ahmed

Ecommerce & Web Solutions Developer

I'm Muhamed Ahmed, an ecommerce and web solutions developer with 15 years of experience building fast, secure online stores and websites on WooCommerce, WordPress and custom Laravel platforms. I write about website speed, SEO, automation and conversion.

All articles Hire me

Related articles