Why structured data matters
Schema.org markup describes your page in a machine-readable way so search and AI engines can understand it without guessing. It powers rich results — review stars, FAQ accordions, breadcrumb trails, business-hours cards — and gives generative engines clean facts to cite. For local and service businesses, a handful of types do almost all of the work.
How to add it
Put JSON-LD in a <script type="application/ld+json"> tag in the page head. Define your Organization once with a stable @id, then reference that same @id from every other node
(Service provider, Article publisher, LocalBusiness) so engines resolve one unambiguous brand. Validate with the Schema.org
validator or Google's Rich Results Test before shipping.
Quick reference
| Type | Use it for |
|---|---|
| Organization | Your brand as a single sitewide entity. |
| LocalBusiness | Location, hours, and service area for a local/SAB business. |
| Service | Each offering on its service page. |
| FAQPage | Pages with a real, visible Q&A section. |
| BreadcrumbList | Every page below the homepage. |
| Article | Blog posts and long-form guides. |
Organization
When to use: Once per site (usually sitewide). Defines your brand as a single entity that every other node references via a stable @id.
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://www.example.com/#organization",
"name": "Digital Estate Media",
"url": "https://www.example.com",
"logo": "https://www.example.com/logo.png",
"email": "sales@digitalestatemedia.com",
"telephone": "+1-888-847-8809",
"sameAs": [
"https://www.linkedin.com/company/your-page"
]
}
LocalBusiness (Service-Area Business)
When to use: On your homepage or main location page. For a business with no public storefront, OMIT streetAddress and postalCode — describe coverage with areaServed and city/region/country only.
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"@id": "https://www.example.com/#localbusiness",
"name": "Digital Estate Media",
"url": "https://www.example.com",
"telephone": "+1-888-847-8809",
"email": "sales@digitalestatemedia.com",
"address": {
"@type": "PostalAddress",
"addressLocality": "Mississauga",
"addressRegion": "ON",
"addressCountry": "CA"
},
"areaServed": [
{ "@type": "City", "name": "Mississauga" },
{ "@type": "City", "name": "Toronto" },
{ "@type": "AdministrativeArea", "name": "Ontario" }
],
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "09:00",
"closes": "17:00"
}]
}
Service
When to use: On each service page. Names the offering, ties it to your Organization as provider, and states where it is offered.
{
"@context": "https://schema.org",
"@type": "Service",
"@id": "https://www.example.com/services/local-seo#service",
"name": "Local SEO Services",
"description": "Google Business Profile optimization, citations, and Map Pack ranking.",
"url": "https://www.example.com/services/local-seo",
"provider": { "@id": "https://www.example.com/#organization" },
"areaServed": [
{ "@type": "AdministrativeArea", "name": "Ontario" },
{ "@type": "Country", "name": "Canada" }
]
}
FAQPage
When to use: On any page with a genuine Q&A section. Each question must be visibly answered on the page. Powers FAQ rich results and is easy for AI engines to lift.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "How long does local SEO take?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Most service businesses see Map Pack movement in 3-6 months, depending on competition and review velocity."
}
}]
}
BreadcrumbList
When to use: On every page below the homepage. Gives engines the navigation path and can render breadcrumb trails in results.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home",
"item": "https://www.example.com/" },
{ "@type": "ListItem", "position": 2, "name": "Services",
"item": "https://www.example.com/services" },
{ "@type": "ListItem", "position": 3, "name": "Local SEO",
"item": "https://www.example.com/services/local-seo" }
]
}
Article
When to use: On blog posts and long-form guides. Carries headline, author, dates, and publisher so engines attribute the content correctly.
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Local SEO Guide for Ontario Businesses",
"url": "https://www.example.com/blog/local-seo-guide",
"author": { "@type": "Person", "name": "Salman Habib",
"url": "https://www.example.com/about" },
"publisher": { "@id": "https://www.example.com/#organization" },
"datePublished": "2026-05-28",
"dateModified": "2026-05-28",
"inLanguage": "en-CA"
}
A note on addresses (important)
If you run a Service-Area Business with no public storefront, do not publish a street
address in your schema. Per Google's guidance for SABs, omit streetAddress and postalCode, and describe your coverage with
areaServed plus city, region, and country only — exactly
as the LocalBusiness example above does.
Key takeaways
- Six types — Organization, LocalBusiness, Service, FAQPage, BreadcrumbList, Article — cover most local/service sites.
- Use JSON-LD in a head script tag, and reference one canonical Organization @id everywhere.
- Only mark up content that is actually visible on the page.
- For a Service-Area Business, omit streetAddress — use areaServed and city/region/country.
- Always validate with Google's Rich Results Test before shipping.
FAQs
- JSON-LD or Microdata?
- Use JSON-LD. Google recommends it, it keeps structured data separate from your markup in a single <script> block, and it is far easier to maintain than inline Microdata or RDFa.
- Where does the JSON-LD go on the page?
- In a <script type="application/ld+json"> tag, ideally in the page head. Multiple schema nodes can each have their own script tag, or you can combine them in a single @graph array — both are valid.
- Should every page have the same Organization @id?
- Yes. Define the Organization once with a stable @id (e.g. https://www.example.com/#organization) and reference that same @id from Service, Article publisher, and LocalBusiness nodes so engines resolve one unambiguous brand entity.