Schema markup gets pitched as a magic ranking switch, which it is not, and dismissed as technical trivia, which it is not either. Schema is structured data: a block of code that translates your page into a format machines read without guessing. Your visitors never see it. Google, Bing, and increasingly the AI assistants answering questions about local businesses read it constantly. For a local business the question is not whether schema helps, but which types are worth implementing. The answer is a short list, and this guide walks through it, including a working example you can adapt.
What is schema markup actually doing?
A human reading your contact page instantly understands that "Mon-Fri 8am-5pm" is your hours and "604-800-6191" is a phone number. A crawler sees text and infers. Schema removes the inference. Using a shared vocabulary maintained at schema.org, embedded as a JSON-LD script in your page code, you state facts outright: this entity is a plumbing company, this is its address, these are its hours, this is its service area.
Two payoffs follow. First, eligibility for rich results, the enhanced listings in Google search that can show ratings, FAQs, and breadcrumb trails. Second, confidence. When your website, your Google Business Profile, and your directory listings all assert identical structured facts, search engines and AI answer engines can cite you without hedging. That confidence increasingly determines who gets recommended when someone asks an assistant to find a contractor nearby.
Why is LocalBusiness the type that matters most?
For a bricks-and-service business, LocalBusiness schema is the foundation everything else builds on. It declares your name, address, phone, hours, geo coordinates, and website in machine-readable form, ideally on your homepage or contact page.
Do not stop at the generic type. Schema.org defines dozens of LocalBusiness subtypes, and the specific one is always the better choice: Plumber, Electrician, RoofingContractor, Dentist, Attorney, Restaurant, AutoRepair, HomeAndConstructionBusiness, and many more. A subtype tells Google your category without ambiguity, which supports the entity matching that local rankings lean on. If no subtype fits, LocalBusiness itself is fine. What you should not do is pick a flattering but inaccurate subtype; accuracy beats aspiration everywhere in structured data.
The details you assert here must match your Google Business Profile and citations exactly. Schema amplifies whatever consistency, or inconsistency, already exists, which is why we treat it as one piece of the larger citation work in our local SEO service.
What do Service, FAQPage, and BreadcrumbList each earn you?
Service schema belongs on individual service pages. It describes the specific offering, who provides it, and the area served. It rarely produces a visible rich result on its own, but it sharpens the machine-readable link between your business entity and the specific problems you solve, which matters as AI assistants get better at matching "who repairs heat pumps in New Westminster" to actual providers.
FAQPage schema marks up question-and-answer content so Google can display it directly in search listings. Eligibility for the visible treatment has narrowed over the years, but the markup still helps machines parse your answers, and well-structured FAQ content earns its keep in AI-generated answers regardless. We cover implementation in detail in our FAQ schema guide.
BreadcrumbList schema describes where a page sits in your site hierarchy, and Google uses it to display a clean path in search results instead of a raw URL. It is quiet, unglamorous, and worth having on every page.
Organization with sameAs rounds out the set. The sameAs property lists your official profiles: Google Business Profile, Facebook, Instagram, LinkedIn, industry directories. This is how you tell machines that all of these scattered profiles are the same single entity, consolidating your presence rather than fragmenting it.
What does a valid LocalBusiness example look like?
Here is a trimmed but valid JSON-LD block for a fictional New Westminster business. It goes inside a script tag in the page head or body:
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Royal City Plumbing",
"url": "https://www.example.com",
"telephone": "+16045551234",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Columbia St",
"addressLocality": "New Westminster",
"addressRegion": "BC",
"postalCode": "V3L 1A1",
"addressCountry": "CA"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 49.2057,
"longitude": -122.911
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "17:00"
}],
"areaServed": "Metro Vancouver",
"sameAs": [
"https://www.facebook.com/example",
"https://www.instagram.com/example"
]
}
Swap in your real details, use your actual subtype in the @type field, and keep every value consistent with what appears visibly on the page. Structured data is meant to describe your content, not to say things the page does not.
Which schema mistakes cause real trouble?
Most schema problems are silent: the markup is malformed, so it is simply ignored. A few mistakes are worse than silence.
- Self-serving review markup. Adding AggregateRating schema with your own hand-picked testimonials to make stars appear in search results violates Google's guidelines. Review snippets on LocalBusiness pages are restricted, and faking eligibility invites a manual action rather than stars.
- NAP that contradicts the visible page. If your schema says one phone number and your footer says another, you have manufactured doubt where you meant to create certainty. Same for address formats that differ from your Google Business Profile.
- Marking up content that is not on the page. FAQ schema for questions the page never asks, or service schema for services you quietly discontinued, breaks the core rule that markup describes visible content.
- Duplicate conflicting blocks. Plugins and themes often inject their own schema. Two LocalBusiness blocks with different details on one page is a common and entirely avoidable mess. Audit what your platform already outputs before adding more.
- Set-and-forget drift. Hours change, businesses move, phone numbers switch. Schema that was accurate in 2023 and wrong today is worse than none.
How do you test your markup?
Two checks cover it. Google's Rich Results Test shows whether a page's markup is eligible for enhanced listings and flags errors, and the Schema.org validator checks general validity beyond Google's supported subset. Google's own structured data documentation lists exactly which types produce visible features and the rules for each.
After launch, watch the enhancements section in Search Console, which reports valid and invalid structured data items across the whole site and alerts you when something breaks. Schema is not a one-time task so much as a fact sheet you keep accurate. It also only pays off on pages whose visible content is worth surfacing, which is why we treat it as a layer on top of the fundamentals in our Vancouver on-page SEO guide, never a substitute for them.
Frequently asked questions
What schema does a local business need at minimum?
Start with LocalBusiness, using the most specific accurate subtype, on your homepage or contact page. Add BreadcrumbList site-wide, Service markup on service pages, and FAQPage where you genuinely answer questions. Organization sameAs links tie your profiles together. That handful covers the meaningful ground for most local businesses.
Does schema markup directly improve rankings?
Google has stated structured data is not a ranking factor in itself. What it does is make your pages eligible for richer listings, which can improve click-through, and it helps search engines and AI systems understand and trust your business facts. The benefits are real but indirect, so treat schema as clarity work rather than a ranking shortcut.
Do I need a plugin or developer to add schema?
It depends on your platform. Many CMS platforms and SEO plugins generate LocalBusiness and breadcrumb markup from settings you fill in, which is fine when the output is accurate and not duplicated. Custom JSON-LD gives more control, and a developer can add a block like the example above in minutes. Either path works; validation afterward is what matters.
How do I know if my existing schema is working?
Run key pages through Google's Rich Results Test and review the enhancements reports in Search Console for errors and warnings. Then search for your business and observe your listings: breadcrumb trails and other enhancements appearing in results confirm Google is reading the markup. Silence in Search Console plus clean validation is a healthy state.
Want to know what structured data your site currently outputs and what is missing? Request a free SEO audit and we will include a schema review alongside the rest of the technical picture.



