> ## Documentation Index
> Fetch the complete documentation index at: https://docs.replo.app/llms.txt
> Use this file to discover all available pages before exploring further.

# A/B Testing

> Run experiments to improve conversion rates and optimize your landing pages

export const Screenshot = ({src, altText, width, shadow = true}) => {
  const generateAltText = imageSrc => {
    if (!imageSrc) return "Screenshot";
    const filename = imageSrc.split("/").pop();
    const nameWithoutExt = filename.replace(/\.[^/.]+$/, "");
    const readable = nameWithoutExt.replace(/[-_]/g, " ").replace(/\b\w/g, char => char.toUpperCase());
    return readable || "Screenshot";
  };
  const finalAltText = altText || generateAltText(src);
  const imageWidth = width ? `${width}px` : "100%";
  return <div style={{
    position: "relative",
    width: "100%",
    borderRadius: "12px",
    overflow: "hidden",
    boxSizing: "border-box",
    display: "flex",
    justifyContent: "center"
  }}>
      {}
      <svg style={{
    position: "absolute",
    top: 0,
    left: 0,
    width: "100%",
    height: "100%",
    zIndex: 0,
    pointerEvents: "none"
  }} viewBox="0 0 1920 1080" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid slice">
        <g clipPath="url(#clip0_5067_2569)">
          <rect width="1920" height="1080" fill="black" />
          <g opacity="0.9" filter="url(#filter0_fn_5067_2569)">
            <mask id="mask0_5067_2569" style={{
    maskType: "alpha"
  }} maskUnits="userSpaceOnUse" x="539" y="-367" width="2018" height="1261">
              <rect x="539" y="-367" width="2017.6" height="1261" fill="#C4C4C4" />
            </mask>
            <g mask="url(#mask0_5067_2569)">
              <g filter="url(#filter1_f_5067_2569)">
                <path d="M880.949 82.6474L1798.19 -385.441L2215.11 -385.441L2725.35 -260.618L936.539 437.057L880.949 82.6474Z" fill="url(#paint0_linear_5067_2569)" />
              </g>
              <g filter="url(#filter2_f_5067_2569)">
                <ellipse cx="462.152" cy="150.719" rx="462.152" ry="150.719" transform="matrix(0.914846 -0.403803 0.330497 0.943807 1250.96 112.228)" fill="#FEBC2E" />
              </g>
              <g filter="url(#filter3_f_5067_2569)">
                <path d="M1687.1 56.3942C2102.4 -149.497 2274.54 -159.301 2672.61 -80.8668L2803.87 183.851L884.491 784.367C849.346 777.831 951.195 612.791 1228.77 362.78C1281.1 315.653 1271.81 262.285 1687.1 56.3942Z" fill="url(#paint1_linear_5067_2569)" />
              </g>
              <g opacity="0.7" filter="url(#filter4_f_5067_2569)">
                <path d="M1975.09 -76.9728C2367.51 -238.299 2270.38 -191.657 2637.67 -120.329L2758.78 120.402L1001.73 662.047C969.304 656.104 932.244 530.091 1043.42 349.988C1182.4 124.86 1518.29 110.824 1975.09 -76.9728Z" fill="#B7FEAE" fillOpacity="0.5" />
              </g>
              <g filter="url(#filter5_f_5067_2569)">
                <path d="M2052.63 99.5535C2383.11 16.7587 2366.44 -59.7112 2665.61 -7.17013L2707.81 170.156L1276.64 569.14C1250.23 564.762 1220.04 471.939 1310.6 339.273C1423.8 173.44 1803.59 161.946 2052.63 99.5535Z" fill="#EF196E" />
              </g>
              <g opacity="0.4" filter="url(#filter6_f_5067_2569)">
                <ellipse cx="462.152" cy="218.806" rx="462.152" ry="218.806" transform="matrix(0.914846 -0.403803 0.330497 0.943807 1152.46 417.938)" fill="#FFEB80" />
              </g>
              <g filter="url(#filter7_f_5067_2569)">
                <ellipse cx="462.152" cy="150.719" rx="462.152" ry="150.719" transform="matrix(0.914846 -0.403803 0.330497 0.943807 1913.18 237.904)" fill="#B7FEAE" />
              </g>
              <g filter="url(#filter8_f_5067_2569)">
                <g opacity="0.4" filter="url(#filter9_f_5067_2569)">
                  <path d="M1551.1 493.269L2619.23 -0.477507L3125.23 -71.2418L3756.49 -67.6927L1652.68 739.798L1551.1 493.269Z" fill="url(#paint2_linear_5067_2569)" />
                </g>
              </g>
              <g filter="url(#filter10_f_5067_2569)">
                <g opacity="0.4" filter="url(#filter11_f_5067_2569)">
                  <path d="M1696.12 652.03L2820.04 310.947L3330.91 310.947L3956.12 401.903L1764.24 910.278L1696.12 652.03Z" fill="url(#paint3_linear_5067_2569)" />
                </g>
                <g opacity="0.4" filter="url(#filter12_f_5067_2569)">
                  <path d="M1628.55 727.676L2843.38 257.743L3271.53 195.271L3903.03 210.271L1788.72 978.91L1628.55 727.676Z" fill="url(#paint4_linear_5067_2569)" />
                </g>
              </g>
            </g>
          </g>
        </g>
        <defs>
          <filter id="filter0_fn_5067_2569" x="637.809" y="-607" width="2158.79" height="1741" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
            <feFlood floodOpacity="0" result="BackgroundImageFix" />
            <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
            <feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_5067_2569" />
            <feTurbulence type="fractalNoise" baseFrequency="1 1" stitchTiles="stitch" numOctaves="3" result="noise" seed="7978" />
            <feColorMatrix in="noise" type="luminanceToAlpha" result="alphaNoise" />
            <feComponentTransfer in="alphaNoise" result="coloredNoise1">
              <feFuncA type="discrete" tableValues="1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " />
            </feComponentTransfer>
            <feComposite operator="in" in2="effect1_foregroundBlur_5067_2569" in="coloredNoise1" result="noise1Clipped" />
            <feFlood floodColor="rgba(0, 0, 0, 0.25)" result="color1Flood" />
            <feComposite operator="in" in2="noise1Clipped" in="color1Flood" result="color1" />
            <feMerge result="effect2_noise_5067_2569">
              <feMergeNode in="effect1_foregroundBlur_5067_2569" />
              <feMergeNode in="color1" />
            </feMerge>
          </filter>
          <filter id="filter1_f_5067_2569" x="878.4" y="-387.991" width="1849.5" height="827.597" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
            <feFlood floodOpacity="0" result="BackgroundImageFix" />
            <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
            <feGaussianBlur stdDeviation="1.27461" result="effect1_foregroundBlur_5067_2569" />
          </filter>
          <filter id="filter2_f_5067_2569" x="1129.77" y="-334.846" width="1187.61" height="805.41" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
            <feFlood floodOpacity="0" result="BackgroundImageFix" />
            <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
            <feGaussianBlur stdDeviation="84.0203" result="effect1_foregroundBlur_5067_2569" />
          </filter>
          <filter id="filter3_f_5067_2569" x="855.856" y="-148.194" width="1969.97" height="954.514" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
            <feFlood floodOpacity="0" result="BackgroundImageFix" />
            <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
            <feGaussianBlur stdDeviation="10.9761" result="effect1_foregroundBlur_5067_2569" />
          </filter>
          <filter id="filter4_f_5067_2569" x="958.113" y="-196.498" width="1811.26" height="869.143" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
            <feFlood floodOpacity="0" result="BackgroundImageFix" />
            <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
            <feGaussianBlur stdDeviation="5.29875" result="effect1_foregroundBlur_5067_2569" />
          </filter>
          <filter id="filter5_f_5067_2569" x="1149.75" y="-124.443" width="1658.06" height="793.583" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
            <feFlood floodOpacity="0" result="BackgroundImageFix" />
            <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
            <feGaussianBlur stdDeviation="50" result="effect1_foregroundBlur_5067_2569" />
          </filter>
          <filter id="filter6_f_5067_2569" x="1098.27" y="39.191" width="1098.61" height="797.277" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
            <feFlood floodOpacity="0" result="BackgroundImageFix" />
            <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
            <feGaussianBlur stdDeviation="60.1484" result="effect1_foregroundBlur_5067_2569" />
          </filter>
          <filter id="filter7_f_5067_2569" x="1886.85" y="-114.306" width="997.881" height="615.684" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
            <feFlood floodOpacity="0" result="BackgroundImageFix" />
            <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
            <feGaussianBlur stdDeviation="36.5888" result="effect1_foregroundBlur_5067_2569" />
          </filter>
          <filter id="filter8_f_5067_2569" x="1540.3" y="-82.0399" width="2226.99" height="832.636" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
            <feFlood floodOpacity="0" result="BackgroundImageFix" />
            <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
            <feGaussianBlur stdDeviation="5.39908" result="effect1_foregroundBlur_5067_2569" />
          </filter>
          <filter id="filter9_f_5067_2569" x="1547.97" y="-74.3651" width="2211.64" height="817.287" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
            <feFlood floodOpacity="0" result="BackgroundImageFix" />
            <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
            <feGaussianBlur stdDeviation="1.56172" result="effect1_foregroundBlur_5067_2569" />
          </filter>
          <filter id="filter10_f_5067_2569" x="1598.84" y="165.553" width="2387" height="843.074" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
            <feFlood floodOpacity="0" result="BackgroundImageFix" />
            <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
            <feGaussianBlur stdDeviation="14.8586" result="effect1_foregroundBlur_5067_2569" />
          </filter>
          <filter id="filter11_f_5067_2569" x="1693" y="307.824" width="2266.24" height="605.577" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
            <feFlood floodOpacity="0" result="BackgroundImageFix" />
            <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
            <feGaussianBlur stdDeviation="1.56172" result="effect1_foregroundBlur_5067_2569" />
          </filter>
          <filter id="filter12_f_5067_2569" x="1617.84" y="184.562" width="2295.9" height="805.057" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
            <feFlood floodOpacity="0" result="BackgroundImageFix" />
            <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
            <feGaussianBlur stdDeviation="5.35445" result="effect1_foregroundBlur_5067_2569" />
          </filter>
          <linearGradient id="paint0_linear_5067_2569" x1="1803.15" y1="-385.441" x2="1040.5" y2="259.543" gradientUnits="userSpaceOnUse">
            <stop stopColor="#FF7D54" />
            <stop offset="1" stopColor="white" stopOpacity="0" />
          </linearGradient>
          <linearGradient id="paint1_linear_5067_2569" x1="2283.14" y1="-17.1385" x2="1351.98" y2="310.625" gradientUnits="userSpaceOnUse">
            <stop stopColor="#B7FEAE" />
            <stop offset="0.65537" stopColor="#EF196E" />
            <stop offset="1" stopColor="#274AE2" />
          </linearGradient>
          <linearGradient id="paint2_linear_5067_2569" x1="2625.25" y1="-1.32004" x2="2201.56" y2="820.649" gradientUnits="userSpaceOnUse">
            <stop stopColor="#3A4CF0" />
            <stop offset="1" stopColor="#F5FAD9" stopOpacity="0" />
          </linearGradient>
          <linearGradient id="paint3_linear_5067_2569" x1="2826.12" y1="310.947" x2="2295.81" y2="1065.13" gradientUnits="userSpaceOnUse">
            <stop stopColor="#EF196E" />
            <stop offset="1" stopColor="white" stopOpacity="0" />
          </linearGradient>
          <linearGradient id="paint4_linear_5067_2569" x1="2452.05" y1="509.031" x2="2135.78" y2="1074.58" gradientUnits="userSpaceOnUse">
            <stop offset="0.166667" stopColor="#EF196E" />
            <stop offset="0.541667" stopColor="#FFEB80" stopOpacity="0.25" />
            <stop offset="1" stopColor="#274AE2" stopOpacity="0" />
          </linearGradient>
          <clipPath id="clip0_5067_2569">
            <rect width="1920" height="1080" fill="white" />
          </clipPath>
        </defs>
      </svg>

      {}
      <div style={{
    position: "relative",
    zIndex: 1,
    padding: "clamp(24px, 4vw, 48px)",
    display: "flex",
    alignItems: "center",
    justifyContent: "center",
    width: "100%"
  }}>
        <img src={src} alt={finalAltText} style={{
    width: imageWidth,
    maxWidth: "100%",
    height: "auto",
    display: "block",
    borderRadius: "8px",
    boxShadow: shadow ? "0 20px 60px rgba(0, 0, 0, 0.3)" : "none"
  }} />
      </div>
    </div>;
};

A/B testing lets you compare two or more versions of a page to see which drives better [CVR](/glossary#cvr), [AOV](/glossary#aov), or other metrics. You show version A to a random half your traffic and version B to the other half, then measure which performs better.

## Where to A/B Test in Replo

Access the A/B testing tool from the workspace menu.

Navigate to your workspace settings and select **A/B Testing** to create new experiments, view running tests, and analyze results.

<Screenshot src="/images/ab-testing-feature.png" />

From here, you can create forever links that drive traffic to your A/B tests, set up traffic splits between control and variant pages (as many as you want), and track conversion metrics—all without leaving Replo.

## A/B Testing Strategy for Beginners

Start by researching your site using Google Analytics, heatmaps, session recordings, and customer surveys. Focus on high-traffic pages with poor metrics.

The metrics you track depend on your goals—clickthrough rate, [AOV](/glossary#aov), bounce rate, scroll depth, add-to-cart rate, and more. Most brands focus on [CVR](/glossary#cvr) since it impacts revenue most directly.

Develop strong hypotheses with measurable data observations. Include exact metric changes and predicted impact with clear reasoning.

During execution, run simple A/B tests with just two versions. Test single elements to isolate impact, and commit to full 2-4 week test durations (averaging about 2 full business cycles) to ensure statistical significance.

Document all learnings, including failed or inconclusive tests.

<Tip>
  Industry best practices aren't always right for your audience. Validate them with your specific traffic before implementing. Every brand is different—cater to your target audience first.
</Tip>

### Common Mistakes to Avoid

* Testing with insufficient traffic
* Running too many variations simultaneously
* Stopping tests prematurely
* Testing multiple elements at once per variant

## When You Should Start A/B Testing

You're ready when you have:

* 1,000+ weekly visitors (5,000+ monthly) to pages you'll test
* 100+ conversions per month minimum
* Google Analytics properly installed with goals configured
* 2-4 weeks of baseline data showing stable traffic patterns
* Resources to implement winning variations after testing

You're NOT ready if:

* Your website has major bugs or technical issues
* Traffic fluctuates wildly week-to-week
* You're in the middle of a major store redesign
* You have fewer than 5-10 conversions weekly

### If You Lack Traffic

Start with email A/B testing (needs only 500-1,000 subscribers) or PPC ad testing (5,000+ impressions) to build experimentation skills while growing site traffic.

This lets you learn how A/B testing works on a smaller scale and generate ideas for larger tests when your store is ready.

For example, if a certain CTA button performs well in your newsletters, note that as a future element to A/B test on your webpages.

## What You Should A/B Test

Here's the order of priority we recommend:

<Tabs>
  <Tab title="High-Traffic, High-Impact Pages First">
    Start with pages that drive the most traffic and conversions. These pages have the biggest impact on your business when optimized.

    * Homepage (your highest traffic page)
    * Top 3-5 product pages by traffic
    * Checkout process
    * Category pages
  </Tab>

  <Tab title="Specific Elements to Test">
    Test one element at a time to isolate impact.

    <Warning>
      Always go top down on the page. Start with elements above the fold—80% of users never scroll down before bouncing.
    </Warning>

    ### Homepage Elements

    * Hero section headline and subheadline
    * Primary CTA button text and placement
    * Hero image/video
    * Trust signals (free shipping, guarantees)

    ### Product Page Elements

    * Add to Cart button placement (above vs. below fold)
    * Product image type (lifestyle vs. white background)
    * Number of images shown
    * Product description length and format
    * Social proof placement (reviews, ratings)
    * Trust badges location

    ### Checkout Elements

    * Guest checkout vs. required account creation
    * Number of form fields
    * Progress indicators
    * Security badges placement
    * Shipping cost visibility
  </Tab>
</Tabs>

## Step-by-Step A/B Testing Guide

Follow this process to run your first A/B test. We're covering an example use case to illustrate the steps—adapt the goals and metrics to fit your own test.

<Steps>
  <Step title="Identify the Problem">
    Review your Google Analytics dashboard and look for:

    * High-traffic pages with low conversion rates
    * Pages with high bounce rates
    * Checkout abandonment points

    **Example finding:** Your best-selling product page gets 5,000 monthly visits but only 2% add to cart (100 conversions). Analytics shows 70% of visitors never scroll below the fold.
  </Step>

  <Step title="Add Heatmap Tracking">
    Install Hotjar or Microsoft Clarity to see live user interactions with your site. Replo integrates directly with both tools, so you can get up-to-date heatmap tracking on any of your Replo pages.

    Take note of:

    * Where users click
    * How far they scroll
    * What they ignore
  </Step>

  <Step title="Write Your Hypothesis">
    Make sure your impact is measurable and quantifiable.

    We like this template: "Based on \[data], we believe that \[change] will \[impact] because \[reasoning]."

    **Example hypothesis:** "Based on heatmap data showing 70% of mobile users never scrolling below the fold, we believe moving the Add to Cart button above the fold will increase add-to-cart rates by at least 15% because users won't have to search for the primary conversion action."
  </Step>

  <Step title="Calculate Sample Size">
    Use a statistical significance calculator to determine the sample size you'll need for your test results to have non-random differences.

    You'll need to know the following:

    * Current conversion rate
    * Relative minimum detectable effect (usually set to 15% for a beginner A/B test)
    * Confidence level (usually set to 95% for a beginner A/B test)
    * Statistical power (usually set to 80% for a beginner A/B test)

    <Tip>
      **Relative minimum detectable effect** — The smallest improvement you want to detect (e.g., 15% means you want to spot at least a 15% increase in conversions).

      **Confidence level** — How sure you want to be that your results aren't random (95% means there's only a 5% chance of a false positive).

      **Statistical power** — The probability that you'll detect an actual improvement if one exists (80% means there's an 80% chance you'll find a real improvement when it's there).
    </Tip>

    We like using this [statistical significance calculator](https://www.evanmiller.org/ab-testing/sample-size.html) to calculate the sample size you'll need for your test results to have non-random differences.

    **Example sample size calculation:** If you have these numbers for a simple A/B test:

    * Current conversion rate: 2%
    * Relative minimum detectable effect: 15%
    * Confidence level: 95%
    * Statistical power: 80%

    According to the stat sig calculator, you'll need nearly 35,000 visitors per variation. At 5,000 monthly visits to your site, this test will take around 9 weeks to reach statistically significant results.
  </Step>

  <Step title="Create Your Page Variation">
    In your page building platform of choice, make the necessary edits. Keep everything else the same.

    For this example, that means moving the "Add to cart" button to be above the fold.

    In Replo, you can do this without any manual edits. Simply prompt Replo by typing "move the add to cart button above the fold" and hitting enter, and Replo will do it for you.

    For more complex edits (not needed for a beginner A/B test, but necessary for more advanced tests), you can give Replo a list of edits to work through, and it can execute on all of them at once.

    Once you're done, name the page clearly so you know if this is the variant or the control.
  </Step>

  <Step title="Set Up Your A/B Testing Platform">
    There are many A/B testing platforms to choose from.

    For the most streamlined A/B testing process that comes built-in with our campaign builder, use Replo. Create and edit page variations, and set up and run your experiments—all in the same app.

    With Replo, you can create forever links that are reused across multiple (non-simultaneous) paid ad campaigns, such as on Meta, so you don't need to retrain your ad algorithms every time you run a new A/B test.

    Plus, you can test pages built in any platform of your choice, not just on Replo. All you have to do is create your Replo forever link which drives traffic to the A/B test, and then copy and paste in the URL of your original page and your variant page.

    <Tip>
      Set up your tracking with a 50/50 traffic split between the control and variant. Replo enables you to set up as many variants as you would like, but for a beginner A/B test, we only want a two version split test.
    </Tip>

    In the case of this example, set your primary goal as landing page conversion rate.
  </Step>

  <Step title="Q/A Your Experiment">
    Before you launch your A/B test, visit the experiment link across a number of browsers and devices. Test all links and buttons (especially the one that you are tracking!).

    Items to Q/A include:

    * Chrome, Safari, Firefox
    * Desktop, mobile, tablet
    * Different screen sizes
    * Verify tracking fires correctly
  </Step>

  <Step title="Launch Your Experiment">
    Here's a quick rundown of things to do and not to do:

    * Set test to run for minimum 4 weeks (2 full business cycles)
    * Don't stop early even if you see significance
    * Document start date and expected end date for recordkeeping
  </Step>

  <Step title="Monitor The Test (But Don't Interfere)">
    Check your A/B test weekly for:

    * Technical issues. Ex: broken pages, 404 links, tracking problems
    * Traffic distribution. This should stay close to an even 50/50 split.

    Avoid stopping the test prematurely (even if you already hit a 95% confidence level!), don't run other tests on the same page simultaneously, and don't change anything mid-test.

    <Warning>
      Doing so will corrupt any data that you've already collected and make your collected results untrustworthy.
    </Warning>
  </Step>

  <Step title="Check Statistical Validity">
    Before analyzing your test results, verify that the following is true:

    * Sample size reached: Did each variation get your calculated minimum visitors?
    * Test duration met: Ran for at least 2 weeks spanning complete business cycles?
    * Statistical significance achieved: Confidence level ≥95%?
    * No external factors: No major sales, seasonal marketing campaigns, or technical issues during the test?

    If any answer is NO, keep the test running or restart it.
  </Step>

  <Step title="Analyze Your A/B Test Results">
    Given the set-up of our experiment, there are three possible outcomes:

    * There is a clear winner between results (this is the most common)
    * There is no significant difference between the control version and the test version
    * There is a clear losing version

    **If there is a winner:** Document the learning and apply the insight across your entire site or other similar pages where applicable. Calculate the revenue impact to record how much difference the test result made to your business.

    **If there is no clear winner:** Keep the control, but also document the results of the test. Consider why the test failed: Was the hypothesis wrong? Was the change too subtle?

    <Tip>
      An inconclusive test is not necessarily a failed test—you simply learned what doesn't work and prevented a potentially harmful change.
    </Tip>

    **If there is a clear losing version:** Document the change and impact. Be happy that you prevented a change that would've cost your store money! Study this learning and try to apply it to developing new future hypotheses.

    For example, you can test adding key product info above fold alongside the CTA button, and see if that combination will generate a positive result.

    In this way, you can see how A/B test results build on each other over time.

    While your key metric might be conversion rate or add-to-cart rate, other secondary metrics that you may want to look at include revenue per visitor, [AOV](/glossary#aov), and bounce rate.

    In addition, analyze audience behaviors across the two versions by segment:

    * Device type (mobile vs. desktop)
    * New vs. returning visitors
    * Traffic source (organic, paid, direct)
    * Geographic location

    Many times, segmenting allows you to dissect larger scale audience trends into more specific (and actionable) insights that you might have missed otherwise.

    **Example insight:** "The overall test showed no clear winner, but mobile users increased conversions 45% while desktop decreased 10%. We should implement the variation for the mobile store only."
  </Step>
</Steps>

As you work through cycles of A/B testing, you'll realize that the result of one A/B test often leads to more hypotheses to experiment with.

That's a good thing! It means that you are gradually working your way through methods to improve your store. This includes implementing proven positive ROI changes, or knowing to avoid proven harmful changes.

To learn more about A/B testing, check out our [full guide](https://www.replo.app/blog/how-to-ab-test-landing-pages) on the topic.
