Schema markup for a local business is JSON-LD code that tells Google what your business is, where it operates and what it sells. It is not a ranking factor on its own. What it does is make your business eligible for rich results and easier for AI answer engines to quote correctly, which is where the actual traffic gain comes from.

Summary

  • Google has stated repeatedly that structured data is not a direct ranking signal. It changes how your result looks and how machines understand it, not where it sits.
  • Only a handful of schema types still produce a visible rich result. Most of the effort should go into LocalBusiness, Organization, Product, Service, Breadcrumb and Review, not into marking up everything.
  • FAQ and HowTo rich results were deprecated by Google in 2023 and no longer display for the vast majority of sites. Keep the markup for machine readability, drop the expectation of stars and dropdowns.
  • Canadian specifics matter: two letter province codes, correctly spaced postal codes, E.164 phone numbers and CAD currency all reduce parsing errors.
  • Entity linking through @id and sameAs is the highest leverage and least used part of local schema.
  • Validate with the Rich Results Test for eligibility and the Schema Markup Validator for syntax. They answer different questions.
A laptop displaying an abstract node and line graph on a dark desk
Structured data is a graph. The value comes from connecting entities, not from stamping isolated blocks onto pages.

Table of Contents

  1. Does schema markup improve rankings?
  2. Which schema types still earn rich results?
  3. How to write LocalBusiness schema for a Canadian business
  4. Entity linking: the part most sites skip
  5. Does schema help you get cited by AI search?
  6. Common schema mistakes that cause silent failure
  7. How to implement and validate it
  8. Frequently asked questions

Does Schema Markup Improve Rankings?

No, not directly. Google’s search advocates have said this consistently for years: structured data helps Google understand a page, and it makes the page eligible for enhanced result formats, but adding it does not move a page up the results. Anyone selling schema as a ranking service is selling something else.

The indirect effect is real, though, and it is worth pursuing for three reasons.

  • Click through rate. A result with a star rating, a price, an image or a breadcrumb trail takes more vertical space and reads as more legitimate. Same position, more clicks.
  • Disambiguation. If several businesses share a name, correct structured data with consistent identifiers helps Google attach the right entity to the right site. This matters far more than people assume.
  • Machine extraction. AI Overviews, Gemini, ChatGPT and Perplexity all parse pages. Explicit, structured facts are less likely to be summarised wrong than facts buried in prose.

Which Schema Types Still Earn Rich Results?

Fewer than most guides suggest. Google has retired several rich result types since 2023, so a lot of published advice is now describing features that no longer display. Here is where things stand for a typical Canadian local business, and you should verify current status in Google’s search gallery documentation before building anything, since this list changes.

TypeVisible result todayWorth implementing?
LocalBusiness (and subtypes)Knowledge panel signals, map and hours contextYes, foundational
OrganizationLogo, brand knowledge panel, sitelinks search boxYes, on the homepage
BreadcrumbListBreadcrumb trail replacing the raw URLYes, easy and reliable
Product with OfferPrice, availability, merchant listingYes if you sell online
Review and AggregateRatingStar ratings, but only on eligible types and never self servingYes, with care
EventEvent listings and date panelsYes if you run events
Article and NewsArticlePublication metadata, Top Stories eligibilityYes for blog content
VideoVideo thumbnails and key momentsYes if you embed video
JobPostingGoogle job listingsYes if you hire regularly
FAQPageDeprecated 2023, effectively no display for most sitesKeep for machines, expect nothing visual
HowToDeprecated 2023, removed from resultsOptional, low priority

Use the most specific subtype available

LocalBusiness has dozens of subtypes and using the precise one adds meaning at no cost. A plumbing company is a Plumber, not a generic LocalBusiness. A law firm is a LegalService, a clinic is a MedicalBusiness or a Dentist, a restaurant is a Restaurant, a property manager is a RealEstateAgent. If no subtype fits your niche, fall back to LocalBusiness rather than inventing a type that does not exist in the schema.org vocabulary.

The self serving review rule catches a lot of people

Google does not allow review markup that a business writes about itself, and it does not show star ratings for LocalBusiness reviews collected and marked up on your own site the way many plugins imply it will. Reviews you display are still valuable as social proof for humans. Marking them up expecting stars in the search result is usually wasted work, and in some cases risks a structured data manual action.

An independent storefront on a Canadian mountain town main street at dusk
LocalBusiness schema exists to describe a real business at a real address. Get the Canadian formatting right and the rest follows.

How to Write LocalBusiness Schema for a Canadian Business

Use JSON-LD in a script tag in the head or body. Google prefers it over microdata, it is easier to maintain, and it does not entangle your markup with your CSS. Here is a complete, realistic example for a fictional Calgary trades company.

{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "@id": "https://example.ca/#business",
  "name": "Bow River Plumbing",
  "url": "https://example.ca/",
  "logo": "https://example.ca/logo.png",
  "image": "https://example.ca/storefront.jpg",
  "telephone": "+1-403-555-0142",
  "email": "hello@example.ca",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1204 9 Avenue SE",
    "addressLocality": "Calgary",
    "addressRegion": "AB",
    "postalCode": "T2G 0T4",
    "addressCountry": "CA"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 51.0392,
    "longitude": -114.0353
  },
  "areaServed": [
    { "@type": "City", "name": "Calgary" },
    { "@type": "City", "name": "Airdrie" },
    { "@type": "City", "name": "Okotoks" }
  ],
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
      "opens": "07:30",
      "closes": "17:00"
    }
  ],
  "sameAs": [
    "https://www.facebook.com/example",
    "https://www.instagram.com/example",
    "https://www.linkedin.com/company/example"
  ],
  "hasMap": "https://maps.google.com/?cid=1234567890"
}

The Canadian details that get formatted wrong

  • addressRegion takes the two letter province code: AB, BC, ON, QC, MB, SK, NS, NB, NL, PE, plus YT, NT and NU. Not “Alberta”, not “Alta”.
  • addressCountry takes the ISO code CA, not “Canada”.
  • postalCode should match how Canada Post writes it, with a single space in the middle and no hyphen: T2G 0T4.
  • telephone is safest in E.164 style with the country code: +1-403-555-0142. A bare seven digit local number is ambiguous to a parser.
  • priceCurrency, anywhere you use Offer, should be CAD. Leaving it as USD on a Canadian site is a common copy and paste error that produces wrong prices in merchant listings.
  • openingHoursSpecification uses 24 hour times. If you close for lunch, use two entries for the same day rather than one long block.

Multi location businesses

Each physical location gets its own page and its own LocalBusiness block with a unique @id, tied back to a parent Organization with parentOrganization. Do not stack five addresses into one markup block on the homepage. If your business serves an area without a walk in address, omit the street address and use areaServed plus a ServiceArea approach, because publishing a home address you do not want listed is difficult to undo once it propagates.

Location pages and schema work together. The structure that supports them is the same one covered in our Google Business Profile optimization checklist for Canada, and the two should agree with each other exactly.

A phone on a cafe table displaying a map with a single location pin
Service area is the field most often left out, and the one that decides whether you appear in answers for the towns you actually cover.

Entity Linking: The Part Most Sites Skip

Give every entity a stable @id and connect the blocks to each other. This is the single biggest difference between schema that a plugin generated and schema that somebody designed, and it costs nothing extra to do.

The pattern looks like this. Your Organization gets an @id of https://yoursite.ca/#organization. Your LocalBusiness gets #business. Your homepage gets #website. Then each blog post’s Article block points its publisher at #organization rather than repeating the organization details, and its isPartOf at #website. Instead of a scatter of disconnected fragments, a crawler sees one graph describing one business.

sameAs is your entity reconciliation lever

The sameAs array is how you tell search engines that this business is the same entity as these external profiles. Include the ones that are verifiably yours and actively maintained: your LinkedIn company page, Facebook page, Instagram, YouTube channel, and any authoritative directory listing such as a Better Business Bureau profile or a provincial licensing registry. If a Wikipedia or Wikidata entry exists for your organization, include it, since those carry disproportionate weight for entity resolution.

Do not pad the array with every social account you ever created. A dead Twitter profile with four followers adds nothing and creates a weak association. Five accurate entries beat fifteen speculative ones.

Consistency across sources matters more than volume

Your name, address and phone number in schema should match your Google Business Profile, your directory listings and the visible text in your footer, character for character. “Suite 200” in one place and “Unit 200” in another is a genuine disambiguation problem for a machine, even though a human reads them identically. Pick one canonical format and enforce it everywhere.

Does Schema Help You Get Cited by AI Search?

It helps with accuracy more than with selection. No major AI company has published a ranking mechanism that weights structured data, and treating schema as a shortcut to AI citation is overselling it. What structured data reliably does is reduce the chance that an answer engine gets your hours, your service area, your price or your business type wrong when it does mention you.

That distinction matters because the effort is cheap and the failure mode is expensive. A model confidently telling someone you close at 4pm when you close at 6pm costs you a job. The same logic applies to service area: if you cover Airdrie and Cochrane but only Calgary appears anywhere machine readable, you will be excluded from answers you should win.

Where the larger AI visibility gains actually live is third party mentions, reviews and content that other people publish about you, not markup on your own domain. We covered the underlying logic in our piece on why topical authority beats link building, and the same principle holds here. Schema is hygiene. It is necessary and it is not sufficient.

A founder reviewing code and data on a multi monitor workstation
Most schema failures are silent. Nothing breaks, the rich result simply never appears, so you have to go looking.

Common Schema Mistakes That Cause Silent Failure

Structured data fails quietly. Nothing breaks, no error appears on the page, the rich result simply never shows up. These are the causes worth checking first.

  • Marking up content that is not on the page. This is the rule most often broken and the one most likely to earn a manual action. Everything in your schema must be visible to a human visiting that URL. Invisible FAQ markup is a policy violation, not a clever trick.
  • Two plugins both emitting Organization schema. Extremely common on WordPress. An SEO plugin and a theme both output a block, they disagree, and the crawler has to pick. Audit what your site actually outputs before adding anything.
  • LocalBusiness on every single page. Put it on the homepage and the contact or location pages. Stamping it on every blog post adds noise without adding meaning.
  • Schema injected only by JavaScript after load. Google generally renders it, but other crawlers and several AI agents do not execute JavaScript. Server rendered JSON-LD is the safe option.
  • Copying a competitor’s block without changing every field. It happens more than you would think, and a stale latitude or a leftover @id pointing at someone else’s domain is genuinely damaging.
  • Using a currency or date format from a US template. USD prices and MM/DD dates on a Canadian site produce wrong output in merchant listings and event panels.
  • Assuming the plugin got it right. Most SEO plugins emit a reasonable baseline and stop there. They rarely produce areaServed, openingHoursSpecification, correct subtypes or a linked graph.

How Do You Implement and Validate Schema Markup?

Six steps, and the whole job for a single location business is an afternoon.

  1. Audit what already exists. Run your homepage through the Schema Markup Validator and see what your theme and plugins already output. Fix duplication before adding anything new.
  2. Write the Organization and LocalBusiness blocks by hand for the homepage, using the field list above and your real, canonical business details.
  3. Add BreadcrumbList site wide. It is the most reliable visible win available and most themes can generate it automatically.
  4. Add page level types where they genuinely apply: Service on service pages, Product with Offer on shop pages, Article on blog posts, Event on event pages.
  5. Link the graph. Give each entity an @id and point publisher, isPartOf and parentOrganization at those identifiers instead of duplicating data.
  6. Validate twice. The Rich Results Test tells you whether Google considers the page eligible for a specific rich result. The Schema Markup Validator tells you whether your syntax and vocabulary are correct. A page can pass one and fail the other, so run both, then watch the Enhancements reports in Search Console for the following few weeks.

If markup validates but nothing appears in results after a month, the usual explanation is not a code problem. Rich results are eligibility, not entitlement, and Google shows them at its discretion based on the query and the perceived quality of the page. If the page is also not ranking, start with our indexed but not ranking troubleshooting guide instead of adding more schema.

Printed page wireframes under a brass magnifying glass on a desk
Audit what your theme and plugins already output before adding anything. Duplicate Organization blocks are the most common problem on WordPress.

Frequently Asked Questions

Is JSON-LD better than microdata for schema markup?

Yes for almost every case. Google explicitly recommends JSON-LD, it sits in a single block separate from your HTML, and it survives a theme change or a redesign without needing to be rewritten. Microdata is woven through your markup attribute by attribute, which means any front end change risks breaking it silently. If you have inherited microdata, it still works, but new implementations should be JSON-LD.

Should I still add FAQ schema if Google no longer shows FAQ rich results?

Add it, but for the right reason. The visible dropdown is gone for the vast majority of sites since the 2023 change. FAQPage markup still makes your question and answer pairs explicit to any system parsing the page, including AI answer engines, and it costs nothing if your FAQ content is already on the page. Just do not build a content strategy around a rich result that no longer displays.

Do I need schema markup if I have a Google Business Profile?

They do different jobs and they reinforce each other. Your Business Profile governs the map pack and the local knowledge panel. Schema governs how your website is understood in organic results and by any crawler that is not Google. Where they overlap, consistency between the two is a trust signal. Where they diverge, you get ambiguity, which is the thing you are trying to eliminate.

How long does it take to see results from schema markup?

Google has to recrawl the page first, which for an established site is usually days to a few weeks. Eligibility can appear in the Rich Results Test immediately while the actual display takes longer, and some types never display for some queries. Judge it in Search Console under the Enhancements reports and by change in click through rate on affected pages, not by refreshing a search result.

Can bad schema markup hurt my site?

Yes, in two ways. Markup that describes content not present on the page violates Google’s structured data guidelines and can trigger a manual action that removes your rich result eligibility. Separately, contradictory markup, such as two different addresses or a wrong business type, weakens Google’s confidence in what your business is. Broken syntax alone is usually just ignored rather than penalised.

The Bottom Line

Schema markup is not a growth lever, it is infrastructure. Done properly it makes your business unambiguous to every machine that reads your site, it makes you eligible for result formats that earn more clicks at the same position, and it reduces the odds of an AI answer engine getting your details wrong. Done as an afterthought by a plugin, it produces a generic block that duplicates what Google already knew.

Start with Organization, the correct LocalBusiness subtype and BreadcrumbList. Get your Canadian formatting right. Link the graph with @id. Validate in both tools. Then go and spend your remaining time on the things that actually move rankings, because schema will not.

If you want the technical foundation handled properly rather than bolted on, our website growth packages include structured data as part of the technical SEO baseline, and every build we ship through our website packages comes with a linked schema graph rather than plugin defaults. Tell us what you are working with through the Wise Media intake form and you will get back a specific assessment of what your site currently outputs.