• Server-side Considerations
  • Server-side Considerations


    Operating experiments and personalizations on the server-side involves particular challenges that are not present when running purely client-side campaigns. This article presents those obstacles and provides solutions and workarounds for them.

    Bots and inflated traffic numbers

    On the web, there are way more robots able to disrupt your analytic results on the server-side than on the client-side. The reason for this is that it's much easier to implement a server-side bot making a simple HTTP call, than a full "browser emulation" which will not only make the HTTP call but then evaluate and run the JavaScript code present in the HTML page. In terms of ressources, it also takes tons more ressources to run a bot implementing JS evaluation (via Selenium, PhantomJS or other similar tools) than to run a HTTP-only bot, relying on simple programs such as wget or curl.

    The consequence is that you may see a very big discrepancy between the Kameleoon results for an experiment (especially if the experiment is conducted on high-traffic public pages, such as the home page), and the numbers given by a JavaScript web analytics solution (such as Google Analytics). A difference of 30% can be common.

    There are basically two options to remove the bots from your Kameleoon results:

    1. Filter the bots on your side. It is not always easy to recognize a valid HTTP request from an automated one. However, if you're able to identify the bots (maybe you use some monitoring platforms where a specific User-Agent or IP is provided, for instance), just exclude them from the experiments you're running (it mostly means to not call the triggerExperiment() method on those requests).

    2. Perform most of the tracking calls on the client-side. As explained, there are much less bots on the client-side, so your results will be much closer to your "real" traffic. For this, you need to create a Hybrid server-side experiment, and activate the checkbox "Do not track experiment activations on the server-side". As a result, the triggerExperiment() method will only perform experiment variation allocation, without sending a tracking call in the background to our data collection servers. The experiment activation should then be tracked on the client-side (using the Back-end / Front-end Bridge), which will eliminate most of the bots.