Skip to content

Your Age Gate is Showing Google a Different Page

Nobody sets out to serve Google a different page than their customers. On cannabis sites it happens anyway, usually through a 21+ gate somebody built to be careful.

The same dispensary page served two ways: a visitor sees an age gate and the products behind it, the crawler sees only the gate
The short answer

Because Googlebot holds no cookies, so a gate that depends on one is a permanent wall rather than a one time interruption. Every crawl is a first visit, forever.

SubjectAge verification Part ofCan Google read the site at all
In this article

Open Google and search site: followed by your own domain.

If your site has forty pages and that search returns three, you do not have a content problem or a link problem. Something is stopping the crawler at the door, and on a cannabis site it is nearly always the age gate.

This is the second most expensive technical fault I find on dispensary websites, after invisible menus. It is also the one operators feel worst about, because the gate was built out of caution. Somebody was trying to do the right thing.

Three ways an age gate is built, and what Googlebot receives from each A server side redirect sends the crawler to a gate page. A cookie wall returns an empty shell. A client side overlay returns the full page with the gate drawn on top. WHAT GOOGLEBOT ACTUALLY RECEIVES SERVER SIDE REDIRECT 302 to /age-check/ Request:/menu/ or any URL 302 → /age-check/ every page, every crawl The crawler never reaches your content. Your whole site collapses into one indexed URL. site: shows 1 to 3 results COOKIE WALL Content held back Request:no cookie present 200 OK, empty shell gate markup only Googlebot holds no cookies, so every crawl is a first visit and never passes the wall. Coverage: soft 404s CLIENT SIDE OVERLAY Drawn on top Request:/menu/ or any URL 200 OK, full page gate painted over it Same HTML for everyone. The gate is a visual layer, not a condition on the response. Compliant and crawlable DispensaryRank
The same legal requirement, three builds, three completely different outcomes in search.

The mechanic almost nobody explains

Googlebot does not keep cookies. It does not hold a session, it does not remember a previous visit, and it does not carry anything from one crawl to the next.

Every single crawl is a first visit. Forever.

For a customer, an age gate is a one time interruption. They confirm, a cookie is set, and they never see it again. That experience is why nobody on your team has noticed a problem: they confirmed their age eighteen months ago and the gate has been invisible to them since.

For a crawler, that same gate is a permanent wall. It arrives with no cookie, gets stopped, stores nothing, and arrives with no cookie again tomorrow.

Googlebot has no session, so every crawl is a first visit A customer confirms their age once and a cookie remembers it. Googlebot stores nothing, so it arrives as a new visitor on every request forever. WHY THE GATE NEVER OPENS FOR THE CRAWLER A CUSTOMER Confirms once Visit 1: sees the gate, confirms Visit 2: cookie remembers, straight in Visit 3 onward: never asked again GOOGLEBOT Never remembers Crawl 1: sees the gate, stores nothing Crawl 2: sees the gate again Crawl 3 onward: the same, forever If your gate depends on a cookie or a session, the crawler is permanently stuck at visit one. DispensaryRank
Your team stopped seeing the gate long ago. The crawler never stops seeing it.

That single fact explains almost everything that goes wrong here. If your gate depends on a cookie or a session to decide what to serve, the crawler is stuck at visit one indefinitely.

The three builds, and why only one of them is safe

A server side redirect sends every request to /age-check/ until the visitor confirms. This is the most damaging version, because your entire site collapses into a single indexed URL. Google finds forty pages, gets redirected forty times to the same destination, and concludes you have one page.

A cookie wall returns a normal 200 response but holds the content back until the cookie exists. Less obviously broken, and in some ways worse, because everything looks healthy from the outside. Search Console will start reporting soft 404s, which is Google’s way of saying the page technically loaded and contained nothing.

A client side overlay loads the full page, then paints the gate on top of it. The server does not care who is asking, so the crawler and the customer receive identical HTML. This is the only version that is both compliant and crawlable. The age gate is one of several faults in the delivery layer that stop a dispensary site at the door, and the others are worth ruling out in the same sitting.

There is no state in the United States that requires the first two. The regulatory requirement is that you make a reasonable effort to verify age before someone views the content. An overlay does that. The over-engineering comes from fear rather than from any rule, and it is expensive fear.

The fix that makes it worse

At this point somebody suggests letting Googlebot through. Detect the crawler by its user agent and skip the gate for it.

That is cloaking. Not similar to cloaking, not a grey area, but the textbook definition: serving different content to search engines than to users based on who is asking.

Where the cloaking line sits Serving the same HTML to everyone is safe. Detecting Googlebot and serving it something different is cloaking, even when the intention is to be helpful. THE LINE PEOPLE CROSS BY ACCIDENT SAFE One response for everyone The server does not care who is asking. Customer and crawler receive identical HTML. What differs is only what the browser paints on top of it. CLOAKING A different response for Googlebot “Let the crawler skip the gate” is a user agent check, and a user agent check that changes the response is cloaking by definition, whatever the intention was. DispensaryRank
The distinction is not about intent. It is about whether the server changes its answer based on who asked.

Google does not weigh your intentions here, and it verifies user agents against its own IP ranges specifically to catch this. The penalty for cloaking is severe and it is applied at domain level, which for a chain means every store at once.

The uncomfortable part is that this fix usually works for a while. Rankings recover, the team concludes the problem is solved, and the exposure sits quietly on the site until somebody files a spam report or an algorithmic sweep finds it. I have seen it survive two years. Two years is not a green light, it is a longer fuse.

Do not whitelist Googlebot to get past your own gate.

If the crawler needs an exception to see your site, the gate is built wrong. Fix the gate rather than building a special door beside it.

How to check yours in three minutes

Three tests, in order of how much they tell you.

One: the site colon search. Search site:yourdomain.com. Count the results against the number of pages you know you have. A large gap is the signal. One or two results when you have dozens of pages is close to conclusive.

Two: Search Console coverage. Open the Pages report and look for a spike in “Page with redirect”, or a cluster of “Soft 404”, or “Crawled, currently not indexed” across pages you know have content. Each of those maps to one of the three builds above.

Three: view source with a clean session. Open a private window, go to a menu page, and use view source rather than Inspect Element. Inspect shows the live DOM after scripts run, which is why the page always looks fine there. View source shows the HTML as delivered. If your products are in Inspect but not in view source, the gate is holding content back.

That third test is the same principle behind checking whether your menu reaches the index, and the two faults compound. A site with an iframe menu behind a cookie wall has two independent reasons Google cannot see its products, and fixing either one alone changes nothing.

Check it in about twenty seconds

The site checker fetches your page the way a crawler does, with no cookies and no session, and reports whether an age gate is blocking the response, redirecting it, or sitting harmlessly on top.

Run the dispensary site checker

What it looks like on a real account

A multi-location operator came to me because organic traffic had been flat for eighteen months despite steady content spend.

Their site: search returned two results. Two, for a site with more than two hundred URLs.

The gate had been rebuilt during a redesign three years earlier, and the developer had made it a server side redirect because that felt more rigorous than an overlay. Nobody on the marketing team had ever run a site colon search, and no report they received would have surfaced it.

The content they had paid for over those eighteen months existed. It was well written. Google had simply never been allowed to read any of it.

How to build it properly

1. Serve the full page to everyone, always. No redirect, no conditional response, no user agent check. The HTML that leaves your server is identical whoever asked for it.

2. Draw the gate as an overlay after the page has loaded. A fixed position layer over the content, with the body scroll locked while it is open. Focus should move into the dialog and stay trapped there until it is dismissed, which is both an accessibility requirement and the behaviour a regulator would expect.

3. Store the confirmation client side. A cookie or local storage flag read on subsequent page loads. Because it is read in the browser rather than checked on the server, the crawler is never affected by its absence.

4. Keep the gate out of the indexable content. The overlay markup should not contain your headings or product text. If a search result ever shows “You must be 21 or older” as the meta description, the gate has become the page’s most prominent content.

The part worth saying to your developer

The conversation usually stalls on a misunderstanding, and it is worth naming directly. Your developer is not being obstructive. They built a server side gate because server side sounds stronger, and in most contexts it would be.

The framing that resolves it: age verification is a display requirement, not an access requirement. You are required to check before someone views the content, and an overlay checks before they view it. You are not required to withhold the file from the network.

Once that lands, the rebuild is usually half a day.

If you take one thing away

Run site:yourdomain.com today. If the number is far smaller than the number of pages you have, stop reading about content and go and look at your age gate.

Check this on your own site with the Site Check

It runs in your browser, needs no signup, and tells you whether the problem described above applies to you. If it does, the fix is named rather than quoted.

Open the Site Check