What to Check First

Before diving into the 7 causes below, do a 60-second sanity check:

  1. Is the experiment in Running state? (Not Draft, Paused, or Concluded)
  2. Is the Optimizely snippet present on the target page? (Check DevTools > Network, filter by your project ID)
  3. Is traffic allocation set above 0%?

If all three check out, work through the causes below systematically.

The 7 Most Common Reasons an Optimizely Experiment Shows Zero Visitors

Cause 1: URL Targeting Doesn't Match the Actual URL

This is the #1 reason experiments don't bucket users. Optimizely's URL targeting uses string matching, and it is unforgiving about exact matches.

Common mismatches:

  • Trailing slash: example.com/pricing vs example.com/pricing/ — these are different URLs to Optimizely
  • Query parameters: Your URL rule targets example.com/checkout but users land on example.com/checkout?utmsource=email — if your rule uses exact match, the query param breaks it
  • Case sensitivity: Example.com/Pricing vs example.com/pricing
  • www vs. non-www: www.example.com vs example.com
  • HTTP vs. HTTPS: Less common but still happens

How to diagnose: In your browser's address bar, copy the exact URL of the page where the experiment should run. Compare it character-by-character to your URL targeting rule in Optimizely.

Fix: Use "simple match" or "substring match" instead of "exact match" when query parameters are present. For trailing slash issues, add both variants as OR conditions.

**Pro Tip:** Always use "contains" match for the core path and add explicit exclusions if needed, rather than exact match. This handles the inevitable URL variations users arrive with.

Cause 2: Audience Conditions Are Too Narrow or Misconfigured

If your experiment targets a specific audience, the conditions must actually match your visitors. Common issues:

  • Cookie-based conditions where the cookie doesn't exist for most users
  • AND logic instead of OR: device type = mobile AND location = California is far narrower than it looks — only mobile users in California qualify
  • Custom attribute values that don't match: If you're passing custom attributes via the Optimizely SDK, the attribute key or value may not match the condition exactly (case-sensitive)
  • Third-party data conditions: Audience conditions based on DMP data that isn't populating correctly

How to diagnose: Temporarily set the audience to "Everyone" and check if visitors start appearing. If they do, the audience conditions are the culprit.

Fix: Widen the audience temporarily to diagnose, then rebuild the conditions carefully. Use the "Preview" mode with a specific audience override to verify a single user qualifies.

Cause 3: Traffic Allocation Set to 0% or Experiment in Wrong State

This sounds too obvious, but it happens constantly. Check:

  • Traffic allocation slider is above 0% (the slider looks like it's at a number but may actually be 0)
  • Each variation has weight above 0%
  • Experiment status is "Running" — not "Draft" (no traffic), "Paused" (traffic stopped), or "Concluded"

How to diagnose: Go to Optimizely dashboard > Your experiment > Settings. Verify traffic allocation and variation weights. Verify experiment status in the top-right of the experiment view.

Cause 4: JavaScript Error Preventing Optimizely from Activating

A JavaScript error anywhere on the page before Optimizely executes can halt execution and prevent any experiment from running. This is particularly insidious because the experiment appears to be running (snippet is on the page, status is Running), but an uncaught exception in another script stops Optimizely mid-execution.

How to diagnose: Open DevTools > Console. Reload the page. Are there any red JavaScript errors? Particularly any that appear before the Optimizely snippet executes?

Fix: Address the underlying JavaScript errors. If they're from a third-party script you can't control, ensure Optimizely loads before that script.

**Pro Tip:** In the DevTools Console, run window.optimizely.get('state').getExperimentStates() after page load. If this returns an empty object or throws an error, Optimizely hasn't initialized properly. If it returns states with your experiment but isActive: false, the experiment conditions aren't being met.

Cause 5: Manual Activation Mode Without an Activate Call

Optimizely experiments can be set to "manual activation" mode, which means the experiment only activates when your code explicitly calls the activation function. If this mode is enabled but the activation code was never added — or was removed — the experiment runs but never buckets anyone.

How to diagnose: In Optimizely > Experiment Settings, check "Activation Mode." If it says "Manual," you need an activate call with your experiment ID in your page code.

Fix: Either switch to automatic activation or add the activate call to the appropriate place in your codebase.

Cause 6: CDN Caching Serving a Version Without the Snippet

If your site is behind a CDN (Cloudflare, Fastly, Akamai, CloudFront), cached HTML versions of your page may not contain the Optimizely snippet. This happens when:

  • The snippet was added after pages were cached
  • Cache TTLs are long and the snippet wasn't present when pages were first cached
  • Edge caching is serving different versions based on headers

How to diagnose: Use curl with a cache-bypassing header to fetch the raw page and check if the snippet is present.

Fix: Purge your CDN cache after adding or changing the Optimizely snippet. Set appropriate cache TTLs and ensure cache-busting works for your use case.

Cause 7: Browser Extension or Ad Blocker Blocking the Snippet

uBlock Origin, Privacy Badger, and many corporate security tools block Optimizely's CDN domain. This means some subset of users — including you, when debugging — will never bucket into experiments.

How to diagnose: Open an incognito window with all extensions disabled. Navigate to your experiment page. Does it work?

Fix: This is a permanent condition for some user segments, not a bug in your implementation. Typically 5–20% of users have ad blockers that block A/B testing tools. Acknowledge this in your experiment planning — your results represent opted-in users, not your full population.

**Pro Tip:** If your testing team can't see experiments because of corporate network filtering or browser extensions, set up a dedicated testing browser profile with extensions disabled and corporate proxy bypassed. This saves hours of confused debugging.

The Diagnostic Workflow: Working Through Each Cause in Order

Work through these in sequence — earlier checks eliminate later ones:

  1. Verify experiment status is "Running" and traffic allocation > 0%
  2. Confirm the Optimizely snippet loads on the target page (DevTools > Network)
  3. Copy the exact URL from your browser, compare to URL targeting rule
  4. In DevTools Console, check for JavaScript errors on page load
  5. Run window.optimizely.get('state').getExperimentStates() — see if your experiment appears
  6. Check activation mode — if Manual, verify activate() is being called
  7. Test in incognito with all extensions disabled
  8. Purge CDN cache and retest

Using Optimizely's Built-In Diagnostic Tools

Optimizely provides a diagnostic log accessible in the browser console. Enable verbose logging by pushing a log command to the optimizely queue. This outputs information about which experiments are evaluating, which conditions pass or fail, and why users are or aren't being bucketed. It's the fastest way to pinpoint audience condition failures.

Also useful: the Optimizely X browser extension (available for Chrome) shows in real-time which experiments are active on any page, their current state, and which variation a given user is bucketed into.

QA Checklist Before Every Experiment Launch

Run this before clicking "Start" on any experiment:

  • Experiment status: Running (not Draft)
  • Traffic allocation: >0% total, each variation >0%
  • URL targeting: tested against exact real URLs including query params
  • Snippet confirmed on target page via DevTools
  • Audience conditions: tested with audience override in Preview mode
  • Activation mode: Auto (or confirm manual activate() call is in place)
  • CDN cache purged after any snippet changes
  • Tested in incognito with extensions disabled
  • Console is error-free on target page

What to Do Next

  1. Start with the 60-second sanity check at the top of this article
  2. Run window.optimizely.get('state').getExperimentStates() in DevTools Console — this alone will often tell you exactly what's wrong
  3. Work through the diagnostic workflow in order
  4. Use the QA checklist for every future launch to prevent this issue from recurring

If your experiment is running but showing unexpected results — large traffic swings, unusual split distributions, or suspiciously high conversion rates — check out the related debugging guides in the experimentation section.

Share this article
LinkedIn (opens in new tab) X / Twitter (opens in new tab)
Atticus Li

Experimentation and growth leader. Builds AI-powered tools, runs conversion programs, and writes about economics, behavioral science, and shipping faster.