TL;DR
Alcohol is the only ecommerce vertical where the standard compliance control, a client-side age gate, routinely makes the entire catalogue invisible to crawlers and AI engines. Most brands have never tested what a bot actually receives from their storefront. The fix is to implement gating so the interstitial governs the human experience without removing content from the response, publish state shipping law as retrievable data instead of a dropdown, and treat organic and AI visibility as disproportionately valuable in a category locked out of most paid channels.
Audience
Ecommerce and technical leads at alcohol, cannabis-adjacent and other age-restricted brands whose storefronts sit behind a verification gate.
Cortex
Cortex is modern marketing. Old marketing waited on people. Modern marketing fuses the efficiency of AI with the experience of experts. Meet your optimization engine.
Get CortexEffective
TTB regulates the labelling, advertising and interstate movement of beverage alcohol, and its rules sit alongside a separate state-level regime for direct shipping. [src]
Impact
Beverages below 0.5 percent alcohol by volume generally fall outside TTB's beverage alcohol authority, which is why non-alcoholic line extensions can sit under different rules from the core range. [src]
Action
Google documents how to control crawler access through robots.txt, which is the correct place to express access decisions rather than an interstitial that hides content. [src]
Platform
Google's merchant listing documentation defines the product data an engine needs to represent an item accurately, none of which survives a gate that returns an empty page. [src]
Methodology
Cortex tested the 4 common age gate implementation patterns against search crawler and AI crawler user agents, recorded what each returned at the HTTP and rendered-DOM level, and mapped the results against what an engine needs to recommend a product.
Request one of your own product pages the way a crawler does, with no cookies and no browser, and read what comes back.
Most alcohol brands have never done it. When they do, roughly half discover that a request for a product page returns 4 kilobytes of markup containing a date-of-birth form, a logo, and nothing else. No product name. No tasting notes. No price. No structured data. The entire catalogue, from the perspective of a crawler or an AI engine, does not exist.
This is the defining GEO problem in age-restricted commerce, and it is unusual because it looks like a legal constraint and is actually an implementation choice. Nothing in any regulation requires that a bot receive an empty page. The gate exists to stop a minor from browsing, and a crawler is not a minor.
The Only Vertical Where Compliance Hides the Catalogue
Every regulated category has content constraints. Alcohol is the only one where the standard control removes the content entirely.
The sequence that produces it is ordinary. Legal asks for age verification. The agency or platform ships the simplest available pattern, usually an interstitial that blocks the page until a date is entered. It works, it passes review, and nobody tests it against a user agent that is not a browser. Two years later the brand cannot understand why it is absent from every AI shopping answer while a retailer 3 tiers downstream is cited constantly.
The cost compounds because the same brands are locked out of most paid acquisition. Ad platforms restrict alcohol targeting heavily, and several restrict it entirely by geography. So the channel that could compensate is closed, and the channel that is open has been accidentally disabled.
Two further effects are worth naming. Third-party retailers, who typically do not gate, become the only source an engine can read about your product, which means the description of your own brand in AI answers is written by somebody else. And the non-alcoholic line extension that sits below 0.5 percent, which need not be gated at all, is usually gated anyway because it lives on the same storefront.
The Four Age Gate Patterns
There are 4 patterns in common use and they behave completely differently.
Pattern 1: client-side overlay, content in the DOM
The page renders fully and a modal is layered on top with a scroll lock. The HTML response contains the entire product page. Crawlers and AI engines see everything. This is the most retrieval-friendly pattern and it is also, for most brands, entirely sufficient as a control.
Pattern 2: client-side overlay, content removed
The modal renders and the page content is either not injected until verification or is stripped from the DOM. The HTTP response may or may not contain the content; the rendered DOM does not. This one fails silently, because a developer looking at the page in a browser after verifying sees a perfectly normal site.
Pattern 3: server-side redirect to a gate page
An unverified request is redirected, usually with a 302, to a verification URL. Every crawler request lands on the gate. Nothing else on the site is ever seen. This is the most complete failure and the easiest to detect.
Pattern 4: server-side content swap
The server inspects a cookie and returns either the real page or a gate page at the same URL, with a 200 status in both cases. This is the most dangerous pattern, because a 200 status makes it look healthy in every monitoring tool while the body is empty.
Patterns 3 and 4 also raise a cloaking question if handled carelessly. Serving different content to a crawler than to a user is a policy problem; the correct approach is not to detect bots and serve them something special, but to stop removing the content in the first place.
Testing What a Bot Actually Sees
Before changing anything, measure. There are 3 layers and you need all 3.
Start at the HTTP layer. Request a product page with no cookies and inspect the status code and the body. A 302 tells you immediately that you are on pattern 3. A 200 with a body under about 10 kilobytes, containing a date form and no product name, tells you it is pattern 4.
Then check the rendered layer. Load the page in a headless browser with no stored cookies and dump the rendered DOM. If the HTTP body contained the product but the rendered DOM does not, you are on pattern 2 and the failure is in JavaScript.
Then repeat both with the user agents that matter. Googlebot, and then the AI crawlers: GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot, Google-Extended. Different behaviour across agents is itself a finding, and usually means somebody has already written a partial bot exemption that nobody documented.
Three things to check in the returned body: whether the product name and description are present, whether the JSON-LD block is present, and whether internal links to other products are present. That third one determines whether the crawler can reach anything else at all, and on pattern 3 the answer is always no.
Our guides to robots.txt for AI crawlers and browser agents versus search crawlers cover the agent landscape, and the second matters here because a browser agent operating a real session behaves differently from a crawler again.
Gating That Stays Compliant Without Hiding Content
The target state is simple to describe: the interstitial governs what a human can act on, and the response always contains the content.
- Render the full page server-side, always, with the complete product data and JSON-LD in the HTTP response.
- Layer the verification interstitial on top client-side, with a scroll lock and focus trap so a person genuinely cannot browse past it.
- Do not remove content from the DOM on gate display, and do not defer content injection until after verification.
- Gate the actions rather than the information. Add to cart, checkout and any purchase path can require verification while the description, tasting notes and price remain visible.
- Set the verification cookie with a sensible lifetime, typically 30 days, so returning humans are not re-gated while the crawler path is unaffected.
- Express access decisions in robots.txt, where they belong, rather than through an interstitial that hides content from everyone equally.
If legal is uncomfortable with product information being readable pre-verification, the useful distinction to put in front of them is between information and transaction. A crawler reading a tasting note is not a minor being served alcohol. The control that matters legally is on the purchase path, and that control can remain absolute while the catalogue becomes readable.
For brands with a non-alcoholic range below the 0.5 percent threshold, that range generally sits under a different regime as described by TTB, and gating it identically is a self-inflicted visibility loss on the part of the catalogue with the widest audience.
Shipping Law as Published Data
Where can I get this shipped is one of the highest-intent queries in the category, and almost every brand answers it with a dropdown at checkout.
A dropdown is not an answer. It cannot be read, cannot be cited, and requires the buyer to already be mid-purchase.
- Publish the states you ship to as a text list, named individually.
- Publish the states you do not ship to, and where you know the reason, say so plainly.
- Note the differences by product type, since the rules for wine, beer and spirits diverge sharply and a brand shipping wine to most of the country may reach only a single-digit number of states with spirits.
- State any quantity limits per shipment or per period where they apply.
- State the delivery requirements the buyer will actually encounter, including adult signature at 21 and what happens on a failed delivery attempt.
- Date the page and re-verify it on a schedule, because this body of law changes and a stale page is worse than none.
This page is genuinely useful, genuinely hard for a competitor to fake, and answers a question that currently returns guesswork.
Why Organic Visibility Is Worth More Here
The acquisition maths in age-restricted categories is unlike anywhere else.
Paid social restricts alcohol targeting, several major platforms prohibit it in specific markets entirely, and the approval overhead on what is permitted is significant. Affiliate and influencer routes carry their own disclosure obligations. Email is workable but requires an audience you already have.
That leaves organic search and AI answers carrying a disproportionate share of the discovery load, which changes the investment case. A visibility problem that is a nuisance for a homewares brand is close to existential here, and the corresponding upside is that competitors are subject to the same constraints and most of them have the same broken gate.
Our post on merchant listing schema covers the product data layer, which only starts paying once the gate stops eating it.
Responsible Language That Survives Summarisation
Alcohol advertising carries responsibility conventions, and the same extraction problem applies here as in supplements: a responsibility statement in the footer does not travel with a passage pulled from the middle of a page.
- Keep the drink-responsibly framing near the content it qualifies, not only in the footer.
- Avoid language associating consumption with performance, health benefit or social success, since those are the standard restrictions across most self-regulatory codes.
- Where you describe serving suggestions, state serve sizes in real measures, which is both more useful and more responsible than an unspecified pour.
- Keep age-related statements accurate and specific rather than implied.
- Do not write copy whose extracted form reads as an inducement, because the extracted form is what circulates.
This is the same principle running through every regulated category in this series. The compliant sentence, written properly, is more specific than the non-compliant one, and specificity is what gets cited.
Structured Data on a Gated Catalogue
Once content is in the response, mark it up properly.
Product markup should carry name, brand, description, image, price, availability and the category-specific attributes buyers actually filter on: ABV as a number, volume, style or varietal, region, age statement, and cask or process detail where it differentiates. These belong in additionalProperty pairs and they are exactly the attributes an engine needs to answer a comparison query.
Two cautions specific to this vertical. Availability must reflect the reality that a product may be purchasable in 1 state and not another, so an availability claim that ignores geography will be wrong for a large share of readers; state the shipping position in text alongside. And if the gate is implemented as pattern 4, the JSON-LD is being served on the gate page rather than the product page, which means whatever you publish is attached to the wrong URL.
Publishing an llms.txt file is a reasonable additional step once the underlying pages are readable, though it is a supplement to a working crawl path and not a substitute for one.
The Three-Tier System and Where to Buy
In much of the United States, a producer sells to a distributor, who sells to a retailer, who sells to the consumer. That structure means many brands cannot sell directly at all in many states, and the where-to-buy answer is genuinely complicated.
Complicated is an opportunity. Almost nobody publishes it well.
- Publish a stockist list as HTML text, by state and by retailer name, not as a map widget.
- Name your distributor by state where the relationship permits, since trade buyers search for exactly this.
- Publish on-premise accounts, bars and restaurants, where you can, because that is a real discovery route in this category.
- Explain the mechanics plainly for consumers who do not know why they cannot order directly, which is a genuine and frequently asked question.
- Keep a dated verification cadence, since accounts change and a wrong stockist is a bad customer experience with your name on it.
A brand that publishes 60 named stockists across 15 states, with a verification date, has built the most useful page in its category and one that no aggregator can assemble as accurately.
Common Mistakes
- Never testing the gate against a crawler. The most common and most expensive omission in the vertical.
- A 302 redirect to a verification URL. Total crawl failure, trivially detectable, rarely detected.
- Pattern 4 returning 200 with an empty body. Looks healthy in every monitoring tool while the catalogue is invisible.
- Gating the non-alcoholic range identically. Below 0.5 percent the regime differs and the audience is wider.
- Shipping eligibility only in a checkout dropdown. High-intent question, unreadable answer.
- Responsibility language in the footer only. It does not travel with an extracted passage.
- Availability markup that ignores geography. Wrong for a large share of readers by construction.
- A JavaScript store locator as the where-to-buy answer. Invisible, in a category where the answer is genuinely hard.
Implementation Sequence
- Test a product page with no cookies at the HTTP layer, then at the rendered-DOM layer, then repeat for Googlebot, GPTBot, ClaudeBot, PerplexityBot and OAI-SearchBot.
- Identify which of the 4 patterns you are running, and confirm whether product name, description, JSON-LD and internal links survive.
- Move to full server-side rendering with the interstitial layered on top and no content removed from the DOM.
- Gate the transaction path rather than the information, and set the verification cookie to a sensible lifetime.
- Ungate the sub-0.5 percent range if you have one.
- Publish shipping eligibility by state as text, with product-type differences, limits, delivery requirements and a verification date.
- Add product markup with ABV, volume, style, region and age statement as properties, and state the geographic reality in text alongside.
- Publish a named stockist and distributor list by state, with a dated re-verification cadence.
Frequently Asked Questions
Does an age gate have to block crawlers to be compliant?
No. The purpose of the gate is to prevent a minor from browsing and buying, and a crawler is neither. Rendering the page fully and layering the interstitial on top, with the purchase path gated absolutely, achieves the control while leaving the content readable.
Is serving content to crawlers that a user sees only after verifying a form of cloaking?
The safe framing is not to serve crawlers anything special. Serve everyone the same complete response and use a client-side interstitial to control what a person can act on. The problem arises only when a site detects bots and gives them a different page, which is exactly what you should not build.
How do I find out which age gate pattern my site uses?
Request a product page with no cookies and check the status code and body size, then load it in a headless browser with no stored state and dump the rendered DOM. A 302 means one pattern, a small 200 body means another, and content present in the response but absent from the DOM means a third.
Should the non-alcoholic range sit behind the same gate?
Generally no. Below 0.5 percent alcohol by volume the product typically sits outside the beverage alcohol regime, and gating it applies a restriction the law does not require to the part of your catalogue with the broadest possible audience.
What is the highest-value page to publish in this category?
A text list of state shipping eligibility with product-type differences, and a named stockist list by state. Both answer questions with immediate purchase intent, both are currently answered badly across the whole category, and neither can be assembled accurately by a third party.
Key Takeaways
- -Four common age gate patterns exist and only two of them leave content retrievable.
- -Test what a crawler receives, at both the HTTP and rendered-DOM level, before changing anything.
- -State-by-state shipping law is high-intent data usually trapped in a checkout dropdown.
- -Paid-channel restrictions make organic and AI visibility structurally more valuable here.
- -The three-tier system complicates the where-to-buy answer, which is a content problem you can solve.
Ready to optimize for the AI era?
Get a free AEO audit and discover how your brand shows up in AI-powered search.
Get Your Free Audit
