इंटीग्रेशन

Voluum, Redtrack और ClickFlare के साथ A/B टेस्टिंग कैसे इंटीग्रेट करें

परिचय डिजिटल मार्केटिंग की दुनिया में सफल कैंपेन के लिए A/B टेस्टिंग ज़रूरी है। LanderLab अब सर्वर-साइड पर A/B टेस्टिंग सेट करने का एक बेहतरीन टूल दे रहा है, जिसमें एक ही URL पर अलग-अलग वेरिएंट बारी-बारी से दिखाए जाते हैं।

Bruno Agalliu3 मिनट में पढ़ें

परिचय

डिजिटल मार्केटिंग की दुनिया में सफल कैंपेन के लिए A/B टेस्टिंग ज़रूरी है। LanderLab अब सर्वर-साइड पर A/B टेस्टिंग सेट करने का एक बेहतरीन टूल दे रहा है, जिसमें एक ही URL पर अलग-अलग वेरिएंट बारी-बारी से दिखाए जाते हैं। इस अपडेट के साथ यूज़र अपने landing page का A/B टेस्ट कर सकते हैं और नतीजों को अपने पसंदीदा ट्रैकर में क्रॉस-चेक कर सकते हैं।

LanderLab के साथ A/B टेस्टिंग क्यों करें

ज़्यादातर मार्केटर्स landing page को स्प्लिट टेस्ट करने के लिए अपना ही ट्रैकिंग सॉफ़्टवेयर इस्तेमाल करते हैं, जैसे ClickFlare, Voluum या Redtrack, और ज़्यादातर मामलों में यह काफ़ी से ज़्यादा होता है। लेकिन कुछ मामलों में ट्रैकर से स्प्लिट टेस्टिंग मुमकिन नहीं होती। प्रीमियम ट्रैफ़िक सोर्स रीडायरेक्ट की इजाज़त नहीं देते, यानी फ़ाइनल डेस्टिनेशन URL वही होना चाहिए जो landing page का URL है।

यहीं LanderLab अपने सर्वर-साइड A/B टेस्टिंग के साथ काम आता है, जो फ़्लो से एक रीडायरेक्ट हटा देता है। LanderLab में A/B टेस्टिंग कैसे काम करती है, इसकी और जानकारी इस आर्टिकल में पढ़ सकते हैं। और सबसे अच्छी बात यह है कि LanderLab को ज़्यादातर आधुनिक ट्रैकर्स के साथ इंटीग्रेट किया जा सकता है।

A/B टेस्ट

कॉन्सेप्ट आसान है: LanderLab की A/B टेस्टिंग को उस डायरेक्ट ट्रैकिंग तरीके के साथ जोड़ना, जो हर ट्रैकर में मिलता है। बुनियादी बातें कवर करने के लिए, यह आर्टिकल बताएगा कि ClickFlare, Voluum और Redtrack के साथ यह सेटअप कैसे लागू करें।

ClickFlare के साथ A/B टेस्टिंग सेट करना

ClickFlare का डायरेक्ट ट्रैकिंग तरीका इस सेटअप के लिए एकदम सही जोड़ी बन सकता है। आख़िरकार, दोनों प्लेटफ़ॉर्म एक ही कंपनी ने बनाए और डेवलप किए हैं, इसलिए दोनों को साथ इस्तेमाल करके बेहतर इंटीग्रेशन पाना समझदारी की बात है। ClickFlare के डायरेक्ट ट्रैकिंग के बारे में और पढ़ने के लिए यह आर्टिकल देखें।

इस सेटअप को लागू करते समय 2 बुनियादी स्टेप फ़ॉलो करने होते हैं, और यही स्टेप Voluum और Redtrack पर भी लागू होते हैं। पहला स्टेप यह है कि ClickFlare में variantID रिपोर्ट करने के लिए नया ट्रैकिंग पैरामीटर कैसे परिभाषित करें।

ClickFlare में VariantID

अपने ट्रैकर में variantID ट्रैक करने के लिए हमें डायरेक्ट ट्रैकिंग स्क्रिप्ट में कुछ बदलाव करने होंगे। नीचे दी गई स्क्रिप्ट में 2 वेरिएबल हैं जिन्हें बदलना है: “REPLACE_ME_CAMPAIGN_ID” और “REPLACE_ME_CUSTOM_DOMAIN”। तैयार होने पर पूरा कोड LanderLab में Settings > Custom Code > Header Section में डालना होगा।

<script> ! function() {
    "use strict";
    var t = "lp_ref",
        n = "cpid",
        e = "lpurl",
        r = "REPLACE_ME_CUSTOM_DOMAIN",
        c = "(?<domain>http(?:s?)://[^/]*)".concat("/cf/click"),
        a = "(?:(?:/(?<cta>[1-9][0-9]*)/?)|(?:/))?",
        i = "^".concat(c).concat(a).concat("(?:$|(\\?.*))"),
        o = 'javascript:window.clickflare.l="(?<original_link>'.concat(c).concat(a, '("|(\\?[^"]*"))).*'),
        s = function() {
            return new RegExp(i, "")
        },
        u = function() {
            return new RegExp(o, "")
        };
    function l(t) {
        var n = function(t) {
            return t.replace(s(), (function(t) {
                for (var n = [], e = 1; e < arguments.length; e++) n[e - 1] = arguments[e];
                var c = n[n.length - 1].domain;
                return t.replace(c, r)
            }))
        }(t);
        return 'javascript:window.clickflare.l="'.concat(n, '"; void 0;')
    }
    function f(t, n) {
        if (n && t && n.apply(document, [t]), /loaded|interactive|complete/.test(document.readyState))
            for (var e = 0, r = document.links.length; e < r; e++)
                if (s().test(document.links[e].href)) {
                    var c = document.links[e];
                    window.clickflare.links_replaced.has(c) || (c.href = l(c.href), window.clickflare.links_replaced.add(c))
                }
    }! function(c, a) {
        var i = document.onreadystatechange;
        window.clickflare || (window.clickflare = {
            listeners: {},
            customParams: {},
            links_replaced: new Set,
            addEventListener: function(t, n) {
                var e = this.listeners[t] || [];
                e.includes(n) || e.push(n), this.listeners[t] = e
            },
            dispatchEvent: function(t, n) {
                n && (this.customParams[t] = n), (this.listeners[t] || []).forEach((function(t) {
                    return t(n)
                }))
            },
            push: function(t, n) {
                n && (this.customParams[t] = n), (this.listeners[t] || []).forEach((function(t) {
                    return t(n)
                }))
            }
        }, document.onreadystatechange = function(t) {
            return f(t, i)
        }, f(null, i), setTimeout((function() {
            ! function(c, a) {
                var i, o = function(c, a) {
                        var i = new URL("".concat(r).concat(c)),
                            o = "{",
                            s = o + o;
                        a.startsWith(s) || i.searchParams.set(n, a);
                        return i.searchParams.append(t, document.referrer), i.searchParams.append(e, location.href), i.searchParams.append("variantId", window.LL_VARIANT_ID), i.searchParams.append("lpt", document.title), i.searchParams.append("t", (new Date).getTime().toString()), i.toString()
                    }(c, a),
                    s = document.createElement("script"),
                    l = document.scripts[0];
                s.async = 1, s.src = o, s.onerror = function() {
                    ! function() {
                        for (var t = function(t, n) {
                                var e = document.links[t];
                                u().test(e.href) && setTimeout((function() {
                                    e && e.setAttribute("href", function(t) {
                                        var n = t.match(u());
                                        if (n) {
                                            var e = (n.groups || {}).original_link;
                                            return e ? e.slice(0, -1) : t
                                        }
                                        return t
                                    }(e.href))
                                }))
                            }, n = 0, e = document.links.length; n < e; n++) t(n)
                    }()
                }, null === (i = l.parentNode) || void 0 === i || i.insertBefore(s, l)
            }(c, a)
        })))
    }("".concat("/cf/tags", "/").concat(new URL(window.location.href).searchParams.get("cftmid") || "{{__CONTAINER_ID__}}"), new URL(window.location.href).searchParams.get(n) || "REPLACE_ME_CAMPAIGN_ID")
}(); </script>

Voluum के साथ A/B टेस्टिंग सेट करना

Voluum एफ़िलिएट मार्केटिंग के सबसे पुराने ट्रैकर्स में से एक है और आज भी बाज़ार के बड़े हिस्से पर इसकी पकड़ है। इस ट्रैकर में variantID रिपोर्ट करने के लिए हम फिर डायरेक्ट ट्रैकिंग पर ही निर्भर रहेंगे, उसी तरीके से जैसे पहले किया था।

Voluum में VariantID

VariantID को ट्रैफ़िक सोर्स टेम्पलेट में सबसे नीचे जोड़ा जाता है, लेकिन इसे किस क्रम में डाला जाए, इससे ज़्यादा फ़र्क नहीं पड़ता। नामों में एकरूपता रखने के लिए वही 2 वेरिएबल बदलने होंगे: “REPLACE_ME_CAMPAIGN_ID” और “REPLACE_ME_CUSTOM_DOMAIN”। नीचे दिए गए कोड को कॉपी करके LanderLab के कस्टम कोड सेक्शन में पेस्ट करें, इससे सेटअप पूरा हो जाएगा।

<<b>style</b>>.dtpcnt{opacity: 0;}</<b>style</b>>
    <<b>script</b>>
    (function(d, c, k, l, r, t, g, u, A, e, m, v, B, a, n, p, h, q, w, D, x) {
        function y() { for (var f = c.querySelectorAll(".dtpcnt"), b = 0, a = f.length; b < a; b++) f[b][u] = f[b][u].replace(/(^|\s+)dtpcnt($|\s+)/g, "") }
        function C(a, b, d, e) { var f = new Date;
            f.setTime(f.getTime() + (e || 864E5));
            c.cookie = a + "=" + b + "; " + d + "samesite=Strict; expires=" + f.toGMTString() + "; path=/";
            k.setItem(a, b);
            k.setItem(a + "-expires", f.getTime()) }
        function z(a) {
            var b = c.cookie.match(new RegExp("(^| )" + a + "=([^;]+)"));
            return b ? b.pop() : k.getItem(a + "-expires") && +k.getItem(a +
                "-expires") > (new Date).getTime() ? k.getItem(a) : null
        }
        x = "https:" === d.location.protocol ? "secure; " : "";
        d[e] || (d[e] = function() {
            (d[e].q = d[e].q || []).push(arguments) }, p = c[r], c[r] = function() { p && p.apply(this, arguments); if (d[e] && !d[e].hasOwnProperty("params") && /loaded|interactive|complete/.test(c.readyState))
                for (; a = c[t][m++];) /\/?click\/?($|(\/[0-9]+)?$)/.test(a.pathname) && (a[g] = "javascrip" + d.postMessage.toString().slice(4, 5) + ":" + e + '.l="' + a[g] + '",void 0') }, setTimeout(function() {
            (q = /[?&]cpid(=([^&#]*)|&|#|$)/.exec(d.location.href)) &&
            q[2] && (h = q[2], w = z("vl-" + h));
            var f = z("vl-cep"),
                b = location[g];
            if ("savedCep" === B && f && (!h || "undefined" === typeof h) && 0 > b.indexOf("cep=")) { var e = -1 < b.indexOf("?") ? "&" : "?";
                b += e + f } a = c.createElement("script");
            n = c.scripts[0];
            a.defer = 1;
            a.src = v + (-1 === v.indexOf("?") ? "?" : "&") + "lpref=" + l(c.referrer) + "&lpurl=" + l(b) + "&lpt=" + l(c.title) + "&vtm=" + (new Date).getTime() + (w ? "&uw=no" : "") + "&variantId=" + window.LL_VARIANT_ID ;
            a[A] = function() { for (m = 0; a = c[t][m++];) /dtpCallback\.l/.test(a[g]) && (a[g] = decodeURIComponent(a[g]).match(/dtpCallback\.l="([^"]+)/)[1]);
                y() };
            n.parentNode.insertBefore(a, n);
            h && C("vl-" + h, "1", x)
        }, 0), setTimeout(y, 7E3))
    })(window, document, localStorage, encodeURIComponent, "onreadystatechange", "links", "href", "className", "onerror", "dtpCallback", 0, "REPLACE_ME_CUSTOM_DOMAIN/d/REPLACE_ME_CAMPAIGN_ID.js", "savedCep");
    </<b>script</b>>
    <<b>noscript</b>>
        <<b>link</b> href="REPLACE_ME_CUSTOM_DOMAIN/d/REPLACE_ME_CAMPAIGN_ID.js?noscript=true&lpurl=" rel="stylesheet" /></<b>noscript</b>>

Redtrack के साथ A/B टेस्टिंग सेट करना

आख़िर में, हम यही सेटअप Redtrack के लिए लागू करेंगे। बाज़ार में इस ट्रैकर की अच्छी-ख़ासी हिस्सेदारी है और यह ClickFlare और Voluum जैसी ही सुविधाएं देता है।

लेकिन बाकी 2 ट्रैकर्स के मुक़ाबले यहाँ variantID को किसी ख़ास टोकन में रखना पड़ता है, क्योंकि कुछ टोकन सिस्टम टोकन के लिए तय होते हैं। इस उदाहरण में variantID को sub18 में रखा गया है और यही बात डायरेक्ट ट्रैकिंग स्क्रिप्ट में भी दिखेगी।

Redtrack में VariantID

 

“REPLACE_ME_CAMPAIGN_ID” और “REPLACE_ME_CUSTOM_DOMAIN” को बदलते ही कोड LanderLab में इस्तेमाल के लिए तैयार है।

<script>
function getCookie(name) {
    var value = "; " + document.cookie;
    var parts = value.split("; " + name + "=");
    if (parts.length === 2) {
        return parts.pop().split(";").shift();
    }
}
var trackerURL = "REPLACE_ME_CUSTOM_DOMAIN";
var campaignID = "REPLACE_ME_CAMPAIGN_ID";
var cachebuster = Math.round(new Date().getTime() / 1000);
var rtkClickID;
var rtkfbp = getCookie('_fbp') || '';
var rtkfbc = getCookie('_fbc') || '';
var LL_VARIANT_ID = window.LL_VARIANT_ID;
var locSearch = window.location.search;
var urlParams = new URLSearchParams(locSearch);
var pixelParams = "&" + locSearch.substr(1) + "&sub18=" + LL_VARIANT_ID + "&sub19=" + rtkfbp + "&sub20=" + rtkfbc
if (campaignID == "") {
    campaignID = urlParams.get('rtkcmpid')
}
var initialSrc = "https://"+ trackerURL + "/" + campaignID + "?format=json";

function stripTrailingSlash(str) {
    return str.replace(/\/$/, "");
}

var rawData;

function fixHrefWithClick(
    _rawData,
    _cachebuster,
    _rtkClickID
) {
    document.querySelectorAll('a').forEach(function(el) {
        if (el.href.indexOf(trackerURL + "/click") > -1) {
            if (el.href.indexOf('?') > -1) {
                el.href = stripTrailingSlash(el.href) + "&clickid=" + (_rtkClickID || _rawData.clickid) + "&rtkck=" + _cachebuster
            } else {
                el.href = stripTrailingSlash(el.href) + "?clickid=" + (_rtkClickID || _rawData.clickid) + "&rtkck=" + _cachebuster
            }
        }
        if (el.href.indexOf("clickid={clickid}") > -1) {
            el.href = el.href.replace(/{clickid}/, _rawData.clickid) + "&rtkck=" + _cachebuster;
        }
    });
}

setTimeout(function() {
    if (!urlParams.get('rtkcid')) {
        xhr = new XMLHttpRequest;
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                rawData = JSON.parse(xhr.responseText);
                rtkClickID = rawData.clickid
                setCookie();
                // fixHrefWithClick(rawData, cachebuster)
                document.querySelectorAll('a').forEach(function(el) {
                    if (el.href.indexOf(trackerURL + "/click") > -1) {
                        if (el.href.indexOf('?') > -1) {
                            el.href = stripTrailingSlash(el.href) + "&clickid=" + rawData.clickid + "&rtkck=" + cachebuster
                        } else {
                            el.href = stripTrailingSlash(el.href) + "?clickid=" + rawData.clickid + "&rtkck=" + cachebuster
                        }
                    }
                    if (el.href.indexOf("clickid={clickid}") > -1) {
                        el.href = el.href.replace(/{clickid}/, rawData.clickid) + "&rtkck=" + cachebuster;
                    }
                });
                xhrr = new XMLHttpRequest;
                xhrr.open("GET", "https://"+ trackerURL +"/view?clickid=" + rawData.clickid)
                xhrr.send();
            }
        }
        xhr.open("GET", initialSrc + pixelParams)
        xhr.send();
    } else {
        rtkClickID = urlParams.get('rtkcid')
        setCookie();
        xhrTrack = new XMLHttpRequest;
        xhrTrack.open("GET", "https://"+trackerURL+"/view?clickid=" + rtkClickID)
        xhrTrack.send();
        // fixHrefWithClick(rawData, cachebuster, rtkClickID)
        document.querySelectorAll('a').forEach(function(el) {
            if (el.href.indexOf(trackerURL+ "/click") > -1) {
                if (el.href.indexOf('?') > -1) {
                    el.href = stripTrailingSlash(el.href) + "&clickid=" + rtkClickID + "&rtkck=" + cachebuster
                } else {
                    el.href = stripTrailingSlash(el.href) + "?clickid=" + rtkClickID + "&rtkck=" + cachebuster
                }
            }
            if (el.href.indexOf("clickid={clickid}") > -1) {
                el.href = el.href.replace(/{clickid}/, rawData.clickid) + "&rtkck=" + cachebuster;
            }
        });
    }
}, 5e1)

function setCookie() {
    var cookieName = "rtkclickid-store",
        cookieValue = rtkClickID,
        expirationTime = 86400 * 30 * 1000,
        date = new Date(),
        dateTimeNow = date.getTime();
    date.setTime(dateTimeNow + expirationTime);
    var date = date.toUTCString();
    document.cookie = cookieName + "=" + cookieValue + "; expires=" + date + "; path=/;"
}
    </script>

निष्कर्ष

अब डेटा आपके ट्रैकर में रिपोर्ट होने लगा है, इसलिए आप सचमुच नाप सकते हैं कि कोई ख़ास वेरिएंट कितने इवेंट ला रहा है। जब आपको जीतने वाला वेरिएंट पता चल जाए, तो बस A/B टेस्टिंग ख़त्म करें और उसे मुख्य वेरिएंट बना दें। बैन होने का जोखिम ख़त्म करते हुए आज ही LanderLab के साथ स्प्लिट टेस्टिंग शुरू करें।

अपने ट्रैकर के साथ A/B टेस्टिंग को ऑप्टिमाइज़ करना चाहते हैं?
अभी अपना फ़्री ट्रायल शुरू करें और ClickFlare, Voluum या Redtrack के साथ LanderLab की एडवांस्ड A/B टेस्टिंग का इस्तेमाल करें!

आगे पढ़ें

Blog से और पढ़ें।

  • इंटीग्रेशन

    LanderLab और RedTrack इंटीग्रेशन अब लाइव है!

    एक अग्रणी landing page बिल्डर के रूप में, हम आपके मार्केटिंग वर्कफ़्लो को आसान बनाने के लिए लगातार काम करते रहते हैं। इसीलिए हमें RedTrack के साथ अपने नवीनतम इंटीग्रेशन की घोषणा करते हुए खुशी हो रही है, जो एक शक्तिशाली मार्केटिंग एट्रिब्यूशन प्लेटफ़ॉर्म है।

  • रिव्यू

    पेड ऐड्स के लिए Webflow बनाम Framer: कौन-सा सही है, और उसकी जगह क्या चुनें

    Webflow और Framer दोनों दमदार वेबसाइट बिल्डर हैं, लेकिन पेड ट्रैफ़िक पेज, डोमेन और टेस्ट पर चलता है। जानिए 2026 में हर एक की असली कीमत एक मीडिया बायर को कितनी पड़ती है, और इनकी जगह क्या इस्तेमाल करें।

  • रिव्यू

    2026 में पेड ऐड्स के लिए टॉप 5 फ़्री Webflow विकल्प

    ज़्यादातर फ़्री वेबसाइट बिल्डर लॉन्च करने तक ही फ़्री रहते हैं। यहाँ पेड ऐड्स के लिए ज़रूरी 5 जाँचों पर परखे गए टॉप 5 फ़्री Webflow विकल्प हैं।

टॉपिक

टॉपिक के हिसाब से देखें

हर पोस्ट किसी एक टॉपिक के तहत आता है। उस टॉपिक से शुरू करें जो आपके चल रहे कैंपेन के सबसे क़रीब हो।

playbook पढ़ें।फिर पेज बनाएं।

फ़्री में शुरू करें: landing page बनाएं, उसे अपने डोमेन पर पब्लिश करें और हर lead को अपने बायर तक भेजें, अगला कैंपेन लाइव होने से पहले।

एक prompt से क्वालिफ़ाइड leads तक

देखें कैसे एक prompt लाइव सोलर quote funnel बन जाता है, हर lead आपके बायर तक पहुंचता है, और लीकेज आपका बजट खाने से पहले ही पकड़ में आ जाती है।

0:00
0:59