Javascript multivariant and AB testing using Google Analytics and Math.rand()
JavaScript CoffeeScript Shell
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



Multivariate Testing in JavaScript made easy. Also see, the pro version of xander.


  • Multivariate testing should be simple for developers and designers
  • Variants should be cheap to add and simple to view
  • Analytics should be useful and available for review
  • If you are using, your website should get better over time without manual intervention.

Library Requirements

  • (optional)
  • Google Analytics
  • jQuery

Browser support:

  • Internet Explorer 6 and above
  • Firefox 2 and above
  • All modern browsers


  • Include xander-client javascript file


  <script src=''></script>


Multivariate testing for HTML elements

  • Defining a variant

      <div id="callToAction">
        <div data-variant="logic" class='red hide'>
          If you have a website with users, you should be multivariate testing.  It's the only way to ensure your changes are actually what users want.
        <div data-variant="google" class='blue hide'>
          Multivariate testing is used by Google to optimize their search results.
        <div data-variant='silly' class='green hide'>
          You can't multivariate test your life... yet - but now you can easily multivariate test your websites!
  • This variant sets up a three way test between logic, google, and silly calls to action variants so we can see which phrasing works best.

  • The data will be available in Google Analytics (or if you chose to use it)

  • We have a simple hide class that sets 'display: none'. This avoids flicker after the page loads.

Multivariate testing for CSS classes

  • Defining testable CSS classes

      <section id='signup' data-css-variants="green blue" />
  • One of the two green or blue classes will be added to your #signup button.

  • Variation reports are based on ids


Goals are a simple way to track conversions. In Google Analytics they correlate specifically to _trackPageview's.

Defining a goal

  <form data-goal="New User" onsubmit='processInfo(); return false'>
    <!-- Here's where you could multivariate test the form. -->
    <h1> Sign up for our amazing product </h1>
    <input type='submit'> Sign up </input>

Potential Pitfall

Be careful when using cross-domain links that redirect the browser, xander may not get a chance to fire the goal reached event. This is not a concern if the goal targets a new window.

Technical Details of Goals

Goals in Xander work by binding to an element's jquery click event (or submit event in the case of a form).

If you can't get the goal to trigger - console.log is your friend. Open up your console and you will see some messages from xander when your page is setup and again when a goal is pressed.

If all else fails, you can call:

  xander.goalReached("New User");

Verifying your variant test is setup

  • Setup your variants and page goal
  • Click your page goal
  • Log in to Google Analytics
  • If you are using Google Analytics and not, you will likely face a problem where Google Analytics will reflect your test data. This can be filtered in google analytics, or just use

Rerolling a page

You can now call a rerollVariants method to get a whole new version of your site.

  xander.reroll(); // reroll all CSS and content variants
  xander.reroll($("#choices")); // reroll the #choices variant

Event Handlers


variant is an object that looks like:

  'section id' : 'chosen variant'


This allows you to execute custom javascript for specific variants

xander.onVariantChosen(function(variant) {
  if (variant.signup === 'red-button') {
    // Execute custom javascript for the red button variant of signup

Commercial offerings

If you like xander, but don't like the sample distribution using Math.rand() - or don't like having to review your variant's performance, check out . It's a SAAS that uses 90/10 testing to figure out your best performing variant (with a friendly UI).

Note, xander inserts a tracking pixel on your site in the event that you would like to upgrade. To disable this, add this after your script include.


Related Work

  • ABalytics
  • Send us a message if there's anything else that should be listed.