Open Search Console, go to Settings, and click Crawl stats.
Look at the total crawl requests for the last ninety days. Then look at how many pages you actually have. If those two numbers are far apart, Google is spending most of its time on your site somewhere you never meant it to go.
On a dispensary site, that place is nearly always the menu filters.
How Four Filters Become Ten Thousand URLs
Filters multiply. That is obvious once said. Almost nobody works it through, because nobody does the maths on a feature that took an afternoon to switch on.
Take a modest menu. It has a category filter with eight options, a brand filter with forty, an effect filter with six, and a potency filter with five bands. Each combination is its own URL, because each one has its own parameter string.
With all four filters set, that is 9,600 URLs from one menu page. Count the partial choices, the sort orders, pagination, and grid or list views, and you are into six figures.
Meanwhile the site has twelve location pages, forty guides and one menu. Fifty-three URLs that earn anything.
The ratio is what matters. For every URL you wanted crawled, there are about 180 that exist only because a filter combination is possible. Filters are one way a menu wastes crawling it never earns back, and the rest of the delivery layer usually needs the same look.
What This Actually Costs
First, what it is not. This is not a penalty. It is not duplicate content of the kind that gets a site actioned. Nobody will send you a notice about it.
It is a discovery problem, which is exactly why it goes unnoticed for years.
Google explains the mechanics in its own guide to faceted navigation. Filter URLs look new, and a crawler cannot tell whether a URL is useful until it has crawled it. So it spends time on thousands of them, and that slows the discovery of the pages you care about.
The costs are quiet and they add up. New location pages take weeks to be found, not days. Pages you update are revisited slowly, so improvements take longer to show. Products that sold out three weeks ago stay in the index, because Google has not been back.
And when you finally fix something important, the fix takes far longer to register than it should.
None of this shows up as a drop. It shows up as everything being slower than it ought to be. That is much harder to notice, and much easier to blame on something else.
One honest note. Google says most sites never need to think about crawl budget, and a sixty page dispensary site should be one of them. Filters are how a small site ends up with the URL count of a large one.
Why Dispensary Sites Get This Worse Than Most Retailers
Ordinary online shops have faceted navigation too, and the problem is well known there. Cannabis retail stacks three more things on top.
There are more filters. A clothing shop filters on size and color. A dispensary menu filters on category, brand, strain type, effect, potency, terpene and format. Customers really do shop that way, and the platform offers all of it.
Stock turns over every week. A combination that showed products last month shows nothing this month. So you build up a pile of URLs that exist, load a valid page, and hold no products. Google calls those soft 404s once it notices, and it takes a while to notice.
The menu platform makes them. These URLs are not in your sitemap, and nobody decided to create them. The menu software builds them. That means the person in charge of your SEO often has no idea they exist.
How To See The Scale Of It On Your Own Site
1. Search Console, Settings, Crawl stats. Look at total requests over ninety days, and at the breakdowns by response and by file type. A large volume of HTML requests against a small count of real pages is the signal.
2. Open the Pages report and read the reasons. Look for large counts under “Crawled, currently not indexed”, “Duplicate without user-selected canonical” and “Soft 404”. Filter URLs land in all three. Open the examples and count how many carry a question mark.
3. Read your server logs if you can get them. Filter for Googlebot and count requests to URLs with parameters, against requests to your real pages. This is the most accurate view you will get, because it shows what Google actually fetched.
4. Crawl your own site and count. Point a crawler at the menu and let it run. The number it reaches before you stop it is the number Google is dealing with.
Check what a crawler receives
The site checker fetches a page the way a crawler does. It reports what is in the HTML, how much of the page relies on JavaScript, and how heavy the response is before anything renders.
Run the dispensary site checker
What Google Recommends For Filters
Google updated its guidance on faceted navigation at the end of 2024, and it is more direct than most SEO advice. Five points apply to a dispensary menu.
If you do not need filter URLs in search, stop them being crawled. Google’s first suggestion is to disallow them in robots.txt, while leaving the plain versions open.
Filters in the URL fragment cost nothing. A fragment is the part after a #. Google says filters built that way have no effect on crawling at all. If your menu platform supports it, it is the cleanest option for sort and view settings.
Canonical tags help slowly. Google says a canonical may, over time, reduce crawling of the other versions. Useful, but not a fix on its own.
Return a 404 for empty combinations. When a filter combination has no results, Google recommends a 404. On a menu where stock turns over weekly, this one matters a lot.
Keep the order consistent. Use the standard & separator, keep filters in the same order every time, and never allow the same filter twice. Otherwise one combination can exist under several URLs.
The Fix, Decided Per Filter Rather Than Per Site
The instinct is to block everything with one wildcard in robots.txt. That is too blunt, and it throws away URLs that could rank.
Some filters match real demand. People search “flower dispensary near me” and “edibles Eugene”. Nobody searches for indica gummies under 100mg from one brand, and that combination should never have been a URL.
1. Pick the six to ten filters that match real searches. Usually the top level categories: flower, edibles, prerolls, concentrates, vapes and tinctures. Check them against your Search Console query data rather than guessing.
2. Give those a clean path, not a parameter. /menu/flower/, not /menu/?category=flower. Then treat each one as a real page. Give it a heading, a paragraph about that category at your store, and a place in your internal links.
On a chain, decide which page owns “edibles” plus a town, the category page or the store page. The cannibalization mapper helps you settle that before two of your own pages compete for it.
3. Close everything else. If the combinations are not indexed yet, block the parameter patterns in robots.txt, as Google suggests. Add a canonical to the clean parent page as well.
4. If they are already indexed, change the order. Google cannot see a noindex or a canonical on a URL it is not allowed to crawl. Add those first, give Google a few weeks to process them, and block afterwards.
5. Keep your sitemap to the clean paths only. A sitemap that lists parameter URLs is asking for the problem. Check it, because plugins sometimes add them.
On one chain, Search Console had picked up just over 40,000 URLs, for a site with 61 pages worth having.
The team had spent the previous quarter on content. They could not understand why new guides took three weeks to reach the index. They assumed it was an authority problem and were thinking about buying links to fix it.
The whole thing was one menu with five filters, switched on during a platform move eighteen months earlier.
That last detail is the one to remember. The cause was a migration, not a decision. Nobody chose ten thousand pages. Somebody moved platforms, and the new one had more filters than the old one.
Do not block already-indexed filters in robots.txt as your first move.
If Google has already indexed thousands of filter URLs, blocking them stops it crawling them. Then it can never see the noindex or canonical that would clear them out. They stay in the index, frozen, and a temporary problem becomes a permanent one.
Noindex or canonical first. Let it process. Block afterwards.
How To Keep It From Coming Back
This problem grows back, and that is what catches teams who have fixed it once.
Check after every platform change. Menu providers add filter options in updates. A new filter multiplies against every existing one, it does not add to them. One new filter with five options takes 9,600 URLs to 48,000.
Put it on your migration checklist. A platform move is the most common cause of all, because the new system inherits the old URLs and adds its own.
Our guide to dispensary menu migration has the full checklist for a platform move, including redirects, sitemaps and the checks to run after launch.
Watch the Crawl stats trend, not the single number. A steady climb with no rise in real pages means something started making URLs. Finding it early is far cheaper than finding it at 40,000.
What This Is Worth Fixing Alongside
Crawl waste is a foundation problem. It belongs in the same phase as the other things that decide whether Google can read your site at all.
The first is whether your menu products reach the HTML. If your menu is an embed, why an embedded menu stays out of Google covers that fix. This post is the next step once it works.
The second is whether your age gate lets the crawler read the page at all.
Fix all three and everything after them gets faster. Fix none of them, and next quarter’s content program will be delivered onto a site that cannot process it.
Crawl budget rarely comes up in dispensary SEO work, yet on a large menu it decides which pages Google ever sees.
If those three foundation fixes are more than your team can take on, they are the core of our cannabis technical SEO work.
If you take one thing away
Open Crawl stats today and compare the request count with the number of pages you have. If the gap is huge, your filters are the first place to look.
