← All guides

Marketing + UX playbook

Cannabis dispensary website conversion — what moves the 1% to 5%+

Most cannabis dispensary websites convert browsing-customer to walk-in-or-pickup at 1-2% — that’s the industry baseline + most operators don’t measure it. Better-run sites hit 4-6%. At 1,000 monthly visits, the delta is 30 extra customers/month, which is ~$15-25K incremental monthly revenue at typical basket size. The delta isn’t design polish — bad-looking sites convert fine if the friction is low. The delta is removing 7 specific friction points + adding 4 specific compliance-clean trust signals. The discipline we run on greenlifecannabis.com + seattlecannabis.co, the WAC-155-clean copy that both sites use, and what NOT to do.

By CannAgent6 min read

What customers came to do — and the 7 friction points blocking them

Cannabis dispensary website visitors mostly want to do one of three things: (1) check if the store has a specific product in stock, (2) confirm hours/location/pickup-availability before driving over, (3) learn enough about the operator to trust walking in for the first time. The conversion path serves THESE jobs. Most dispensary sites layer on jobs the customer didn’t ask for + interrupt the ones they did.

  1. **Age gate that never goes away.** WSLCB-required age confirmation is fine ONCE per browser. Repeat-prompts on every page reload destroy the conversion path. Solution: cookie the confirmation for 24-48 hours; only re-prompt if cookie is cleared.
  2. **Forced email + phone capture before menu access.** Customers who want to check stock SHOULD NOT be wall-gated behind ‘join our list.’ They bounce. The list-join opportunity belongs AFTER they’ve seen the menu, not before.
  3. **Slow + bloated menu loading.** Cannabis menu pages (iHeartJane, Dutchie, Weedmaps embeds) often load 4-8 seconds with 3MB+ JS payloads. Mobile customers on weak connections give up. Solution: skeleton-load the menu within 1 second + progressively render — partial menu visible while the embed completes.
  4. **Pickup vs in-store ambiguity.** Customer can’t tell if you offer pickup, online ordering, or only in-store. Solution: on every page, in the header or hero, ‘Pickup ready in 30 min · Order online · Or walk in.’ Per /guides/pickup-flow-stop-babysitting-the-queue, the operations side has to actually deliver this.
  5. **Hours/location buried below the fold.** Customer wants to know ‘are you open right now’ — answer in the hero. ‘Open until 11pm · 1234 Rainier Ave S, Seattle’ with a click-to-map link.
  6. **No trust signals in the visitor’s first 5 seconds.** ‘Founded 2010,’ ‘Locally owned,’ ‘Cash + debit accepted’ — single line under the hero, every page. Per /guides/cannabis-google-business-profile-wac-advertising, NO ‘best’ or ‘premier’ without substantiation.
  7. **Form fields that don’t auto-fill.** Mobile autocomplete + autofill annotations on every form input (‘tel,’ ‘email,’ ‘name’ auto-complete attributes). Per /guides/cannabis-customer-sms-deliverability-discipline, friction here is friction at the TCPA-opt-in step too — the same form does double duty + has to work.

4 compliance-clean trust signals that move the needle

  1. **Founded year + neighborhood + locally-owned framing in the hero.** ‘Seattle Cannabis Co — Rainier Valley dispensary since 2018’ works because every word is fact-checkable + WSLCB-clean. Years-of-operation is a trust anchor; locally-owned beats ‘family-owned’ as cleaner framing. Per memory, no ‘veteran-owned’ framing for either store.
  2. **Real photos of the storefront + interior.** NOT stock images of generic cannabis. Customers want to know what they’ll walk into. Per /guides/cannabis-google-business-profile-wac-advertising, the same photo discipline applies — no close-up product shots with potency labels (cannabis-policy filter triggers).
  3. **Hours + last-call cutoff explicit.** ‘Open until 11pm — last orders 10:45.’ The 15-min-before-close cutoff prevents customer complaints + manages expectations. Per /guides/cannabis-holiday-rush-operations, rush-day adjustments here matter.
  4. **Plain-English compliance posture.** ‘21+, valid ID required, cash + debit accepted’ — single line, single sentence. Customers want to know what to bring. Operators who omit this lose first-time customers who arrive without ID + leave embarrassed.

The mobile-first imperative

  • **70-80% of cannabis-dispensary-website traffic is mobile.** Designing desktop-first + checking mobile last reverses the priority. Build mobile-first; desktop is the secondary case.
  • **Tap targets ≥44px.** Apple HIG + Google Material both anchor here. Anything smaller fat-fingers wrong on mobile.
  • **No hover-only interactions.** Hovers don’t exist on touch devices. If your nav menu requires hovering, it’s broken on mobile.
  • **Sticky bottom nav for the 3 most-asked actions.** Order · Menu · Visit. Persistent across pages so the customer’s next action is one tap away.
  • **Click-to-call + click-to-map.** Phone number is a `tel:` link. Address is a `https://maps.google.com/...` link. Both auto-resolve on mobile to the customer’s preferred app. Per /guides/cannabis-customer-sms-deliverability-discipline, don’t steer customers from email to phone — but click-to-call when they NEED a phone is friction-removal, not steering.
  • **Loading skeleton states.** Mobile customers on cellular networks see partial-load before full-load. Skeleton states (gray-block placeholder shapes) preserve perceived performance during 1-3 second loads — without them the page reads as broken.

WAC-155-clean copy framework for the website

Same WAC 314-55-155 advertising rules that apply to GBP per /guides/cannabis-google-business-profile-wac-advertising apply to the website. Your website is reachable by anyone — including WSLCB inspectors who screenshot for enforcement actions. Disciplined operators write copy that survives the screenshot.

  • **Allowed:** product information (strain name, vendor, potency, terpenes, packaging date), educational content (what is THCa, what are terpenes, how do edibles work in plain non-medical-claim language), store information (hours/location/payment methods), team information (locally-owned, years operating, team intro).
  • **NOT allowed:** efficacy claims (‘helps with anxiety,’ ‘great for sleep’), ‘cure / heal / treat’ in any form, ‘best’ / ‘premier’ / ‘highest-quality’ without documented substantiation, comparative health claims, references to medical conditions, customer testimonials describing health effects, photography suggesting on-property consumption.
  • **The educational-content loophole + its trap.** Many operators write ‘learn about cannabis’ pages as marketing. Done right, this is excellent SEO + non-violating. Done wrong, it’s the highest-density violation source on the site (‘sativas help you focus,’ ‘CBD reduces inflammation’). Educational content has to stay in chemistry + observation language; never make medical claims even framed as ‘customers report’ without substantiation.

What CannAgent does to make this stick

  • **WAC-155 strike-list scanner on every customer-facing string** — same engine that runs against GBP + case cards. Form rejects + suggests compliant alternatives if a manager types ‘helps with anxiety’ into a product description, blog post, or page-help panel.
  • **Conversion-rate dashboard at /admin/marketing/conversion** — surfaces baseline CRO metrics: 7-day moving average, bounce rate, time-to-menu, mobile-vs-desktop split, top exit pages. Compares against last-30-day baseline so the operator sees what’s improving + what regressed.
  • **Mobile-performance regression test in CI** — Lighthouse mobile score >= 80 required on every preview deploy. Catches the regression class where a designer adds a hero image that triples mobile-load-time.
  • **Age-gate cookie discipline** — 48-hour TTL on age-confirmation cookie; cookie cleared on browser close OR explicit re-confirmation request. Single-prompt-per-day for 95%+ of returning visitors.
  • **Skeleton-state library** — every menu/product/order page renders a skeleton-state immediately on navigation; the actual content fades in when ready. Makes 2-3 second loads feel sub-second.
  • **Click-to-call + click-to-map auto-wired** — every phone number + address rendered through helper functions that auto-emit `tel:` + `https://maps.google.com/...` URLs. No manual escape-the-friction work per page.

Takeaways

Ready to talk through your migration?

30-minute demo. We end by quoting the cutover from your current setup — fixed scope, no hourly games.