The Schema Markup Mistakes I See in 90% of Small Business Sites

After auditing hundreds of local business websites across Calgary and beyond, a pattern emerges. Businesses aren’t missing schema markup because they don’t understand it’s important; they’re missing it because they’re implementing the wrong types, using outdated generators, or copying snippets that haven’t been tested against current Google validation. The result is often worse than having no schema at all, because malformed or incorrect structured data can confuse crawlers and trigger manual review actions.

Here is what I actually see in the field, broken down by error type, with production-ready examples and honest caveats about what schema can and cannot do for your rankings.

What is the most common LocalBusiness schema error?

It is almost always one of three things: incorrect geo coordinates, missing areaServed, or using LocalBusiness when a more specific type like Plumber, Restaurant, or AutoRepairShop is available. Google’s documentation explicitly recommends using the most specific subtype possible. Generic LocalBusiness tags provide less signal to the crawler than specific ones.

A second frequent mistake is including closed days as null values in openingHoursSpecification. This is incorrect. If a business is closed on Sundays, you simply omit Sunday from the array. Including null or an empty object breaks validation in many cases and does not communicate "closed" to Google.

Here is a production-ready example for a Calgary plumbing company. Notice that we only list days the business is open, and we use the specific Plumber type:


{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "name": "Rocky Mountain Plumbing Co.",
  "description": "24/7 emergency plumbing services for residential and commercial properties in Calgary.",
  "url": "https://www.rockymtnplumbing.ca",
  "telephone": "+1-403-555-0123",
  "email": "[email protected]",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1234 17 Ave SW",
    "addressLocality": "Calgary",
    "addressRegion": "AB",
    "postalCode": "T2T 0B9",
    "addressCountry": "CA"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 51.0403,
    "longitude": -114.0704
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "18:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "09:00",
      "closes": "16:00"
    }
  ],
  "areaServed": {
    "@type": "City",
    "name": "Calgary"
  },
  "priceRange": "$$",
  "sameAs": [
    "https://www.facebook.com/rockymtnplumbing",
    "https://www.instagram.com/rockymtnplumbing"
  ]
}

Most people get this wrong: They assume sameAs requires every social profile to be active and verified. In practice, sameAs is a hint, not a requirement. If you list a Facebook URL that is inactive or deleted, it does not harm your site, but it weakens the entity connection. Only include profiles that are currently live and clearly associated with the business.

Which schema types are overhyped for small businesses?

Two types consistently overpromise in marketing content: FAQPage and Review with aggregateRating.

Since Google’s 2023 update to rich result guidelines, FAQPage schema is largely restricted to well-known, authoritative sites such as government agencies, major health organizations, and top-tier educational institutions. For a local bakery, a law firm, or a dental clinic, adding FAQPage schema will almost certainly not result in a visible FAQ accordion in search results. It may still help Google understand the content structure, but do not implement it expecting visible rich results. In many audits, I see businesses spending hours crafting FAQ blocks that will never display as accordions. That effort is better spent on improving on-page content quality and internal linking.

Similarly, Review and aggregateRating schema for self-serving reviews on your own website typically does not qualify for star ratings in search results. Google’s eligibility criteria for review rich results are strict. Self-serving reviews (where the business is both the reviewer and the reviewed entity) are generally excluded. If you want star ratings, the primary driver is your Google Business Profile, not your website’s schema. Implementing aggregateRating on your own site to try to force star ratings is a common but ineffective tactic. It can also trigger a manual action if Google determines the reviews are not genuine or are self-serving.

Most people get this wrong: They believe that adding aggregateRating to their own product or service pages will generate star ratings. This is not how it works for most local businesses. The stars you see in local search come from Google Business Profile reviews, not from your site’s structured data. Focus your review strategy on GBP, not on schema.

What is the correct way to implement Product schema for local retailers?

For local retail businesses, Product schema is one of the most valuable types, but it is frequently implemented incorrectly. The most common error is missing offers or using price without a valid priceCurrency. Another frequent mistake is using price for out-of-stock items, which can trigger rich result demotions.

Here is a correct Product example for a Calgary bike shop:


{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Cannondale Quick 4 Hybrid Bike",
  "image": "https://www.calgarybikeshop.ca/images/cannondale-quick-4.jpg",
  "description": "A versatile hybrid bike with 10-speed Shimano drivetrain, suitable for commuting and casual riding.",
  "sku": "CB-2026-CQ4",
  "brand": {
    "@type": "Brand",
    "name": "Cannondale"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://www.calgarybikeshop.ca/products/cannondale-quick-4",
    "priceCurrency": "CAD",
    "price": "1299.99",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition",
    "seller": {
      "@type": "LocalBusiness",
      "name": "Calgary Bike Shop"
    }
  }
}

Note that availability uses a valid Schema.org value. If the item is out of stock, use https://schema.org/OutOfStock and set price to 0 or omit it, depending on your inventory system. Do not list a price for an out-of-stock item unless you are confident in your stock tracking.

Most people get this wrong: They use price for items that are not actually available for purchase online. If you are a local retailer and the item is only available in-store, but you list a price and InStock availability, you risk misleading users and potentially triggering a rich result issue. If the item cannot be purchased online, consider using Offer with availability set to https://schema.org/InStoreOnly or omitting the offers property entirely if you do not support online transactions.

Which schema type should a business implement first?

If a business can only implement one schema type, the answer is LocalBusiness (or its most specific subtype). Here is why:

  1. It is the foundation for local search understanding. While Google Business Profile is the primary driver of Maps visibility, LocalBusiness schema helps Google connect your website content to your physical location, service area, and business hours. This supports entity recognition, which is increasingly important as search engines move toward entity-based understanding rather than pure keyword matching.
  2. It is universally applicable. Whether you are a restaurant, a law firm, a gym, or a B2B service provider, LocalBusiness schema is relevant. Other types like Product, Recipe, or Event are niche-specific and not applicable to most local service businesses.
  3. It is low-risk. Unlike Review or FAQPage, LocalBusiness schema does not carry the same risk of rich result demotions. It is a descriptive tag that helps Google understand your business, not a promotional tag that Google may penalize if it deems you self-serving.
  4. It supports other schema types. Many other schema types, such as Product, Event, and Service, benefit from being linked to a LocalBusiness entity. If you implement LocalBusiness first, you create a foundation that other schema types can reference.

Most people get this wrong: They skip LocalBusiness schema because they assume Google Business Profile is enough. While GBP is critical for Maps visibility, it does not replace the need for structured data on your website. Google uses both signals, but they serve different purposes. GBP drives local pack visibility; LocalBusiness schema helps Google understand your website in the context of your physical business. They are complementary, not interchangeable.

How do you validate your schema markup is correct?

Many businesses implement schema and assume it is correct because it loads without visible errors. This is a dangerous assumption. Schema markup can be syntactically valid but semantically incorrect, or it can pass basic validation but fail Google’s rich result eligibility checks.

The first step is to use Google’s Rich Results Test tool. This tool checks for syntax errors and missing required properties. However, it does not tell you whether your schema qualifies for rich results. For that, you need to check Google’s Search Console rich results report, which shows you how many pages are eligible, how many have issues, and what those issues are.

A second step is to inspect the rendered HTML. Sometimes, JavaScript-rendered schema is not visible to Googlebot if the JavaScript fails to execute. If you are using a CMS or a page builder that injects schema via JavaScript, verify that the schema is present in the raw HTML source, not just in the rendered DOM. You can do this by viewing the page source in your browser and searching for @context.

A third step is to check for duplicate schema. If your CMS, theme, and a plugin all inject LocalBusiness schema, you may have multiple conflicting tags. This can confuse Google and lead to inconsistent entity understanding. Use a browser extension or a developer tool to inspect the page and ensure only one instance of each schema type is present.

For ongoing monitoring, we recommend using a tool that checks your schema against Google’s current guidelines and alerts you when validation fails. We use our own schema markup validator for this purpose, which checks not just syntax but also common semantic errors that generic validators miss.

What is the priority list for implementing schema markup?

If you are a local business in Calgary or elsewhere, here is the practical priority list based on impact, risk, and effort:

  1. LocalBusiness (or specific subtype): Implement this first. It is the foundation for all other local schema. Use the most specific type available. Include accurate geo coordinates, opening hours (only open days), and service area.
  2. Product: If you are a retailer, implement this next. Ensure offers is accurate, with valid priceCurrency and availability. This is the most likely schema type to produce visible rich results for local businesses.
  3. Service: If you are a service business, consider adding Service schema to your service pages. This helps Google understand what you do and for whom. It is less likely to produce rich results than Product, but it supports entity understanding.
  4. BreadcrumbList: Add this to your main navigation. It is low-effort and can help Google understand your site structure. It may qualify for breadcrumb rich results, but eligibility is strict and often limited to well-known sites.
  5. FAQPage: Implement this only if you are a well-known, authoritative site. For most local businesses, it is unlikely to produce visible rich results. Do not prioritize this over the above types.
  6. Review/aggregateRating: Do not implement this for self-serving reviews. Focus your review strategy on Google Business Profile, not on your website’s schema.

Schema markup is not a magic ranking factor. It is a communication tool that helps search engines understand your content. When implemented correctly, it supports entity recognition, improves content relevance, and may qualify your pages for rich results. When implemented incorrectly, it can confuse crawlers and trigger manual actions. The key is to start with the right types, implement them accurately, and validate them against Google’s current guidelines.

If you are a Calgary business looking to get your schema markup right, Eikeland SEO can audit your current implementation, identify errors, and help you build a structured data strategy that supports your local search visibility without overpromising what schema can do.