WordPress + WooCommerce · Compliance

A Yes / No popup is
not age verification.

AgeWall enforces age gating on the server — restricted content is never sent to unverified visitors. That part is free. Pro adds per-jurisdiction rules, real ID checks, WooCommerce blocking and an audit log.

The free plugin is on the WordPress.org directory — install it from your own dashboard.

Built for UK Online Safety Act, US state laws & EU — alcohol, vape, cannabis & adult content.

The problem

The law changed. Your age gate didn't.

Every popular age plugin hides restricted content with CSS or JavaScript. The content is still in the page source — one "View Source" and it's there. That was fine when nobody was watching. In 2025–2026, regulators are.

Incumbent · client-side

Hidden, not withheld

<!-- sent to EVERY visitor, verified or not -->
<div class="restricted" style="display:none">
  <h1>Buy Cask-Strength Whisky</h1>
  <button>Add to cart</button>
</div>
  • ✕ Content ships in the HTML — trivially bypassed
  • ✕ Same age for every country, no jurisdiction logic
  • ✕ No record that verification ever happened
AgeWall · server-side

Withheld at the source

// response to an UNVERIFIED visitor
<div class="agewall-gate">
  <h2>Confirm your age to continue</h2>
  // restricted markup: [ withheld ]
</div>
  • ✓ Protected markup never leaves the server unverified — free
  • ✓ Per-country min age & required method, first match wins
  • ✓ Every attempt written to an audit log
How enforcement works

The decision lives on the server.

Verification state is a signed, server-verified token — not a cookie you can flip in DevTools. Follow one restricted request down each lane and watch where the content stops. This is the free plugin.

What's inside

A compliance engine, not a widget.

Six systems working together — enforcement, jurisdiction, verification, commerce, gating and evidence. Enforcement and gating are in the free plugin; the rest is Pro.

01

Server-side enforcement

Overlay, hard redirect, or content withholding. Protected markup is stripped before the response is built.

02

Jurisdiction rules

GeoIP-resolved country sets, each with its own min age and required method. Ordered rules, first match wins.

03

Real verification

Confirmation, date of birth, ID document upload with manual review, plus Yoti and VerifyMyAge integrations.

04

WooCommerce guards

Flag products or categories as restricted. Add-to-cart and checkout are blocked server-side until verified.

05

Content gating

Whole-site splash, per page / post / category, a Gutenberg block, and an [agewall] shortcode.

06

Legal audit log

Every attempt recorded with hashed identifiers, jurisdiction and result. GDPR retention purge and privacy erasers built in.

Verification methods

Five methods. One interface.

Pick the assurance each rule needs — from a soft confirmation to a government-ID check. Confirmation and date of birth ship free; ID document, Yoti and VerifyMyAge are Pro. Every method is a pluggable provider, so your developers can add more.

M1

Confirmation

"I am over N." The softest gate, when a jurisdiction only requires a prompt.

Free · no 3rd party
M2

Date of birth

Computed against the applicable min age. No third party, no PII stored raw.

Free · no 3rd party
M3

ID document

Upload an ID image → status pending → admin approves or rejects inline. No third party.

Pro
M4

Yoti

Age estimation and digital ID. You connect your own Yoti account.

Pro · bring your keys
M5

VerifyMyAge

Regulated ID verification for strict jurisdictions. Your VerifyMyAge credentials.

Pro · bring your keys
Jurisdiction engine · Pro

One store. Every country's rules.

The same catalogue can demand a hard ID check in one country, a date of birth in another, and a simple confirmation everywhere else. AgeWall Pro resolves the visitor's country, then walks your ordered rules until one matches.

  • ◆GeoIP without a mandatory API call — reads CDN country headers, with a bundled fallback.
  • ◆Scoped rules — whole-site, a content set, or a WooCommerce category / product.
  • ◆Search-engine handling — an explicit choice to allow known crawlers. Also in the free plugin.
MatchMethodMin age
US · tobaccodate of birth21
GB · adultYoti ID18
DE · alcoholdate of birth16
Any (default)confirmation18

↓ evaluated top to bottom · first match wins

Age-restricted · 21+
Reserve Cask-Strength Bourbon
$189.00 · restricted category
Verify your age to add to cart
WooCommerce · Pro

Restricted products that actually stay restricted.

The WooCommerce module loads only when Woo is active. Mark a product or a whole category age-restricted, and the guard blocks the transaction — not just the view.

  • ◆Add-to-cart & checkout blocking enforced server-side for restricted items.
  • ◆Checkout DOB field and blocking by shipping country.
  • ◆Blur or badge on restricted cards, backed by a real gate on the product page.
Live demo

Try every gate on a real site.

A working WordPress + WooCommerce install. Trip the gates, block a checkout, then open the admin to see the rules and the audit log fill up. Start at the demo home, or jump straight in below.

Verified once and want to try again? The front-end Reset age verification button replays any gate.

Free vs Pro

The wall is free. The paperwork is Pro.

Server-side withholding — the thing every other age plugin gets wrong — is in the free plugin, not behind a paywall. AgeWall Pro is for sites that also have to prove it: per-country rules, real ID checks, WooCommerce and evidence.

AgeWall

Free

A complete, genuinely useful age gate. Most sites will never need more than this.

  • ✓Server-side withholding — restricted markup never reaches an unverified visitor.
  • ✓Age confirmation & date of birth — both built in, no third party.
  • ✓Gate anything — whole site, per page or post, the [agewall] shortcode, or the Gutenberg block.
  • ✓Appearance — colours, logo, copy and gate mode.
  • ✓Remember duration — how long a pass lasts before the gate returns.
  • ✓Search-engine handling — allow known crawlers as an explicit choice.
Get AgeWall free on WordPress.org

Listed on WordPress.org as Webkoding AgeWall — installs and updates from your dashboard.

AgeWall Pro

$39

Everything in the free plugin, plus the compliance engine — for regulated goods and audited jurisdictions.

  • ◆Jurisdiction rules — per-country minimum age and required method, ordered, first match wins.
  • ◆ID document upload — with pending status and admin review, approve or reject inline.
  • ◆Yoti & VerifyMyAge — regulated ID providers, connected with your own keys.
  • ◆WooCommerce — age-restricted products, with add-to-cart and checkout blocked server-side.
  • ◆Audit log — every attempt recorded, with GDPR retention and privacy erasers.
Get AgeWall Pro — $39

$39 — one site, one year of updates. No metered verifications, no monthly platform fee.

The free plugin is fully useful on its own. Pro is an upgrade, not the unlock.

Questions

Before you install.

Is the free plugin a crippled trial?

No. Server-side withholding — the part that actually makes an age gate real — is in the free plugin, along with confirmation and date-of-birth verification, every gating surface (whole site, per page or post, the [agewall] shortcode, the Gutenberg block), appearance, remember duration and search-engine handling. A great many sites need nothing else. Pro exists for sites that must also satisfy per-country rules, check ID documents, gate WooCommerce, or produce an audit trail.

Is AgeWall on the WordPress.org plugin directory?

Yes. It is listed as Webkoding AgeWall, so you can install it from Plugins → Add New in your own dashboard and take updates the normal way. Pro installs beside it as a separate plugin.

Do I need my own Yoti or VerifyMyAge account?

Yes — for the ID-provider methods you bring your own keys, exactly like connecting a payment gateway. AgeWall Pro ships the integration; you paste your Yoti or VerifyMyAge credentials in the Providers tab and you're live. The methods that need no third party at all are confirmation and date of birth (free) and document upload with manual review (Pro).

How is this different from the age-gate plugins already out there?

Those hide restricted content with CSS or JavaScript — it still ships in the page source and is trivially bypassed. AgeWall's decision is authoritative on the server: unverified visitors never receive the protected markup. That difference is in the free plugin. Pro adds jurisdiction rules, real ID verification and an audit log, and it stops being a popup and becomes a compliance engine.

Will it slow my site down or break SEO?

The whole-site gate has an SEO-friendly overlay mode, and you can allow known search engines to bypass gating as an explicit, logged choice. GeoIP resolves from CDN headers with a bundled fallback, so there's no mandatory external API call on every page load.

Does it require WooCommerce?

No. The WooCommerce module is a Pro feature, it is feature-detected, and it only loads when Woo is active. On a plain WordPress site the free plugin still gives you whole-site gating, per-page content locks, the Gutenberg block and the [agewall] shortcode.

What exactly is stored, and is it GDPR-safe?

The free plugin keeps no verification records. A passing visitor gets a signed, HttpOnly cookie and that is all — no table is created and nothing is written about them. The one exception is rate limiting: a hashed IP counts failed attempts for ten minutes and then expires.

Pro adds the audit log, because compliance means being able to show your work. It records the timestamp, method, result, jurisdiction, target content and a hashed visitor identifier — never raw PII. Retention is configurable with an automatic purge, uploaded ID documents are stored out of the web root under a keyed-hash filename and deleted on purge or rejection, and the plugin registers WordPress privacy exporters and erasers.

Can my developer add a verification method we need?

Yes. Every method implements a documented Agewall\Providers\ProviderInterface and registers itself on the agewall/register_providers action. Adding a new method — a regional ID scheme, a credit-card check — means writing one adapter class.

Ship compliant

Stop hiding content.
Start withholding it.

Server-side enforcement is free. Jurisdiction rules, ID verification, WooCommerce and the audit log are $39 — one site, one year of updates.

Or open the live demo first.