Cloudflare can block QA.tech tests in two different ways. They look similar to testers (“something stopped the page”) but are configured in different places and need different fixes.Documentation Index
Fetch the complete documentation index at: https://docs.qa.tech/llms.txt
Use this file to discover all available pages before exploring further.
Two types of Cloudflare blockers
| 1. Edge blocking (WAF / firewall) | 2. Cloudflare Turnstile (in your app) | |
|---|---|---|
| What you see | The whole page fails to load—403/1020, “Access denied”, JS challenge, or an interstitial before your HTML | Your app loads, but a small “Verify that you are human” widget blocks a form or action |
| Who controls it | You, in the Cloudflare dashboard (WAF, firewall rules, Bot Fight Mode, etc.) | You, in your application code—you add the Turnstile widget and validate tokens on your server |
| Fixed by | WAF custom rules, IP allowlists, verified-bot skips (this page, § WAF) | Test sitekeys, staging config, or server-side bypass—not WAF rules (§ Turnstile) |
WAF and firewall rules
When Cloudflare blocks at the edge, the browser often never receives your app—or gets a Cloudflare error page instead. Configure this in the dashboard under Security → WAF (custom rules, managed rules) and related firewall / bot settings.On the Free plan, you cannot allow a single verified bot—you can only allow all verified bots at once, or match traffic another way. See Free plan limitations below.
Approaches at the edge
| Approach | Best for | Security |
|---|---|---|
Allow all verified bots (cf.client.bot) | Free plan; QA.tech is a Cloudflare-verified bot | High—Cloudflare validates bot IPs |
| User-Agent + verified bot | Free plan; only QATechBot, when verified | Highest for a single bot |
| User-Agent only | Allow only QATechBot by name | Lower—User-Agent can be spoofed |
| IP allowlist | Any plan; works without verified bot status | High when combined with reverse DNS |
Free plan limitations
Cloudflare exposes different bot signals by plan:| Signal | Plan | What it does |
|---|---|---|
cf.client.bot | Free | Boolean: true or false. Matches all verified bots or none. You cannot target one bot. |
cf.bot_management.verified_bot + cf.verified_bot_category | Enterprise | Target specific bot categories or individual bots. |
cf.client.bot when QA.tech traffic is verified.
See Verifying QATechBot traffic for IP allowlists, reverse DNS, and Web Bot Auth.
Option 1: Allow all verified bots (recommended on Free)
Create a WAF custom rule that skips remaining rules for any Cloudflare-verified bot (including QATechBot when verified):Create the rule
Expression:Action: Skip → All remaining custom rulesPlace at: First (top of the list).
Option 2: Allow QATechBot by User-Agent only
If you only want to allow traffic that identifies as QATechBot (and accept Free-plan limits on per-bot verification): The canonical suffix is documented on the QA.tech Bot page.Option 3: User-Agent and verified bot (best security on Free)
Require both the QATechBot User-Agent and Cloudflare verified-bot status: The request must claim to be QATechBot and pass Cloudflare’s verified-bot check. Use this when QA.tech egress is recognized as a verified bot.Enterprise: target specific bots
On Enterprise, you can use Bot Management fields instead of allowing all verified bots:cf.bot_management.verified_botcf.verified_bot_category
Cloudflare Turnstile in your application
Turnstile is a CAPTCHA-style widget you embed in HTML (login, signup, checkout, etc.). It is not configured with WAF custom rules. QA.tech cannot “skip” production Turnstile from the Cloudflare dashboard alone—you need an application-level strategy.What testers usually see
- The rest of the page renders normally.
- A compact “Verify that you are human” (or invisible) challenge sits on the form QA.tech is trying to submit.
- Tests fail on submit or timeout waiting for the widget.
What to do instead
Pick one or combine approaches below. All of these are application changes—not Cloudflare dashboard settings.Bypass Turnstile with a shared header
On staging or other non-production URLs shared with QA.tech, skip rendering and validating Turnstile when a request carries a secret header only your team and QA.tech know.- Store a secret in your environment (e.g.
CAPTCHA_BYPASS_SECRET)—never commit it or expose it in client-side code. - In your app, do not render the widget and skip server-side siteverify when the header matches:
- In QA.tech, send the same header on every request—for example via Custom Headers on a device preset:
| Header | Value |
|---|---|
x-bypass-captcha | Your CAPTCHA_BYPASS_SECRET value |
Allow QA.tech traffic server-side
If you prefer not to use a shared header, bypass Turnstile only when you can confidently identify QA.tech—for example:- Request comes from a QA.tech allowlisted IP
User-AgentcontainsQATechBot(see QA.tech Bot) and you validate IP or use other checks—not User-Agent alone on production
x-bypass-captcha.
Use Turnstile test keys (non-production)
Cloudflare provides dummy sitekeys and secret keys for automated testing—no real challenge, predictable pass/fail.Pick test credentials
For example, sitekey
1x00000000000000000000AA with secret 1x0000000000000000000000000000000AA always validates successfully.Production secret keys reject dummy tokens from test sitekeys. You must use the paired test secret key in the environment where test sitekeys are rendered.
Related
QA.tech Bot
User-Agent format, IP verification, and Web Bot Auth
IP Access
Allowlist QA.tech egress IPs (helps edge blocking, optional app bypass)