Split-testing options with FunnelFlux
Zeno avatar
Written by Zeno
Updated over a week ago

There are lots of ways to deal with split-testing of landing pages with trackers in general and the best methods can depend on your goals and what your traffic source allows.

Here I'll showcase a few different methods you can use.

Normal redirect URLs

If redirection through a tracking link is not a problem, just use this by getting a tracking URL via the "send traffic here" prompt, ensuring you do so for the traffic node, not a lander directly (otherwise it will go straight to that).

For most traffic sources this is perfectly fine, but some traffic sources like Adwords, Facebook, Bing etc. scrutinise redirects, while in other situations you may want to maintain a specific URL in the address bar.

Using Fluxify

Fluxify is one of the redirect modes available on lander/offer pages.

If you use a tracking link and the destination would normally be a redirect to a landing page URL, if that URL is in Fluxify mode, it will in fact deliver under the tracking URL itself.

In other words, this is what usually happens:

Ad --> tracking URL --(redirect)--> landing page URL

If that landing page in FunnelFlux is in Fluxify mode, this happens:

Ad --> tracking URL (loads as a landing page)

This means there are no redirects, so no issues with using this as your final URL in Adwords, or with platforms like Facebook that may dislike redirects, especially those crossing between domains.

By doing this you can use the full functionality of FunnelFlux including conditions, rotators, etc., just be sure to have all landers in Fluxify mode.

There is one exclusion -- if your landing page URL uses dynamic tokens in it, then a redirect will happen as this is the only way the URL can get updated to include that dynamic data. So if you are passing e.g. ..&model={device-model}... to your landing page, the Fluxify mode is going to still use a redirect.

So, consider the following funnel:

I have three pages in rotation. I want to rotate these pages without redirects or domain changes, so I have set them all to Fluxify and grabbed a tracking link for the traffic node. You can test it out below to see it in action!

If I want to make it a little prettier, I could always use an alias domain, and I could use the stored links function of FunnelFlux to make a slightly shorter version:

You can pass additional params after the stored link name like with any tracking link, so https://tr.funnelflux.com/?flux_sl=search&param1=a&param2=b  will work fine.

Using non-cross-domain redirects

As an aside, some platforms, such as Adwords, specifically dislike cross-domain redirects. Conversely, redirects on the same base domain are fine.

So, it is good practice then to use domain.com  for your lander, and sub.domain.com  for your tracker. This avoids cross-domain redirects.

You can use an unlimited number of domains with FunnelFlux, so you can set up e.g. go.domain.com as a standard tracking domain for all the landing page domains you use, and add these as domains in the system settings of FunnelFlux.

Using a full-page iFrame

This method is quite simple and although it will workaround the TEST function in Adwords and maintains a single URL in the address bar, it does use redirects in the same way as your regular tracking link, and any formal reviewer from a traffic source would be able to easily see this and potentially scrutinise it.

How to do it? 

Easy, just create some landing page that you'll link the ad to, use a full page iFrame on it with the src parameter as your FunnelFlux tracking link:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>iFrame Test Page</title>
<style type="text/css">
    body, html
    {
        margin: 0; padding: 0; height: 100%; overflow: hidden;
    }

    #content
    {
        position:absolute; left: 0; right: 0; bottom: 0; top: 0px;
    }
</style>
</head>
<body>
<div id="content">
    <iframe width="100%" height="100%" frameborder="0" src="https://tracker.com/?flux_fts=xxxxx" />
</div>
</body>


When doing this, you need to also consider data passing.

It would be best to have your simplest tracking URL in the iFrame src, the one that sends users to your intended destination, without additional parameters in it.

For other parameters from your traffic source, pass these to the lander URL directly. then place our no-redirect JS on your landing pages that the tracking link is redirecting to. When the iFrame redirects it will track the user and send them to X lander. When they get there, the JS will detect parameters in the parent URL.

Note that if you use any conditions in your funnel that redirect based on tracking field parameters, you will need to do something more advanced here to make those parameters be present in the iFrame src URL first, before it tries to load.

Using iFrames and dynamically passing parameters into the src

If you're using iFrames and you want to dynamically pass data from the parent URL into the iFrame src, you will need to use JS to generate the iFrame itself -- as you can't modify the existing iFrame, it will load before your JS has the chance to do this.

Dynamically changing the iFrame src will be useful if you need FunnelFlux to redirect based on this data, e.g. specific publisher IDs.

Here's an example code solution that will achieve this:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Your Page Title Here</title>
<style type="text/css">
    body, html
    {
        margin: 0; padding: 0; height: 100%; overflow: hidden;
    }

    #content
    {
        position:absolute; left: 0; right: 0; bottom: 0; top: 0px;
    }
</style>
</head>
<body>
<div id="content">
</div>

<script type="text/javascript">
var url = window.location.href;
var urlParams = url.split("?")[1];  
    function prepareFrame() {
        var ifrm = document.createElement("iframe");
        ifrm.style.width = "100%";
        ifrm.style.height = "100%";
        ifrm.setAttribute("frameborder", "0");
        ifrm.setAttribute("src", "https://tracker-url-here" + "&" + urlParams);
        document.getElementById('content').appendChild(ifrm);
    }
    prepareFrame();
</script>
</body>

Be sure to test this and ensure it works for your situation. 

You can test by inspecting element on the page, then loading your URL with test parameters in it. 

You should see these appearing in the iFrame src attribute and should also see the data being logged in FunnelFlux, provided the parameter names match what is expected for the traffic source.

Using PHP to rotate landers

This is an advanced way to rotate landing pages and will require your own server hosting the pages + PHP code.

Required steps:

  1. Put all your landers in the same folder on your server, e.g. /landers/some-folder/ 

  2. Its ideal if all the HTML source files are in the same parent directory, e.g. lp1.html, lp2.html and so on. 

  3. If your assets clash, I suggest making folders such as css-lpname , images-lpname  etc. to separate them, then alter your HTML file to use these new folders.

  4. Create an index.php file in your parent directory alongside the HTML files

  5. In each of your landing page HTML files, insert FunnelFlux no-redirect JS that has been obtained for that lander in a specific funnel using the send traffic here prompt. It's important it is done this way so it has a flux_fn parameter in it.

  6. In your index.php file, create a basic rotation code to include() the landing page sources, such as:

<?php

$lander[0] = 'lp1.html';
$lander[1] = 'lp2.html';
$lander[2] = 'lp3.html';

$number = mt_rand(0,2);

include("$lander[$number]");

?>

Advantages:

  • You can rotate pages server-side and this is not detectable - there is no redirect. However, users could refresh the page and see rotation happening, so you'd need to add some cookie/session usage code to create persistence here if desired.

  • Can bypass most "no redirects allowed" situations 

Disadvantages:

  • A bit more work required to make this work

  • You need a landing page server that can execute PHP

  • You will need to make separate folders and duplicates of your landers if you wish to use them in different funnels -- consider this a single-funnel only approach. This is required as the flux_fn or node ID parameter in the included page's JS is what tells FunnelFlux the lander the user hit. It cannot determine this from the URL, and you cannot pass URL parameters into the file includes.

  • FunnelFlux uses referrer to deal with repeat action clicks -- here that is not going to be practical, so you will need to use the JS to inject hit IDs into action links if you are using pages where many clicks to different CTAs is expected.

Did this answer your question?