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.
- Learn Google’s structured data fundamentals: Intro to structured data
- Local business guidance: Local Business structured data
- Helpful content principles: Creating helpful, reliable, people-first content
- How Google ranks results: Ranking results
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,imagetelephone,priceRangeaddresswithPostalAddress(streetAddress, addressLocality, addressRegion, postalCode, addressCountry)geowith latitude/longitudeopeningHoursSpecificationsameAslinking to your official social profileshasMaplinking to your Google Maps listingareaServeddescribing pickup/delivery coverage
Optional (use carefully):
aggregateRatingonly if you collect first-party ratings that comply with Google’s review guidelines.menulinking to your online menu page.knowsAboutto 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:
- 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.
- 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.
- Automate your menu accuracy with synchronized data so schema stays truthful. Explore Cannabis Sync and real-time Inventory tools.
- If you serve multiple delivery polygons, mirror those zones in on-page content and schema
areaServeddetails. 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:
- Google Rich Results Test: search.google.com/test/rich-results
- Schema.org Validator: validator.schema.org
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
specialOpeningHoursSpecificationfor 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
areaServedremain 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, andimage, prefer fully qualified URLs. - Validate after every change: Especially when updating menus or seasonal hours.
- Avoid spammy properties: Don’t stuff
knowsAboutwith keywords—use concise categories.
Your Next Steps
- Draft your LocalBusiness JSON-LD using the template above.
- Place it on each location page and validate with Google’s tools.
- Mirror delivery zones, store groups, and inventory across schema and on-page content.
- 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.