AEO · Calgary · Research
June 15, 2026
9 min read

72% of Calgary Sites Have Structured Data. Only 61% Told Search Engines They're a Business.

The short answer. We parsed every JSON-LD block on 403 Calgary business homepages. 72% ship structured data. Sounds good until you look at what they ship. Only 61% actually declared themselves a LocalBusiness or business subtype. 15% put JSON-LD on the page but the schema only said "I am a webpage." And 91% skip FAQPage with populated mainEntity, which is the single highest-impact AEO signal a page can carry. The fix is one hour of work. Almost nobody does it.

Structured data (JSON-LD blocks in the page head, using schema.org vocabulary) is how a website tells search engines and AI models what it actually is. Without it, a crawler has to guess. With it, the crawler knows: this is a Dentist, in Calgary, at this address, with this phone number, open these hours, verified by these external profiles.

AI engines lean on structured data heavily. When ChatGPT, Perplexity, Google AI Mode, or Claude generates an answer to "who is a good Calgary contractor," pages with clean LocalBusiness schema are far more likely to end up as citations than pages that leave the AI to infer what the page is about from prose. Structured data is one of the two or three biggest AEO levers you can pull, and it costs an hour of work.

So we checked what Calgary has actually pulled.

What We Did

Corpus: 403 unique Calgary business homepages, drawn from 27 "best of Calgary" listicles across nine verticals (restaurants, gyms, cafes, contractors, dental, med-spa, law, auto services, mortgage brokers, retail).

For each site we fetched the homepage HTML (5-hop redirect limit, gzip/brotli/deflate handled, 5 MB size cap). We extracted every <script type="application/ld+json"> block, ran JSON.parse on each, walked the resulting tree to collect every @type, and classified the site into one of four states:

  • NONE: zero JSON-LD blocks in the served HTML.
  • VALID: at least one parsed block with schema.org @context and a recognized schema.org type.
  • BROKEN: one or more JSON-LD blocks present, but none parses to a valid schema.org typed record.
  • PARTIAL: mixed. At least one valid block, at least one that fails to parse.

Separately we checked whether each site's schema declares a business type (LocalBusiness, Organization, Store, Restaurant, Dentist, LegalService, AutomotiveBusiness, HealthClub, ProfessionalService, and the vertical subtypes), whether it has populated sameAs, and whether it has FAQPage with populated mainEntity. 352 of 403 sites returned a clean HTML fetch. Audit script at tools/bulk-schema-audit.js, per-site JSON at data/blog/broken-schema-calgary-2026/raw/, full anonymized dataset at data/blog/broken-schema-calgary-2026/metrics.csv.

The Headline Number

72%

of Calgary business homepages have JSON-LD

255 of 352 successfully audited sites ship some structured data on the homepage. That is a much better number than the ~30% adoption rate you saw in bulk audits five years ago, and it reflects the fact that WordPress with Yoast or Rank Math, Wix, and Squarespace all now ship JSON-LD by default.

The problem is what most of that 72% actually says.

The Real Number

61%

told search engines they're a business

Only 215 of 352 sites declare themselves as a LocalBusiness, Organization, or a vertical-specific business type (Dentist, LegalService, Restaurant, AutomotiveBusiness, HealthClub, and so on). The remaining 40 sites (15.7% of those with any JSON-LD) shipped structured data that only declared WebSite, WebPage, ImageObject, or BreadcrumbList. They technically have schema, but they never told a search engine "this is a business."

A page whose only structured data is @type: WebSite tells Google exactly one thing: this URL exists. It does not help Google know that you are a Calgary dentist, or that you serve NW Calgary, or that you take walk-ins. When Google AI Mode decides who to cite for "best dentist in Calgary NW," the page with LocalBusiness schema (address, telephone, area served, hours) beats the page with only WebSite schema, every time.

The FAQPage Gap

91%

skip FAQPage schema entirely

Only 31 of 352 sites (8.8%) ship a FAQPage node with populated mainEntity. FAQPage is the single highest-impact AEO signal a page can carry. When ChatGPT, Perplexity, Google AI Mode, or Claude generates an answer to a question, a FAQPage node whose Question.name matches the user's question makes your page a first-class citation candidate. It is arguably the cheapest AEO win available today: an hour of writing four to eight of the actual questions your customers ask you, and dropping them into the page.

91% of Calgary businesses skip it. Most of that 91% are already paying for SEO consultants. The signal is not "everyone forgets", it is "the SEO consultant did not know either."

Cross-Tab By Platform

Not every builder ships equal schema. Some make it easy, some ship it whether the owner asked or not, and some leave the owner on their own.

Business-type schema adoption by builder (n=352)
Wix (n=24)100% any · 54% business
Squarespace (n=19)100% any · 74% business
WordPress (n=178)88% any · 78% business
Shopify (n=38)63% any · 55% business
Duda (n=5)60% any · 20% business
custom (n=76)37% any · 36% business
Webflow (n=6)17% any · 17% business
Square Online (n=6)0% any · 0% business

Wix and Squarespace both ship JSON-LD on every site (100% "any schema"), but Wix only manages to include a business type on 54% of them. Squarespace does better at 74%. WordPress with Yoast or Rank Math is right behind at 78%. Custom sites are worst at 36%, because if you build the site yourself, you have to remember to add the schema yourself, and most people forget. Square Online (n=6, tiny sample) shipped zero JSON-LD across every audited site.

Two takeaways. First, builder choice partly determines whether you get schema at all, but even the best builders miss the "declare as a business" step half the time. Second, if you are on a custom site, you are almost certainly the one who has to add this yourself. The builder is not going to save you.

The 15 Sites That Got It Right

Fifteen Calgary sites in the corpus ship fully valid schema with a business type, populated sameAs, and eighteen or more distinct schema types across the page. These are the Calgary AEO winners. If you are wondering what the top of the market looks like:

Named winners: LocalBusiness + sameAs + valid, ranked by types shipped
prowindowtinting.ca (WordPress)25 types
bravehomes.ca (WordPress)23 types
calgaryceramiccoatings.ca (custom)23 types
amptover.com (WordPress)22 types
macleodtraildental.ca (WordPress)22 types
newskinyyc.ca (WordPress)22 types
corespinclub.ca (WordPress)21 types
washmyride.ca (custom)21 types
calgarymediclaser.com (WordPress)20 types
gravityelectrical.ca (custom)20 types
yycdetail.ca (WordPress)20 types
roylandstucco.ca (WordPress)19 types
sagehilldental.ca (WordPress)19 types
budgethomerenovation.com (WordPress)18 types
cashionlegal.com (WordPress)18 types

WordPress dominates the winners list, which is unsurprising: Yoast, Rank Math, and Schema Pro are all mature and produce clean output when configured. Three of the fifteen are custom builds where the developer took the time to add real schema. Wix and Squarespace do not appear at the top of this list because their auto-schema is complete enough to be VALID but rarely reaches 18+ types.

What To Do

Three moves in order of payoff.

  1. Validate what you have. Run your homepage through Google's Rich Results Test. If it says "No items detected," you are in the 28% with no schema. If it detects only WebSite or WebPage or BreadcrumbList, you are in the 15% with schema that does not identify you as a business. That is the failure mode this study is naming.
  2. Add LocalBusiness or the vertical subtype. Dentist for a dental clinic, LegalService for a law firm, AutomotiveBusiness for a shop, HealthClub for a gym, MedicalBusiness for a med-spa. Include name, url, address (with full PostalAddress), telephone, openingHoursSpecification, and sameAs pointing to at least your Google Business Profile, Instagram, and Facebook. Twenty minutes of work, one page.
  3. Add FAQPage. Pick the four to eight questions your customers actually ask you before they book. Use the exact question wording your customers use, not a marketing rewrite. Answer each in 40 to 120 words. Ship as a FAQPage schema block with populated mainEntity. This is the highest AEO payoff move on the entire page, and 91% of Calgary businesses have not shipped it. One hour of work.

Methodology

Sample. 403 unique Calgary business homepages, drawn from 27 "best of Calgary" industry listicles verified 2026-07-20. Same corpus used across the AI-blocking myth study. Real estate is represented by mortgage brokers because every Calgary realtor listicle links to internal profile pages rather than to independent websites. Full source list, exclusion policy (30+ hosts and aggregators removed), and vertical mapping are in data/blog/broken-schema-calgary-2026/method.json.

Selection bias. Read the sample as "Calgary businesses polished enough to be listicle-featured and to own a linkable site." The frame over-represents established, well-marketed businesses that already invest in a strong web presence. Any homepage-quality finding here is an upper bound. The true Calgary SMB population, including newer, cash-only, and referral-driven businesses, likely has even lower schema adoption than what we measured.

Audit tool. Custom Node script at tools/bulk-schema-audit.js. Each site's homepage was fetched with a 15-second timeout, 5-hop redirect limit, gzip/brotli/deflate handled, and a 5 MB size cap. Every <script type="application/ld+json"> block was extracted via regex, cleaned of HTML comments and CDATA wrappers, and passed through JSON.parse. The resulting object tree was walked recursively to collect every @type, check for a @context containing "schema.org", and detect populated sameAs and FAQPage mainEntity.

State classification. NONE when the served HTML contains no <script type="application/ld+json"> block at all. BROKEN when at least one block is present but none parses to a valid schema.org typed record. VALID when at least one block parses with a schema.org @context and a recognized top-level type. PARTIAL when at least one block is valid and at least one block fails to parse.

Business-type detection. A site is counted as declaring a business type if any parsed @type matches LocalBusiness, Organization, Corporation, Store, or one of ~30 vertical-specific subtypes (Restaurant, Dentist, LegalService, AutomotiveBusiness, HealthClub, MedicalBusiness, etc.). The full list is in tools/bulk-schema-audit.js.

Limitations. Homepage only. A site with weak homepage schema may still have rich schema on interior pages (service pages, blog posts, product pages). This study specifically measures the homepage entry point where the majority of first-touch visits and AI citations point. We did not run schema against Google's Rich Results Test (rate-limited); we implemented independent parsing plus type-membership checks calibrated against schema.org's own type hierarchy.

Naming policy. Winners (fully valid schema plus LocalBusiness or vertical subtype plus populated sameAs, ranked by types shipped) are named. All other sites are hashed with a stable salted SHA1. Blocking or missing schema is not a moral failing, and naming laggards is not fair game.

Replication. The full anonymized dataset is at data/blog/broken-schema-calgary-2026/metrics.csv. The audit script is at tools/bulk-schema-audit.js.

Related Reading

Frequently Asked Questions

What is structured data and why does it matter for AI search?

Structured data is a JSON-LD block on a page that tells search engines and AI models exactly what the page is about in a standard format (schema.org). Without it, a crawler has to guess whether the page is a business, a product, a review, or a marketing page. With it, the crawler knows. AI engines lean on structured data heavily when deciding what to cite, because it gives them clean facts to include in an answer. A page that says "we are LegalService named Ackah Law, phone 403-xxx, address Calgary AB, sameAs LinkedIn URL, aggregateRating 4.9" is far easier for ChatGPT or Google AI Mode to include in a response than a page that just says "call us today."

How many Calgary business homepages have JSON-LD?

255 of 352 successfully fetched sites (72.4%). The other 97 have no JSON-LD block at all. Most of the 72% who do have it are on WordPress with Yoast, Rank Math, or a similar SEO plugin, or on Wix and Squarespace, which ship JSON-LD by default.

How many told search engines they're a business, not just a webpage?

215 of 352 (61.1%). 40 sites (15.7% of those with any JSON-LD) shipped structured data that only declared WebSite or WebPage or ImageObject. They technically have schema, but they never marked themselves as a LocalBusiness, Organization, Dentist, LegalService, or any of the vertical-specific business types schema.org offers. Search engines can index those pages, but they cannot use the schema to answer "who is a good Calgary contractor" because the page never declared itself as one.

How many have FAQPage schema with populated mainEntity?

31 of 352 (8.8%). FAQPage is the single highest-impact AEO win a page can add. When ChatGPT, Perplexity, Google AI Mode, or Claude generates an answer to a question, a FAQPage node with the same question already declared on your site makes your page a first-class citation candidate. 91% of Calgary businesses have not shipped this. It is one hour of work with real business impact, ignored by nine out of ten.

What is sameAs and why does it matter?

sameAs is a schema.org property that links your business to its identity on other services. Facebook page, Instagram profile, LinkedIn company page, Yelp listing, Google Business Profile. It tells search engines and AI models "this business here is the same business over there." 151 of 352 Calgary sites (42.9%) have populated sameAs. The other 57% are structurally isolated from their own social presence.

What should a Calgary business do about this?

Three moves in order of payoff. First, validate what you have. Run your homepage through Google's Rich Results Test (rich-results-test.google.com). If it says "no items detected" you are in the 28% with no schema. If it detects only WebSite or WebPage you are in the 15% with schema that does not identify you as a business. Second, add LocalBusiness or the vertical subtype: Dentist, LegalService, AutomotiveBusiness, HealthClub. Include name, url, address, telephone, hours, and sameAs pointing to at least Google Business Profile, Instagram, and Facebook. Third, add FAQPage with the four to eight questions your customers actually ask you before they book. Use the exact question wording, not a marketing rewrite. This is the highest AEO payoff move on the entire page.

Where do you stand?

Faster site. Then AI search. One sprint.

If your Calgary site is in the Slow or Painful tier, we fix speed and AEO together. Same weekend, same team, both wins.

Talk to us