Webflow's platform rules
Account-level rules that Webflow applies to all sites. They run before anything you configure, so a request they block never reaches your rules.
Webflow's Web Application Firewall checks requests to your custom domains at the edge, before your site loads. Follow one through, then send your own.
Every visit to a custom domain on Webflow takes the same route. Scroll, and this one makes the trip.
GET /pricingSomeone opens www.yoursite.com/pricing. The request carries their IP address, a User-Agent, and the path.
cdn.webflow.comYour custom domain points at Webflow's global edge network. The request arrives at a nearby location, and the firewall runs there.
Account-level security rules apply to every Webflow site. They run before yours and can block a request on their own.
Your site's rules run in a fixed order. If one blocks the request, the visitor gets a 403 Forbidden response and never reaches your site.
200 OKA request that clears every check is served from your published site, exactly as it would be without a firewall.
After Webflow's platform rules, your rules run in a fixed sequence. You can't reorder them, so the order is worth knowing by heart.
Account-level rules that Webflow applies to all sites. They run before anything you configure, so a request they block never reaches your rules.
With Allow verified bots on, Cloudflare-verified bots like Googlebot and GPTBot bypass your site's rules. Every other request moves on to the IP check.
Match single IPv4 or IPv6 addresses, or CIDR ranges. Entries are read top to bottom and the first match wins: BLOCK ends the request with a 403, ALLOW skips the rest of the IP list.
{ "ips": [
{ "ip": "203.0.113.4", "mode": "BLOCK" },
{ "ip": "198.51.100.0/24", "mode": "BLOCK" }
] }Match the visitor's country by its two-letter ISO code. BLOCK denies the countries you list. ALLOW denies every country you don't.
{ "countryList": ["DE", "AT", "CH"], "mode": "ALLOW" }An Autonomous System Number names the network a request comes from, like a cloud host or an ISP. Blocking hosting networks stops a lot of scraper traffic, and a network is much harder to fake than a User-Agent.
{ "asnList": [16509, 14061, 24940], "mode": "BLOCK" }Amazon (16509), DigitalOcean (14061), Hetzner (24940).
Match text anywhere in the User-Agent header, ignoring case. Patterns run top to bottom and the first match wins, so put your exceptions first.
{ "patterns": [
{ "pattern": "Googlebot", "mode": "ALLOW" },
{ "pattern": "bot", "mode": "BLOCK" }
] }A User-Agent is whatever the client says it is. Anyone can claim to be Googlebot, which is why verified bots get their own check.
There's no catch-all at the end: a request nothing blocked is served normally. And an ALLOW never ends the check early. A request your IP list allows still faces the country, ASN, and User-Agent rules.
Every rule can block or allow. They sound like mirror images. On country and network rules they're not: an ALLOW list turns away everyone you didn't name.
9of 60 visitors blocked
BLOCK turns away only the countries you list. Everyone else gets through.
Allow lists are powerful and easy to get wrong. If your team, your agency, or your uptime monitor sits outside the list, they're locked out too. When in doubt, use BLOCK.
A rule that blocks every User-Agent containing "bot" catches a lot of junk. It would catch Googlebot too, unless verified bots get through first.
Allow verified bots
Cloudflare-verified bots like Googlebot or GPTBot skip your rules. Turning this off can affect search indexing.
{ "pattern": "bot", "mode": "BLOCK" }Googlebot
Mozilla/5.0 (compatible; Googlebot/2.1)
GPTBot
Mozilla/5.0 (compatible; GPTBot/1.2)
"Googlebot" on a cloud server
Mozilla/5.0 (compatible; Googlebot/2.1)
Scraping script
python-requests/2.32
The scraping script never says "bot", so this rule lets it through. Pair User-Agent rules with an ASN rule for scrapers on cloud networks.
The practical edges: which pages a rule covers, which domains it protects, how much you can fit, and how fast a change goes live.
Add a paths list to a country, ASN, or User-Agent rule and it only runs there. A path covers itself and everything under it: /promo matches /promo/spring, but not /promotions.
{ "countryList": ["DE", "AT", "CH"],
"mode": "ALLOW",
"paths": [{ "path": "/promo" }] }Rules apply to every custom domain connected to the site. Your webflow.io staging domain isn't covered.
All your rules share a single 4KB configuration budget. Ranges and networks go further than long lists of single addresses.
Saved changes can take up to 5 minutes to reach the edge. You don't need to publish your site.
403
A blocked visitor gets an HTTP 403 Forbidden response instead of your page.
Pick a visitor, change the rules, and send. The simulator follows the same order and matching as the real firewall. Every visitor here is a made-up example.
Ready when you are
Pick a visitor, then send the request.
{ "ips": [{ "ip": "203.0.113.4", "mode": "BLOCK" }] }0 bytes of the 4 KB budget
Open Site settings for the site you want to protect.
Go to Security.
Choose Add rule, pick a rule type, and edit its JSON.
Save. Changes reach the edge within 5 minutes, and you don't need to publish.
Your site stays public. Now it's public on your terms.
Back to the simulator