Google analytics Google Analytics内容实验A/B在不刷新页面的情况下测试服务器端代码

Google analytics Google Analytics内容实验A/B在不刷新页面的情况下测试服务器端代码,google-analytics,google-website-optimizer,ab-testing,Google Analytics,Google Website Optimizer,Ab Testing,基本上,我们希望A/B测试2个不同的页面布局标题。有一些结构上的差异(不仅仅是去掉CSS)。我们也不想等待谷歌掷硬币来决定访问者应该看到哪种变化;相反,我们希望选择变体服务器端并避免页面重定向 下面的代码实现了我希望的功能;它生成的UTMX cookie看起来与Google提供的javascript生成的一样,如果我没有在head标记中省略它的话 服务器端PHP代码: public function setUtmxCookie($cookieName, $experimentsString) {

基本上,我们希望A/B测试2个不同的页面布局标题。有一些结构上的差异(不仅仅是去掉CSS)。我们也不想等待谷歌掷硬币来决定访问者应该看到哪种变化;相反,我们希望选择变体服务器端并避免页面重定向

下面的代码实现了我希望的功能;它生成的UTMX cookie看起来与Google提供的javascript生成的一样,如果我没有在head标记中省略它的话

服务器端PHP代码:

public function setUtmxCookie($cookieName, $experimentsString)
{
    $domainHash = $this->getDomainHash($_SERVER['SERVER_NAME']);
    $cookieVal = $domainHash . $experimentsString;
    $expire = time() + 60 * 60 * 24 * 30;
    $domain = '.' . $_SERVER['SERVER_NAME'];
    setrawcookie($cookieName, $cookieVal, $expire, '/', $domain);
}

private function getExperimentsFromUtmxCookie($cookieName)
{
    if (isset($_COOKIE[$cookieName])) {
        $cookieVal = $_COOKIE[$cookieName];
        $experimentsArray = array();
        $experimentMatches = preg_split('/\./', $cookieVal);
        $domainHash = array_shift($experimentMatches); //remove the first item.  All that will remain in $experimentMatches is an array of experimentIds with their combos.
        foreach ($experimentMatches as $m) {
            $segments = preg_split('/:/', $m);
            $experimentsArray[$segments[0]] = $segments[1];
        }
        return $experimentsArray;
    }
    return array();
}

private function getExperimentsString($cookieName, $experimentId, $variation)
{
    $experiments = $this->getExperimentsFromUtmxCookie($cookieName);
    $experiments[$experimentId] = $variation;
    $experimentsString = '';
    foreach ($experiments as $key => $val) {
        $experimentsString .= '.' . $key . ':' . $val;
    }
    return $experimentsString;
}

那么,为什么我的谷歌分析内容实验仪表板没有显示我的实验的任何访问者呢?我是否未完全设置utmx cookie?除了设置UTMX cookie,GACE还在寻找其他东西吗?

在过去的几个月里,我们一直在使用一种完全不同的方法:Amazon负载平衡器(AWS ELB)加上谷歌分析(而不是内容实验)。(见我上面的评论)正如我们所希望的,它极大地改善了我们合并回主干的体验

_gaq.push(['_setCustomVar', 2, varName, varValue, 2]);//https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingCustomVariables
_gaq.push(['_trackPageview']);//This must come AFTER the setCustomVar
//varName should be whatever you want to call the experiment
//varValue should be something like "original" for the original and "variation" for the variation.  We just use "trunk" and [name of variation branch].
明显的缺点是谷歌没有为我们做数学计算(告诉我们变异是否在统计上显著优于原始变异),我们不能轻易地一次运行多个实验。我们也不能有很多变化(我们需要添加更多的负载平衡实例)


但出于我们的目的(例如,考虑到不刷新页面对我们来说是多么重要),它比其他方法更有效。

@danmaz74采用了一种有趣的方法,仅在客户端使用谷歌分析:


我们现在考虑使用另一种方法:使用Amazon负载平衡器(AWS ELB)将“原始”部署到某些服务器,将“变体”部署到另一台服务器。我们将使用3:1的比率(75%的访问者将获得原始版本),因为我们使用4个负载平衡服务器。我们已经启用“粘性”来保持个人体验的一致性。这种方法的巨大优势在于,在实验之后不会有条件(if/else)代码需要删除。只是从分支正常合并回主干。客户端解决方案对于a-B测试布局(如问题中所述)不是很有用。不错的方法,我知道这很旧,但我假设customVariable和trackPageView仅用于跟踪每个变体有多少访问者,但是,你是否使用了一些事件跟踪或其他方法来衡量一个变量相对于另一个变量的有效性?我记不起我在2012年所做的事情的细节,但是的,我必须以某种方式记录事件(分数的分子)。