More fixes

Your site shows Cloudflare "Error 1020: Access denied"

The page says "Error 1020 Ray ID: ... Access denied. This website is using a security service to protect itself from online attacks." On your own site this is not Cloudflare being down. A firewall rule in your Cloudflare account matched the visitor and blocked them. Usually it is a rule written to stop bots or one country that also catches real customers, payment callbacks, or you. Here is how to find the exact rule and narrow it.

What the visitor sees

https://maplewoodflorist.example/checkout/

What the checks found


  

Find the rule that blocked them

  1. Get the Ray ID from the error page (bottom line, like 8a1f2c3d4e5f6789). Ask the customer for a screenshot if it was them.
  2. Open Cloudflare > your domain > Security > Events and add the filter Ray ID equals that value. The event names the service (Custom rules, IP Access rules, Rate limiting, Zone lockdown, User agent blocking) and the exact rule.
  3. Read what matched: the event shows the country, the IP and its network (ASN), the user agent and the path. That tells you why a real person fit a rule meant for bots.
  4. No Ray ID? Filter Events by Action = Block and the last 24 hours. A rule blocking many visitors from one country, one mobile network, or one path like /wp-admin/admin-ajax.php stands out quickly.
  5. Is it really your account? If the domain is not in your Cloudflare dashboard at all, the 1020 comes from the owner of the site you are visiting, and only they can change it.

The fixes, by rule

  1. A country block catching customers: travellers, people near a border, and mobile networks or VPNs that route through another country hit it. Change the action from Block to Managed Challenge, so a person passes a quick check and a script does not.
  2. A block on /wp-admin or wp-login.php that also matches admin-ajax.php: many front-end features (cart, forms, filters) call admin-ajax, so they break for everyone. Add and not http.request.uri.path eq "/wp-admin/admin-ajax.php" to the rule, or limit it to wp-login.php only.
  3. A block that catches payment or shipping callbacks (Stripe, PayPal, Square, WooCommerce webhooks): orders stay "pending" while the card was charged. Add a Skip rule above it for those paths, or for the provider's published IP ranges.
  4. An IP Access rule blocking a whole network (ASN): one bad IP led to blocking a provider that real visitors share. Remove the ASN entry and block the single IP, or use a Managed Challenge on the ASN.
  5. A user-agent or "known bots" rule that blocks Googlebot or your uptime monitor: exclude cf.client.bot (verified bots) from the rule so search engines can still crawl the site.
  6. You blocked yourself: add your own IP as Allow under Security > WAF > Tools (IP Access rules), then fix the rule that matched you.

What you see, what it means, what it needs

What you seeWhat it meansUsual fix
Only visitors abroad or on one mobile network get 1020A country or ASN block matches themManaged Challenge instead of Block
Cart, forms or filters fail; the page itself loadsA /wp-admin block also covers admin-ajax.phpExclude admin-ajax.php from the rule
Card charged but order stays pendingThe payment webhook is blockedSkip rule for the callback path
Search Console says pages are blockedA bot rule blocks Googlebot tooExclude verified bots
You see it on your own siteYour IP matches one of the rulesAllow your IP, then narrow the rule

What not to do

Most cases are one rule that is a little too wide, found from the Ray ID in a minute. If you cannot find it or the site needs the rules rewritten, that is what the box below is for. Related: Cloudflare error, 403 Forbidden, 429 Too many requests, WooCommerce checkout.