Dispensary SEO: The Complete Guide for Cannabis Retailers

    Why dispensary SEO is different

    Most local SEO advice assumes you can buy your way out of a slow start. A plumber with a thin website can run paid search on day one and let organic rankings catch up later. Cannabis retailers cannot. The major ad platforms do not accept the category, so search visibility is not a channel you supplement — for most stores it is the channel.

    Two other things make dispensary SEO its own discipline. The first is compliance: what you can say, how you must gate the site, and in some states even what you can call yourself is written into regulation, and every one of those rules lands on a page a crawler has to read. The second is the catalog. A dispensary has hundreds of products that change weekly, and the way most dispensary websites are assembled hides every one of them from search engines without the owner ever being told.

    People search for this work under several names — cannabis SEO, marijuana SEO, dispensary SEO — and they all describe the same job: getting a regulated retail catalog into search results without paid support. This guide walks the whole problem: why the hiding happens, the checklist that fixes it, how to handle more than one store, and how to test your own site before you pay anyone to work on it.

    Why most dispensary websites can't rank

    Open a typical dispensary site and you will usually find a homepage, an about page, a contact page, and a menu. The menu looks like part of the site. It is not. In most builds it is an iframe — a window cut into your page that displays a menu served from a different company's domain.

    Here is the mechanism, in plain terms. When a search engine crawls your page, it reads the HTML your server sent. An iframe is a single line in that HTML pointing somewhere else. The crawler follows that pointer, sees a separate website, and files everything it finds there under that website. The product names, the strain descriptions, the prices, the categories, the thousands of words of content that change every week — all of it is credited to a domain you do not own.

    The practical result is that a shopper searching for a specific product in your city can never land on your store's page for that product, because your store has no page for that product. You have four or five indexable pages and a competitor down the road with a native storefront has four hundred. No amount of blog writing closes that gap.

    The same logic applies to menus loaded entirely by JavaScript after the page arrives, and to links that push a shopper onto a third-party ordering domain to check out. If the URL in the address bar is not yours, the SEO value is not yours either. We broke down every common way a dispensary site gets built — including what each approach means for who owns the pages — in the comparison of dispensary website build approaches. There is also a deeper write-up of the specific failure mode in why iframe menus keep dispensary products out of Google.

    The dispensary SEO checklist

    Work these five parts in order. The technical layer has to be right first, because on-page and content work applied to pages a crawler cannot reach produces nothing.

    1. Technical

    • Server-rendered pages. The product, category, and location content must be present in the HTML the server returns, not assembled in the browser afterwards.
    • An XML sitemap that lists every page you want indexed and updates as the catalog changes.
    • A robots.txt that does not accidentally block the menu, images, or location directories.
    • Canonical tags on every page, so filtered or sorted versions of a category do not compete with the category itself.
    • Clean 404 handling. A retired product should return a real not-found page, not a redirect to the homepage.
    • Redirects when products retire permanently or a category is renamed, pointing to the closest live equivalent.
    • An age gate that lets crawlers through. A gate implemented as a hard block in front of the HTML can hide the entire site.

    2. On-page

    • Title patterns that vary by page type: product pages lead with the product and brand, category pages lead with the category and city, brand pages lead with the brand and the store.
    • Meta descriptions written per template but populated with real page data, so no two pages ship the same sentence.
    • One H1 per page, describing that page, with H2s that follow the actual structure.
    • Duplicate content control across locations. If ten stores carry the same product, decide which page is canonical for that product and let the location pages differentiate on stock, price, and pickup details.

    3. Structured data

    • Product schema on product pages with price and availability, kept in sync with the real catalog rather than hardcoded.
    • LocalBusiness schema per location, with the address, hours, and phone number of that store.
    • BreadcrumbList on every nested page so search results show the path.
    • FAQ schema where you genuinely answer questions, not as a place to repeat keywords.

    Markup that disagrees with the visible page is worse than no markup. See the guide to product schema for cannabis catalogs for the field-by-field detail.

    4. Local

    • A real page per location with its own URL, not a dropdown that swaps content in place.
    • A consistent URL architecture — city and state segments that read the way people search and do not change when you open store number four.
    • Name, address, and phone details that match everywhere they appear: your site, your business profile, and directory listings.
    • Content on each location page that only applies to that store: staff pickup process, parking, what that shop is known for, which brands it stocks.

    5. Content and authority

    • Named authors with real roles, rather than anonymous posts.
    • Published editorial standards that say how the content is produced and reviewed.
    • Articles that answer questions customers actually ask at the counter, written once and written well, instead of a weekly post nobody reads.
    • Compliance-aware phrasing. In several states the wording on your own pages is regulated, and the safest copy is usually also the clearest.

    Dispensary local SEO across multiple stores

    Dispensary local SEO gets harder the moment you open a second door, and the reason is counterintuitive: your biggest competitor for a city term is often your own other location.

    Start with the rule that each store gets one page and that page is genuinely about that store. The failure pattern is a template with a city variable — the same three paragraphs published eight times with a different city name in each. Search engines are good at recognizing that pattern, and the usual outcome is that one page ranks and the rest are treated as near duplicates, so the effort produces one page's worth of visibility for eight pages' worth of work.

    To keep your own stores from cannibalizing each other, give each location page a distinct primary target — the city or neighborhood it actually serves — and make sure the internal links, the schema address, and the on-page copy all agree on that target. Where two stores are close enough that they genuinely compete for the same query, pick the one you want to win, and let the other lead with something different: a brand it stocks exclusively, a different service, or a different neighborhood.

    State-level architecture sits above the city pages and matters more in cannabis than in most categories, because the rules, the license types, and even the words you are allowed to use change at the state line. We maintain state-specific breakdowns for Michigan, Colorado, and Illinois, among others. If you run stores in more than one state, read the state pages before you standardize your templates — the differences are not cosmetic. The multi-location local SEO write-up goes further into the page architecture itself.

    How to tell if your dispensary SEO is broken

    You can run all of these yourself in about fifteen minutes, without any tools beyond a browser.

    1. Search a product plus your store name. Pick a product you have carried for months and search for it alongside your business name. If nothing from your domain appears, your catalog is not indexed.
    2. Look at the URL while you browse the menu. Click into a product. If the address bar still shows your homepage URL, or switches to another company's domain, the product page is not on your site.
    3. View the raw page source, not the rendered page. Use your browser's "view source" option and search that text for a product name you can see on screen. If it is not in the source, a crawler probably did not see it either.
    4. Check whether your location pages are indexed. Search for the exact URL of a location page. If it does not come back, that store is invisible for every local query.
    5. Test the age gate in a fresh private window. If nothing loads until you click through, check whether the page content is still in the source behind it.
    6. Compare your indexed page count to your product count. A store with six hundred SKUs and a dozen indexed pages has a structural problem, not a content problem.

    What a platform handles versus what you handle

    Split the checklist in two. One half is machine work that has to be correct on every page, every time the catalog changes — nobody should be doing that by hand. The other half is judgment, and no platform can do it for you.

    Automated: server-rendered product, category, brand, and location pages; sitemap generation and submission as the catalog changes; canonicals; redirects when products retire; Product, LocalBusiness, Breadcrumb, and FAQ markup populated from live data; title and meta patterns applied per page type; crawlable age gating.

    Yours: which categories and brands you want to be known for; the copy on each location page; which questions are worth answering; what you publish and who signs it; the local relationships and coverage that build authority.

    Buddy handles the first list as part of the platform rather than as a service you buy monthly — the detail of how SEO is built into the Buddy platform covers what ships automatically. For the wider channel picture beyond search, including email, SMS, and promotions, see the dispensary marketing guide, and if you are weighing whether to hire help, the cannabis marketing agency breakdown is an honest read on what is worth outsourcing.

    Frequently asked questions

    How long does dispensary SEO take to work?

    Technical fixes register fastest: once product and location pages exist on your own domain and are crawlable, search engines can index pages that previously did not exist for them at all. Ranking movement for competitive city-plus-product terms is slower and depends on how much of the catalog is indexable, how many locations you run, and how established your domain is. Treat the first month as indexing work and the following months as ranking work.

    Does an iframe menu hurt my SEO?

    An iframe menu does not penalize you, but it does mean your product pages are not yours. The catalog is served from another domain inside a frame, so the product names, prices, and descriptions are attributed to that domain rather than to your site. You end up with a website that has a handful of indexable pages and a store that has none.

    Do I need a separate page for every location?

    Yes, if each location has its own address, hours, and menu. Each store should have its own URL, its own LocalBusiness markup, and content that reflects that store specifically. What backfires is publishing the same paragraph on ten location pages with only the city name swapped.

    Can I do dispensary SEO myself?

    The judgment work — deciding which categories matter, writing the location and brand pages, answering the questions customers actually ask — is well within reach of an in-house marketer. The technical layer is harder to do by hand because it has to stay correct every time the catalog changes. That part is better solved by the platform than by a recurring task list.

    Does my POS affect my SEO?

    Indirectly. Your point of sale is the source of truth for products, prices, and stock, so the accuracy of your indexable product pages depends on that data flowing through cleanly. Buddy integrates with Dutchie, Flowhub, Treez, Jane, Alpine IQ, and POSaBIT so catalog data can drive pages on your own domain rather than living only inside an embedded menu.

    If you want a second pair of eyes, we will walk this checklist against your own site on a call and tell you which items are already fine — including the ones you do not need us for.

    Free site check

    See how your current site scores.

    Run your existing dispensary site through the analyzer and see what search engines can actually read today — then compare it against what a Buddy-built site delivers.

    Sales-Led Platform

    Ready to Scale?

    Partner with Buddy to build scalable commerce and brand infrastructure tailored to your business.