Skip to content
Free tool

Dispensary Schema Generator

Fill in one store and get clean LocalBusiness structured data built for cannabis retail, with a live preview of what it states. Copy it into that location page so the store's name, address, hours and links are stated in a form a crawler does not have to guess at.

Structured Data

Build The Markup For One Store

Fill in the store as it appears on your Business Profile. The code on the right updates as you type, with a preview of what it states and a list of what is still missing.

Built in your browser, nothing sent
The Basics
Exactly as it appears on your storefront sign and Business Profile.
Describe the business. No health claims, no potency, no pricing.
Address And Location
Get coordinates by right clicking the store pin in Google Maps and copying the numbers.
Opening Hours
Cannabis Specifics
Extras
Comma separated. Only list places this store actually serves.
The full explanation
The Short Version
  • Schema repeats your name, address, coordinates and hours in the page HTML, in a form a crawler does not have to interpret, whatever the menu and age gate do.
  • Store is the right type for almost every dispensary, and the markup should match your Business Profile character for character.
  • Skip Product markup on cannabis items. Google's Shopping policies prohibit marijuana, and the markup pushes the page toward promoting restricted goods.
Build your markup one store, one form

01 Why Structured Data Matters

Structured data is a block of code that tells a search engine what a page is about, in a format it does not have to interpret. On an ordinary retail site it is a helpful addition. On a dispensary site it does far more work, because so much else is working against you.

Paid advertising is closed to cannabis on the major platforms, so organic and local search carry the whole weight of acquisition. At the same time, dispensary sites are unusually hard for a crawler to read. The menu often loads inside an iframe, and the age gate can hide the rest.

Structured data helps with that. Placed in the page HTML, it repeats the name, address, coordinates and hours the page already shows, in a form that does not depend on scripts running and that a crawler does not have to interpret.

Key FactSchema in the HTML is one of the few signals on a dispensary page that does not depend on how the menu renders.

02 Which Schema Type To Choose

Four types come up for dispensaries. Schema.org has no cannabis type, and only one of these is the right default.

TypeWhat It SaysUse It When
StoreA retail storefront. A schema.org subtype of LocalBusiness with no medical implication.The right default for almost any dispensary. When in doubt, this one.
LocalBusinessThe broadest local type. Correct, just less specific.A business that does not fit neatly into a retail description.
HealthAndBeautyBusinessSalons, spas and similar personal care businesses, which is not what a dispensary is.Almost never. It misdescribes the store and hints at the health claims you cannot make.
Pharmacy style typesPharmacy sits under MedicalBusiness: a licensed pharmacy.Not for a cannabis dispensary, even a medical one, unless it is also a licensed pharmacy.

03 The Fields That Actually Carry Weight

Not every property is worth the effort. A small set does most of the work, and the generator flags them if you leave them empty.

Name, Address And Phone

The foundation. They should match your Google Business Profile character for character. Markup that contradicts the listing it should agree with is worse than no markup, because it introduces doubt instead of confidence.

Geo Coordinates

They remove any ambiguity about where the store physically sits, which matters when two stores are close together or an address is hard to geocode.

Opening Hours

Worth filling properly, and worth keeping identical to the hours on the page and the Business Profile, so Google is never given two different answers.

sameAs

Links to your Google Maps listing, Weedmaps page and Leafly profile tell a crawler that these profiles describe the same store. Use full profile addresses. sameAs expects a web address, so a bare handle such as @littlefirhill does not point to a profile.

04 Why This Tool Does Not Generate Product Schema

Operators often ask for Product and Offer markup on menu items, expecting results with prices and ratings. Google's Shopping policies prohibit marijuana products, so shopping listings are out however correct the markup is.

Marking up cannabis products with prices and potency also pushes a page toward promoting restricted goods. That is the same behavior that gets Business Profiles suspended. Why product schema is a separate decision covers the full reasoning.

Key FactGet Store or LocalBusiness right on every location page and leave cannabis Product markup alone. FAQ markup no longer earns rich results for most sites: Google limited them to well known government and health sites in 2023.

05 Doing This Across A Multi Location Chain

Every store needs its own markup on its own page, with its own address, coordinates, hours and license number. The failure mode is predictable. Someone generates the markup once and reuses it across thirty location pages with only the city swapped. That produces thirty pages claiming the same coordinates, which is simply wrong.

For a chain, add parentOrganization pointing at the brand, so the individual stores connect to the parent entity. Then fill the markup from the same per store data sheet that drives your location page content. Both need the same facts, and gathering them twice wastes time. This is part of the delivery work in a multi location engagement.

06 Mistakes Worth Avoiding

Markup The Page Does Not Show

Google's guidelines say structured data should describe content visible on the page. Markup that describes something else breaks those guidelines. If the hours are in the schema, they belong on the page too.

Drift

A store changes its hours, the page gets updated, and the schema block quietly keeps the old details for a year. Treat markup as page content, not a set and forget task. Re-check it whenever the store details change.

Skipping Validation

Run every block through Google's Rich Results Test after publishing. A single malformed character can invalidate the whole block, and nothing on the page will look wrong.

The generator builds the markup as you type and flags what is still missing.Build Your Markup

07 Where Schema Fits In Dispensary SEO

Schema does not rank a page by itself. It makes everything else legible. In dispensary SEO it belongs to the same foundation as the profile and the location page, and the local SEO foundation guide shows how the three reinforce each other.

It is also one of the cheapest wins a dispensary SEO consultant can hand a new client, because many dispensary sites either have no markup or markup that contradicts the Business Profile.

If you are not sure whether your existing markup is helping or hurting, the free audit reads it alongside everything else and tells you which it is.

Questions

Questions About Dispensary Schema Markup

Store, for almost every dispensary. It is a schema.org subtype of LocalBusiness, it describes a retail storefront accurately, and it carries no medical implication. The comparison table above covers the other types and why they fit less well.
Into the HTML of the location page it describes, once per store. On WordPress a custom HTML block at the end of the page works, and most SEO plugins offer a code field per page. Keep it out of the sitewide header or footer, because that would claim one address on every page.
Run the published page through Google's Rich Results Test, which shows what Google can parse and flags errors, and through the Schema Markup Validator for everything schema.org defines. Search Console only has reports for some structured data types, so test again after every change. A broken block looks fine in the browser, so test the live page, not the draft.
It is not worth it. Google's Shopping policies prohibit marijuana products, so shopping listings are out, and marking up prices and potency pushes the page toward promoting restricted goods, the same thing that gets Business Profiles into trouble. Spend the effort on LocalBusiness markup for every store instead.
Google does not treat it as a ranking factor in itself. What it does is remove ambiguity. On a dispensary site, where the visible page is often hard to crawl, stating the facts in a machine readable form is worth more than it is elsewhere. Think of it as clarity, not a boost.
Rarely on its own. A drop has a cause: a rendering problem, a manual action, a competitor, a lost listing. Schema makes a healthy page easier to understand. It does not repair an unhealthy one, and adding markup to avoid diagnosing the real problem just delays the fix.
Yes, with its own address, coordinates, hours and license number. The common failure is one block copied to thirty pages with only the city changed, which claims the same coordinates thirty times. Each store is its own entity and its markup should read that way.
Right click the store pin in Google Maps and click the numbers at the top of the menu to copy them. Use the pin on the building, not the center of the street, and keep at least five decimal places.
Yes. Google's structured data guidelines say markup should describe content that is visible to readers of the page, so hours stated in the markup should be readable on the page as well. Markup describing content that is not there breaks those guidelines.
Yes, at the same time you update the page. Stale markup is a common problem: the page says the new hours, the schema still says the old ones, and Google gets two conflicting answers. Treat the block as part of the page content.

Found Something And Not Sure How Serious It Is?

Send the domain and what the check flagged. You will get a written read on what it is costing you and what to fix first.

Get Your Free Audit