Somebody runs your Product markup through a validator. It comes back clean, with zero errors, and everyone agrees the job is done.
Six months later, no star rating has appeared next to your menu. No price has shown in a result. Nothing in Search Console suggests a rich result was ever on the table. The markup is correct. It is also doing nothing.
Schema is one of the few SEO jobs where “valid” and “used by Google” are almost unrelated. On a dispensary site, that gap burns a lot of developer time.
This post covers the schema types that earn their place on a cannabis site and the ones to remove. It also covers where FAQPage stands now, and a ten minute check you can run on your own pages today.
Validation Is Not Eligibility
Structured data has to pass two separate tests. Most teams only ever run the first one.
Is it valid? Does the JSON-LD parse? Are the required properties there? Are the types spelled right? A validator answers this. The answer is usually yes, because the plugin or generator that wrote the code was built properly.
Is it eligible? Will Google turn this markup into a rich result, for this page, in this category? No validator answers that. It is a policy question, not a code question.
For cannabis, Google has written the answer down. Its product snippet documentation says it does not allow content that promotes “widely prohibited or regulated goods”. Recreational drugs are named in the examples.
That holds whatever your state license says, and however clean your code is. Price snippets, review stars and merchant listings are not available for plant-touching products.
So Product schema on your menu passes test one and fails test two. It fails quietly, and it keeps failing for as long as the code sits there.
The Second Problem, And How Big It Really Is
If the markup simply did nothing, this would be a story about wasted time. There is a second reason to take it out, and it is worth stating at the right size.
Product markup with prices, potency and stock is a coded statement that the page sells restricted goods. You are handing Google a neat summary of the exact thing its rules restrict.
It is the same pattern as the behavior that gets a Business Profile pulled when somebody adds products to a listing. A website is a different surface with different rules, though. This is not an argument that Product schema on a menu page will trigger enforcement, and I want to be careful not to overstate it.
Google is also clear about the worst case. Its structured data guidelines say a structured data manual action removes a page’s eligibility for rich results. It does not change how the page ranks.
For a dispensary, that worst case takes away something you never had. So the case for removal is not fear of a penalty. The code brings no upside, adds a little risk, and gives you one more place for prices to go out of date.
No upside, some downside, and a validator that reassures you the whole time. That is a bad trade in both directions.
What Actually Works On A Dispensary Site
Three types earn their place. Here they are in order of how much they return.
LocalBusiness, or better, Store. This is the one that matters most. It states your name, address, coordinates, hours and phone in a form that does not depend on JavaScript. That counts for a lot on a site where the menu often does not reach the HTML. Every location page should carry its own block, with its own address and its own coordinates.
Organization, for the brand. On a chain, one Organization block on the home page describes the company. Each location’s Store block then points back to it through parentOrganization. Google sees one brand with many stores, not thirty businesses that happen to share a logo.
Article or BlogPosting on guides and posts. It will not usually change how the result looks. What it does is state who wrote the page and when, cleanly. That matters on a site whose trust rests on a named person having written the work.
Where FAQPage Stands Now
Older advice, including an earlier version of this post, put FAQPage on the worth-it list. That is no longer true, and it is worth being exact about why.
In August 2023, Google limited FAQ rich results to well-known government and health websites. Most commercial sites lost them that month. On 7 May 2026, Google went further and stopped showing FAQ rich results in Search at all.
The markup itself is harmless. FAQPage is still a valid schema.org type, and Google simply ignores markup it no longer uses. If a plugin added it, there is no need to rush to strip it out.
What still earns its keep is the content underneath. Questions answered in plain, readable HTML are what AI assistants quote when they cite a dispensary. They also answer the questions people ask before they get in the car. Write the answers for people, keep them visible on the page, and treat the markup as optional.
What To Avoid, And Why Each One
Product, ProductGroup and Offer on cannabis items. Covered above. There is no rich result to earn, and it is a structured statement you would rather not make.
HealthAndBeautyBusiness or Pharmacy as your business type. Both sound more specific, so they feel better. Neither is accurate. In schema.org, HealthAndBeautyBusiness is the home of salons, spas and tattoo parlours. Pharmacy sits under MedicalBusiness and implies a pharmacist filling prescriptions. Store is the honest choice, and the safe one.
Review and AggregateRating that you control. Since 2019, Google has not shown stars for reviews a business hosts about itself on LocalBusiness or Organization markup. Marking up your own ratings is the exact pattern that rule was written for. Your reviews belong on your Business Profile, where they do real work.
Markup describing anything that is not on the page. This is the rule people break most often without noticing. Google’s guidelines say not to mark up content that readers of the page cannot see. If your hours are in the schema, a visitor must be able to see them too. Markup describing something a human cannot see is a violation, not a shortcut.
Generate markup that is actually eligible
The dispensary schema generator writes clean LocalBusiness JSON-LD, with your hours grouped, your map pin, and the fields a cannabis store needs. It leaves out the types that can never earn a result here.
Open the dispensary schema generator
The Mistake I Find Most Often
It is not missing markup. Sites without schema are easy to spot and easy to fix.
The usual finding is markup that was right on the day a developer added it, and has quietly disagreed with the page ever since.
A store changes its Sunday hours. Someone updates the hours table on the page, because that is what customers read. The JSON-LD in the header, added during the original build, still says the old times.
On one chain, four of eleven stores had schema hours that no longer matched the page. Nobody had touched the markup in two years, because nobody thought of it as content.
That is the framing worth adopting: schema is content, not a technical task you finish. It goes stale the same way a paragraph does. The difference is that stale schema shows no visible symptom.
How To Check Yours In Ten Minutes
1. Open a location page and view source. Find the JSON-LD block. Read the address, hours and phone number, then compare each one with what the same page shows a visitor. Mismatches are the most common fault and the easiest to fix.
2. Check the coordinates against the storefront. Right click your store pin in Google Maps and compare the numbers. A surprising number of sites carry the city center coordinates on every location, which defeats the point of including them.
3. Search the source for types you should not have. Look for Product, Offer, AggregateRating and HealthAndBeautyBusiness. If a menu plugin added them, they will be there without anyone having decided.
4. Look in Search Console under Shopping. If reports called Product snippets or Merchant listings appear, Google has found product markup somewhere on the site. The Rich Results Test will call that markup valid. Remember that valid only answers the first question.
5. Confirm every location page has its own block. The failure at scale is writing the markup once and reusing it across thirty pages with only the city changed. That gives you thirty stores claiming the same coordinates, often on location pages that differ only by the city name as well.
6. On a chain, add parentOrganization so each Store connects to the brand, rather than sitting as thirty unrelated businesses.
Do Not Use Schema To Cover For An Invisible Menu
This comes up on sites with embedded menus. The reasoning goes like this: if the products cannot be crawled, marking them up will tell Google what is there anyway.
It does not work, and it hides the real problem. Schema describes content that exists on the page. It is not a substitute for the content existing.
If your menu is a third-party embed, why an embedded menu stays out of Google explains what is happening and which fixes work.
Why This Matters More Here Than Elsewhere
On a normal retail site, schema is a small extra layer on a page Google can already read well.
On a dispensary site it does a different job. If your menu loads in an iframe or arrives after JavaScript, the crawler’s view of a location page can be close to empty. LocalBusiness markup is then one of the few clear statements it gets about what the page is and where the business sits.
Markup is the workaround, though. Getting the menu itself into the HTML is the fix.
That is a real reason to get the markup right. It is also a reason not to over-invest in it. Fix delivery first, then let the schema describe a page worth describing.
What To Do This Week
If you have Product schema on your menu, remove it. Nothing will drop, because nothing was being produced from it.
Store-level structured data is part of our technical SEO for cannabis sites, built from the same facts as the Business Profile.
Then run one location page through the six checks above. Whatever you find there is almost certainly true of the rest. These are template problems, not page problems, so fixing the template fixes every page at once.
Template fixes like this are where a cannabis SEO agency earns its fee, because one change reaches every store page at once.
If you take one thing away
Valid and eligible are different questions. Mark up the business, the brand and the authorship. Leave the products out.
