Home › Blog › AI Search
AI Search

Schema Markup for London Local Businesses: LocalBusiness and FAQPage JSON-LD Explained

Web developer reading structured data code on a monitor beside a coffee in a bright London, Ontario workspace

Quick answer: how do I add schema markup to a local business website?

Add one LocalBusiness JSON-LD block to your homepage and contact page with your exact name, address, phone and hours, then add FAQPage markup only where the same questions are visible on the page. Test with the Rich Results Test, and expect 30 to 90 minutes for a first block.

Schema markup local business owners add is a short block of JSON-LD code that tells search engines exactly who you are, where you are and what you do. It sits in the page head, invisible to visitors, and it states your details in a format machines read without guessing. It is a core step in the structured data side of our AI search optimization work.

London and Southwestern Ontario owners are often told to "add schema" without seeing what that means. This guide shows a working block, field by field, then covers testing, mistakes and upkeep. It also supports consistent, machine-readable business details across your site and listings.

What schema markup local business pages need, and what it does for you

Schema markup labels the facts on your page so a search engine can read them as data instead of inferring them from prose. It is written in the Schema.org vocabulary, and JSON-LD is the format Google recommends for it.

Google says structured data is not a ranking factor by itself. What it does is remove ambiguity: your business name, your address in London rather than London, England, your hours, and the questions you answer. Clear data can make a page eligible for enhanced displays and gives other systems a clean source to read.

It sits between content and technical work. The wording still comes from your on-page SEO checklist, and the crawling and indexing basics sit in our technical SEO guide for London. For why AI tools care about clear entity data, read our AI SEO overview rather than repeating it here.

A local business needs three types in practice. LocalBusiness (or a more specific subtype) describes the company. FAQPage describes questions answered on a page. Article and BreadcrumbList describe blog posts and where they sit in the site.

LocalBusiness schema field by field

A LocalBusiness block is a list of properties, and each one must match what a customer sees on your site and Google Business Profile. The sample below is a template with placeholder details, not a real business.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://www.example.ca/#business",
  "name": "Your Business Name",
  "url": "https://www.example.ca/",
  "telephone": "+1-519-555-0100",
  "image": "https://www.example.ca/images/storefront.jpg",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Example Street",
    "addressLocality": "London",
    "addressRegion": "ON",
    "postalCode": "N6A 0A0",
    "addressCountry": "CA"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 42.9849,
    "longitude": -81.2453
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "17:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "09:00",
      "closes": "13:00"
    }
  ],
  "areaServed": [
    { "@type": "City", "name": "London" },
    { "@type": "City", "name": "St. Thomas" },
    { "@type": "City", "name": "Strathroy" }
  ],
  "sameAs": [
    "https://www.google.com/maps?cid=YOUR_PROFILE_ID",
    "https://www.facebook.com/yourbusiness",
    "https://www.linkedin.com/company/yourbusiness"
  ]
}
</script>

Here is what each field does and where owners go wrong.

Identity fields: @type, @id, name, url

@type should be the most specific Schema.org subtype that fits, such as Dentist, Plumber, LegalService or Restaurant, and LocalBusiness only when nothing narrower applies. @id is a stable identifier you can reference from other pages. name must be the trading name you use everywhere, character for character, which is the same rule behind our guide to NAP consistency.

Contact fields: telephone, address, geo

Write the phone number in international format, +1 then the ten digits. The address uses PostalAddress with addressRegion set to ON and addressCountry set to CA. The geo block takes latitude and longitude with four to six decimal places, which you can copy from the pin on your Google Business Profile. The coordinates in the sample are the London city centre, so replace them.

Time and place fields: openingHoursSpecification, areaServed

List hours in 24-hour time, and give each different pattern its own block, as the sample does for weekdays and Saturday. When hours change, for example over the holidays, update the code and the profile together, as covered in our holiday hours guide. areaServed is useful for tradespeople who drive to Byron, Lambeth, Masonville, Wortley Village, Old East Village or out to St. Thomas, Strathroy, Woodstock and Ingersoll. List only places you genuinely serve.

Profile fields: image, priceRange, sameAs

image should point to a real photo of your premises or work. priceRange is optional, and a symbol such as $$ is enough. sameAs lists the official profiles that belong to the same business: your Google Business Profile, Facebook page and LinkedIn page. Do not list directories you do not control.

FAQPage schema: mirror the on-page questions exactly

FAQPage markup must contain only questions and answers that are visible on the same page, written word for word as they appear. If the schema says something the page does not, Google treats it as a mismatch and may ignore the block.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Do you serve Strathroy and St. Thomas?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. We serve London, St. Thomas and Strathroy, and we book visits Monday to Saturday."
      }
    }
  ]
}
</script>

One honest caveat. Since 2023 Google shows expandable FAQ results mainly for well-known government and health sites, so a London accountant or contractor should not expect that display. The markup is still worth adding where you have a real FAQ, because it keeps your questions and answers in a clean, machine-readable form that any system can parse.

To build it correctly, follow these rules:

  • Write the question as a customer would type it, in the same words on the page and in the code.
  • Keep each answer self-contained, around 40 to 60 words, so it still makes sense when quoted on its own.
  • Use plain text in the answer. Avoid line breaks, tables and promotional wording.
  • Mark up four to six questions per page, not twenty, and never repeat the same FAQ on every page.

This page follows its own rule. The five questions in the FAQ below appear in the visible accordion and in the FAQPage block in the page head, with identical wording.

Article and BreadcrumbList for blog posts: when to use each

Use Article on every blog post and BreadcrumbList on every page that sits below another page, because the first describes the content and the second describes its place in your site. Neither replaces LocalBusiness, which describes the company that publishes the post.

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Exact H1 text of the post",
  "datePublished": "2026-11-09",
  "dateModified": "2026-11-09",
  "image": ["https://www.example.ca/assets/blog/post-hero.webp"],
  "author": { "@type": "Person", "name": "Author Name" },
  "publisher": { "@id": "https://www.example.ca/#business" },
  "mainEntityOfPage": "https://www.example.ca/blog/post-slug/"
}

The headline should match the visible H1. The datePublished and dateModified values use the YYYY-MM-DD format and should reflect real changes, not an automatic refresh each week. The author is the named person who wrote the post, and the publisher points back to your LocalBusiness through its @id rather than repeating the address.

That reference is the practical trick. On this site the homepage defines the business once, and every other page points to it by @id. If your phone number changes, you edit one block instead of fifty pages.

BreadcrumbList is simple. It lists each step from the homepage to the current page, with position, name and URL. For a post, that is Home, then Blog, then the post. Matching the visible breadcrumb on the page keeps the two in agreement.

Add it yourself, use a plugin or hire it out

A single-location business can add basic schema markup local business code in under an hour, and the choice comes down to your platform and how often your details change. The table compares the three routes with planning estimates, not measured results.

RouteFirst setup timeUpkeep per monthCostBest fit
Hand-written JSON-LD30 to 90 minutesUnder 15 minutesNo licence costStatic or custom sites with one location
Plugin or SEO plugin fields20 to 60 minutesUnder 15 minutesPlugin licence varies, often free tierWordPress sites with standard needs
Agency set-up1 to 2 hours of your time, then handledHandled for youAI search add-on $150 to $400 per month, or $300 to $800 as a standalone projectMulti-location, service-area or custom schema needs

Plugins save time, but they can output duplicate or conflicting blocks if two plugins both write schema. Check the rendered page source, not the settings screen, to see what is really being published.

How to test and validate schema markup local business owners publish

Test every block with Google's Rich Results Test first and the Schema Markup Validator second, then monitor Google Search Console after launch. The three tools answer different questions, so use all three.

ToolWhat it checksWhen to use itCost
Rich Results TestWhether Google can read the code and which enhancements the page qualifies forBefore and right after publishingFree
Schema Markup Validator (validator.schema.org)Syntax and Schema.org vocabulary for every type, not only Google featuresBefore publishing and when debuggingFree
Google Search Console, Enhancements reportsErrors and warnings across the whole site as Google crawls itWeekly for the first month, then monthlyFree

A save-and-reuse testing checklist

  1. Open the Rich Results Test and test the live URL, or paste the raw code if the page is not published yet.
  2. Confirm the detected types match what you added, for example LocalBusiness and FAQPage.
  3. Fix every error, then read each warning and decide whether the optional field is worth adding.
  4. Run the Schema Markup Validator on the same URL and look for syntax problems the first tool ignores.
  5. Compare each value against the visible page: name, phone, address, hours and every FAQ answer.
  6. Request indexing for the page in Google Search Console, then check the Enhancements reports after one to two weeks.

If you want a second pair of eyes on the result, our free SEO audit includes a structured data check.

Common schema markup local business mistakes

Most schema failures come from three causes: content that does not match the page, invalid JSON, and reviews that break Google's guidelines. Each is easy to avoid once you know it.

Mismatched content

The schema says Monday to Saturday and the page says Monday to Friday, or the code lists a suite number the Google Business Profile does not. Mismatches confuse every system that compares sources, so edit code and visible text in the same sitting.

Invalid JSON

A single missing comma or an extra trailing comma breaks the whole block, and nothing warns you on the page itself. Straight quotation marks matter too, because curly quotes pasted from a word processor are not valid JSON. Run the validator after every edit.

Fake or self-written reviews

Marking up reviews you wrote yourself, or copying testimonials into aggregateRating, risks a manual action. Google's guidelines also exclude self-serving reviews of a LocalBusiness from star results. Only mark up ratings that come from real customers and that visitors can see on the page, and leave the field out if you are unsure.

Other errors that turn up often

  • Marking up services, prices or offers that are not on the page.
  • Leaving a placeholder such as "Your Business Name" or the sample phone number in the live code.
  • Using different business names in schema, footer and Google Business Profile.
  • Adding a second LocalBusiness block with a different @id on the same page.
  • Leaving old schema from a previous theme or plugin after a redesign.

Where to put schema markup local business code and how to keep it current

Place the JSON-LD script in the page head, or anywhere in the body if your platform does not allow head access, and revisit it whenever a business fact changes. Google reads both locations, and the head keeps the code tidy and easy to find.

Put the full LocalBusiness block on your homepage and contact page. Put Article and BreadcrumbList on blog posts. Put FAQPage on any page that has a real visible FAQ. On other pages, a short WebPage block that references your business by @id is enough.

Update triggers

Update the code on the same day that any of the following happens:

  • You change your phone number, address or business name.
  • Your opening hours change, including seasonal and holiday hours.
  • You add or drop a service area such as Woodstock or Ingersoll.
  • You open a second location, which needs its own block and @id.
  • You change social profiles or move your Google Business Profile.
  • You redesign the site or switch themes or plugins.

Add one line to your quarterly business checklist: view the page source of your homepage and confirm the schema still matches reality. That ten-minute check prevents most of the drift we see.

A first-week plan

  1. Collect the exact name, address, phone, hours and profile links you use on Google Business Profile.
  2. Fill in the LocalBusiness template and place it on your homepage and contact page.
  3. Add FAQPage to any page with a real visible FAQ, matching the words exactly.
  4. Test with both tools and fix every error.
  5. Check Search Console in one to two weeks and note any warnings.
  6. Set a quarterly reminder to re-check the block against the live page.

Want someone to check your schema?

Request our free SEO audit and we will review the structured data on your homepage and contact page. If you want it built and maintained, see how our AI search optimization service handles structured data and consistent business details, or call (647) 692-2131.

Schema is a small amount of code with a large amount of attention to detail. Get the facts right, keep them matching your visible pages and your Google Business Profile, and check them whenever something changes.

FAQ

Common Questions

What is schema markup for a local business?

Schema markup for a local business is a block of structured code, usually JSON-LD, that states your business name, address, phone number, hours, service area and questions in a format search engines can read directly. It describes what is already visible on your page, so Google does not have to guess.

Does schema markup help me rank higher in Google?

Not directly. Google has said structured data is not a ranking factor on its own. It helps Google understand your pages and makes them eligible for some enhanced results. Treat it as a clarity upgrade that supports your content, reviews and Google Business Profile, not as a shortcut past them.

Does schema help AI tools like ChatGPT find my business?

Possibly, but nobody can promise it. AI tools draw on many sources, and none has published a guarantee that it reads your JSON-LD. Schema does keep your name, address and services consistent and machine-readable, which supports accurate descriptions. Pair it with consistent listings and clear page copy.

How do I check if my schema markup is valid?

Paste the page URL or the code into Google's Rich Results Test to see which enhancements it qualifies for, then run the same page through the Schema Markup Validator at validator.schema.org for syntax errors. After you publish, watch the Enhancements reports in Google Search Console for warnings over the following weeks.

Can I add schema markup without a developer?

Yes, for a basic setup. If your site runs on WordPress, a reputable schema plugin or the schema fields in your SEO plugin can output LocalBusiness and FAQPage code. On a static or custom site, you paste a JSON-LD script into the page head. Always test the result before relying on it.

A

About the author - Andrew Bradlex

Andrew is the founder of Bradlex SEO, a London, Ontario agency helping local businesses get found on Google, the Google Map Pack, and AI search. He writes about local SEO, Google Business Profile, and AI search optimization.

Ready to Get Found by More London Customers?

Get a free, no-obligation SEO audit. We'll show you exactly where you stand, what's holding you back, and how to fix it - whether you work with us or not.

Get My Free SEO Audit
Free · No obligation · No spam - just a clear plan.