Skip to main content
Local Business Schema for Dispensary: A Complete, Compliant Guide for Rich Results
Local SEO

Local Business Schema for Dispensary: A Complete, Compliant Guide for Rich Results

DabDash DabDash Team
· ·
Local Business Schema for Dispensary Schema Markup for Dispensary Structured Data for Cannabis Dispensary

Implementing Local Business schema for a cannabis dispensary can boost visibility in Google’s local pack, improve accuracy in knowledge panels, and help search engines understand your menu, delivery areas, and store details. This guide shows you exactly which schema types to use, what properties to fill out, how to validate, and how to implement JSON-LD on WordPress without risking compliance issues.

Why Local Business Schema Matters for Cannabis Dispensaries

Local Business schema helps search engines understand your dispensary’s identity, location, hours, menu, delivery zones, and more. While structured data is not a ranking factor by itself, it makes your content eligible for rich results and improves data consistency across Google surfaces. For dispensaries competing in dense markets, this clarity can translate to higher local pack engagement and better click-through rates.

Google’s guidelines emphasize helpful, reliable, people-first content. Schema supports those goals by standardizing the facts about your business. Start with accurate, comprehensive data and validate everything before publishing.

The Right Schema Types for a Dispensary

For most cannabis storefronts, you will use a combination of types to describe the business accurately. Because there is no dedicated “CannabisDispensary” type in Schema.org, the most future-proof pattern is:

  • Organization for brand-level data (used on your homepage or brand page).
  • LocalBusiness and Store for each physical location page.

When you have multiple locations, publish one page per store with its own LocalBusiness markup, and optionally keep a brand-level Organization schema on the homepage.

Reference: schema.org/LocalBusiness and schema.org/Store.

Essential Properties Checklist

Include these core properties on each location page:

  • @type: ["LocalBusiness","Store"]
  • name, description, url, image
  • telephone, priceRange
  • address with PostalAddress (streetAddress, addressLocality, addressRegion, postalCode, addressCountry)
  • geo with latitude/longitude
  • openingHoursSpecification
  • sameAs linking to your official social profiles
  • hasMap linking to your Google Maps listing
  • areaServed describing pickup/delivery coverage

Optional (use carefully):

  • aggregateRating only if you collect first-party ratings that comply with Google’s review guidelines.
  • menu linking to your online menu page.
  • knowsAbout to indicate product categories (e.g., “indica”, “sativa”, “edibles”).

Copy-Paste JSON-LD Template for a Dispensary Location

Replace sample values with your real data. Keep the markup on your individual location page. Validate before publishing.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": ["LocalBusiness", "Store"],
  "@id": "https://exampledispensary.com/locations/downtown#store",
  "name": "Example Dispensary – Downtown",
  "description": "Licensed cannabis dispensary offering flower, pre-rolls, vapes, concentrates, edibles, and CBD.",
  "url": "https://exampledispensary.com/locations/downtown",
  "image": [
    "https://exampledispensary.com/images/storefront.jpg",
    "https://exampledispensary.com/images/interior.jpg"
  ],
  "telephone": "+1-555-555-1212",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Greenway Ave",
    "addressLocality": "Sample City",
    "addressRegion": "CA",
    "postalCode": "90210",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 34.0901,
    "longitude": -118.4065
  },
  "openingHoursSpecification": [
    {"@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "09:00", "closes": "21:00"},
    {"@type": "OpeningHoursSpecification", "dayOfWeek": ["Saturday","Sunday"], "opens": "10:00", "closes": "20:00"}
  ],
  "sameAs": [
    "https://www.instagram.com/exampledispensary",
    "https://www.facebook.com/exampledispensary",
    "https://www.yelp.com/biz/example-dispensary"
  ],
  "hasMap": "https://maps.google.com/?q=Example+Dispensary+Downtown",
  "areaServed": [
    {"@type": "AdministrativeArea", "name": "Sample City"},
    {"@type": "Place", "name": "Downtown"}
  ],
  "menu": "https://exampledispensary.com/menu",
  "knowsAbout": ["indica", "sativa", "hybrid", "edibles", "vape carts", "CBD"]
}
</script>

Delivery Zones and Service Areas: Reflect Reality

If you deliver, your structured data should mirror your actual coverage. In DabDash, operators draw precise delivery polygons and assign zones to specific stores. Reflect those same zones in your areaServed details and on-page content. Consistency across your website copy, schema, and Google Business Profile reduces ambiguity.

See how DabDash handles delivery boundaries: Delivery Zones. You can also group inventory for multiple stores that serve overlapping regions: Inventory.

Brand-Level Organization Schema (Optional, for Multi-Location Chains)

Use this on your homepage or brand page. Do not duplicate LocalBusiness-specific attributes here. Link each location page via department or your site navigation.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://exampledispensary.com/#org",
  "name": "Example Dispensary",
  "url": "https://exampledispensary.com/",
  "logo": "https://exampledispensary.com/logo.png",
  "sameAs": [
    "https://www.instagram.com/exampledispensary",
    "https://www.facebook.com/exampledispensary"
  ]
}
</script>

Menu and Product Markup: Proceed with Care

Product structured data can help search engines understand your inventory, but Google may limit rich results for regulated goods. It is still worthwhile for data clarity and future compatibility. Mark up a representative product like this:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Sunset Sherbet - 3.5g",
  "description": "Hybrid flower. Potency and batch results available.",
  "image": "https://exampledispensary.com/images/sunset-sherbet.jpg",
  "brand": {"@type": "Brand", "name": "Example Growers"},
  "sku": "SS-35G-2025",
  "audience": {"@type": "PeopleAudience", "requiredMinAge": 21},
  "offers": {
    "@type": "Offer",
    "url": "https://exampledispensary.com/menu/sunset-sherbet-3-5g",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}
</script>

Note: Only include prices if they are visible to all users on the page and comply with your local regulations. Ensure your lab results and compliance data are accessible on-page if you mention them in the description. DabDash’s Cannabis Sync can import product data and lab results from supported APIs to keep your menu accurate.

FAQ Schema for Policy and Compliance Questions

FAQ schema can help you capture people’s common questions (e.g., “Do you check IDs?” “What forms of payment do you accept?”). Make sure the questions and answers are visible on the page.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Do you offer delivery?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. We deliver to select neighborhoods. See our delivery zones map on this page for coverage and minimums."
      }
    },
    {
      "@type": "Question",
      "name": "What ID is required?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "A valid government-issued photo ID showing you are 21+ (or local medical requirements) is required."
      }
    }
  ]
}
</script>

Implementation on WordPress (Without Breaking Your Theme)

Because DabDash is a WordPress + WooCommerce plugin (not a theme), you have full freedom to implement JSON-LD in a theme-agnostic way:

  1. Paste your JSON-LD blocks in the page head using a header/footer code manager plugin, or add them in a custom HTML block at the bottom of your location page (still valid). Avoid inline microdata; JSON-LD is cleaner.
  2. For multi-location operations, maintain one location page per store and keep its schema specific to that store. DabDash’s store groups and zone mapping make content segmentation straightforward. Learn more in Features.
  3. Automate your menu accuracy with synchronized data so schema stays truthful. Explore Cannabis Sync and real-time Inventory tools.
  4. If you serve multiple delivery polygons, mirror those zones in on-page content and schema areaServed details. See Delivery Zones.

For design and performance best practices that complement your schema work, see our guide on SEO-friendly themes for cannabis sites: SEO-Friendly Cannabis Theme. Also review our broader setup guide: Cannabis WordPress Site Guide.

Validation and Quality Control

Before publishing, validate your structured data using:

Then align your site content and Google Business Profile with the same facts (name, address, phone, hours). Consistency reduces mixed signals and supports your local pack performance.

E-E-A-T for Dispensaries: Show Real-World Trust

Schema alone will not win rankings. Combine it with people-first content and clear trust signals:

  • Publish lab results and batch numbers alongside products, especially for medical buyers.
  • Include store photos, budtender bios, and responsible-use guidance.
  • Keep hours and holiday closures accurate. Use specialOpeningHoursSpecification for seasonal changes.
  • If you collect first-party reviews, ensure authenticity and clear review policies before adding aggregateRating.

How DabDash Supports Your Local SEO and Schema Strategy

DabDash turns WordPress + WooCommerce into a unified dispensary platform while you stay in total control of content and schema. Key capabilities that make your structured data more reliable:

  • Smart Geolocation & Zone Management: Draw precise polygons, set overlapping priorities, and filter menus by customer location so your on-page content and areaServed remain accurate. See Delivery Zones.
  • Multi-Store Inventory Sharing: Assign zones to the right store, show correct store-specific availability, and keep location pages consistent with reality. Explore Inventory.
  • Automated Cannabis API Integration: Sync products, images, pricing, compliance data, and batch numbers via Cannabis Sync to keep schema truthful and current.
  • Analytics & Reporting: Understand which zones and stores drive orders, so you can prioritize which location pages and schemas to expand first.

Remember: DabDash is a plugin—not a theme—so you can implement any schema strategy you want while using your preferred theme stack. For pricing details, visit Pricing.

Advanced Tips and Common Pitfalls

  • One location page per store: Don’t merge multiple addresses into one LocalBusiness schema.
  • Match on-page content: If your schema lists delivery, your page should explicitly describe delivery areas and rules.
  • Keep hours consistent: Schema hours must match the visible hours and your Google Business Profile.
  • Use absolute URLs: In @id, url, and image, prefer fully qualified URLs.
  • Validate after every change: Especially when updating menus or seasonal hours.
  • Avoid spammy properties: Don’t stuff knowsAbout with keywords—use concise categories.

Your Next Steps

  1. Draft your LocalBusiness JSON-LD using the template above.
  2. Place it on each location page and validate with Google’s tools.
  3. Mirror delivery zones, store groups, and inventory across schema and on-page content.
  4. Automate menu accuracy with DabDash’s sync and inventory controls.

Ready to align your site structure, inventory, and schema for maximum clarity? Download DabDash Today, power up with the #1 Cannabis WordPress Plugin, and Get Started Today with our SEO partnership resources.

Ready to launch your cannabis delivery store?

Start your free 7-day trial — no credit card required.

Get Started Free