Measuring cannabis SEO takes two free tools wired correctly: Search Console for what happens before the click and GA4 for what happens after it, with menu clicks, calls, directions and order starts marked as key events. Most sales close at a register or on a menu provider that analytics never sees, so revenue and ROI are honest estimates built from those actions, a real average ticket and stated assumptions. Report monthly, compare year over year, and wire consent before any tag fires.
What cannabis SEO measurement is for
Cannabis SEO measurement exists to answer the question every owner asks: is the money coming back? Organic search produces value through a fixed chain. A page earns impressions, some impressions become clicks, some clicks become actions like a menu order or a call, and some of those actions become revenue at the register.
Read the chain as one path and the useful number is wherever it thins out. Thousands of impressions with few clicks means the page ranks without getting picked, so the title and description need work (Google's guide to controlling snippets covers what it shows). Strong clicks with almost no actions means the page or the path to the menu is the problem. Actions that never show up as revenue usually mean the sale finished in-store or on a third-party menu your analytics never saw.
Say an edibles brand reaches position two for a competitive term and pulls 4,000 impressions a month. Click-through sits under 1 percent because the meta description is a cut-off fragment, and nobody who clicks can buy because the page has no where-to-buy links. A rewritten snippet roughly triples clicks and retailer links give them somewhere to go. The ranking never moves, so a rankings-only report would have hidden both the problem and the fix.
Set up GA4 and Search Console
A working analytics setup for a cannabis site is three moves: install Google Analytics 4, verify and link Search Console, and define the conversions you care about.
Deploy GA4 through Tag Manager. Google Tag Manager lets you change tags without editing site code and lets you hold them behind a consent choice. Confirm data in the GA4 realtime report before trusting anything, because a tag that looks installed and never fired is the most common reason a setup collects nothing.
Link the two and know who owns what. Search Console owns everything before the click: queries, impressions, positions and clicks. GA4 owns everything after: landing pages, engagement and actions. Linked, the search term that brought someone in sits next to what they did.
Expect the numbers to disagree. Search Console records a click the moment someone taps your result. GA4 records a session only when the page loads and the tag fires. In between you lose back-button exits, ad blockers and anyone stopped by an age gate or consent banner, and cannabis sites widen that gap more than most. A brand with 12,000 organic clicks and 9,400 organic sessions in the same month has nothing broken. Use each tool for its own job and stop reconciling them line by line.
Audit the tracking before you trust it
An analytics audit proves the tracking tells the truth before anyone decides anything on it, and inherited cannabis sites usually have at least one piece quietly broken.
- The tag fires exactly once. Watch a single pageview in GA4 DebugView or Tag Assistant. Duplicate installs, one hardcoded and one through Tag Manager, double every number. Remove any leftover Universal Analytics tag while you are there.
- Every conversion still records. View a product, tap order online, submit the form, tap the phone number, and watch each action land in DebugView. A conversion tied to an old button ID dies silently in a redesign.
- The menu handoff keeps the session. Without cross-domain measurement, GA4 starts a new session when a shopper crosses to a Dutchie or Jane menu on another domain, and your organic visitor gets credited as a referral from your own site.
- Search Console is linked to the right property. Renamed properties and changed access break links without warning.
Picture a two-location shop with healthy traffic and conversions near zero. The tag fires twice, the order online event points at a button class a theme update renamed, and the menu subdomain has no cross-domain setup. None of it throws an error. Three fixes later, real conversions appear, and six months of flat reports turn out to be a measurement failure.
Conversions: menu clicks, calls, directions and orders
Conversions for a cannabis site are the measurable actions closest to a sale, and GA4 calls them key events. Until you mark some, GA4 is a traffic counter. Because checkout often finishes on a menu provider or at the counter, the last trackable step before the money becomes your stand-in for a purchase:
- Menu click-throughs to your embedded or hosted menu.
- Order online and reserve pickup starts.
- Tap-to-call on mobile.
- Get Directions clicks and store locator use.
- Add-to-cart and checkout for CBD and hemp brands selling online, where GA4 can see the purchase.
Skip vanity events. A menu page view signals no intent, and scroll depth never sold a product. Engagement time and scroll depth are still useful feedback on whether a page finishes the reader's job, but they stay off the conversion list. Bounce rate misleads in particular: someone who reads one clear sentence on a first-edible dosing page and leaves got what they came for.
Then read key events through the Organic Search channel in the Traffic acquisition report. A raw count says the store is busy; the organic count says SEO is producing actions. A store that switches its goals to click-to-call and store locator use might find organic visitors using the locator at nearly twice the rate of paid traffic, a finding that was buried under a vanity metric. Our guide to tracking conversions from cannabis organic search walks through the setup, including menu providers that pass order data back.
Calls and map listing data
Map listing data is where much of a dispensary's search demand shows up, and website analytics never sees it. A customer who calls from your Google Business Profile or taps for directions never loads your site, so pull these numbers from the platforms directly.
Business Profile Performance. Three actions matter: calls, direction requests and website clicks. Direction requests are the strongest intent signal you can see. If directions climb while website clicks stay flat, the listing often lacks a menu link or has stale photos, so people map a route without browsing first.
Weedmaps and Leafly. Each has its own dashboard for views, favorites and menu clicks. Add them to the monthly pull, since a large share of cannabis discovery happens there.
Phone calls without breaking NAP. Business Profile call history is the safe start: free, and it never touches your citations. Dynamic number insertion ties calls to organic search or a specific page, but if a tracking number leaks into a citation or your profile, you now have two phone numbers for one business, and local rankings lean on name, address and phone matching everywhere. Keep the real number visible on every listing and confine swapping to controlled on-site sessions.
Pull listing numbers on a fixed date each month and compare against the same month last year.
Rank tracking that tells the truth
Rank tracking for a cannabis site takes three instruments, because no single one covers organic results, priority terms and the map pack.
Search Console average position is the honest baseline. The Performance report blends position across every searcher, device and location, which beats checking from your own browser, since personal results are tailored and look better than reality. A dispensary sure it ranks first from the office often finds an average near 5: strong downtown, weak in the suburbs. The blend hides spread, lags a couple of days and ignores the map pack.
A rank tracker for the terms you are working. A tracker checks a short list daily from a fixed location and draws a clean line that reacts to changes you ship. Keep it to terms that drive orders.
A geo-grid for the map pack. Map pack position shifts every few blocks with the searcher's distance from your door. A geo-grid tool such as Local Falcon checks "dispensary near me" from a grid of points across the trade area and shows a heat map of where you hold the top three and where you vanish. Run the same keywords on the same grid monthly.
Measure each store on its own. Give each location a Search Console filter for its URL folder and its own Business Profile, and judge every store against its own history and local competitors. A three-store operator down 8 percent for the quarter might find two stores up and a new one down 55 percent because its location page was never linked from the nav. The blended number would never have pointed there.
Track branded search separately. Add a Query filter set to Custom (regex) with your name and its misspellings, such as green ?room|greenroom|green rm. Branded impressions rising year over year with flat ad spend means packaging, press and word of mouth are working. Keep branded and non-branded apart, or a PR moment will flatter your category rankings.
Benchmark against the shops you actually lose customers to. Share of voice in Ahrefs or Semrush weights each position by the clicks it earns, and the keyword gap report lists terms competitors rank for and you don't. A gap term where you already sit at position 8 is a faster win than one you don't rank for at all.
Dashboards, scorecards and reporting
A cannabis SEO dashboard should end the ritual of opening three tools to answer one question. Looker Studio is free and connects natively to Search Console and GA4, so most builds live there.
One page, two zones. The top zone is Search Console: clicks, impressions, CTR and average position as scorecards with period-over-period deltas, plus a time series. The second zone is GA4: organic sessions, engagement rate and key events. Label them so nobody reads a session as a click. Add a date control and one top-queries table, which ends up the most used thing on the page. Check the connectors now and then, since a renamed property leaves a dashboard showing stale data.
A scorecard of about eight numbers. Split it into leading metrics (average position on a fixed set of core terms, impressions, top-ten query count, newly indexed pages) and lagging metrics (organic clicks, sessions, key events, attributed revenue). When impressions jump in a flat-click month, clicks and conversions tend to follow a month or two later. Freeze the definitions: 25 core terms this month means the same 25 next month.
Report monthly. Rankings move over weeks and Search Console lags a couple of days, so weekly reports mostly show wobble. Open with two or three plain sentences on what moved, why and what you are doing, for example: "Organic clicks up 14 percent, driven by the concentrate guides ranking; one location page dipped after a menu platform change we're fixing." Then lagging numbers, then leading ones, in the same order every month.
Translate for owners and leadership. Restate "average position went from 8 to 4" as "you now show near the top when locals search for edibles, and menu clicks roughly tripled." Lead each report with what that owner wants: order starts for a store pushing online orders, calls and directions for one living on foot traffic. Executives get organic revenue against last quarter first, rankings as momentum second, keyword lists in an appendix. Early quarters often show rising leading numbers and flat revenue, so say so and give a timeline; our answer on how long cannabis SEO takes covers typical ranges. Never bury a slow month under a metric that happened to rise.
Attribution in a cash business
Attribution in cannabis is always an estimate, because the buyer path breaks every clean model. Someone searches "best gummies for sleep", reads your guide and leaves. Two days later they search your name, tap Get Directions, drive in and pay cash. Last-click gives organic nothing for that first visit, and the register gives the web nothing at all.
GA4 helps more than people expect. Its default data-driven model spreads credit across touchpoints (check it in the attribution settings), and the conversion paths report, explained in Google's attribution overview, shows how often organic is an early touch when the final click was branded or direct.
Report attribution as a band. Suppose GA4 credits organic with a role in 900 conversion paths in a quarter, your POS suggests 20 to 30 percent of tracked actions end in a purchase, and the average ticket is 48 dollars. That is roughly 180 to 270 sales, or about 8,600 to 13,000 dollars that organic touched. A range with stated assumptions survives scrutiny; a precise figure nobody can reproduce does not. Once the band clearly shows SEO paying or not, more precision rarely changes the decision.
Lifetime value changes the picture. Cannabis buyers are habitual, so first-order revenue undervalues SEO. A rough lifetime value is average order times orders per year times years retained times gross margin: 60 dollars twice a month for two years at 50 percent margin is about 1,440 dollars, against a first order of maybe 30. The organic source lives in GA4 and the repeat purchases in a POS loyalty account, so most operators compare cohorts: do organic-acquired customers reorder more often than those from other channels?
Calculating SEO ROI for a dispensary or brand
SEO ROI for a dispensary is organic-driven revenue minus what SEO cost, divided by that cost. The revenue input is the work, because most sales close at a POS with no idea the customer came from Google. Build it from organic key events and listing actions, a conservative close rate and your real average ticket, and check in Search Console how much traffic is non-branded, since people typing your name would likely have found you anyway.
A worked example. Say SEO costs 2,000 dollars a month. GA4 and the Business Profile show 620 organic actions across menu clicks, direction taps and calls. A 25 percent close rate gives 155 orders, and at a 55 dollar average ticket that is 8,525 dollars in estimated revenue. ROI is (8,525 minus 2,000) divided by 2,000, about 326 percent gross. Label it an estimate, write down the close rate and ticket, and hold them steady month to month so the trend reflects real change.
Then account for 280E. Plant-touching businesses can't deduct ordinary business expenses against federal income the way other industries do, as the IRS explains in its cannabis industry FAQ. That raises the after-tax bar SEO has to clear, so show the gross return and note the tougher breakeven. Ask your accountant how it applies to your books. Read ROI on a six to twelve month line, because organic revenue compounds as more pages rank.
Seasonality and traffic drops
Cannabis search traffic runs on a calendar, and a normal seasonal dip looks like a disaster if you only compare to last month. Demand ramps through early April toward 4/20, spikes around Green Wednesday (the day before Thanksgiving) and picks up with Croptober harvest interest, with a softer summer. Google Trends on a five-year view confirms the shape for your terms.
Compare year over year. Organic clicks falling 30 percent from April to May can still be up 18 percent against last May, which makes the drop the post-4/20 comedown and the real story growth. Publish seasonal pages weeks ahead: a 4/20 page belongs live in March.
When a drop is real, get told early and diagnose it in order:
- Set an alert. A scheduled GA4 or Looker Studio email when organic traffic falls a set amount week over week.
- Rule out seasonality with the year-over-year view.
- Check for a Google update. The Search Status Dashboard lists confirmed updates with rollout dates. A decline matching a core update calls for steady quality work over months.
- Check for a manual action. The Manual actions report says plainly whether a reviewer penalized the site.
- Then look at your own changes. A stray noindex after a deploy, a robots.txt edit, a migration or a template that stripped internal links. The Page indexing report gives a reason for every excluded URL, and URL Inspection shows which canonical Google chose for one page.
Templated pages are the usual cannabis culprit there. City pages that only swap the city name tend to land under "Duplicate without user-selected canonical" and get folded into one. Resubmitting won't help; giving each page its own inventory, hours and neighborhood detail will. Validate the fix in Search Console afterward.
Log files on large catalogs
Log files are the only record of what Googlebot actually did on your site, and on a large cannabis catalog they show where crawling gets wasted. Each request leaves a line with URL, timestamp, status code and user agent, so filtering to Googlebot gives you an unsampled diary of its visits. The work pays off on big menus with faceted filters and rarely on a ten-page site.
Load raw access logs from your host into a tool such as Screaming Frog's Log File Analyser and verify the Googlebot hits are real. The usual leak is filter URLs, every combination of category, potency, price and brand crawled while product pages wait. Google's guide to crawl budget for large sites covers the fixes: block worthless parameters in robots.txt, canonicalize filtered views to clean category pages, and fix redirect chains and recrawled 404s. Our guide to using log files to improve cannabis crawl efficiency has the full process.
Privacy limits on cannabis tracking
Privacy is the hard limit on cannabis tracking, because a record that someone browsed and bought cannabis ties a person to a purchase many still treat as private, often with location data attached. Treat the data as sensitive from the first tag. This is general information; confirm your obligations with counsel.
Consent first, tags second. Consent Mode ties GA4 and Google Ads tags to the visitor's choice. Accepted, tags fire normally. Declined, they fall back to cookieless pings and Google models some of the missing conversions. Pair it with a banner that actually blocks tags until a choice is made, and set it up at install rather than retrofitting it.
Know which laws reach your visitors. US privacy law follows where visitors are. California's CCPA, as amended by CPRA, and the Colorado Privacy Act both give people the right to opt out of the sale or sharing of their data. Build to the strictest law your traffic touches and keep a plain-language privacy notice.
Expect the numbers to shift. Adding a consent gate to an ungated install drops reported sessions at first, then modeling fills part of the gap while channel trends hold. You lose some user-level reports and keep every number SEO decisions need.
Mask session recordings. Heatmap tools like Microsoft Clarity and Hotjar show scroll drop-off and confused clicks, and both can record what visitors type. Turn on input masking for age gates, sign-up and checkout fields before relying on recordings.
Turning the data into next quarter's work
Search Console data is the best source for next quarter's SEO work. Filter the Performance report to queries at positions 8 to 20 and sort by impressions: Google already ranks you for these without rewarding you yet. A strain guide at position 12 for "best strains for sleep" with 4,000 monthly impressions and 30 clicks usually needs a sharper title, the missing subtopic and a short FAQ, which beats starting a new article. High-impression queries with near-zero clicks point at a page that misses what searchers wanted. Let margin, seasonality and what the shop wants to sell set the final order.
Measure every refresh. Record the page's clicks, impressions, CTR and position for the prior 90 days before touching it, keep the URL, update dateModified, then compare an equal-length window four to eight weeks later, noting any core update in between. Track links the same way, by referring domains (unique linking sites) charted monthly. AI search sits inside the same program as another search surface: ChatGPT, Claude, Gemini, Perplexity and Google AI answer cannabis questions too, and our guide to running an AEO audit on a cannabis website shows how to check where you appear.
If your numbers don't add up, or you suspect the tracking itself is wrong, start with a cannabis SEO audit that checks the analytics setup alongside indexing, rankings and conversion paths before anyone builds a plan on bad data.
Key takeaways
- Search Console covers everything before the click and GA4 everything after; link them and expect their numbers to differ.
- Audit before trusting any report: one tag firing once, every key event recording and the session surviving the menu handoff.
- Mark menu clicks, order starts, calls and directions as key events, read them through organic search, and pull listing calls and directions from Business Profile.
- Use Search Console average position as the baseline, a tracker for priority terms and a geo-grid for the map pack, measured per store.
- Report revenue and ROI as a range with written close-rate and ticket assumptions, and note that 280E raises the breakeven bar.
- Report monthly, compare year over year around 4/20, Green Wednesday and Croptober, and diagnose drops in a fixed order.
- Wire consent before any tag fires and mask session recordings, because cannabis purchase data is sensitive.
Frequently asked questions
Why don't my Search Console clicks match my GA4 organic sessions?
Search Console counts a click when someone taps your result, while GA4 counts a session only when the page loads and the tag fires. Back-button exits, ad blockers, age gates and consent banners all sit between those moments, so GA4 organic sessions usually run lower on cannabis sites.
What should a dispensary track as a conversion?
Track the last measurable action before the sale: menu click-throughs, order online and pickup reservation starts, tap-to-call and Get Directions clicks. Mark those as key events in GA4 and read them through the Organic Search channel. Pull calls and direction requests made from the Google listing out of the Business Profile Performance report.
How do I measure SEO ROI when most sales happen in-store?
Count organic key events and listing actions, apply a conservative close rate from your POS and multiply by your real average ticket. Subtract the SEO cost and divide by that cost. Present the result as a range with the assumptions written down.
How often should cannabis SEO be reported?
Monthly. Rankings and indexing move over weeks, so weekly reports mostly show noise. Compare each month to the same month last year to strip out 4/20 and holiday swings.
Is it legal to run Google Analytics on a cannabis website?
Generally yes, but the data is sensitive and laws such as the CCPA and the Colorado Privacy Act give visitors opt-out rights. Run tags behind a consent banner with Consent Mode, mask session recordings and keep a clear privacy notice. Confirm your specific obligations with counsel.
Sources
- Control your snippets in search results, Google Search Central. Covers how titles and descriptions appear in results.
- Introducing Google Analytics 4, Google Analytics Help. Covers GA4 and how it differs from Universal Analytics.
- About Search Console, Search Console Help. Covers what Search Console reports.
- Introduction to Tag Manager, Tag Manager Help. Covers deploying tags without code edits.
- Set up cross-domain measurement, Google Analytics Help. Covers keeping one session across domains.
- About key events, Google Analytics Help. Covers how GA4 marks and reports conversions.
- Performance report (Search results), Search Console Help. Covers clicks, impressions, CTR, position and filters.
- Select attribution settings, Google Analytics Help. Covers choosing the attribution model in GA4.
- Get started with attribution, Google Analytics Help. Covers GA4 attribution reports and conversion paths.
- Cannabis industry frequently asked questions, Internal Revenue Service. Covers Section 280E and cannabis business deductions.
- Google Trends, Google. Shows relative search interest over time.
- Google Search Status Dashboard, Google. Lists confirmed ranking updates and rollout dates.
- Manual actions report, Search Console Help. Covers manual penalties and reconsideration.
- Page indexing report, Search Console Help. Covers indexed and excluded URLs with reasons.
- Verifying Googlebot and other Google crawlers, Google Search Central. Covers confirming crawler hits are genuine.
- Crawl budget management for large sites, Google for Developers. Covers how large sites manage crawling.
- Robots.txt introduction and guide, Google Search Central. Covers blocking crawl paths with robots.txt.
- How to specify a canonical URL, Google Search Central. Covers rel=canonical and duplicate consolidation.
- Consent mode overview, Google for Developers. Covers how tags adjust to visitor consent.
- California Consumer Privacy Act (CCPA), California Attorney General. Covers consumer rights including opting out of sale or sharing.
- Colorado Privacy Act, Colorado Attorney General. Covers Colorado consumer data rights and business duties.
Want this done for your brand?
We build cannabis & CBD search visibility with full transparency, for dispensaries, brands, and MSOs.
Get a free cannabis SEO audit ›