Technical SEO

LocalBusiness Schema for Vancouver Service Businesses

In 50+ Greater Vancouver service business audits, I have found the same gap: the business has a Google Business Profile, a working website, and years of reviews — but no LocalBusiness schema. Google is receiving no machine-readable signal about who the business is, what it offers, or where it operates. That gap is separate from missing review schema. It is the foundational layer that everything else in structured data builds on.

When Google crawls a service business website with no LocalBusiness schema, it infers the business name, address, phone number, service area, and business type from visible page content. Structured data — code added to your site that makes those facts explicit — removes the inference and replaces it with a direct signal.

The businesses I audit have often done everything else right: active GBP listings, consistent NAP (name, address, phone number) across directories, a fast site. The structured data layer is the one gap — and it is the layer that ties the organic website to the entity Google already knows about through Maps and the Knowledge Graph.

What LocalBusiness schema actually does

LocalBusiness schema is a JSON-LD (JavaScript Object Notation for Linked Data — a structured data format that embeds machine-readable facts in your HTML) block placed in the <head> of your website. It tells search engines: this is a real business, here is its name, address, phone number, service area, business type, and hours.

It is distinct from your Google Business Profile. GBP (Google Business Profile) sends signals to Google Maps and the Local Pack — the map-and-three-listings result for “[service] near me” queries. LocalBusiness schema signals to Google’s organic index and structured data graph. Both matter and they reinforce each other, but they operate on different parts of Google’s systems.

Without it, your website and your GBP listing may exist as separate, unassociated items in Google’s systems. The sameAs field — which links your website to your GBP URL, LinkedIn, and other authoritative profiles — creates the co-reference chain that lets Google treat them as the same entity.

What I find missing in Vancouver service business audits

Three implementation gaps appear consistently.

Using @type: "LocalBusiness" instead of a specific sub-type. The @type property (the field that tells Google what kind of entity this is) should be the most specific type that accurately describes the business — "Plumber", "LegalService", "AccountingService", "HVACBusiness", "AutoRepair". Schema.org has over 100 sub-types under LocalBusiness. Google uses the type to understand what the business does — specificity here improves entity recognition for the service queries you want to rank for.

Omitting areaServed. Most service businesses in Greater Vancouver serve a radius or a set of municipalities, not just their postal code. The areaServed field — which accepts a ServiceArea or GeoCircle value — is how you communicate that radius in structured data. Without it, Google gets no geographic scope signal from your schema.

Leaving sameAs blank. The sameAs field lists the canonical URLs of your authoritative profiles: your GBP listing URL, your LinkedIn company page, your BBB listing. This is the co-reference chain that lets Google connect your website to the entity it already knows about through other sources. When it is empty, that chain is broken — your website and your GBP listing are harder for Google to associate with certainty.

For the separate question of review schema — how to make your Google ratings visible in search results — that is a different implementation with its own field requirements. See the post on review schema for service businesses for that implementation detail.

What a correctly implemented LocalBusiness schema looks like

The implementation is a JSON-LD block in your <head>, rendered server-side — Google’s crawler needs to see it in the initial HTML response, not injected after load by client-side JavaScript. Key fields for a Vancouver service business:

{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "name": "Your Business Name",
  "url": "https://yourdomain.com",
  "telephone": "+16045550123",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main Street",
    "addressLocality": "Vancouver",
    "addressRegion": "BC",
    "postalCode": "V5K 0A1",
    "addressCountry": "CA"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 49.2827,
    "longitude": -123.1207
  },
  "areaServed": {
    "@type": "GeoCircle",
    "geoMidpoint": {
      "@type": "GeoCoordinates",
      "latitude": 49.2827,
      "longitude": -123.1207
    },
    "geoRadius": "30000"
  },
  "openingHours": ["Mo-Fr 08:00-17:00", "Sa 09:00-14:00"],
  "sameAs": [
    "https://g.page/your-gbp-listing-url",
    "https://www.linkedin.com/company/your-company"
  ]
}

The @type is "Plumber" — specific, not generic. The address block uses PostalAddress with all required sub-fields. The geo coordinates anchor the physical location. The areaServed block uses a GeoCircle with a 30km radius expressed in metres. The sameAs array links to the GBP listing and LinkedIn. Your specific @type will depend on your business category — the full list of sub-types is at schema.org/LocalBusiness.

If you want this implemented and validated correctly, the schema markup service covers LocalBusiness, review schema, and any additional schema types your pages need.

How to check whether your site has it

  1. Go to Google’s Rich Results Test and enter your URL.
  2. Look at the detected structured data. If you see a LocalBusiness result, expand it and check for @type, address, areaServed, and sameAs. Missing fields or validation errors mean the schema is incomplete.
  3. If the test shows no structured data at all, you have no schema on the page.

A second option is the Schema.org validator — paste your URL or source HTML directly. It will show all detected schema blocks and flag property errors.

A clean result means Google can read the data. It does not guarantee a rich snippet — LocalBusiness schema does not produce a visual enhancement in search results the way review schema does. The benefit is entity grounding, not a visible snippet.

Why Google entity grounding matters for local rankings

When someone searches “electrician Burnaby” or “immigration lawyer North Vancouver,” Google is matching that query against its understanding of local businesses. The businesses that rank are the ones Google has the most confidence about as entities: what they do, where they operate, and that they are real. LocalBusiness schema gives Google the structured facts it needs to place your business in the right category, tie it to the right geography, and connect it to the signals it already has from your GBP listing and directory citations.

Without it, Google infers those facts from unstructured page text. Inference introduces uncertainty. Uncertainty reduces ranking confidence.

The businesses I have audited that rank well for “[service] [city]” queries almost always have LocalBusiness schema in place. The ones invisible in organic results almost always don’t. That correlation is consistent enough that it is now the first technical fix I recommend — before title tag work, before content expansion, before link building.

The technical SEO service covers this alongside indexation, crawlability, and page-level signals — but LocalBusiness schema is a standalone implementation that can go live in a single deployment.

If you want to know whether your site’s schema is missing or broken, I run a structured audit that checks every field — type specificity, address completeness, areaServed coverage, sameAs chain integrity — and delivers a prioritized fix list. Reach out through araraseo.com, and — the audit is free.

All posts