# Use Kameleoon documentation with AI Source: https://docs.kameleoon.com/home/use-docs-with-ai Connect Kameleoon documentation to your AI assistant or agentic workflow using built-in per-page options and an MCP server. Every page in the Kameleoon documentation includes built-in options for connecting content to your AI tools. Use them to ask questions about an individual article in one click, or configure a persistent MCP server that gives your IDE or AI agent access to the full documentation. ## Per-page options A contextual menu at the top of each article provides the following actions: | Option | What it does | | --------------------- | -------------------------------------------------------------------------------------------------------------------------- | | **Copy** | Copies the page as plain text for direct use in any chat. | | **Open in ChatGPT** | Opens the current page in a new ChatGPT conversation. | | **Open in Claude** | Opens the current page in a new Claude.ai conversation. | | **Copy MCP Server** | Copies the Kameleoon docs MCP server configuration for use in Claude Desktop, Cursor, VS Code, or any MCP-compatible tool. | | **Connect to Cursor** | Generates a configuration snippet to add the Kameleoon docs as a persistent knowledge source in Cursor. | | **Open in VS Code** | Opens the page context in VS Code Copilot Chat. | ## Configure a persistent docs MCP server For ongoing use, connect the Kameleoon docs as a persistent MCP server so your AI assistant can answer documentation questions without copying individual pages each time. ### Step 1: Copy the MCP server configuration Open any page in the Kameleoon docs and click **Copy MCP Server** from the contextual menu at the top of the article. This copies a pre-configured snippet for the Kameleoon docs MCP server. ### Step 2: Add the server to your tool 1. Open your Claude Desktop configuration file: * **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json` * **Windows:** `%APPDATA%\Claude\claude_desktop_config.json` 2. Paste the copied snippet into the `mcpServers` object. 3. Save the file and restart Claude Desktop. After restarting, start a new conversation and ask a documentation question—for example: *"How do I set up a feature flag in the Python SDK?"* or *"What statistical methods does Kameleoon support?"* Select **Connect to Cursor** from the contextual menu on any docs page, or: 1. Copy the MCP server configuration using **Copy MCP Server**. 2. Open Cursor Settings (`Cmd+Shift+J` on macOS, `Ctrl+Shift+J` on Windows) and go to **Features > MCP Servers**. 3. Click **+ Add New MCP Server** and paste the configuration. 4. In Cursor's Agent chat, ask documentation questions: *"What targeting options are available in Kameleoon?"* 1. Select **Open in VS Code** from the contextual menu, or paste the snippet from **Copy MCP Server** into your VS Code MCP configuration. 2. In GitHub Copilot Chat or another MCP-compatible extension, ask questions about Kameleoon documentation inline while you code. ## What the docs MCP server can do After you connect the Kameleoon docs MCP server, your AI assistant can: * Answer questions about any topic covered in the Kameleoon documentation. * Retrieve and summarize articles from the user manual and developer docs. * Walk you through setup guides, SDK references, and API documentation step by step. The docs MCP server provides read access to documentation. To manage feature flags, retrieve experiment results, or automate your implementation workflow from an AI assistant, see the [Kameleoon MCP server](/developer-docs/developer-tools/mcp-server). # Welcome to Kameleoon Source: https://docs.kameleoon.com/home/welcome Kameleoon is a powerful, unified platform designed to help teams deliver better digital experiences through experimentation, feature management, and personalization. ## Choose your path Select the portal that best fits your role and what you are trying to build today. For marketers, product managers, and QA teams. Learn how to create, configure, and analyze experiments, manage personalizations, and use the Widget Studio. For engineers and technical teams. Find implementation guides, SDK references, API documentation, and edge-compute starter kits. *** ## Don't know where to start? Take this quick 3-question quiz to find the exact documentation you need for your tech stack and use case. *** ## Use docs with your AI assistant Ask questions, get step-by-step guidance, and explore the full Kameleoon knowledge base—directly from your AI tool. Open any article in Claude or ChatGPT with one click, or configure a persistent MCP server for Claude Desktop, Cursor, VS Code, and more. *** ## Core capabilities Blend experimentation, feature management, and personalization into one platform across web, mobile, and backend environments. Use natural language prompts to instantly generate variations, or use the visual editor to test copy, design, and layouts on any website or single-page app. Decouple deployment from release. Roll out new features progressively, run server-side experiments, and reduce risk with targeted feature flags. Deliver experiences tailored to specific users in real-time by leveraging behavioral data, CRM integrations, or your data warehouse. Access reliable, real-time results powered by Kameleoon's multi-statistical engine (CUPED, Bayesian, or Sequential testing). *** ## Explore Kameleoon's tech stack Deploy Kameleoon anywhere. We provide more than a dozen SDKs, REST APIs, and integrations to fit perfectly into your existing ecosystem. Implement experiments quickly using JavaScript, TypeScript, React, Vue, PHP, Python, Ruby, Go, or Java. [Explore Web SDKs →](../developer-docs/sdks/web-sdks/js-sdk) Bring feature flagging and experimentation to your native apps with iOS, Android, Flutter, and React Native SDKs. [Explore Mobile SDKs →](../developer-docs/sdks/mobile-sdks/ios-sdk) Programmatically control experiments, automate workflows, and inject custom data using Kameleoon's REST and JS APIs. [Explore APIs →](../developer-docs/apis/overview) # Compare menu Source: https://docs.kameleoon.com/user-manual/experiment-analytics/analyze-results/results-page-tabs/compare-menu Compare variation performance side by side for specific goals using tables and radar charts to make more informed optimization decisions. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/compare-menu/compare-menu-1-1.png) The **Compare** menu lets you analyze and compare variations' performance against each other for specific goals. Tables and graphs visually contrast variations, allowing for more informed analysis and optimization. You can easily compare the performance of your variations. To change the variations you're comparing, click one of the dropdown menus and select the desired variations. The chart and its values will update to reflect your selections. To visualize comparisons, click **Show graph** to display a radar chart comparing the selected variations. You can customize the chart by choosing which goals to include in the comparison. To close the chart, click **Hide graph**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/compare-menu/compare-menu-graph-1.png) You can add multiple comparisons within the Compare section. To do so, click **+Add a comparison** to create a new comparison between variations. If you want to remove a comparison, click the **trash can** icon next to the comparison you wish to delete. # Health menu Source: https://docs.kameleoon.com/user-manual/experiment-analytics/analyze-results/results-page-tabs/health-menu Monitor experiment data reliability with automated health checks that detect tracking issues, traffic imbalances, and sample contamination. The **Health** menu helps you monitor your experiment's data reliability. It automatically runs a series of checks to detect potential issues in tracking, traffic balance, or data collection, giving you greater confidence in your experiment results. A health status badge is also displayed in the [**Overview** menu](./overview-menu) and on the **Experiments** homepage, so you can quickly see if everything is running smoothly. ## What are Health Checks Health Checks are automated diagnostics that monitor your experiment's overall health. They run **hourly during the first 24 hours** after an experiment is activated, and **daily** afterward for all active experiments. You can also trigger them manually each time you open the Results page. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/health-menu/health-check-srm.png) These checks help you: * Detect tracking or data anomalies early. * Confirm that your experiment is still collecting data as expected. * Identify potential biases that could affect your results. There are four core checks: | Check name | Purpose | | ------------------------------ | ------------------------------------------------------------------------------------- | | **Visitor Tracking Check** | Verifies that new visitors are still entering the experiment regularly. | | **Conversion Tracking Check** | Ensures that all attached goals are still receiving conversions. | | **SRM Check** | Detects sample ratio mismatches between variations and expected traffic distribution. | | **Overlapping Exposure Check** | Identifies users exposed to multiple variations of the same experiment. | ### Health Check thresholds Each Health Check uses specific thresholds to determine its status. Understanding these thresholds helps you interpret the severity of any detected issues. #### Sample Ratio Mismatch Check This check uses a Chi-squared test to calculate a p-value that measures how closely your actual traffic distribution matches the expected split. | Status | Threshold | Meaning | | ----------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Passed** | p-value ≥ 0.01 | Traffic allocation is balanced. The observed distribution matches the expected split, and randomization is working correctly. | | **Warning** | 0.001 ≤ p-value \< 0.01 | Traffic allocation shows minor imbalance. The user split is deviating slightly from the expected ratio. While not yet critical, this status could indicate an emerging issue. | | **Failed** | p-value \< 0.001 | **CRITICAL:** Sample Ratio Mismatch (SRM) detected. The observed user split is significantly different from the expected ratio, indicating a high probability of a systemic issue (for example, tracking bug, implementation error). | #### Overlapping exposure check The overlapping exposure check identifies the percentage of users who see different variations of the same experiment across multiple visits. An overlap occurs when a user sees one variation during an initial visit and a different variation in a subsequent visit. The system calculates the rate using the following formula: (users exposed to more than one variation) ÷ (total users in the test). | Status | Threshold | Meaning | | ----------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Passed** | \< 2% | Sample contamination is minimal. The level of user crossover is within acceptable limits for maintaining high data integrity. | | **Warning** | 2% to 5% | Moderate sample contamination detected. A small percentage of users have seen multiple variations, introducing some noise and potentially reducing statistical power. | | **Failed** | > 5% | **CRITICAL:** High sample contamination. A significant portion of users have been exposed to multiple variations, which can severely bias results and invalidate the experiment. | #### Conversion Tracking Check This check monitors whether your goals are actively receiving conversions. | Status | Threshold | Meaning | | ----------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Passed** | Conversions recorded in the last 24 hours | Conversion tracking is active. Goal events are being recorded as expected. | | **Warning** | Zero conversions for at least one goal in the last 24 hours | No conversions were recorded for at least one goal in the last 24 hours, which could be due to low traffic, but may indicate a tracking issue. | | **Failed** | Zero conversions for > 48-72 hours | **CRITICAL:** Conversion tracking has failed. No conversions have been recorded for at least one goal for multiple days. The tracking implementation is likely broken. | #### Visitor Tracking Check This check verifies that new visitors are still entering the experiment. | Status | Threshold | Meaning | | ----------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Passed** | Visitors recorded in the last 24 hours | Visitor tracking is active. Visitors have been successfully recorded in the last 24 hours. | | **Warning** | Zero visitors in last 24 hours | No visitors have reached the experiment in the last 24 hours. Traffic may be low or targeting issues may exist. | | **Failed** | Zero visitors for > 48-72 hours | **CRITICAL:** No new visitors detected for an extended period. The experiment may not be correctly targeted or technical issues may be blocking visit logging. | ## Health summary in the Overview menu At the top of the **Overview** menu, you'll find a **Health summary badge** showing your experiment's overall health at a glance. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/health-menu/failed-checks.png) * The badge color represents the current status across all checks: * **Red:** Failed check * **Yellow:** Warning * **Gray:** Pending * **Green:** All checks passed * The text inside the badge displays the number of non-passing checks (red + yellow + gray), or **All passed** if everything is green. Hover over the badge to see a tooltip listing all four checks with their individual statuses. | Icon | Status | Description | | ---- | ------- | -------------------------- | | ✅ | Passed | No issue detected | | ⚠️ | Warning | Potential issue detected | | ❌ | Failed | Issue impacting experiment | | ⚪ | Pending | Check not yet evaluated | At the bottom of the tooltip, click **View full health report** to open the **Health** menu. ## Health status on the Experiments homepage The [**Health Checks** block on the Experiments homepage](../../../get-started/using-the-homepage#health-checks) gives you a fleet-level view of data-quality issues across all your active experiments, without having to open each one individually. The block shows four counters that summarize the overall health of your active experiments: * **Passed:** All checks are healthy * **Warning:** At least one check needs review * **Failed:** At least one check has failed * **Pending:** Checks have not yet run Only experiments with warnings or failed checks appear in this block. Healthy experiments are listed separately in the **Currently live** section. Hover over an experiment's status to see a tooltip listing individual check results and the timestamp of the last evaluation. Click any experiment row to open the full **Health** menu for that experiment. ## Navigating the Health menu The **Health** menu provides a detailed, interactive view of all checks and their results. ### Top banner At the top of the menu, you'll see: * **X/Y checks run:** Number of checks completed (X) out of the total (Y). * **Last updated:** The most recent evaluation time. * **Status breakdown:** A count of checks by status—Passed, Warning, Failed, or Pending. ### Check details This tab is divided into two sections: * **Left column:** * A clickable list of the four Health Checks, each showing its current status icon. * **Right column:** * A detailed description of the selected check, including: * What it monitors * What the current status means * Recommended **Next Steps** if the check has a Warning or Failed status For the **Conversion Tracking Check**, you'll also see a table listing all goals in your experiment, along with their individual statuses and the timestamp of their last recorded conversion. ## Special cases ### Pending status The **Pending** status appears only when the experiment has just launched and no Health Check job has run yet. This state is temporary and automatically resolves once the first evaluation (hourly or manual) is completed. ### Paused or stopped experiments When an experiment is **paused** or **stopped**, the Health menu becomes disabled. The Health summary badge in the Overview menu is also hidden to keep the Results page clear. ## Data updates and refresh * Health Checks run **hourly** during the first 24 hours after activation, then **daily** for all active experiments. * When you open the Results page, checks are refreshed on-demand. * Cached results display instantly and automatically update once new data is received. ## Compatibility Health Checks are available for all experiment types: * A/B tests * Feature flags * Personalization campaigns # Metrics menu Source: https://docs.kameleoon.com/user-manual/experiment-analytics/analyze-results/results-page-tabs/metrics-menu View and compare variation performance metrics per goal or per variation, including conversion rates, revenue, and reliability scores. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/metrics-menu/metrics-menu.png) The **Metrics** menu lets you assess variations' performance in your experiment. Here, you can view critical metrics for each variation, either per **goal** or **variation**, to understand how each variation performs relative to your objectives. ## Viewing metrics per goal or variation A critical component of the Results page is the ability to track and analyze metrics per goal and variation. This flexibility enables you to understand how each variation performs against your experiment's predefined goals. By providing visibility to these metrics, you can confidently identify which variations are most effective and ensure that you base your decisions on reliable, goal-specific data. You can view metrics by **goal** or **variation**, depending on your needs. * To view metrics by goal, click **Goals**. * To switch to viewing metrics by variation, click **Variation**. You can customize which goals or variations are displayed by following these steps: 1. Click the goals or variations dropdown. 2. Check or uncheck the items (goals or variations) you want to display or hide. ## Goals The **Goals** section displays both the primary and secondary goals for your experiment. To view detailed performance data for a specific goal, click anywhere on the goal's panel. A breakdown of key metrics will appear, including: * Variation names * Visits * Converted visits * Conversion rate * Reliability score For relevant goals, revenue metrics will also be displayed. The metrics here include: * Average cart value * Revenue per visit * Total revenue On a campaign's Results page, a session is counted as a converted visit only if the conversion occurs after the campaign's targeting. This helps eliminate noise and provides a more accurate estimate of the variation's impact. You can also visualize the data by clicking **Show graph**. Once the graph is displayed: 1. Use the first dropdown to select the **metric** you want to visualize. 2. Use the second dropdown to choose which **variations** you want to include in the graph (you can check or uncheck variations). 3. Use the third dropdown to select the **time range** for the data you want to analyze. To hide the graph, click **Hide graph.** ## Variations ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/metrics-menu/variation-metrics.png) The **Variations** section provides an overview of how each variation in your experiment is performing on your goals. Each variation's panel includes the following metrics: * Traffic diversion * Number of visits * Converted visits * Reliability score * Improvement rate * Confidence interval ### Confidence interval The confidence interval graph provides several manipulation tools: * **Zoom in:** Click **+**. * **Zoom out:** Click **-**. * **Reset:** Click the **reset** icon. * **Drag view:** Select the **hand** icon, then click and drag the graph. Click the hand icon again to re-enable hover functionality. ### Revenue metrics A separate section, **Revenue metrics attached to Variation X**, is available. This section lists: * Average cart value * Revenue per visit * Total revenue * Reliability score * Improvement rate * Confidence interval #### Revenue chart You can also visualize revenue data by clicking **Show graph**. Once the graph is displayed: 1. Use the first dropdown to select the **metric** you want to visualize (conversion rate, number of visits, revenue) . 2. Use the second dropdown to choose which **goals** you want to include in the graph (you can check or uncheck goals). 3. Use the third dropdown to select the **timescale** for the data you want to analyze. To hide the graph, click **Hide graph.** ##### Graph controls ###### Select area To focus on a specific area of data: 1. Click the **Select area** icon. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/metrics-menu/select-area-icon.png) 2. Click and drag over the chart to select the desired area. 3. Click the **checkmark** to confirm your selection. The chart will now display the selected area. ###### Zooming and resetting * Click **+** to zoom in on the chart. * Click **-** to zoom out. Click the **Reset** icon to reset your view of the chart. # Overview menu Source: https://docs.kameleoon.com/user-manual/experiment-analytics/analyze-results/results-page-tabs/overview-menu View a high-level summary of your experiment, including the recommended winning variation, primary goal performance, and interactive charts for conversion rate and reliability. The Overview menu provides a high-level summary of your experiment. It displays the recommended variation based on its performance on your goals and key statistics relevant to your experiment. Visual charts provide deeper insights and allow for comparisons between variations. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/overview-menu/overview-menu.png) ## Winning variation ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/overview-menu/winning-variation-panel.png) At the top of the page, you'll find your experiment's main results. The panel lists: * The recommended variation. * The variation's improvement rate. * The variation's reliability. * The total number of visits in the selected time range. * The experiment's duration in days. You will also find relevant warnings here. Hover over the panel to view Kameleoon's justification for your recommended variation. The selection of a recommended variation is based on the variation's conversion rate on your primary goal, and its improvement and reliability rates computed using the numbers from the converted visits / visitors view. ## Primary goal ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/overview-menu/primary-goal-chart.png) This panel provides a table detailing your variations' performances on the primary goal. From left to right, the table lists the following: * Variation names * Number of visits per variation * Percentage of conversions per variation * Revenue generated (for relevant goals) * Average cart value (for relevant goals) * Reliability score * Improvement compared to the reference variation ### Confidence interval The **confidence interval** graph appears on the table's far right. The confidence interval indicates the range within which a statistic's actual value is likely to fall. The **+/-** represents each variations' margin of error. Hover over a variation for a detailed breakdown. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/overview-menu/confidence-interval-graph.png) The breakdown displays: * The variation's improvement rate, accompanied by its confidence interval. * The variation's reliability score. * The variation's minimum and maximum improvement rate. * A link to learn more about Frequentist or Bayesian statistical methods (depending on your selection). #### Graph controls The confidence interval graph provides several manipulation tools: * **Zoom in:** Click **+**. * **Zoom out:** Click **-**. * **Reset:** Click the **reset** icon. * **Drag view:** Select the **hand** icon, then click and drag the graph. Click the hand icon again to re-enable hover functionality. ## Charts ### Comparison ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/overview-menu/comparison-chart.png) The **Comparison** section features a radar chart that visually represents each variation's improvement rate compared to the original for your selected goals. Hover over a variation’s dot on the chart to view: * Improvement rate * Confidence interval * Reliability score Hover over a goal to see each variation's improvement relative to the original. You can customize the chart by selecting which goals to display. To show or hide goals: 1. Click on the **dropdown menu** above the chart. 2. Scroll to or search for your desired goal. 3. Click the **checkbox** next to each goal’s name to toggle its visibility. ### Conversion rate on primary goal ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/overview-menu/conversion-rate-chart.png) The **Conversion rate on primary goal** section presents a line graph that tracks each variation's conversion rate on your primary goal over the selected time range. Hover over any point on the chart to view: * The **date** corresponding to the data. * Each variation’s **conversion rate** on that day. #### Chart controls The chart provides several tools to help you customize your view. ##### Timescale To adjust the timescale of the data to day, month, or year: 1. Click the **dropdown menu** above the chart. 2. Select **Day**, **Month**, or **Year**. The chart will update to display data at the selected time interval. ##### Select area To focus on a specific area of data: 1. Click the **Select area** icon. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/overview-menu/select-area-icon.png) 2. Click and drag over the chart to select the desired area. 3. Click the **checkmark** to confirm your selection. The chart will now display the selected area. ##### Zooming and resetting * Click **+** to zoom in on the chart. * Click **-** to zoom out. * Click the **Reset** icon to reset your view of the chart. ### Total visits ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/overview-menu/total-visits-graph.png) The **Total visits** section provides a line graph showing your variations' total number of visitors over a selected time range. Hover over any point in the chart to display: * The **date** associated with the data. * The **total number of visitors** on the specified date. #### Chart controls The chart provides several tools to help you customize your view. ##### Timescale To adjust the timescale of the data to day, month, or year: 1. Click the **dropdown menu** above the chart. 2. Select **Day**, **Month**, or **Year**. The chart will update to display data at the selected time interval. ##### Select area To focus on a specific area of data: 1. Click the **Select area** icon. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/overview-menu/select-area-icon.png) 2. Click and drag over the chart to select the desired area. 3. Click the **checkmark** to confirm your selection. The chart will now display the selected area. ##### Zooming and resetting * Click **+** to zoom in on the chart. * Click **-** to zoom out. * Click the **Reset** icon to reset your view of the chart. ### Reliability rate ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/overview-menu/reliability-rate-graph.png) The **Reliability rate** section presents a line graph showing your variations' reliability rates over a selected time range. Hover over any point in the chart to display: * The **date** associated with the data. * The **reliability rate** on the specified date. The reference (original) variation is not displayed on the chart. #### Chart controls The chart provides several tools to help you customize your view. ##### Variation selection To show or hide a variation from the chart: 1. Click the **dropdown menu** above the chart on the left-hand side. 2. **Check the box** next to a variation to show it, or **uncheck the box** to hide it. ##### Timescale To adjust the timescale of the data to day, month, or year: 1. Click the **dropdown menu** above the chart. 2. Select **Day**, **Month**, or **Year**. The chart will update to display data at the selected time interval. ##### Select area To focus on a specific area of data: 1. Click the **Select area** icon. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/overview-menu/select-area-icon.png) 2. Click and drag over the chart to select the desired area. 3. Click the **checkmark** to confirm your selection. The chart will now display the selected area. ###### Zooming and resetting * Click **+** to zoom in on the chart. * Click **-** to zoom out. * Click the **Reset** icon to reset your view of the chart. ### Total revenue ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/overview-menu/total-revenue-chart.png) The **Total revenue** section presents a line graph showing your variations' total revenue over a selected time range. The Total revenue graph only appears if your primary goal is a Revenue goal. Hover over any point in the graph to display: * The **date** associated with the data. * The **total revenue** on the specified date. #### Chart controls The chart provides several tools to help you customize your view. ##### Variation selection To show or hide a variation from the chart: 1. Click the **dropdown menu** above the chart on the left-hand side. 2. **Check the box** next to a variation to show it, or **uncheck the box** to hide it. ##### Timescale To adjust the timescale of the data to day, month, or year: 1. Click the **dropdown menu** above the chart. 2. Select **Day**, **Month**, or **Year**. The chart will update to display data at the selected time interval. ##### Select area To focus on a specific area of data: 1. Click the **Select area** icon. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/overview-menu/select-area-icon.png) 2. Click and drag over the chart to select the desired area. 3. Click the **checkmark** to confirm your selection. The chart will now display the selected area. ##### Zooming and resetting * Click **+** to zoom in on the chart. * Click **-** to zoom out. * Click the **Reset** icon to reset your view of the chart. # Access the Results page Source: https://docs.kameleoon.com/user-manual/experiment-analytics/analyze-results/results-page/access-the-results-page Navigate to the Results page for any experiment or personalization campaign directly from the Kameleoon dashboard. To access a campaign's results page: 1. Log in to Kameleoon. 2. Click **Experiences** > **A/B Test** or **Personalization** depending on which results you'd like to access. 3. Click **Results** on an experiment or personalization's card. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/access-the-results-page/results.png) Your Results page data is kept for two years. After this period, they are deleted, and you can no longer access them, which complies with the legal retention periods for personal data. # Result page actions Source: https://docs.kameleoon.com/user-manual/experiment-analytics/analyze-results/results-page/results-page-actions Export results, share reports, configure alerts, reset data, and access additional actions available on the experiment Results page. ## Export Click **Export** to access available export options. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-actions/Screenshot-2025-06-04-at-12.10.26 PM.png) You can choose: * The export format * The type of data to export * To only export specific metrics, goals, or variations Click **Export** to export your results. ### XLSX export The XLSX export option allows you to download your experiment results in a structured Excel spreadsheet format. This format includes multiple tabs that organize different aspects of your results. When you choose XLSX export: * You get a detailed overview with pre-formatted tables. * The structure is more user-friendly and suited for manual review or presentation. #### Data to export ##### Type of data to export ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-actions/Screenshot-2025-06-11-at-10.09.31 AM.png) You have several options to manage what data will be exported to the XLSX report. * **Visit based:** Display data based on total number of visits. * **Visitor based:** Display data based on total number of unique visitors. * **View per goal:** Export data based on goals. * **View per variation:** Export data based on variations. * **Only export specific metrics:** Toggle the switch on and select or deselect which metrics you'd like to include/exclude from your export. * **Only export specific goals:** Toggle the switch on and select or deselect which goals you'd like to include/exclude from your export. * **Only export specific variations:** Toggle the switch on and select or deselect which variations you'd like to include/exclude from your export. ### CSV export CSV offers a raw, simplified format. It is particularly useful for custom analysis or if you plan to import the data into another analytics tool. However, there are a few key points to note: * **CSV exports raw data**. Unlike the XLSX export, which is organized and formatted for easy viewing, the CSV export offers unprocessed data that is ideal for deeper technical analysis. * **The unit of export is limited**, which means that, depending on your selection, only certain data points may be included. * **Available options will change** based on the export format. For example, filters and breakdowns are available in XLSX but not CSV. Instead, CSV exports will account for any filters you applied on the Results page. * Because CSV files are more minimal, they provide more **flexibility for scripting or automated workflows.** If you’ve set up metadata for a goal, it will automatically appear as a column in the raw export. This column contains a list of metadata values sent for each conversion. #### Additional data ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-actions/Screenshot-2025-06-11-at-10.10.40 AM.png) Select or deselect the custom data that you want to include as additional columns in you CSV export. #### Send report to ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-actions/send-to.png) Enter the recipient email addresses for the export. Separate multiple addresses with commas. By default, the platform limits exports to 1 million units per month. A unit corresponds to a single visit or visitor. To remove this cap, you must purchase the unlimited export add-on. #### Units Displays how many export units you have available. The total unit cost of your export is displayed in parentheses next to **Send**. If you want unlimited units, you must request an upgrade. To do so, click **Ask for an upgrade** > **Send upgrade request**. ## Additional actions Click the **three-dots menu** to access additional actions available on the Results page. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-actions/Screenshot-2025-04-15-at-8.57.47 AM.png) ### Share Click **Share** to access sharing options for your campaign’s results. In the **Share results** tab, click **Copy link** to copy a shareable link to your results. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-actions/Screenshot-2025-04-15-at-10.03.01 AM.png) ### Simulate Click **Simulate** to open a simulation of your experiment in a new tab. ### Alerts Click **Manage alerts** to access the **Alerts** menu. Kameleoon checks for alert conditions on a schedule—typically every hour—rather than immediately as they occur. If your criteria are met during a check, Kameleoon triggers the alert and sends it to the receivers. **Receivers** indicates who will receive your alert when it triggers. To change your alert’s receivers and language, click **Edit settings.** #### Edit settings ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-actions/Screenshot-2025-04-15-at-10.17.20 AM.png) Type a receiver’s email address and press **Enter**. Click the **X** icon to delete an address from your receivers. Click the dropdown menu to access the available languages (**English**, **French**, and **German**). Click a language to select it. Click **Save** to save your settings. #### Add an alert Click **Create an alert** to access the **Add an alert menu**. You have three alert types to choose from: * **Results are usable:** The primary goal’s results have been consistent over the past five days, indicating the results are reliable. * **A variation is winning:** A variation is reliable and has the highest conversion rate for the main goal. * **A condition is reached:** You can create personalized criteria that, when met, will trigger an alert. Click either **Results are usable** or **A variation is winning** > **Save** to create an alert. ##### A condition is reached If you click **A condition is reached** > **Next**, you must define the alert’s criteria. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-actions/Screenshot-2025-04-15-at-10.25.40 AM.png) You have several conditions to choose from. To set an alert for a condition: 1. Select a condition from the list. 2. Set the comparison logic (**is higher than** or **is lower than**) and enter the corresponding numerical value. 3. Select the goals or variations on which to track the condition. 4. Click **Save.** #### Active alerts Once you’ve created an alert, it will appear in the **Alerts** menu. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-actions/Screenshot-2025-04-15-at-10.38.29 AM.png) Alerts that haven't been triggered will appear in the **Pending** tab. Triggered alerts will appear in the **Completed** tab. Hover over the **i** icon to access alert details. Click the **three-dots menu** to **Edit** or **Delete** an alert. ### Experiment configuration Click **Experiment configuration** to access important details about your experiment. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-actions/Screenshot-2025-04-15-at-10.44.14 AM.png) In the **Experiment configuration** menu, you can access your experiment’s: * Description * Traffic distribution * Goals * Targeting * Reporting tools Click **Edit** to edit the relevant value in the Finalization page. You can also access your experiment’s: * Minimum reliability * Attribution window Click **Edit project** to open your project’s **Configuration** page. ### Open in the graphic editor Click **Open in the graphic editor** to open your experiment in the Graphic editor. ### Open in the code editor Click **Open in the code editor** to open your experiment in the Code editor. ### Refresh data Click **Refresh data** to refresh the page and retrieve your experiment’s latest data. ### Pause data collection Click **Pause data collection** > **Pause data** to stop collecting data for your experiment. You must manually restart data collection in your experiment; however, you will still have access to previously collected data while data collection is paused. To restart data collection, click **Start data collection** > **Restart data**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-actions/Screenshot-2025-04-15-at-10.54.17 AM.png) ### Reset data Resetting data will visually erase all results from the campaign’s reporting interface. This is a **purely visual operation** — the underlying data is not permanently deleted but hidden from view starting from the reset date. Resetting a campaign lets you **restart the experiment**, clearing all previously collected results. However, it does **not affect user bucketing**: visitors who were previously exposed to a variation will continue to see the same one upon returning. If you want visitors to be re-randomized, you must also reallocate traffic or create a new experiment. To reset your experiment’s data: 1. Click **Reset data**. 2. Type **RESET** into the text field when prompted. 3. Click **Reset data**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-actions/reset-data.png) Resetting your data unlinks all data from your experiment: data will no longer be displayed in your results. This action is permanent and irreversible. Click **Cancel** if you do not want to reset your data. This action does not reset the attribution window. Since these visitors were exposed in the past, we will still consider their influenced sessions for your visitor-level results. # Results page glossary Source: https://docs.kameleoon.com/user-manual/experiment-analytics/analyze-results/results-page/results-page-glossary Look up definitions for key terms displayed on the Results page, including attribution window, conversion rate, reliability, and visitor metrics. On this page, you will find terms appearing on the results page and their definition. ## Attribution window The attribution window defines the period of time during which a visitor's conversions and transactions are attributed to a given variation. By default, it is set to seven days. [Learn more about the attribution window](../data-and-metrics/how-kameleoon-counts-conversions#attribution-window) ## Audience Audience is the number of visitors/visits exposed to a variation during a campaign period. It also shows the percentage of exposed visitors/visits relative to the total number of targeted visitors/visits. ## Conversion rate Conversion rate is the figure you seek to optimize during a personalization or an A/B experiment. It is the percentage of visitors converted compared to the total number of exposed visitors. ## Improvement rate Improvement rate measures how much the conversion rate increases for visitors who are shown a personalization (exposed visitors) compared to visitors who are targeted by the campaign but not shown a personalization (targeted but not exposed). ## Minimum detectable effect (MDE) The MDE is the minimum effect size you would like to detect in an experiment. MDE is relative to your goal's control mean. For example, if your control variation's conversion rate is 1%, an MDE of 5% will let you detect if the conversion rate goes below 0.95% or above 1.05%. ## Positive outcome experiments A positive outcome experiment is an experiment whose variation has made a significant improvement to the experiment's primary goal. ## Revenue Indicates the total revenue generated by visitors/visits that are exposed to the personalization. ## Revenue per visit/visitor Indicates the average revenue generated by each visit/visitor to the variation. ## Goal A goal is what you want to improve through your personalization. ## Breakdown Breakdown is a sorting tool that lets you display more precise results. ### Acquisition channel breakdown values When you break down results by acquisition channel, two system-generated entries may appear: * **RESTART**: Kameleoon assigns this label to sessions with no referrer. Sessions without a referrer typically occur when a visitor's session became inactive while the browser tab remained open and the visitor then returned to the page. * **DELETED**: Kameleoon assigns this label to visits that were associated with an acquisition channel that has since been deleted. Because the original channel no longer exists, Kameleoon cannot match the visit to a named channel. ## Capping Capping lets you limit visitors' exposure to your personalization. ## Planning/Scheduling You can schedule your personalization on one or more dates. Personalizations are always shown by default. ## Micro-targeting Micro-targeting lets you hide a personalization if a sufficient number of conditions are not fulfilled. [Learn more on the weight of conditions](../../../assets/segments/create-a-segment) ## Visit When the same visitor lands on your website, Kameleoon creates a new visit. A visit ends when Kameleoon receives no new activity from the visitor for 30 minutes. ## Visitor The measurement of unique visitors is based on a first-party cookie that contains an anonymous unique identifier, called the Kameleoon `visitorcode`. The `visitorcode` is randomly assigned, and stored on the user's device for 365 days. # Results page settings Source: https://docs.kameleoon.com/user-manual/experiment-analytics/analyze-results/results-page/results-page-settings Learn how to configure date ranges, apply audience filters and breakdowns, and select statistical methods on the Kameleoon Results page. The Results page offers tools and configuration options to customize how Kameleoon displays your experiment data. Control date ranges and apply filters to refine results, identify trends, and draw actionable conclusions. ## Date controls The **Overview**, **Metrics**, and **Compare** sections feature a toolbar to adjust the time range for data on the Results page. The selected time range applies to all data on the page for a consistent view. To change the time range: ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-settings/calendar-view.png) 1. Click the **Calendar** icon. 2. Select one of the following options to customize the date range: * **Fixed:** * Enter a **start date** and an **end date**, or select the dates on the calendar. * To specify a precise time, click the **Clock** icon to set an hour. * **Since:** * Enter a date to display data from that point onward. * **Last:** * Enter a number and choose a unit (**Days**, **Weeks**, or **Months**) from the dropdown to display data from the specified period. You can also choose preset time ranges: * **All time:** Data collected since the start of the experiment. * **30D:** Data from the last 30 days. * **7D:** Data from the last 7 days. ## Settings sidebar To access the settings sidebar, click the sideways chevrons on the right side of the page. The sidebar contains three tabs: **Audience**, **Data**, and **Views**. ### Audience The **Audience** tab lets you filter and break down the audience data that Kameleoon analyzes and displays on the Results page. Filters and breakdowns consider all events that occur within a session or across the visitor's sessions. They operate independently of campaign targeting times. #### Filter audience The new filter interface is available only to beta users. [Join the Kameleoon beta program](../../../account-and-team-management/organization-settings/join-beta-program) to try it. Filter your audience to analyze specific visitor segments. You can apply single filters or create complex filter groups with AND/OR logic. ##### Apply a single filter Apply a single filter directly in the sidebar: 1. Navigate to the **Audience** menu and click **Add filter** > **Add filter**. 2. Select an identifier from the list. 3. Configure the rule in the inline editor by selecting an operator and value. * For example, select **Converted goals**, choose **Is** from the dropdown, and select one or more goals. 4. Click **Apply filter**. The filter appears as a summary card in the sidebar. Click the **three-dots** menu on the card to **Edit**, **Delete**, or **Turn into filter group**. ##### Create a filter group Create a filter group to combine multiple conditions using AND and OR logic: 1. Navigate to the **Audience** menu and click **Add filter** > **Add filter group**. The **Filters builder** opens. 2. Define the group logic (**If any** for OR, **If all** for AND) using the top dropdown. 3. Drag and drop conditions from the sidebar into the builder. 4. Configure each condition within the group. * For example, you can set the **Device type** condition to **include desktop**, and **Converted goals** to **include retention rate** in another. 5. Click **Apply filter**. In the filter group, click the **three-dots** menu on any condition to: * **Delete** the condition. * **Duplicate** the condition. * **Convert to single filter**. * **Convert to subgroup** (if not already a subgroup). ##### Manage applied filters Applied filters appear in the **Audience** sidebar. * **Read summary:** Group filters display their structure with OR/AND operators and indentation. Hover over a rule to see its full definition in a tooltip. * **Edit group:** Click **Edit filter group** on the summary card to reopen the builder. * **Clear all:** Click **Clear all** at the top of the filter section to remove all groups. To filter by weather or geolocation data in the Results page, your site must use at least one corresponding targeting condition. Without these conditions, Kameleoon does not collect data unless you enable the **Opportunity Detection Premium** feature. Some filters require Hybrid experimentation to function correctly. For more information, read [the documentation on Hybrid experimentation](https://developers.kameleoon.com/core-concepts/hybrid-experimentation/). #### Breakdown audience To break down your audience: 1. Click the chevron to expand the **Breakdown audience** menu, then click **+Add breakdown**. 2. Select a breakdown and specify its criteria. * Use the search bar to find breakdowns. 3. Click **Apply**. Click **Cancel** at any time to return to the sidebar main menu. To break down by weather or geolocation data in the Results page, your site must use at least one corresponding targeting condition. Some breakdowns require Hybrid experimentation to function correctly. For more information, read [the documentation on Hybrid experimentation](https://developers.kameleoon.com/core-concepts/hybrid-experimentation/). When you break down results by acquisition channel, two system-generated entries may appear: * **RESTART**: Kameleoon assigns this label to sessions with no referrer. Sessions without a referrer typically occur when a visitor's session became inactive while the browser tab remained open and the visitor then returned to the page. * **DELETED**: Kameleoon assigns this label to visits that were associated with an acquisition channel that has since been deleted. Because the original channel no longer exists, Kameleoon cannot match the visit to a named channel. ### Data The **Data** tab lets you configure Results page settings, advanced settings, and the statistical method. #### Settings Click the chevron beside **Settings** to expand the menu. In the menu, you can: * **Show data per visit or visitor:** Visit-level data counts each session separately. Visitor-level data aggregates all sessions for a unique user. * **Show conversion data per converted visits or all conversions:** Converted visits count sessions with at least one conversion. "All conversions" counts the total number of conversions across all sessions. * **Select the reference variation:** Kameleoon compares all other variations to the reference variation to calculate the improvement rate. Click **Apply** to save your changes. #### Statistical method Click the chevron beside **Statistical method** to access the statistical method menu and advanced settings. Kameleoon offers three statistical methods: * Frequentist * Sequential testing * Bayesian Read [our statistical paper](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/pdf/statistics-at-kameleoon.pdf) for details on the strengths and weaknesses of each method. Click **Apply** to save your changes. #### Advanced settings In the advanced settings menu, you can enable: * **Multiple Test Correction:** Ensures accurate results when you perform multiple simultaneous tests. This option is available only if your test has more than one variation. * **CUPED (controlled-experiment using pre-experiment data):** Minimizes data volatility by offsetting variance from external factors, providing a more precise estimate of your variations’ influence. Enabling CUPED updates the values for conversion rate, reliability, and confidence intervals, but doesn't affect graphs, revenue metrics, or other data. ### Views Views allow you to save a specific configuration of your Results page, including filters, breakdowns, and statistical settings. This feature simplifies recurring analyses by eliminating the need to manually re-apply settings. By saving views, you can quickly switch between different perspectives of your experiment data. Views are experiment-specific. A saved view applies only to the experiment in which you created it; it does not change the configuration for other experiments in your project. The **Views** tab lets you save and manage these configurations. A view stores your audience filters, breakdowns, data settings, and statistical methods. #### Create a view To create a view: 1. Open the settings sidebar and select either the **Audience** or **Data** tab. 2. Configure your desired settings: * In the **Audience** tab, apply filters or breakdowns. * In the **Data** tab, select data settings and statistical methods. 3. Click **Apply**. 4. Click **Save as view**. 5. In the **Save as view** window, enter a name for the view. 6. (Optional) Toggle **Save the current layout** to store layout settings, such as **View metrics by**, **Show graph**, and **Zoom**. 7. (Optional) Toggle **Save as default** to make this view the default configuration for the Results page. 8. Click **Save**. #### Manage views Navigate to the **Views** tab to see your saved views. * **Switch views:** Click a saved view to apply its settings to the Results page. * **Search views:** Use the search bar to find a specific view by name. * **Edit or delete a view:** Click the **three-dots** menu on a view card to access secondary actions: * Click **Edit this view** to modify the view settings. * Click **Delete** to remove the view. # Results page structure Source: https://docs.kameleoon.com/user-manual/experiment-analytics/analyze-results/results-page/results-page-structure Navigate the Results page layout, including the Overview, Health, Metrics, Compare, Learnings, and Activity menus for analyzing experiment performance. The Results page is a pivotal feature that gives you a clear view of your experiments' performance. It's a control center for examining data and improving strategies. With its flexible data engine, the Results page lets you customize how you display and analyze your experiment results. The Results page allows you to customize your data analysis and aggregation for tailored insights based on your goals. The page has several tabs to view your data from multiple perspectives and a sidebar to quickly access your settings. This flexibility ensures you always have the right tools to assess performance based on your goals, variations, or a combination of factors. ## Sections of the Results page ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experiment-analytics/analyze-results/results-page-structure/menus.png) The Results page is organized into five main menus, each designed to help you navigate through your experiment results: * **Overview:** Provides a high-level summary of your experiment. [Learn more](../results-page-tabs/overview-menu) * **Health:** Helps you monitor your experiment's data reliability. [Learn more](../results-page-tabs/health-menu) * **Metrics:** Offers a detailed breakdown of experiment metrics by goals and variations. [Learn more](../results-page-tabs/metrics-menu) * **Compare:** Allows you to compare the performance of multiple variations and their impact on the experiment's goals. [Learn more](../results-page-tabs/compare-menu) * **Learnings:** Provides a summary of your experiment results, generated by Kameleoon’s AI (KAI). [Learn more](../results-page-tabs/learnings-menu) * **Activity:** Displays a timeline of the experiment's events, helping you track changes and updates throughout your experiment's lifecycle. [Learn more](../results-page-tabs/activity-menu) # Define feature variables Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/configure-your-feature-flags/define-feature-variables Define feature variables to dynamically control your feature flag's content across environments without redeploying code. You can define feature variables to remotely update your feature flags' content in your chosen environment. You must create feature variables [to create feature variations](./define-feature-variations). There is no limit on the number of feature variables you can create. ## Creating feature variables ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/configure-your-feature-flags/define-feature-variables/feature-variables.png) 1. Navigate to your feature flag or create a new one. 2. In the left sidebar, click **Set Up** > **Variables** > **Add Variable**. 3. Select your variable's **Type**. * If you select **Enum**, enter a list of allowed values separated by commas. This type creates a predefined list of options that you can select from when you define feature variations, rather than typing values manually. 4. Enter a **Variable Key**. 5. Set the **Default Value**. * For **Enum** variables, select the default value from the list you defined in step 3. 6. Click **Save**. To retrieve a feature variable from your source code, you must call the `getVariation()` method. Please note that if you use feature variations, Kameleoon will automatically bucket the user in a variation and return the value of the variable that has been defined in the variation (you do not need to call the `getVariation()` method). ## Benefits of feature variables Feature variables let you variabilize parts of your feature flag code, so you can dynamically assign values to variables without coding them in your source code. Once the feature variable's code is in production, changing it does not require redeployment. For example, if your feature is a discount offer for premium customers, but you're not sure what the discount percentage will be, you can create a **Discount Percentage** variable in your code and update it from the Kameleoon app without changing or pushing new code. Developers and product owners can work together to variablize parts of your feature that might change, so product updates are not blocked by development and deployments. Choose your SDK language and use the sample code provided to set up the SDK in your application in any of the following languages: * [Android](/developer-docs/sdks/mobile-sdks/android-sdk) * [iOS](/developer-docs/sdks/mobile-sdks/ios-sdk) * [Java](/developer-docs/sdks/web-sdks/java-sdk) * [C#](/developer-docs/sdks/web-sdks/csharp-sdk) * [Node.js](/developer-docs/sdks/web-sdks/nodejs-sdk) * [PHP](/developer-docs/sdks/web-sdks/php-sdk) * [Ruby](/developer-docs/sdks/web-sdks/ruby-sdk) * [Go](/developer-docs/sdks/web-sdks/go-sdk) * [Flutter](/developer-docs/sdks/mobile-sdks/flutter-sdk) * [Python](/developer-docs/sdks/web-sdks/python-sdk) * [Rust](/developer-docs/sdks/web-sdks/rust-sdk) * [Elixir](/developer-docs/sdks/web-sdks/elixir-sdk) # Define feature variations Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/configure-your-feature-flags/define-feature-variations Create and customize feature variations to control which version of a feature each user sees based on your flag's rules. You can create variations of your feature and decide which is shown to each user based on the criteria defined by the feature flag. ## Creating feature variations ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/configure-your-feature-flags/define-feature-variations/feature-variations.png) You can customize any variable you create in the **Variables** page for any variation. You don't need to code any values into your source code. To create a feature variation: 1. Navigate to your feature flag or create a new one. 2. In the left sidebar, click **Set up** > **Variations** > **Add variation**. 3. Edit your variation's **Name** and **Variation Key**. 4. Click **Save**. ## Default feature variations When you create a new feature flag, Kameleoon generates two default variations: **On** and **Off**. * **Off Variation:** Users assigned to this variation will see your application/website as it would appear if the feature flag were disabled. This variation lets you test new features on a limited group of users. Keep in mind that any custom variables you've created for the feature flag won't be available in the Off variation. * **On Variation:** The On variation presents your flagged feature's default or control version. This variation serves as the baseline experience for your feature and will only use the default values for all defined feature variables. Utilizing these default variations helps you manage user experience for different segments of your audience. You can view a summary of which variations are being served to your users in the [Rollout Summary](../using-the-rollout-planner/rules-and-targeting/add-a-new-rollout-rule#rollout-summary). The `getVariation()` method of our SDK will return the variation key associated with the user. # Manage environments Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/configure-your-feature-flags/manage-environments Create and manage feature flag environments to separate development, staging, and production deployments within your projects. Kameleoon Environments are used to categorize and manage your application's deployment locations. They help organize your technical infrastructure by separating development, testing, and production environments. Environments provide a structured approach for managing feature flags and deployments across platforms. When you create a new project, Kameleoon automatically creates three feature environments: Production, Staging, and Development. These environments are intended to iterate, test, and refine software, minimizing risks and ensuring a safe release cycle. ## Customizing Environments Navigate to the **Set Up** menu and click **Environments** to see your current project environments. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/configure-your-feature-flags/manage-environments/0.png) You’re free to customize these environments (except Production, which can only be renamed) or create additional environments. TO create a new environment, click **Add an Environment**. Enter a name and key for your new environment. You can also reorder the environments to your liking. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/configure-your-feature-flags/manage-environments/1.png) ## Scope of Environments You can use feature variables, variations, and goals across all environments—you don't have to create them separately for each environment when setting up a feature. However, environments apply to the entire project, not just the flag you're working on. Any changes made to environments will affect all feature flags in the project. You can filter flags by project and environment key in the Feature Flags dashboard. Hover over the ⓘ icon to see the projects on which a key has been used. To use Kameleoon’s multi-environments feature flagging, you must use the parameter called “environment” within the YAML configuration file to define the environment key. If there are no environments specified within your YAML file, the configuration associated with the Production environment will be applied by default. Read your SDK’s [documentation](../../../../developer-docs/feature-experimentation/get-started/overview#supported-platforms) to learn more. # Approvals for flag changes Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/create-and-manage-flags/approvals-for-flag-changes Implement a request-and-review workflow to control and audit feature flag changes before they go live. Enabling approvals for flag changes introduces a request-and-review mechanism for feature flag edits. Team members can request changes, and designated approvers can review and approve or reject these requests before they take effect. Flag approvals give you greater control over which changes apply to your flags. After you configure approval settings, flag changes made by certain users pass through a request-and-review process, so only approved changes reach end users. ## Activate approvals for a project Only users with **Admin** rights can configure approvals. To activate flag approvals: 1. Click **Features** > **Flags & Experiments** in the left sidebar. 2. Click the **Settings** tab, then select **Approval settings**. ![Settings tab](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/approvals-for-flag-changes/settings%20tab.png) 3. Select the project for which you want to enable flag approvals from the dropdown. 4. Select the users who can review requests, then click **Save**. If you select the option to trigger approvals only for the production environment, Kameleoon applies the workflow only to the environment with the key `production`. However, changes that indirectly affect the production environment—such as updates to variables, variations, or goals—also trigger the approval workflow. Approvals don't control environments, integrations, or the flag toggle. Only users with **Production** permissions can change a flag's state (on/off). ## Request approval for flag changes After you activate approvals for a project, non-reviewer users see an approval request popup when they save their changes. You can customize the title of the request and add a comment that the approver can see. ![Request change](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/approvals-for-flag-changes/request%20change.png) Requesters can make and submit changes in bulk across different sections of the setup or environments. Kameleoon notifies approvers of pending requests so they can review the proposed changes. All approval requests are visible in the **Review** section. To withdraw an individual request that is still **Pending**, click the request, then click **Withdraw request**. ## Approve change requests On the main dashboard, approvers can see an overview of each flag's review status: ![Pending](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/approvals-for-flag-changes/pending.png) * **Pending**: The flag has at least one pending request. * **Reviewed**: All requests have been either approved or rejected. Hover over the review stage to display additional information. When editing a feature flag, reviewers can navigate to the **Review** section to see all requests. Click a request to view its details, including proposed changes and comments. Requests can have one of four states: * **Pending**: Awaiting review. * **Approved**: The change has been approved and applied. * **Rejected**: The change was declined. * **Invalid**: The requested changes are no longer applicable because of more recently applied changes. Kameleoon rejects this request by default. For each request, approvers can approve or decline the proposed changes. Kameleoon applies or discards the associated changes accordingly. Approvers can only review requests in top-down order (newest request first). ## FAQs No. After you enable approvals, all flags in a project must go through the approval workflow. If the process seems too stringent, consider revising the list of approvers. Kameleoon discards rejected requests, but requesters can always resubmit their changes. A newest-first review process ensures that invalidated requests are flagged and ignored, eliminating any risk of data conflicts. # Create a feature flag Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/create-and-manage-flags/create-a-feature-flag Create a new feature flag in Kameleoon and configure it using the Rollout Planner to control feature delivery across environments. This guide will help you create a new feature flag. ## Access the Feature flag creation page 1. Click **Features** > **Flags & Experiments** > **New feature flag**. 2. Name your feature flag and choose the project on which you want to activate the flag. 3. Associate a tag and a description (optional) 4. Click **Validate**. A feature key is automatically generated based on your feature flag's name; however, you can edit the feature key. The feature key is the unique ID that identifies the feature flag in your source code. Be sure to update the feature key in Kameleoon before editing it in your source code. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/create-a-feature-flag/feature-key.png) By default, your flag is **OFF**. You can activate it once it's configured. ## Structure of the Rollout Planner ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/create-a-feature-flag/rollout-planner.png) The Rollout planner consists of several blocks. * A **header** indicating the flag's name, the associated sitecode (you can copy and paste it directly from here), and the feature key. Click the flag's name to edit its details. * A **Setup** menu, to create and manage your feature variables and feature variations URL. * A **Rollout Planner** specific to each environment. Changes made to a feature flag are specific to the environment you have selected in this section. Kameleoon lets you link your production and staging/QA environments to the app. * A **toggle** that turns your feature flag **On** or **Off**. * An area for you to add rollout rules. * A **toolbar** that allows you to access the AI assistant, revert your changes, and access secondary actions (**Simulate** and **Calculate duration**). * A **Save** button. Check that the flag has been created and that you can retrieve it from your source code by using our SDK (by calling the `isFeatureActive()` or `getVariation()` method). Then, navigate to your feature flag in Kameleoon and continue configuration. # Create and manage holdouts Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/create-and-manage-flags/create-and-manage-holdouts Set up holdouts to measure the long-term impact of product updates by excluding a control group from all feature changes. **Holdouts** allow you to measure the long-term impact of product updates by excluding a group of users from those changes, which makes it easier to analyze key metrics over time. This article explains how to set up and monitor holdouts in Kameleoon. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/create-and-manage-holdouts/Capture-decran-2024-11-08-a-12.20.44.png) ## Setting up holdouts This article focuses on holdouts for Feature Experimentation. To use holdouts for **Web Experimentation**, refer to [this](../../web-experimentation/advanced-experiment-features/create-reliable-baselines-with-holdouts) article. To get started, go to the **Feature Experimentation** dashboard and click the **three dots menu** in the top-right corner > **Holdouts**. The **Holdouts panel** will open. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/create-and-manage-holdouts/image-71.png) In the panel, you'll see a list of your Kameleoon projects, each with a summary of its holdout status. By default, all projects will show **Not set** under holdout status. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/create-and-manage-holdouts/image-72-768x803.png) **To configure a holdout:** ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/create-and-manage-holdouts/image-73-768x757.png) 1. **Click a project**. 2. **Enable a holdout** by toggling it on. 3. **Set the traffic split**—typically between **1-10%**. The traffic split is the percentage of users who will be excluded from all experiments and rollouts while the holdout is active. 4. **Select the key goals** you want to track. These should be metrics your team values long-term, as the holdout will measure them in a fully isolated environment, unaffected by any product updates. Once you've finished configuration, click **Save** to apply your changes and return to the dashboard. When you reopen the Holdouts panel, you'll see a summary showing which holdouts have been configured and whether results are available. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/create-and-manage-holdouts/image-75-768x915.png) **To view holdout results:** ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/create-and-manage-holdouts/image-76.png) Click a project and select **Results** at the bottom of the panel. A dedicated reporting page opens where you can: * Monitor trends in your selected metrics. * Share insights with your product, data, and engineering teams. * Analyze the long-term impact of your changes. ## Best practices * **Differentiate testing approaches:** Use A/B tests to measure immediate user reactions and holdout tests to assess the long-term impact of product updates. Plan the duration of your holdouts with this distinction in mind. * **Focus on key metrics:** Prioritize long-term indicators such as engagement, retention, and revenue. Avoid relying solely on short-term metrics when evaluating holdout performance. * **Encourage cross-team collaboration:** Maintain active communication between product managers, data scientists, and engineers to ensure holdouts are properly configured, monitored, and analyzed. * **Be mindful of holdout duration:** Balance the need for long-term insights with user experience. Keeping users in a holdout too long—without updates—can lead to dissatisfaction. # Feature Experimentation dashboard Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/create-and-manage-flags/feature-experimentation-dashboard Navigate the Feature Experimentation dashboard to manage flags, review approvals, monitor flag health, and access holdout settings. The Feature Experimentation dashboard has been redesigned. It now centralizes project, environment, and flag management into a clearer layout. This article outlines the new dashboard sections and how to use them. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/feature-experimentation-dashboard/dashboard.png) ## Dashboard structure ### Tabs ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/feature-experimentation-dashboard/tabs.gif) The dashboard is organized into three main tabs: * **Overview:** The standard view, which lets you navigate your flags and their rules. * **Approvals:** Lists flags or rules waiting for approval before rollout. * **Health:** Displays flag health, last evaluation, and last modification to better manage technical debt. * **Settings:** Access to approval and holdout settings. You can access holdout reporting from this tab. ### Environment selector and views ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/feature-experimentation-dashboard/selector-views.gif) At the top of the list of flags, you can switch between your projects’ environments or use the new **All environments** view to see a consolidated view. You can also adjust how flags are displayed with the view toggle: * **Collapsed:** Compact list of all flags, similar to the previous dashboard. * **Expanded:** Shows details at a rule-level for a more complete picture of the rollouts and experiment in your flag’s environments. ### Flag actions ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/feature-experimentation-dashboard/flag-actions.gif) From the dashboard list, you can also: * Toggle a flag **On** or **Off**. * Open the flag configuration using the edit icon. * Click the edit or results icon at the end of a rule’s row to open its configuration or reporting page. # Feature flag comments Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/create-and-manage-flags/feature-flag-comments Add, reply to, and manage comments directly on feature flags to centralize team discussions and decisions in Kameleoon. Feature flag comments let your team centralize discussions and decisions directly within Kameleoon. Instead of relying on external tools, you can easily communicate about specific feature flags, ensuring everyone has the necessary context, leading to faster decisions and better collaboration. ## Access the Comments panel 1. In the left sidebar, click **Features** > **Flags & Experiments**. 2. **Edit** an existing feature flag or **create a new one** (for more information on creating feature flags, see [this article](./create-a-feature-flag)). 3. On the feature flag configuration screen, click the **text bubble icon** in the top-right corner. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/flag-comments/comments.png) The **Comments** panel opens on the right side of the screen. The panel has two tabs: **Active** and **Archived**. ## Use comments to collaborate ### Add a new comment 1. In the **Active** tab, click **Add comment** and type your comment in the text field. * To notify a teammate and help them find the comment, use the **@** symbol to tag them (for example, `@JaneDoe`). 2. Click **Save**. ### Reply to a comment 1. Find the comment you want to respond to. 2. Click **Add reply** beneath the comment. 3. Enter your response. 4. Click **Save**. #### View and hide replies * To view replies, click **Show reply** or **Show replies** (the number of replies is shown in brackets). * To hide replies, click **Hide reply** or **Hide replies**. ### Edit or delete your comments You can edit or delete comments that you posted. 1. Click the **three-dots menu** associated with your comment. 2. Click **Edit** to modify the text **or** **Delete** to permanently remove the comment. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/flag-comments/edit-delete.png) ## Manage comments ### Resolve and archive comments Once a discussion is complete, mark the comment as resolved to declutter your active list. * In the **Active** tab, click the **Checkmark icon** next to the comment you want to resolve. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/flag-comments/checkmark.png) The comment is marked as resolved and automatically moved to the **Archived** tab. ### View and unresolve archived comments 1. Click the **Archived** tab to view all resolved comments. 2. To move a resolved comment back to the active list, click the **checkmark icon** next to it. The comment is marked as unresolved and moves back to the **Active** tab. ### Search and filter comments Use the search bar above the comments list to quickly find specific discussions in either the **Active** or **Archived** tab. ### Adjust display settings Customize how comments display in the list. 1. Click the **cog icon**. 2. Choose a sorting option: * **Newest on top** * **Oldest on top** * **By author (A to Z)** 3. To filter the list, select the option to **only display comments tagging you**. # Manage feature flag technical debt Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/create-and-manage-flags/manage-feature-flag-technical-debt Track flag health and classify flags as temporary or permanent to proactively identify and clean up stale flags in your codebase. Your feature flag dashboard can help in managing technical debt in your codebase and proactively cleanup obsolete or stale flags. ## Flag creation ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/manage-feature-flag-technical-debt/0.png) When creating a new flag, you can define whether it’s a **temporary** or **permanent** flag. This distinction is crucial for managing technical debt effectively to keep track of their health and status moving forward. * **Temporary Flags:** Used to control features that have a short-term purpose or are part of an ongoing experiment. They are ideal for situations where you need to roll out a new feature with safeguards or precisely schedule your release. Temporary flags are not intended to be part of your codebase in the long run and are thus regularly checked for staleness to ensure they are actively managed. * **Permanent Flags:** Permanent flags are intended for long-term use and are meant to be a permanent part of your codebase. They are ideal for features that are core to your application’s functionality. Unlike temporary flags, permanent flags are exempt from staleness checks and Kameleoon will not highlight them for removal. ## Dashboard utilities for flag cleanup Your dashboard features a summary of total active flags, running Experiments, and stale/permanent flag counts for your Production environment (only). ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/manage-feature-flag-technical-debt/status-and-last-evaluation.png) You also have two columns in the dashboard regarding flag status: * **Last Evaluation:** This column displays the last time the feature flag in your code was referenced (for example, the most recent instance of an end user being evaluated by the flag in your application code to determine which variation to expose the user to), giving you a clear indication of when the flag was last in active use. * **Status:** Based on its most recent evaluation and the last time it was edited or toggled in Kameleoon, a flag will be categorized into one of four possible statuses depending on whether it's permanent or temporary: * **Healthy:** The **temporary** flag is new or has been edited or evaluated in the last 15 days, indicating active usage. * **Stale:** The **temporary** flag has not been edited or evaluated in code for more than 15 days. This status may indicate that the rollout or experiment has reached a stable point and the flag is no longer being used, or that the flag has not been referenced in the code for a while. * **Outdated:** The **temporary** flag has not been edited or evaluated in code for more than 30 days. This status is a clear sign that the flag may be outdated and no longer necessary. * **Permanent:** The flag is **permanent** and exempt from staleness checks. ## Changing flag type You can change a feature flag's type from temporary to permanent and vice versa. As features and projects evolve, the nature of certain features may change. Converting a flag’s type ensures it aligns with the current development trajectory. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/manage-feature-flag-technical-debt/1.png) Navigate to the secondary actions menu for any flag from the dashboard, and use the **Mark as temporary** button to change the flag type. It’s useful to consider your short and long-term goals and ensure that flag types reflect them. This consideration keeps dashboard features effective for cleanup. If you’re working in a team, ensure everyone involved is aware of the rationale and importance of keeping track of technical debt in your codebase and in the Kameleoon app. # Manage your feature flags Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/create-and-manage-flags/manage-your-feature-flags Search, filter, sort, and perform actions on your feature flags from the Feature Flags dashboard, including bulk operations. To learn how to create a new feature flag, read [Kameleoon's article on the subject](./create-a-feature-flag). ## Access the Feature flags Dashboard To access the Feature flags dashboard, click **Features** > **Flags & Experiments**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/manage-your-feature-flags/sidebar.png) ## Feature flag information A card represents each feature flag and displays its main information. To view more details without editing the flag, hover over the tooltip to the right of the flag's name. ## Find a feature flag Use the search bar, filtering tool, and sorting tool to locate specific flags. ### Filter ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/manage-your-feature-flags/filters.png) Filter feature flags by the following criteria: * Project * Tags * State * Health * Key date * Rule state * Rule type Select one or more filters and click **Apply**. [Save these filters as a view](./manage-your-feature-flags#views) for later retrieval. Kameleoon generates a unique URL with custom parameters when you apply filters. To share this URL with team members, click **Copy link to this filtered dashboard** on the right side of the dashboard. ### Sort Sort experiments by the following criteria: * Rule status * Type * Modification date * Creation date * Tags Click the arrow to display all columns. Hover over a column and click the chevron to sort feature flags by that specific criterion. ## Views The **Production environment** view is applied by default. Create a custom view to save specific filter settings. To access a view, click **Views** and then select the view's name. To load a specific view automatically when the dashboard opens, set it as the default view by clicking the **three-dots** menu > **Default**. Kameleoon generates a unique URL with custom parameters when you create a view. To share this URL with team members, click the **three-dots** menu > **Copy URL** ## Edit a feature flag To edit a feature flag, click **Edit**. Kameleoon redirects you to the **Variables & Code** page. ## Actions on a feature flag Click the **More options** (three-dots) menu on a feature flag's card to access available actions. The options depend on the feature flag's state (ON, OFF, or planned). ### Turn on Turn ON an existing feature flag in its environment. Its state changes from OFF to ON. [Read more](../using-the-rollout-planner/basics/turn-your-feature-flag-on-or-off) ### Turn off Turn OFF an existing feature flag in its environment. Its state changes from ON to OFF, and the feature is no longer visible to users in this environment. [Read more](../using-the-rollout-planner/basics/turn-your-feature-flag-on-or-off) ### Define a rollout strategy Edit the rollout strategy linked to a feature flag. Kameleoon redirects you to the feature flag's **Rollout** page. [Read more](../using-the-rollout-planner/rules-and-targeting/add-a-new-rollout-rule) ### Rename Rename an existing feature flag. The **Rename** sidebar opens. To confirm the new name, click **Save**. ### Manage tags Manage the tags associated with a feature flag. The **Manage tags** sidebar opens. The list and the flag card highlight any tags currently associated with the flag. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/manage-your-feature-flags/manage-tags.png) Associate existing tags or create new ones. Click **Save** to confirm your choices. ### Duplicate Duplicate an existing feature flag to quickly create similar flags. The **Duplicate** sidebar opens. To confirm the creation of the new feature flag, click **Save**. Duplication clones the rule configurations (for all environments), flag setup, and the original flag's tags. ### Results Access a feature flag's results. Kameleoon redirects you to the results page. [Read more](../../../experiment-analytics/analyze-results/advanced-analysis/analyze-a-feature-experiments-results) ### Delete Delete an existing feature flag. You must set the flag to OFF in all environments before you can delete it. To validate the deletion, confirm your choice in the pop-up. ## Perform grouped actions Apply actions to multiple feature flags simultaneously using the **Grouped actions** sidebar. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/manage-your-feature-flags/grouped-actions.png) 1. Click the **More options** (three-dots) menu on any feature flag card. 2. Click **Select**. The **Grouped actions** sidebar opens. 3. Select the checkboxes next to the feature flags you want to modify. 4. In the sidebar, click the action you want to perform: * **Manage tags** * **Archive** * **Remove** * **Mark as temporary** * **Mark as permanent** * **Turn on** * **Turn off** 5. Confirm the action in the pop-up window. # Mutually exclusive groups for feature experiments Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/create-and-manage-flags/mutually-exclusive-groups-for-feature-experiments Group feature experiments so each visitor is exposed to only one experiment per group, preventing overlapping effects and ensuring clean results. This article explains how mutually exclusive groups work for feature experiments, why they’re essential for reliable analysis, and how to set them up in Kameleoon. To read about how to use mutually exclusive groups for web experimentation instead, refer to this [help doc](/user-manual/experimentation/web-experimentation/advanced-experiment-features/prevent-overlapping-campaigns-with-mutually-exclusive-groups). ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/mutually-exclusive-groups-for-feature-experiments/image-78-768x481.png) Running multiple feature experiments simultaneously can lead to overlapping effects, especially when different teams are testing changes that impact the same areas of your product. ## Setting up mutually exclusive groups 1. **Define the experiment group:** Determine which feature flags (and their experiments) should be mutually exclusive. For example, all experiments modifying the checkout flow could be grouped together. 2. **Tag the experiment:** Use the naming convention “ME-GROUP-\{GROUP NAME}” to tag each experiment in the group, such as ME-GROUP-A. This tells Kameleoon to enforce mutual exclusivity within the group. 3. You can tag flags at creation, or by clicking an existing flag’s three-dots menu and selecting **Manage tags**. Once done, each visitor will be exposed to only one experiment from each mutually exclusive group, ensuring accurate, non-overlapping results. ## Example of a mutually exclusive group Imagine you are testing different variations of your checkout experience: * **Group A:** Experiment 1 (new checkout flow) and Experiment 2 (one-click checkout) * **Group B:** Experiment 3 (up-sell recommendations) and Experiment 4 (discount banner placement) With a mutually exclusive setup: * A visitor will see either Experiment 1 or Experiment 2 from Group A, but not both. * The same visitor may see either Experiment 3 or Experiment 4 from Group B, but not both. This setup ensures that visitors do not experience multiple conflicting changes within each group, allowing for more precise measurement of each experiment’s impact. To maintain consistency, if a visitor was previously assigned to an experiment within a group, they will remain assigned to that experiment. If they are new to the group, assignment will be random, ensuring an even distribution. This setup does not require any additional targeting conditions, making it easier to implement for flags containing experiment rules and helping you maintain the integrity of your feature experiments, leading to cleaner data and more confident decision-making. ## How exposure percentages interact with a MEG Exposure percentages set on individual experiments are **not** applied independently to each experiment’s full traffic when those experiments belong to the same mutually exclusive group. The MEG first decides which single experiment a visitor is eligible for within the group, and the experiment’s own exposure percentage is then applied on top of that allocation. Each experiment in a MEG receives roughly an equal share of the eligible group population (for example, one third if the group contains three experiments), regardless of the individual exposure settings. ### Example Imagine three experiments in the same MEG, each running on a different page that receives 200,000 requests: | Experiment | Page traffic | Exposure | Exposed visitors | | ------------ | ------------ | -------- | --------------------------- | | Experiment A | 200k | 10% | 200k × 1/3 × 10% ≈ **6.7k** | | Experiment B | 200k | 30% | 200k × 1/3 × 30% ≈ **20k** | | Experiment C | 200k | 60% | 200k × 1/3 × 60% ≈ **40k** | The result is **not** 20k / 60k / 120k. That outcome would assume each experiment receives all of its page traffic before the exposure percentage is applied, which is not how a MEG works. Because a MEG splits eligible traffic across the group before exposure is applied, MEGs are best suited for experiments that can overlap and need to be made mutually exclusive — typically experiments running on the same page or surface. # Create goals for feature flags Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/track-your-feature-experiments/create-goals-for-feature-flags Add goals to your feature flags to track experiment and delivery performance across all environments using Kameleoon's reporting tools. Goals help you measure the success of your product or feature releases and experiments. Goals are tracked across all environments (development, staging, and production) and for all delivery rules you've set. Kameleoon reporting is only available if you've added **at least one goal**. If you remove all goals from an active flag, Kameleoon will stop tracking the flag and reporting will be unavailable. Goals are not necessary for your feature flag if you're not using Kameleoon's reporting tools. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/track-your-feature-experiments/create-goals-for-feature-flags/goals.png) Click **Set up** > **Goals** > **Add goal**. Choose from existing goals or create a new one. [Learn more about creating goals](../../../assets/goals/create-a-goal). You must choose at least one goal when creating a feature flag you want Kameleoon to report. The first goal you choose is automatically the **Primary goal**. Additional goals you add will be **Secondary goals**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/track-your-feature-experiments/create-goals-for-feature-flags/image-23.png) You can untrack a goal or assign a primary goal by clicking the three dots next to each goal. # Managing third-party integrations Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/track-your-feature-experiments/managing-third-party-integrations Configure which data Kameleoon sends to your third-party analytics tools for delivery rules and feature experiments. Managing third-party analytics tools for your feature flags is simple once you've [set up your integrations](../../../integrations/integrations-overview). Integrations for third-party tools are only compatible with web SDKs. They're not available for mobile SDKs. Create or open a feature flag. Then, click **Reporting** > **Integrations**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/track-your-feature-experiments/managing-third-party-integrations/0.png) You must identify what data you want to collect and analyze before information is relayed to your third-party analytics tool. Use the **Integrations** page to identify what data is useful for a particular flag. The **Admin** menu displays all the integrations you've linked to Kameleoon. You can also choose whether you want data exported for: * **Delivery Rules:** Sync data for Targeted and Progressive delivery rules only. * **Feature Experiments**: Sync data for Experiment rules only. Choosing one or both of these options gives you control over how much data goes to your analytics tool. Check your integration configurations first to ensure your analytics data is accurate, relevant, and actionable. You must implement our SDK and Kameleoon JavaScript tag to use this feature. We recommend implementing the [Kameleoon Asynchronous tag](../../../../developer-docs/web-experimentation/implementation-and-deployment/standard-implementation#asynchronous-tag-without-anti-flicker), which you can install before closing the `` tag in your HTML page. The Asynchronous tag is only used for tracking purposes. All Kameleoon SDKs use the [`getEngineTrackingCode()`](../../../../developer-docs/sdks/web-sdks/nodejs-sdk#getenginetrackingcode) method to return the JavaScript code, insert it in your page, and automatically send the exposure events to the analytics solution you're using. # Build whitelists to roll out a feature to internal users Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/use-cases/build-whitelists-to-rollout-a-feature-for-internal-users Use visitor code whitelists and targeted delivery rules to QA feature experiments with specific internal users before a broader release. If you want to QA a feature experiment or roll out a feature variation to an internal group of users, using a user whitelist, combined with a targeted delivery rule is one of the easiest ways to achieve this goal. For example, suppose you want to release a new feature with two variations: Feature A and Feature B. Before launching the experiment, you want to QA its live behavior by showing Feature A to a group of internal users and Feature B to a group of stakeholders. To do this, follow the simple steps below: 1. Create segments of whitelisted users (group A and B). 2. Create a targeted delivery rule for each group of users. We do not recommend setting many user IDs (\< 20 per variation) as the size of your data file will increase and so will the latency, as the SDK must fetch a bigger file. If you wish to target more users, you can set a custom data attribute for the whole audience (for example, Internal users only) and then target the experience with that audience. ## Create a targeted delivery rule for each group of users 1. Click **Activate** > **Feature flags** and edit your feature flag. 2. Add a new rule and select **Targeted delivery**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/use-cases/build-whitelists-to-rollout-a-feature-for-internal-users/0.png) 3. On the right side of the panel, create a new segment (**Group A**) and look for the **Visitor code** condition. Add the user IDs that you want to be part of Group A. 4. Choose the variation you want to serve, for example, **Variation A**. All users from **Group A** will receive Variation A of your flag. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/use-cases/build-whitelists-to-rollout-a-feature-for-internal-users/1.png) 5. Add a second **Targeted delivery** rule and replicate the steps for **Variation B** and **Group B**. # Run feature experiments with feature flags Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/use-cases/run-feature-experiments-with-feature-flags Run data-driven feature experiments using feature flags to validate hypotheses, reduce risk, and optimize user experiences at scale. ## Are feature flags all you need to experiment? Feature experiments using feature flags enable a powerful and data-driven approach for all teams to test hypotheses and validate assumptions before fully releasing new features to users. By gradually rolling out experiments to targeted user segments, teams can gather valuable insights and fine-tune their products to meet user needs effectively. This article will guide you through running a feature experiment using Kameleoon, helping you optimize user experiences and drive engagement for your products. ## Is feature experimentation the right option for you? Feature experiments using feature flags offer several advantages over traditional web experimentation approaches. Here are some key reasons why you should consider making the switch: * **Advanced server-side experimentation:** Feature experiments offer all the benefits you may associate with server-side testing such as reduced client-side dependencies, improved performance, enhanced security, and granular targeting. Feature experimentation also ensures consistency across different platforms, version independence, and compliance with data privacy regulations – making it vastly scalable for larger user bases. * **Real-time Control and Safety:** With feature flags, you can control the rollout of a new feature in real-time. This control provides a safety net to quickly disable the feature if any issues arise, ensuring a smooth user experience and minimizing potential negative impacts—all without having to write or deploy any new code. * **Gradual Rollout and Risk Reduction:** Feature flags allow for gradual feature rollout to a subset of users. This controlled release mitigates risks associated with full deployment, letting you test the feature in a controlled environment before exposing it to your entire user base. * **Iterative Development:** Feature experiments using dynamic variables facilitate iterative development. Product teams can make continuous improvements to a feature based on user feedback and data insights, without requiring a full redeployment. * **Faster Experimentation Cycles:** Feature flagging speeds up experimentation cycles since you can quickly introduce, modify, or remove features without redeploying the entire application. * **Reduced Technical Debt:** Traditional web experimentation may require maintaining multiple code branches to support different variations of the experiment. Depending on your team’s practices, feature flags centralize this control, reducing technical debt and code complexity. * **Enhanced Collaboration:** Feature flagging fosters collaboration between product, engineering, and business teams. It enables cross-functional teams to work together seamlessly on feature development and experimentation. Feature experimentation is also more well-suited for modern development practices. Overall, feature experiments using feature flags give your teams greater control, flexibility, and speed, making them a more efficient and effective approach to validating hypotheses and improving product features. ## Step-by-step guide Getting started with feature flags for experimentation may seem complex, but a simple, systematic approach can ensure successful implementation and testing and set you up for long-term success. It helps to clearly outline your experimentation goals and what you want to achieve with feature flagging. Identify specific features or hypotheses you wish to test and validate. This planning will give you a clear direction and purpose for using feature flags in your experimentation process. ### Step 1: Identify the hypothesis Begin by clearly defining the hypothesis you want to test, for example, a change you believe should move your metrics in an expected direction. For instance, if you have new ideas for a streamlined checkout process that will increase conversion rates, formulate your hypothesis accordingly. ### Step 2: Create a feature flag Now, [create a feature flag in Kameleoon](../create-and-manage-flags/create-a-feature-flag) for the new checkout process feature and keep it off for the time being, so the new checkout flow is initially hidden from all users. ### Step 3: Variabilize your feature (optional) When your developer codes your new checkout process, they can [use Kameleoon’s feature variables](../configure-your-feature-flags/define-feature-variables) to ensure they won’t have to revisit the source code again. They can use the Kameleoon app to dynamically update values and parameters inside your code using variables if you are testing different versions of the same feature. ### Step 4: Targeting and segmentation [Decide which user groups or segments](../using-the-rollout-planner/rules-and-targeting/add-a-new-rollout-rule) will be part of the experiment. Kameleoon lets you target specific demographics, user attributes, or even beta testers to receive the new feature. ### Step 5: Start your experiment [Initiate the experiment by rolling out the variants of your streamlined checkout process to a small percentage of the targeted users](../using-the-rollout-planner/rules-and-targeting/define-progressive-delivery-rules). Controlling the rollout percentage helps you minimize risks and measure the feature’s impact, while ensuring you can still test your ideas. ### Step 6: Monitor and analyze As users interact with the new checkout flow, monitor their behavior using the Results page. Track essential metrics such as conversion rates, user engagement, and drop-off points to assess performance. You can now easily [compare the performance](../../../experiment-analytics/analyze-results/advanced-analysis/analyze-a-feature-experiments-results) of the experiment group (users with the new feature) against the control group (users without the feature). Analyze the data to determine if the streamlined checkout process positively influenced user behavior. If needed, you can also export your experiments' results to any of the several partnered third-party tools Kameleoon allows integrations with. ### Step 7: Iterate and make decisions Based on the experiment's results, make informed decisions about whether you want to roll out the best-performing checkout variant to a larger percentage of your users. If the data supports the hypothesis, proceed with a full rollout to all users. Alternatively, if the results are inconclusive or disappointing, iterate on the feature by tweaking your variables and variations from the app, and conduct additional experiments to optimize its conversion rates. ## Conclusion Running feature experiments using feature flags equips your teams with valuable insights, helping them validate hypotheses and optimize user experiences. By leveraging feature management tools to control feature rollout and collect real-time data, teams can refine their products with confidence and deliver exceptional user satisfaction. Remember to utilize data-driven insights from feature experiments to continuously enhance your product, staying responsive to user needs and preferences as your product evolves. # Rollout Planner structure Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/using-the-rollout-planner/basics/rollout-planner-structure Understand the Rollout Planner layout, including the header, setup menu, delivery rules section, and rollout summary. The Rollout Planner consists of several blocks. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/using-the-rollout-planner/rollout-planner-structure/rollout-planner-structure.png) * A **header** in the top left indicating the flag's name, associated site code, and feature key. * A **Setup** menu to create and manage your feature variables and feature variations. * A **Rollout Planner** specific to each of your environments. Changes made to a feature flag are specific to the environment you select in this section. * A **reporting section** which lists the results pages for your created experiments. * A **toggle** that turns your feature flag on or off. * A **Delivery rules** section, where you add your rollout rules. * A **rollout summary** that summarizes the variations you're deploying through your rollout rules and the segments that are being targeted. # Turn your feature flag on or off Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/using-the-rollout-planner/basics/turn-your-feature-flag-on-or-off Toggle your feature flag on or off and configure the default variation served to users not targeted by any rollout rule. You can turn your feature flags on or off. ## Choosing a default variation ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/turn-your-feature-flag-on-or-off/0.png) At the end of your rollout rules queue, there's a dropdown list that defines which variation Kameleoon will deliver to users that are not targeted by any rule. * **Example 1:** If you want to roll out a new feature to 10% of your audience, Kameleoon will deliver 90% of users this default variation. * **Example 2:** If you have two delivery rules running with each targeting 40% of your total audience, the remaining 20% will receive this default variation. The default variation is automatically set to the **Off** variation; however, you can change which variation appears by default. Changing the default variation has no effect when your flag is turned off. ## Manual Toggle ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/turn-your-feature-flag-on-or-off/1.png) The manual toggle is the primary method of controlling your flag's state (on or off). When your feature flag toggle is turned **on**, Kameleoon will evaluate all delivery and experiment rules you've defined in the rules queue. However, while **off**, no delivery rules will be evaluated. # Using the Activity Log Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/using-the-rollout-planner/basics/using-the-activity-log Monitor and troubleshoot feature releases using the Activity Log's chronological record of actions performed on a feature flag. The Activity Log is available for each feature flag you create. You can use the Activity Log to monitor and troubleshoot feature releases. Create or edit a feature flag, and click **Reporting** > **Activity Log**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/using-the-rollout-planner/using-the-activity-log/activity-log.png) The **Activity Log** menu provides a chronological record of actions performed on this feature flag. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/using-the-activity-log/image-31-1920x1200.png) Click the **eye** icon to view changes' details. ## Filters The available filters are on the right side of the screen: * Filter by environment * Filter by date range * Filter by event type * Filter by flag contributor # Create feature experiments Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/using-the-rollout-planner/optimizations-and-scheduling/create-feature-experiments Create experiment rules to deliver and compare multiple feature variations, measuring which performs best against your defined goals. With Experiments, you can create different variations of your features and test them to see which one performs best. By combining variations and experiments, you can efficiently and continuously test and improve your features. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/create-feature-experiments/configure-rule.png) Experiments let you deliver various feature variations to set up your feature test and define the distribution among them. You must associate at least one [goal](../../track-your-feature-experiments/create-goals-for-feature-flags) with your experiment. # Multi-armed bandit optimizations for feature experiments Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/using-the-rollout-planner/optimizations-and-scheduling/multi-armed-bandit-optimizations-for-feature-experiments Learn how to use multi-armed bandits and contextual bandits to maximize experiment performance through dynamic traffic allocation. Kameleoon offers two types of dynamic traffic allocation algorithms to help maximize experiment performance: **multi-armed bandits (MABs)** and **contextual bandits**. Both approaches use real-time performance data to allocate more traffic to better-performing variations but differ in how they treat user data. This article explains how these algorithms work, when to use them, and how to activate them in your experiments. To enable dynamic traffic allocation, create a new experiment or open an existing one. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/multi-armed-bandit-optimizations-for-feature-experiments/image-79.png) In the **Variation to serve** section, select the preferred allocation from the dropdown menu. Choose between **Multi-armed bandit** or **Contextual bandit** optimization. Kameleoon updates the allocation based solely on the lift of the primary goal. ## Multi-armed bandits When using dynamic allocation (such as MABs), you cannot manually edit exposure rates. Instead, Kameleoon automatically measures improvement over the original variation and estimates the gain in total conversions using the Epsilon Greedy algorithm. Kameleoon repeats this process hourly. The MAB algorithm redirects traffic to higher-performing variations, even without statistical significance, which can drastically reduce the time required to identify winning or losing variations. Auto-optimized experiments rely on the original variation ("off" for Feature Experiments) to optimize the deviations. If the original variation does not receive traffic, the deviation might not update, causing the allocation to remain at 50/50 despite a clear winning variation. MABs do not rely on a control or baseline experience. Unlike A/B tests, MABs prioritize improvement over an initial equal allocation and dynamically adjust traffic based on real-time performance. In cases where statistical analysis is less important and you must minimize "exploration" time, MABs are useful because they focus more on "exploitation." ## Contextual bandits Contextual bandits dynamically optimize traffic allocation in experiments using machine learning. They adapt in real-time to redistribute traffic based on variation performance and user context to maximize effectiveness. Key differences distinguish multi-armed bandits from contextual bandits: * **Multi-armed bandits:** These optimize traffic distribution among multiple variations (arms) to maximize a defined goal, such as click rates or conversions. They treat all users equally, with no distinction based on user attributes. This makes them ideal for scenarios where user-specific data is unavailable or unnecessary, and the focus remains on finding the best-performing variation for the overall audience. * **Contextual bandits:** These incorporate additional user-specific data—such as device type, location, or behavior—into decision-making. They facilitate more personalized decisions by tailoring variations to specific users for improved outcomes. The variability introduced by user attributes allows contextual bandits to optimize decisions in dynamic environments. While multi-armed bandits optimize traffic allocation uniformly across users, contextual bandits leverage contextual data to make more personalized, data-driven decisions. Read the [Dynamic traffic allocation](https://www.kameleoon.com/blog/dynamic-traffic-allocation) article to learn more about how MAB optimization works, or read the [Kameleoon statistical paper](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/pdf/statistics-at-kameleoon.pdf) to dive deeper into the technical details of the MAB algorithm. # Reshuffle traffic for a rule Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/using-the-rollout-planner/optimizations-and-scheduling/reshuffle-a-traffic-rule Manually redistribute user traffic across variations for an active rule, re-bucketing users to adjust your experiment's distribution. This feature lets you manually redistribute your user segment's traffic towards the chosen variation(s) for any active rule. You initiate a complex re-bucketing process by reshuffling, meaning that users may be exposed to different variations than before. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/reshuffle-a-traffic-rule/ezgif.com-optimize-2.gif) To reshuffle traffic for a rule: 1. Navigate to the delivery or experiment rule for which you want to reshuffle traffic. 2. Click the three-dots menu. 3. Click **Reshuffle**. **Reshuffle will only take effect after saving**. You can dequeue the reshuffle action by repeating the same steps and choosing **Undo reshuffle**. Once saved, Kameleoon will redistribute traffic among the rule’s variations. Some users may see a different variation than they previously encountered, while others may continue to see the same variation. If you are monitoring results and metrics for an ongoing feature experiment or delivery, reshuffling traffic will skew your results and may impact user behavior and key metrics. Use this feature when results prior to reshuffling are irrelevant or unnecessary. Avoid reshuffling any rule that is active for a substantial amount of time since results will likely be invalidated post-reshuffling. # Schedule a feature's rollout Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/using-the-rollout-planner/optimizations-and-scheduling/schedule-a-features-rollout Schedule the start and end dates for rollout rules to automatically activate or deactivate a feature at a specified time. You can schedule when a rule should activate or reactivate. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/schedule-a-feature's-rollout/0.png) A calendar opens when you select a start or end date. Use the calendar to pick the date and time for the rule to take effect or expire. # Add a new rollout rule Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/using-the-rollout-planner/rules-and-targeting/add-a-new-rollout-rule Add and configure rollout rules in the Rollout Planner to control feature delivery with targeted, progressive, or experiment-based strategies. ## What are rollout rules? The Rollout Planner gives you granular control over your releases and tests. You can activate or deactivate any feature flag at any time for specific users. Rollout rules are like conditional statements for your releases and experiments. You can set up a sequence of actions that triggers under certain conditions. These rules can be scheduled, applied immediately, targeted to specific groups, reordered, and customized to align with your goals. ## Add a new rule Click **Add a rule** to open the rule configuration menu. Here, you can choose between delivery or testing rules, and name your rule. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/add-a-new-rollout-rule/0.png) You can combine rules of any type to implement your feature's rollout strategy. Kameleoon lets you add rules for [Targeted Delivery](./define-targeted-delivery-rules), [Progressive Delivery](./define-progressive-delivery-rules) and [Feature Experiments](../optimizations-and-scheduling/create-feature-experiments). ## How does the rule queue work? ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/add-a-new-rollout-rule/1.png) Once you’ve added your rollout rules, it is important to understand how Kameleoon evaluates the queue: * Kameleoon will check if your flag is on or off. If it's off, visitors will see the default variation (which you can choose in the "*Then, for everyone else in production, serve*" dropdown list). * If the flag is turned on, Kameleoon evaluates experiments and rules in the queue in a top-to-bottom order. Keep this in mind when planning your rollout strategy to prevent unforeseen targeting overlaps. * New rules are added to the bottom of the queue by default. However, you can manually reorder rules by clicking and dragging its card to a new position. Reordeing rules in the queue will also change the order in which Kameleoon reads and evaluates the rule. Be mindful when delivering rules that share the same audience. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/add-a-new-rollout-rule/2.png) * Paused rules are simple ignored at runtime. ### User Targeting and Bucketing When a user is exposed to a variation, it follows a two-step process: **targeting** and **bucketing**. Targeting means the user meets the conditions specified in a rule. Bucketing means the user has been assigned to the variation(s) associated with that rule. Kameleoon handles targeting and bucketing differently for delivery and experiment rules. Consider these two scenarios: #### Scenario 1: Delivery Rule at the top ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/add-a-new-rollout-rule/3.png) If a visitor is first targeted for Targeted/Progressive Delivery rule: * They receive the selected variation if they are bucketed. * If targeted, but not bucketed, the visitor will receive the "Everyone else" variation and won’t be evaluated for any other rule. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/add-a-new-rollout-rule/Delivery.jpg) ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/add-a-new-rollout-rule/Capture-décran-2023-12-13-à-12.53.57.png) #### Scenario 2: Experiment Rule at the top ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/add-a-new-rollout-rule/4.png) * If a visitor is targeted by Experiment rule: * They receive the selected variation if they are bucketed. * If they are targeted, but *not* bucketed, the next rule is checked until the end of the queue. All users who are not bucketed by experiment rules move down the queue. Because of this, it’s always a good practice to keep experiments at the top of your queue ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/add-a-new-rollout-rule/Experiment.jpg) ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/add-a-new-rollout-rule/Capture-décran-2023-12-13-à-12.53.34.png) Changing the traffic split for an experiment does not change the total size of your experiment bucket. For example, let's say you launch an experiment that targets **20%** of a user segment with a variation split of 50/50 for its two variations. If you update the split to 60/40 or 90/10, but do not change the percentage of traffic that will be included in the experiment sample (**20%**), the total bucketed users will not increase or decrease. Instead, some bucketed users will get exposed to a different variation. When there are no more rules in the queue, all remaining users will receive the "Everyone else" variation. ### Rule states All rules in the queue will display one of these states: * **Active** (is currently live) * **Paused** * **Planned** (has been scheduled to start and/or stop at a given date/time). Planned rule changes to *active* at the defined schedule or *outdated* at the end of it. * **Unsaved changes** (this also includes new rules that are in the draft state) * **Outdated** (a planned rule that automatically turned off at scheduled end date). Outdated rules are not shown in the default view, but you can use filters to view them. ## Pause or resume a rule To pause a rule, click the three-dots menu on an experiment's card and click **Pause**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/add-a-new-rollout-rule/Capture-décran-2023-04-13-à-15.05.37.png) Paused rules are ignored at runtime. You can resume the rule later in the same menu. ## Copy rules from another environment You can also add rules you created in another environment. Copying rules lets you replicate your rollout/experiment setup from, for example, your **staging** environment to your **production** environment. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/add-a-new-rollout-rule/image-34.png) Select **Copy** when adding rules in your destination environment and select the source environment in the next step. You'll have the option to append the copied rules at the bottom of your rules queue, or replace all existing rules with the copied rules. ## Rollout summary This section provides an overview of **variations** and **segments**. Changing the cards' order, deleting a rule, or changing a rule's status will affect the ordering and values inside summary cards. While the summary section accounts for untargeted (remaining) users that can be passed down to the next rule, any partial or complete overlaps between different user segments across different rules won't be accounted for or identified. ### Variations Summary ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/add-a-new-rollout-rule/5.png) This section provides an overview of which variations have been used in your delivery and experiment rules. Variations that are targeting multiple segments have multiple bars displaying the percentage of the audience you have targeted. ### Segments Summary ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/add-a-new-rollout-rule/6.png) This section summarizes the different user segments that are being targeted in your rollout rules. Variations assigned to a segment will be combined to reach a maximum of 100%. If this limit is exceeded, any remaining variations will be ignored. ## Using the Rollout Planner with outdated SDKs If your SDK's version does not support [Feature Variations](../../../../../developer-docs/feature-experimentation/get-started/overview#supported-platforms), you will have to keep a few things in mind when adding new rules for a feature flag: * Kameleoon will only check the rules defined in the Production environment. Rules you created in the staging or development environments will be ignored. * Kameleoon will only evaluate the first rule in the queue. If there are any rules below, they will be ignored. If there are no rules at all, the default variation defined in your rollout will be served. * Only the default variations **On** and **Off** are supported. * Start/Stop scheduling of rules is not supported. Visit Kameleoon's [Github](https://github.com/Kameleoon) and subscribe to notifications to stay up to date with all SDK releases. # Define Progressive Delivery rules Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/using-the-rollout-planner/rules-and-targeting/define-progressive-delivery-rules Configure progressive delivery rules to gradually roll out a feature to an increasing audience using linear or custom ramp-up schedules. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/define-progressive-delivery-rules/image-30.png) Progressive rollouts let you spread out large feature releases by gradually rolling them out to an increasing audience. You can customize the feature variation you want to roll out, the audience you want to target, and the interval and increment size of the ramp-up. When setting up the exposure for your Progressive Delivery rule, you can select from two types of ramp-ups: **linear** or **custom**. ## Linear ramp-up ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/define-progressive-delivery-rules/0.png) When configuring your linear ramp-up, you must define the following custom parameters: * The rollout's start date. * Initial exposure (audience percentage that will be immediately exposed to the feature). * Increment percentage for rollout audience. * Time interval between increments. * Final exposure limit: define the percentage at which you want the rollout to stop. Below this section, you will see a confirmation of when and at what exposure percentage the rollout will stop. ## Custom ramp-up ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/define-progressive-delivery-rules/1.png) Click **Add step** to add a custom increment. You must select a date/time and an exposure rate for each step you add. # Define Targeted Delivery rules Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/using-the-rollout-planner/rules-and-targeting/define-targeted-delivery-rules Enable a feature variation for specific user segments using Targeted Delivery rules based on attributes like location, device, or demographics. Targeted Delivery is the easiest way to enable a feature variation for specific users or your entire audience. You can use multiple Targeted Delivery rules to implement advanced rollout strategies that suit your needs. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/define-targeted-delivery-rules/targeted-delivery.png) Use Targeted Delivery rules to gain rollout flexibility based on user attributes, such as geographical region, demographic data, or operating system. # Target groups of users with rules Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/using-the-rollout-planner/rules-and-targeting/target-groups-of-users-with-rules Select or create segments to target specific user groups in your rollout rules using Kameleoon's available SDK targeting conditions. You must select a segment or create a new one when creating a rule in the **Targeting** section. Select one of the three targeting conditions available: * **Target all visitors**: Includes your entire user base. Chosen by default. * **Target a segment:** You can choose from a drop-down of existing segments or create a new segment in the segment builder by clicking **+**. * **Target specific visitors:** This is a lite version of the segment builder, allowing you to create common targeting conditions using *Custom Data* or *Visitor Code* attributes to define an audience without creating and saving a new segment. Don't use this method if the target audience requires sophisticated targeting. ## SDK conditions available If you want to create a new segment or add precise targeting conditions for choosing your audience, you can use Kameleoon’s pre-existing conditions available [depending on which SDK you’re using](../../../../../developer-docs/feature-experimentation/targeting-and-segmentation/native-segmentation): * **Browser:** Includes or excludes visitors based on their browser. * **Device:** Includes or excludes visitors based on their device (smartphone, tablet, etc.). * **Conversion:** Includes or excludes visits during which a specific goal was converted. * **Custom Data:** Includes or excludes visits based on a custom data's value. * **Page URL:** Includes or excludes visitors based on the displayed page's URL. * **Page Title:** Includes or excludes visitors based on the displayed page's title. * **SDK Language:** Includes or excludes visitors based on their languages. * **App Version**: Includes or excludes visitors based on their app's version. * **Visitor Code:** Includes or excludes visitors based on their visitor code. * **Browser Cookie:** Includes or excludes visitors based on the presence of a cookie in their browser, and possibly its value. * **Operating System:** Includes or excludes visitors based on their operating system. * **IP Geolocation:** Includes or excludes visitors based on their location. * **Segment:** Includes or excludes visitors based on their Kameleoon segment. * **Previous Page:** Includes or excludes visitors based on the previous page's URL. * **Number of Page Views:** Includes or excludes visitors that have seen a specific number of pages. * **Time since First Visit:** Includes or excludes visitors based on the time elapsed since their first visit. * **Time since Last Visit:** Includes or excludes visitors based on the time elapsed since their last visit. * **Number of Visits Today:** Includes or excludes visitors based on their number of visits today. * **Total Number of Visits:** Includes or excludes visitors based on their total number of visits. * **New or Returning Visitors:** Allows you to include only new visitors or only returning visitors on your website. * **Exclusive Feature Flag:** Only includes users who are not targeted by any ongoing rollout or feature/web experiment. * **Targeted Feature Flag:** Includes or excludes visitors who have already been targeted by another feature flag and exposed to a variation. * **Likelihood to Convert**: Target visitors based on their Kameleoon Conversion Score (KCS). Requires the Contextual Bandit and AI Targeting add-on. Next, choose the rule's exposure rate (what percentage of your chosen segment will be exposed while the flag is turned on). See Kameleoon's [developer documentation](../../../../../developer-docs/feature-experimentation/targeting-and-segmentation/native-segmentation) to learn how to use targeting conditions in a Kameleoon SDK. Kameleoon also integrates with [Mixpanel](../../../../integrations/as-a-destination/analytics/mixpanel/setting-up-mixpanel), [Segment](../../../../integrations/as-a-destination/cdp/segment/setting-up-segment), or [GA4](../../../../integrations/as-a-destination/analytics/google-analytics-4/setting-up-google-analytics-4), allowing you to use segments (or cohorts) that you've defined in those tools. # Automatically rollback a feature Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/using-the-rollout-planner/validation-and-rollback/automatically-rollback-a-feature Set up automatic rollback conditions to disable a rule or environment when a feature's performance drops below defined thresholds. Automatic Rollbacks help you manage feature releases. You can set up custom rollback conditions, or "triggers," that monitor your features' performance to automatically turn off the appropriate rule or flag. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/create-and-manage-flags/using-the-rollout-planner/automatically-rollback-a-feature/rollback.png) ## Setting up rollback conditions Create a new rule or click an existing one. Then, navigate to the Rollback Condition at the bottom of the edit pane for your desired rule. Here, add a new condition and fill in the fields: 1. Choose whether to turn off only the selected **rule** or disable the toggle for the entire **environment**. Disabling the environment will stop all active rules, including deliveries and experiments, in that environment. 2. Choose the performance indicator to check against: **Uplift**, **Downlift**, or **Conversation Rate**. 3. Define the condition (**higher than** or **lower than**) and enter the threshold percentage which triggers the automatic rollback. 4. Select which **goal** to monitor and evaluate for performance. Here, you can pick from any Kameleoon goal that you’ve created for this project. 5. Select the **minimum visitors** evaluated before the rollback can be executed. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/automatically-rollback-a-feature/0.png) Once saved, Kameleoon will continuously monitor the metrics you specified against the defined condition(s). You can choose to add as many additional conditions you’d like by repeating the same steps; however, whichever condition is met first will be executed, and the rest will be ignored. ## Setting up email alerts Set up email alerts to receive notifications when a rollback occurs. These alerts ensure your team stays informed about unexpected adverse effects on your key performance metrics. To enable alerts, select **Send Email alerts** and enter the recipients' email addresses. Click **Save** to finalize. # Using simulation mode Source: https://docs.kameleoon.com/user-manual/experimentation/feature-experimentation/using-the-rollout-planner/validation-and-rollback/using-simulation-mode Preview and test feature experiment configurations in a controlled environment before deploying them to production. Simulation mode enables you to preview and test experiments in a controlled environment before you deploy them to production. For Feature Experimentation, the simulation panel is primarily used for testing and debugging. It does not offer the full functionality available in Web Experimentation. For more details, see [What the simulation panel does](#what-the-simulation-panel-does). ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/using-simulation-mode/simulation-panel.png) ## Prerequisites If you implement Kameleoon Web Experimentation or use Feature Experimentation in [Hybrid mode](../../../../../developer-docs/feature-experimentation/get-started/hybrid-experimentation), simulation mode works automatically on all major web browsers. No additional setup is required. If you *only* use Feature Experimentation, you must manually inject the Kameleoon tag to test your configuration. To inject the tag, use the Kameleoon Chrome extension. Simulation mode only supports web SDKs. It does not support mobile SDKs. To manually inject the Kameleoon tag: 1. Install the [Kameleoon Chrome Extension](https://chromewebstore.google.com/detail/kameleoon/nimncjjomfcjmfnghgaopccmdggjfoam). 2. Open the extension in your browser console and follow the on-screen instructions to log in. 3. Open the **DevTools** panel and click **Tag Injection**. 4. Enter your **Sitecode**, select your **Environment**, and select the **Add Anti-Flicker** checkbox. 5. Apply the changes and refresh the page. 6. In **DevTools**, open the **Network** tab and verify the `kameleoon.js?injected=true` request appears. This request confirms successful tag injection. ## Access the simulation panel After you confirm the tag injection, click the **three dots** menu for a rule, then click **Simulate**. To ensure the SDK recognizes the flag configuration, verify the flag toggle is **ON** and the rule is **Active**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/feature-experimentation/using-the-rollout-planner/using-simulation-mode/2.png) Alternatively, open the **three dots** menu in the top right of the editor, click **Simulate**, and select a rule from any environment to launch. The simulation panel appears in the bottom half of the page. ## What the simulation panel does * **Displays variants:** The simulation panel enables you to select and preview a variant in your browser for testing. * To test a variant in production without exposing it to users, set the allocated traffic for the variant to 0%. * **Overrides targeting behavior:** The simulation panel ignores targeting rules. Targeting is managed at the SDK level, but the simulation panel overrides these rules to force the display of the selected variant. # Comment mode Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/advanced-experiment-features/comment-mode Use Comment mode to exchange feedback on experiment variations directly in Kameleoon, keeping team discussions organized and in context. **Comment mode** (currently in beta) lets you and your team easily exchange feedback directly in Kameleoon. Whether you’re reviewing variations, discussing changes, or resolving issues, Comment mode streamlines collaboration by keeping conversations organized and tied to specific variations. This article walks you through how to access, use, and manage comments efficiently. ## Accessing Comment mode To access Comment mode, click the **text bubble icon** in the mode toolbar. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-features/comment-mode/comment-mode-tab.png) The **Comments** sidebar will open. ## Adding a comment To add a new comment: 1. Select your desired variation in the **Variations** sidebar. 2. Click **+Add** in the **Comments** sidebar. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-features/comment-mode/Screenshot-2025-05-20-at-8.20.19AM.png) 3. Type your comment in the text field and click **Save**. Your comment is now visible in the **Active** comments tab of the Comments sidebar. A visual indicator noting the number of comments appears next to the relevant variation or element’s name. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-features/comment-mode/Screenshot-2025-05-20-at-8.24.23AM.png) ## Actions in the Comments sidebar ### Editing and deleting a comment To edit a comment: 1. Click the **three-dots menu** > **Edit comment**. 2. Edit the comment’s text. 3. Click **Save**. To delete a comment: * Click the **three-dots menu** > **Delete comment** > **YES**. A comment can only be deleted during the first 15 minutes after its creation and if it does not have any replies. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-features/comment-mode/Screenshot-2025-05-20-at-8.23.29AM.png) ### Reply to a comment To reply to a comment: 1. Click **Add reply**. 2. Type your reply into the text field. 3. Click **Save**. ### Resolve a comment To resolve a comment: * Hover over the comment and click the **checkmark icon**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-features/comment-mode/Screenshot-2025-05-20-at-8.36.31AM.png) The comment is now resolved. You can view resolved comments by clicking **Archived**. Click a comment’s **checkmark icon** in the Archived tab to un-resolve it. ## Settings You have access to a variety of settings in the Comments sidebar. Click the **cog icon** to view the available settings. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-features/comment-mode/Screenshot-2025-05-20-at-8.23.05AM.png) You can: * **Sort comments** * You can sort comments newest to oldest, oldest to newest, or alphabetically by the author’s name. * **Display in list** * You can choose to display only comments in which you’re mentioned or all replies. # Contextual bandits Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/advanced-experiment-features/contextual-bandits Learn how contextual bandits use real-time user signals to dynamically allocate traffic to the best-performing variation for each visitor. Personalization is no longer a luxury—it’s an expectation. But delivering the right experience to each visitor, at the right time, is a daunting task, especially when you’re operating at scale. Traditional methods like A/B and multivariate testing (MVT) offer structured ways to improve user experiences, but they come with trade-offs: slow learning curves, limited flexibility, and static assumptions. To address these limitations, there are **contextual bandits** (CBs)—a machine learning-based approach that offers a dynamic, data-driven alternative to traditional experimentation. In this article, we’ll explore: * How contextual bandits work * What kind of data powers them * What “behavior” really means in this context * Real-world use cases where CBs shine. ## What are contextual bandits? Contextual bandits are a machine learning approach that balances **exploration** (trying new options) and **exploitation** (using the best-known option). Crucially, the algorithm now checks the status of the Learning phase every hour, similar to AI Predictive Targeting, letting it adapt more quickly and intelligently. Contextual bandits use the same machine learning model as [AI Predictive Targeting](../../../ai-predictive-targeting/overview). By default, the model does not use custom data as input. To use custom data with contextual bandits, subscribe to the AI Predictive Targeting add-on. Unlike A/B or MVT tests, which are static and split traffic evenly across fixed variants, CBs are **dynamic**. They adjust variant allocation in real time based on what’s working best for different types of users. It’s also important to distinguish CBs from traditional multi-armed bandits (MABs). While MABs consider only the performance of each option overall, CBs factor in real-time user context (like behavior, device type, referral source, and more) to make smarter decisions for each visitor. ## How contextual bandits work At the heart of CBs is a continuously improving decision loop. Here’s how it works: 1. A user lands on your website. 2. The CB algorithm evaluates real-time contextual signals (for example, device, location, past behavior). 3. It selects the variant most likely to result in a positive outcome. 4. It observes the result (conversion, click, engagement). 5. It learns and updates its models accordingly. This feedback loop happens constantly and is powered by live user data. Kameleoon uses contextual multi-armed bandits (CMABs), an advanced form of CB that incorporates multiple layers of user context to inform decisions. ## Understanding behavior in contextual bandits In Kameleoon, behaviors include any interaction or signal from a user that can help predict their intent or preferences, which includes: * Page views * Scroll depth * Time on site * Clicks on CTAs * Products browsed * Cart contents These behaviors feed into both our CB algorithm and our Kameleoon Conversion Score (KCS), creating a standardized behavioral foundation across all personalization tools. ## What makes contextual bandits smart? The intelligence of a CB system comes down to the quality of data it receives. High-quality, real-time behavioral signals lead to better predictions and faster optimization. Kameleoon’s real-time data pipeline ensures that CBs make informed decisions by: * Capturing clean, relevant contextual signals instantly * Feeding them into the model without delay * Enabling hour-by-hour updates of the Learning phase status. Kameleoon ensures your personalization efforts improve quickly and accurately. ## Use cases for contextual bandits CBs are incredibly versatile. Here are a few ways you can put them to work: ### Optimizing homepage layouts Show different homepage modules (like banners, featured products, or CTAs) depending on real-time user behavior. The CB continuously adapts to determine which layout performs best for different types of users. ### Saving personalized promotional offers Instead of manually creating audience segments for promotions, let the CB do the heavy lifting. It analyzes signals such as cart value (which is a [custom data](../../../assets/custom-data/create-custom-data)), browsing history, or traffic source and shows the most effective offer automatically. ### Rolling out new features dynamically Gradually introduce a new feature or UI component to users who are more likely to respond positively, based on how they interact with your site in real time. ## When to use contextual bandits Contextual bandits are a powerful tool, but they aren’t always the right choice. Here’s a short guide: **Best for:** * Personalization at scale * Continuous learning environments * High-traffic pages with lots of user interaction **Not ideal for:** * Experiments where strict control and interpretability are essential. * Low-traffic environments where learning would take too long. ## Summary Contextual bandits are a smarter, more adaptive approach to experimentation. By continuously learning from high-quality real-time data, CBs let you deliver better experiences faster—no rigid tests or manual segmentation required. Importantly, the behaviors that power Kameleoon’s contextual bandits are the same ones that fuel our AI propensity scores. This shared behavioral foundation means smart and consistent personalization across your experiments and optimizations. In short, contextual bandits help you meet your users where they are—intelligently, efficiently, and at scale. For more information on integrating CBs in your web experiments, refer to [this](../configure-and-launch/finalizing-an-experiment#contextual-bandits) article. Read [this](../../feature-experimentation/using-the-rollout-planner/optimizations-and-scheduling/multi-armed-bandit-optimizations-for-feature-experiments#contextual-bandits) article to learn more about CBs in feature experiments. # Create reliable baselines with Holdouts Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/advanced-experiment-features/create-reliable-baselines-with-holdouts Create a holdout group that sees no experiments, establishing a reliable baseline to measure the cumulative impact of all active campaigns. In a multi-campaign environment, understanding the true impact of changes can be challenging, especially when experiments overlap. Kameleoon’s Holdouts solve this by creating a control group that remains unaffected by any active campaigns. This feature lets you establish a reliable baseline, so you can measure the aggregate impact of all changes against a group that experiences no modifications. In this article, we’ll explore how holdouts work, why they’re valuable for meaningful analysis, and how to set them up in Kameleoon. This article explains holdouts for Web Experimentation. To use holdouts for **Feature Experimentation** refer to this [help doc](../../feature-experimentation/create-and-manage-flags/create-and-manage-holdouts). ## What is a Holdout? A holdout is a control group in Kameleoon that does not see any experiments or changes. It’s used to create a baseline against which you can measure the overall impact of all active experiments. Rather than comparing individual test groups, a holdout lets you measure the cumulative effect of all changes on user engagement or other metrics. ## Key benefits In a typical A/B test, you compare users who see a single experiment against those who don’t. However, when multiple experiments are running, the results may overlap and impact each other, making it difficult to see the overall effect of the changes. A holdout solves this by: * **Providing a Baseline:** The holdout group receives no experiments, creating a clear point of comparison. * **Measuring Aggregate Impact:** With a holdout, you can see if the total impact of your changes is positive by comparing it to a group that sees none of them. ## Example of a Holdout Imagine an e-commerce site running three experiments: changing button colors, updating product images, and adding a “Top Picks” section. The holdout group would: * See the original versions of each of these elements (no changes applied). * Act as a baseline to understand if the cumulative effect of these changes actually improves conversion rates or engagement. ## Setting up a Holdout in Kameleoon 1. **Create a new experiment:** Set up an experiment in Kameleoon and apply the “HOLDOUT” tag. 2. **Set traffic split:** Split your traffic so that one group (Control) sees no experiments, and the other (Variation) can be assigned to any experiment (as long as they meet the targeting criteria). 3. **Add goals:** Define the goals you want to track in the experiment. These goals will be essential for comparing the holdout group's performance against visitors who are not in the holdout. 4. **Launch your experiment:** Once the holdout experiment is created and launched, no further setup is needed. Simply monitor its performance over time by checking the Results page of the experiment tagged as holdout. Your control group, which does not see any changes, becomes your baseline to measure the overall impact of the experiments displayed to the variation group. ## Best practices * **Traffic allocation:** We recommend creating a holdout with a maximum of 10% excluded traffic over a limited period, typically three to six months. This allocation ensures a reliable baseline without heavily impacting overall traffic. * **Simple segmentation:** You can set up multiple holdout groups for different segments, such as one for desktop and another for mobile. However, it’s best to avoid overly complex targeting rules for a holdout to maintain clarity and effectiveness. # Creating mutually exclusive groups across client-side and server-side experiments with Kameleoon Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/advanced-experiment-features/creating-mutually-exclusive-groups-across-client-side-and-server-side-experiments-with-kameleoon Configure mutually exclusive groups spanning both web and feature experiments to prevent visitor overlap across client-side and server-side tests. Managing mutually exclusive experiments is a common need when multiple experiments run in parallel. But what happens when some of these experiments are triggered client-side (via **Kameleoon Web Experimentation**) and others are triggered server-side (via **Kameleoon Feature Experimentation**)? This is a more advanced use case, but one that Kameleoon supports with the right setup. In this article, we’ll walk you through how to configure a mutually exclusive setup that spans both technologies. ## The scenario Suppose you want to run **three mutually exclusive experiments**: * **Two experiments** are triggered **client-side** using Kameleoon Web Experimentation (JavaScript-based). * **One experiment** is triggered **server-side** using Kameleoon Feature Experimentation (for example, via a backend SDK). The challenge here is ensuring that visitors are **only exposed to one** of these experiments—even though they’re activated through different technologies and at different stages in the user journey. ### Handling this use case To ensure mutual exclusivity across both client-side and server-side experiments, follow these steps: #### 1. Start with the feature experiment Since the feature experiment is triggered **server-side** and requires early targeting (before page load), it’s best to allocate traffic to it first. * Create your **Feature Experiment**. * Allocate **33% of the total traffic** to this experiment (or any other percentage that matches your testing plan). The **remaining 67%** of the traffic will then be available for the two Web experiments. #### 2. Create a mutually exclusive group for web experiments Next, create a **Mutually Exclusive Group** for the two Web experiments. 👉 Follow this documentation: [Prevent overlapping campaigns with Mutually Exclusive Groups](./prevent-overlapping-campaigns-with-mutually-exclusive-groups). Preventing overlap ensures that visitors can only see **one of the two** Web experiments—never both. #### 3. Add targeting conditions to exclude feature experiment participants To ensure that users who are bucketed into the Feature Experiment do not enter either Web experiment, apply the following targeting condition to both Web experiments: * **Targeting condition:** `Campaigns → Feature Flag` **→ Exclude visitors who have been exposed to any variation of your “feature\_experiment\_name”.** This step guarantees that mutual exclusivity is preserved across both technologies. #### 4. Technical considerations By default, **Kameleoon Web Experimentation** will perform **a remote synchronization call** on each page load to check whether the user has been exposed to a Feature Experiment. This call is how Kameleoon knows whether to include or exclude a user from a Web experiment. If the three experiments are running on the **same page**, this setup can be **tricky**, because the Web engine has to **wait for the server-side exposure status** before deciding whether to include the user in a Web experiment, which can result in **flickering** or delayed content. If the Feature Experiment and the Web Experiments are triggered at different moments in the customer journey (for example, on different pages), you’ll also need to add an exclusion targeting condition in the Feature Experiment to exclude visitors who have already been exposed to one of the Web Experiments. ##### Recommended solution To eliminate flickering and ensure real-time decision-making, expose the user’s Feature Experiment status **directly on the front end**, without waiting for a remote call. * Use the SDK method: `getEngineTrackingCode()`. * Insert the output **in the HTML of the page**, ideally in the `` section. This way, Kameleoon immediately knows whether the user was already exposed to the Feature Experiment, allowing for faster and more seamless targeting. ## Summary Mutually exclusive testing across client-side and server-side experiments is **complex—but fully supported** by Kameleoon when implemented correctly. Here’s a quick recap: * **Start with the feature experiment** and allocate its traffic share first. * **Use mutually exclusive groups** to manage overlap between Web experiments. * **Exclude feature experiment participants** from Web experiment targeting using campaign conditions. * **Use the tracking code method** to eliminate delays and flicker if experiments overlap on the same page. With this approach, you’ll ensure a clean and reliable testing experience while maintaining your data’s integrity. # Predefined tags Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/advanced-experiment-features/predefined-tags Apply predefined tags like TECHNICAL, DELAYED, LIVE-UPDATE, HOLDOUT, and MUTUALLY EXCLUSIVE GROUP to modify how Kameleoon runs your experiments. There are predefined tags that you can use with your experiments to change the default behavior of Kameleoon: * **TECHNICAL**:\ When you add a `TECHNICAL` tag to an experiment, Kameleoon will display the variation of the experiment, but no data will be collected or sent to an analytics platform until [consent](../../../project-management/consent-management-policy#consent-policy) has been given.\ This tag is typically used for experiments or personalization campaigns that display the same variant to all users. * **DELAYED**:\ Adding the `DELAYED` tag to an experiment allows you to delay non-essential experiments until after the first page load. Experiments with this tag are intelligently managed:\ Kameleoon doesn't download the configuration until an idle time of at least 10 seconds after the initial page load **or** until the visitor is targeted and allocated with a variant that is not the control variant. * **LIVE-UPDATE**:\ By default, Kameleoon downloads active experiments and includes them in the application file (`kameleoon.js`).\ The browser stores and caches this file for 90 minutes. If you stop or modify an experiment, targeted visitors returning to a page with active experiments within the 90-minute caching period may still see the experiment due to the cached version.\ To make more frequent updates without being impacted by browser caching, the `LIVE-UPDATE` tag refreshes any experiment within **one minute**.\ This is particularly useful for campaigns that require regular updates. * **HOLDOUT**:\ Create a control group that remains unaffected by any active campaigns. This allows you to establish a reliable baseline to measure the aggregate impact of all changes against a group that experiences no modifications.\ Set up an experiment in Kameleoon and tag it with the `HOLDOUT` label.\ [More about this tag](./create-reliable-baselines-with-holdouts) * **MUTUALLY EXCLUSIVE GROUP**:\ Group campaigns so that each visitor sees only one campaign per group, reducing overlap and improving test clarity.\ Follow the naming convention `ME-GROUP-{GROUP NAME}` to tag each campaign in the group, such as `ME-GROUP-A`.\ This naming signals Kameleoon to treat the campaigns within each group as mutually exclusive.\ [More about this tag](./prevent-overlapping-campaigns-with-mutually-exclusive-groups) # Prevent overlapping campaigns with Mutually Exclusive Groups Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/advanced-experiment-features/prevent-overlapping-campaigns-with-mutually-exclusive-groups Group web experiments so each visitor sees only one campaign per group, reducing overlap and improving result accuracy. This article covers how Mutually Exclusive Groups (MEGs) work, why they’re essential for reliable analysis, and how to set them up in Kameleoon. Running multiple campaigns can lead to overlapping effects, especially when multiple teams experiment on the same area of the website. Kameleoon’s Mutually Exclusive Group solves this by letting you group experiments, so each visitor is exposed to only one experiment within each group. This feature leads to cleaner insights and a better experience for every visitor. This article is for **web experiments**. To read about how to use Mutually Exclusive Groups for **feature experimentation** instead, refer to [this](/user-manual/experimentation/feature-experimentation/create-and-manage-flags/mutually-exclusive-groups-for-feature-experiments) article. ## What is a Mutually Exclusive Group? The Mutually Exclusive Group feature in Kameleoon lets users create groups of campaigns where each visitor can only be targeted by one campaign within that group. This feature is particularly helpful when you have multiple campaigns that may conflict with each other. ## Key benefits A Mutually Exclusive Group prevents overlapping campaigns from interfering with each other. Benefits include: * **Clearer results:** Avoids conflicting data by ensuring visitors see only one campaign within each group. * **Better user experience:** Reduces visitor fatigue from being exposed to multiple changes, creating a smoother experience. ## Example of a Mutually Exclusive Group Imagine you have two groups of campaigns targeting your website’s homepage: * **Group A:** Campaign 1 (new homepage layout) and Campaign 2 (highlighted “Buy Now” button) * **Group B:** Campaign 3 (simplified navigation) and Campaign 4 (updated product descriptions) With a mutually exclusive setup: * A visitor will see either Campaign 1 or Campaign 2 from Group A, but not both. * The same visitor may see either Campaign 3 or Campaign 4 from Group B, but not both. This setup ensures that visitors are not exposed to multiple conflicting changes within each group, allowing more precise measurements. To maintain a consistent experience, if a visitor was previously assigned to an experiment within a group, they will remain assigned to the same experiment. Otherwise, the campaign displayed within the group is chosen randomly, ensuring an even distribution among the campaigns in that group. ### Cross-group exposure Mutually Exclusive Groups only prevent overlap **within** the same group. Kameleoon can expose visitors to one campaign from Group A **and** one campaign from Group B simultaneously. For example, a visitor could experience any of these combinations: * Campaign 1 (from Group A) **and** Campaign 3 (from Group B) * Campaign 1 (from Group A) **and** Campaign 4 (from Group B) * Campaign 2 (from Group A) **and** Campaign 3 (from Group B) * Campaign 2 (from Group A) **and** Campaign 4 (from Group B) To maintain a consistent experience, if a visitor was previously assigned to an experiment within a group, they will remain assigned to the same experiment. Otherwise, the campaign displayed within the group is chosen randomly, ensuring an even distribution among the campaigns in that group. ## How exposure percentages interact with a MEG Exposure percentages set on individual campaigns are **not** applied independently to each campaign’s full traffic when those campaigns belong to the same Mutually Exclusive Group. The MEG first decides which single campaign a visitor is eligible for within the group, and the campaign’s own exposure percentage is then applied on top of that allocation. Each campaign in a MEG receives roughly an equal share of the eligible group population (for example, one third if the group contains three campaigns), regardless of the individual exposure settings. ### Example Imagine three campaigns in the same MEG, each running on a different page that receives 200,000 requests: | Campaign | Page traffic | Exposure | Exposed visitors | | ---------- | ------------ | -------- | --------------------------- | | Campaign A | 200k | 10% | 200k × 1/3 × 10% ≈ **6.7k** | | Campaign B | 200k | 30% | 200k × 1/3 × 30% ≈ **20k** | | Campaign C | 200k | 60% | 200k × 1/3 × 60% ≈ **40k** | The result is **not** 20k / 60k / 120k. That outcome would assume each campaign receives all of its page traffic before the exposure percentage is applied, which is not how a MEG works. Because a MEG splits eligible traffic across the group before exposure is applied, MEGs are best suited for campaigns that can overlap and need to be made mutually exclusive — typically campaigns running on the same page or surface. ## Setting up a Mutually Exclusive Group 1. **Define the campaign group:** Decide which campaigns should be mutually exclusive. For example, you may want all homepage layout changes to be grouped. 2. **Tag the campaign:** Follow the naming convention `“ME-GROUP-\{GROUP NAME}”` to tag each campaign in the group, such as `ME-GROUP-A`. This naming tells Kameleoon to treat the campaigns within each group as mutually exclusive. As a result, visitors can see only one campaign from each mutually exclusive group, avoiding overlap and ensuring more accurate results. Note that Mutually Exclusive Groups are disabled in simulation mode. # Using Shadow DOM elements in the Graphic editor Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/advanced-experiment-features/using-shadow-dom-elements-in-the-graphic-editor Select and modify Shadow DOM elements in the Kameleoon Graphic editor using shadow root paths and the ::SHADOW-ROOT:: selector syntax. Shadow DOM is an advanced web development feature that lets developers encapsulate a part of their webpage's structure, creating a separate "shadow" section. Think of it like creating a miniature webpage within a component of your main site. This "mini-page" operates independently of the rest of your page, preventing conflicts between styles and scripts used within the component and those used on the main page. If you're working in the Kameleoon Graphic editor, you'll need to know how the DOM (Document Object Model) works to use Shadow DOM elements. Since Shadow DOM elements are not visible in the main DOM by default, things like placing widgets or personalizing experiments can be trickier than working with standard DOM elements. This feature is best suited for those with development experience. If you're not comfortable working with the DOM or Shadow DOM encapsulation, it's a good idea to reach out to a developer or look into some online resources about Web Components and Shadow DOM fundamentals. ## Limitation of standard selectors Standard CSS selectors or JavaScript methods like `querySelector()` or `$()` won't work on elements inside a Shadow DOM. These elements are hidden from the main page, meaning: * You cannot target elements inside a Shadow DOM using the usual selection methods in the Kameleoon Graphic editor. * Targeting these elements using traditional CSS or jQuery-style selectors in your experiment might fail. * Any modifications (like text changes, style updates, or content insertion) may not apply unless special steps are taken to piece the Shadow DOM boundary. If you’re unsure whether you’re dealing with a Shadow DOM, inspect the element using your browser’s developer tools. Look for `#shadow-root` in the **Elements** panel. ## Working with Shadow DOM in the Graphic editor In most cases, users can select elements inside a shadow root directly from the preview zone in the Kameleoon Graphic editor. ### When the additional "Shadow root path" input appears In some cases, when you attempt to select or edit an element inside a Shadow DOM using the Kameleoon Graphic editor, you may see an additional input field labeled **Shadow root path**. This field appears when Kameleoon detects that the target element exists within a shadow tree and cannot be accessed using standard selectors. The Shadow root path lets you define a specific path through nested Shadow DOM layers so Kameleoon can reach and modify the element during experiment execution. **Mock connection:** The Graphic editor uses this path to “mock” the connection between the main DOM and the element inside the Shadow DOM, which lets you visually edit and preview changes as if the element were part of the regular page structure. ## Examples ### Targeting a button inside a shadow root In the Kameleoon Graphic editor, you can target elements inside a shadow root: * **Directly in the Preview zone:** If the element is accessible, you can select it within the editor preview, just like any standard element. * **Using “Edit selector”:** For more complex structures you can manually construct the selector path using the Edit selector input. Use the `::SHADOW-ROOT::` separator to indicate a step into shadow root. ### Inspecting Shadow DOM in DevTools 1. Right-click the element > **Inspect**. 2. In the **Elements** panel, look for `#shadow-root (open)` under the custom element. 3. Expand it to view the inner elements. For example: ```html theme={null} #shadow-root (open) ``` ## Visual cues or labels in the UI While working with web pages that use Shadow DOM, the Kameleoon Graphic editor provides several visual indicators to help you identify when elements are part of a shadow root. ### #shadow-root in the Elements panel ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-features/using-shadow-dom-elements-in-the-graphic-editor/element-panel.png) In the editor’s **Elements** panel, components that use Shadow DOM will display `#shadow-root` as part of their CSS selector, which indicates that the element is encapsulated and not part of the main DOM tree. ### "Shadow root path" field in the selector panel ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-features/using-shadow-dom-elements-in-the-graphic-editor/selector-panel.png) When selecting an element inside a shadow root, an additional **Shadow root path** input appears in the **Edit CSS selector** panel. This input lets you build a full path through shadow roots using the `::SHADOW-ROOT::` syntax. ## How to write a selector path for Shadow DOM elements When working with Shadow DOM elements in Kameleoon’s Graphic editor, a standard CSS selector is not sufficient. You must define a selector path that includes the shadow root. To target an element inside a **single-level shadow root**, use the `::SHADOW-ROOT::` separator: `custom-element::SHADOW-ROOT::.target-button` The `::SHADOW-ROOT::` separator tells Kameleoon to enter the shadow root of the specified element and continue targeting inside it using standard CSS selectors. Kameleoon currently supports navigating only **one level** into the shadow DOM. If the element is nested within multiple shadow roots, it cannot be targeted using a full selector path at this time. ### Example ```html theme={null} #shadow-root ``` Your selector path will be `my-element::SHADOW-ROOT::.cta` This tells Kameleoon to: * Select the `my-element` element. * Enter its shadow root. * Target the `.cta` button inside it. ## Limitations and considerations When working with Shadow DOM, keep the following limitations in mind: * **Closed Shadow DOMs:** Elements in a closed shadow root cannot be accessed or modified using the Graphic editor or standard JavaScript. * **Dynamic or script generated content:** If content inside a shadow root is generated or updated dynamically, your changes may not persist or take effect as expected. * **Styling restrictions:** Styles applied from outside the shadow root often won’t affect inner elements due to Shadow DOM’s style encapsulation. CSS rules may need to be applied directly within the component’s internal structure, which isn’t possible via the Graphic editor. ### Shadow root (closed) Some web components use a closed shadow root, meaning their internal DOM is completely hidden from the browser’s developer tools and JavaScript. Unlike an open shadow root, which you can access using `.shadowRoot`, a closed shadow root does **not** expose its content through the DOM, making it inaccessible to: * The Graphic editor * JavaScript-based targeting * Selector paths or custom scripts Because the internal elements of a closed shadow root are hidden, you cannot select or modify them in Kameleoon. Even if you see the outer wrapper component, its internal structure remains sealed. #### What can you do? If a key element is inside a closed shadow root, you’ll need help from a developer. They may: * Rebuild the component using an open shadow root. * Expose specific elements for external targeting. * Provide a hook or workaround for targeting. If you can’t inspect the inside of a component in browser DevTools, it’s likely using a closed shadow root. ### Nested shadow roots Shadow DOMs can be nested multiple layers deep (for example, a shadow root inside another shadow root). This case is not supported in Kameleoon's current version. If an element isn’t responding to edits, double-check if it’s inside a closed shadow root or if you’re missing part of the path. ### Adding widgets to shadow root Widgets can’t be added inside Shadow DOM elements in Kameleoon’s Graphic editor because the Shadow root isolates its content from the DOM nodes the editor can reach. ### Add click tracking from the Graphic editor You currently cannot add a click tracking goal directly from the Graphic editor for Shadow DOM elements. However, you can create and manage one using Kameleoon's [API](../../../../developer-docs/apis/activation-api-js/api-reference/api-reference#runwhenshadowrootelementpresent). # Multi-language experiments Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/advanced-experiment-types/multi-language-experiments Create multi-language A/B test variations in the Kameleoon Graphic editor to test content changes across different languages simultaneously. Kameleoon makes it quick and easy to implement multi-language experiments. In this tutorial, you will learn how to create a multi-language variant using the Graphic editor, using the [Fossil website](https://www.fossil.com/) as an example. ## Goal The goal of this guide is to change the header label "Order Status" ("Statut de la commande" in French) to "Order Tracking" ("Suivi de commande" in French). ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/multi-language-experiments/header.png) ## Steps 1. Launch the Graphic editor. 2. Select "Order Status" in the header and generate the selector based on **Content**. If the label you want to edit is in a Shadow DOM see [this article](../advanced-experiment-features/using-shadow-dom-elements-in-the-graphic-editor#working-with-shadow-dom-in-the-graphic-editor) 3. Enter "Order Tracking". 4. Change the language to French by clicking **Ship to** > **Europe** > **France**. 5. Repeat step **2** and **3**, entering "Statut de la commande" in the header. 6. Change the text to "Suivi de commande". 7. Simulate the experiment to verify your variant. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/multi-language-experiments/demo.gif) # Multi-page experiments Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/advanced-experiment-types/multi-page-experiments Design experiment variations that span multiple pages and configure URL-based targeting to run tests across entire user journeys. Multi-page experiments let you design variations that encompass modifications across multiple pages within a single experiment. **Benefits of Multi-Page Experiments:** * **Holistic testing:** Evaluate your changes' impact across user journeys spanning multiple pages. * **Unified experiment management:** Create and manage variations that affect different pages within the same experiment. * **Streamlined workflow:** Design variations for multiple pages simultaneously, minimizing the need for separate experiments. **Creating Multi-Page Variations:** 1. Launch the Graphic editor on all desired pages. 2. Design your variations and incorporate changes for each page within the same variation. 3. Define the targeting criteria for your multi-page experiment during finalization. Kameleoon also supports the [simultaneous selection of multiple elements on one or several pages](../graphic-based-experiments/getting-started-with-the-graphic-editor). Multiple selection enables efficient edits to elements with identical IDs or classes across multiple targeted pages. For example, you can automatically apply a change to an "Add to Cart" CTA on one page to all other "Add to Cart" CTAs on targeted pages in the experiment. ## Target pages according to their URL Once your variations are complete, click **Finalize** to proceed to the experiment configuration. The **Targeting** section lets you select the specific pages on which your experiment will run. Define the pages where you want to implement the changes you made in your variations. ### Several pages sharing the same URL If you want to target more segments: 1. In the finalization flow, click **Target a segment** > **Create a new segment**.The segment creation window opens. 2. Double-click the **Page URL** condition or drag and drop to select it. You can add this condition as many times as you need. A wide range of targeting conditions are available. For more information on targeting options, please read [this article](../../../assets/segments/manage-targeting-segments). 1. Indicate the URL or URL fragment you want to target on your website, and specify if you want to include or exclude it. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/multi-page-experiments/Capture-decran-2021-06-08-174105-1920x556.png) Kameleoon offers three options: ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/multi-page-experiments/Capture-decran-2021-06-08-174147.png) * **Contains:** Runs the test on all URLs containing a URL fragment. * **Corresponds exactly to:** The test will only run on the URL you choose. If your URL contains changing parameters, use the **Matches the regular expression** option. * **Matches the regular expression:** If your A/B test runs on a group of pages with specific parameters. For example: `?x=exemple&y=exemple2`. Let’s take this regular expression as an example: ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/multi-page-experiments/Capture-decran-2021-06-08-174330-1920x589.png) The regular expression above requests Kameleoon to run the test on pages containing the path `mywebsite.com/article/january` and the parameter `x=y`. Among the five following examples, only the first two URLs will be taken into account by the A/B test: `http://www.mywebsite.com/article/january?x=y` `https://mywebsite.com/article/january?a=b&x=y&c=d` `http://www.mywebsite.com/article/january` `http://www.mywebsite.com/article/january/?x=y` `http://www.mywebsite.com/article/january/monday?x=y` Explanation: * The third URL does not contain the `x=y` parameter * The fourth URL contains a `/` after `january` * The fifth URL has `monday` added at the end. ### Several pages with the same URL fragment To target several pages containing the same URL fragment, you can launch the test for a **Specific advanced segment** and follow the steps above, or choose to launch the test on **URLs containing a specific fragment** in the drop-down menu. If, for instance, you want to change the color of the "Add to basket" button on each of your product pages, and all these pages' URLs contain one identical fragment, you should use this targeting option: ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/multi-page-experiments/target-by-webpage.png) When you have selected **URLs containing a specific fragment**, a new field appears where you can enter the fragment of your choice. If all of your pages contain the `/product/` fragment, choose **URLs containing a specific fragment**. The A/B test will only apply to pages containing this fragment. ### From an element on the page Kameleoon's URL targeting feature may not work for your test targeting for two reasons: * All the URLs are different. * You want to test the last step of a process (for example, registration or booking) containing **several** steps, but only **one** URL. Targeting the URL would include all steps in the A/B test, so, in this case, URL targeting doesn't work. To address potential issues with dynamic page content and ensure accurate targeting, Kameleoon offers the **Presence of an element on the page** feature. 1. Create a new segment within your experiment. 2. Select the **Technical** category > **Element on the page**. 3. Define the specific element that should be present on the page for visitors to be included in the experiment. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/multi-page-experiments/Capture-decran-2021-06-08-174842.png) If your page contains a unique element (particularly in the case of a multi-step process with the same URL), you can use this method to target your test. To do so, indicate the HTML element's ID or the CSS selector to define the element. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/multi-page-experiments/Capture-decran-2021-06-08-174926.png) For optimal performance, choose an element located near the page's top when using **Presence of an element on the page**. Placing the element lower on the page increases the likelihood of flickering, as Kameleoon waits for the element to load before triggering the experiment. ### On the whole website You can also launch the test on all of your website's pages. To do so, select **the entire site** when you choose your target audience. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/multi-page-experiments/target-entire-site.png) # Running an A/B test on a Shopify store Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store Run A/B tests on Shopify using content swapping, the Graphic editor, or the Kameleoon JS SDK in Liquid templates. Let's say you want to test different variations of your product page and measure how visitors interact with it based on key KPIs, such as the number of "Add to cart" actions, entries into the checkout funnel, and, ultimately, the number of completed orders. Imagine a typical product page, as shown in the image below. A user can either choose to buy the product immediately or add it to their cart. But what if most of your visitors typically only purchase one product? In that case, you might consider showing only a single "Buy Now" CTA to streamline the checkout process and reduce friction for your users. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/product-page.png) There are several ways to create experiments using Kameleoon. For example, you can: * **Content swap test:** Each variant of your experiment lives on a different Shopify template, which can be access through a dedicated page URL (eg. `www.mystore.com/products/products/produc-name?view=version-b`). The A/B testing tool allows to swap your content with the variant (for example, pages B, C, etc.). * **Use a visual editor:** Create variants directly on your product page using our Graphic editor, or customize them by injecting JS/CSS. * **Leverage Shopify's Liquid and a JS SDK:** Add logic in your Liquid template to activate or deactivate specific variants for a subset of users. Let's explore each method in more detail. Before getting started, ensure Kameleoon is installed on your Shopify store—this is required to run any experiments. * If you're running **web experiments**, we recommend using our [**Shopify x Kameleoon app**](https://apps.shopify.com/kameleoon-abtesting-app), which simplifies setup. Be sure to check out our [documentation](../../../integrations/cms-e-commerce/shopify/shopify-plus) for step-by-step instructions. * If you're running **feature flags or feature experiments**, please follow the guidelines outlined in our feature experimentation \[documentation]\(../../../../developer-docs/sdks/web-sdks/js-sdk. ## Content Swapping testing A **Content Swapping test** is an A/B/n experiment where users are shown different contents under the same URL, each representing a variant of the same page. Contrary to URL redirects, it doesn't create [Sample Ratio Mismatch](../../../experiment-analytics/statistical-methods/sample-ratio-mismatch) With Shopify, content swapping tests are easy to set up using the `?view` URL parameter, which lets you serve alternate templates for the same page. For example: * `https://kameleoon-segment-test.myshopify.com/products/vans-sh-8-hi` * `https://kameleoon-segment-test.myshopify.com/products/vans-sh-8-hi?view=version-b` In this case, `?view=version-b` uses [Shopify's alternate template feature](https://www.shopify.com/partners/blog/shopify-alternate-templates), letting you create multiple versions of templates for products, collections, carts, and more—perfect for content swapping experiments. Now, let's walk through how to configure a content swap test in Shopify and Kameleoon. In your Shopify admin, go to **Online Store** > **Themes** > **Actions** > **Edit Code**, and open the `product.liquid` template. The template includes two main sections: * `product-template` — contains the product page's source code. * `product-recommendations` — contains the code for the "You may also like" recommendation block. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/0.png) To set up your content swap experiment, you must create an alternate template for **variant B** and duplicate the `product-template` section, removing the code related the **Add to Cart** button. Here's how: 1. Click **Add a new template** in your Shopify theme editor. 2. Choose the **Product** template type and name it (we've used `version-b`, but you can use any name). ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/1.png) The name you choose will appear in the URL (for example, `?view=version-b`), so pick something that makes sense to your team but isn't confusing to users. 3. Click **Add a new section**; name it **`product-template-version-b`**, and **copy and paste** the code from your original `product-template.liquid` file into this new section. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/2.png) You should now have four liquid files. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/3.png) 4. Remove the **Add to cart** button code from the **`product-template-version-b.liquid`** section. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/4.png) 5. Call your modified section (`product-template-version-b`) from the alternate product template you created (`product.version-b.liquid`). Your updated code should look something like this: ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/5.png) Once you've saved your changes, you're all set! You now have a second variant of your product page. Shopify lets you load alternate template files using the `?view=` URL parameter. As long as the value matches a template file in your theme, Shopify will render that version of the page. For example, visiting `https://kameleoon-store.myshopify.com/products/vans-sh-8-hi?view=version-b` will now display the product page **without the Add to Cart button**—just as we intended. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/buy-now.png) Most of the hard work is done—now it's time to **configure your content swap experiment in Kameleoon**, so that 50% of your visitors are shown **variation B** instead of the original product page. It's a simple process: 1. Go to the [Kameleoon app](https://app.kameleoon.com/). 2. Click **New experiment** > **With the code editor**. 3. Enter the required information and click **Create**. The Code editor will open. From there, you can set up and launch your experiment. 4. Click the **chevron** next to **Add variation** > **Add code variation**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/add-url-redirection.png) 5. Add the **following code**, adapting the `VIEW` and the `SELECTOR` variables to suit your use case ```javascript theme={null} var VIEW = 'version-b'; // Alternate template handle, e.g. 'version-b' var SELECTOR = '#MainContent'; // Main container selector Kameleoon.API.Core.runWhenElementPresent( SELECTOR, function () { fetch(window.location.pathname + '?view=' + encodeURIComponent(VIEW), { credentials: 'same-origin' }) .then(function (r) { return r.text(); }) .then(function (html) { var doc = new DOMParser().parseFromString(html, 'text/html'); var newContent = doc.querySelector(SELECTOR) || doc.body; var main = document.querySelector(SELECTOR); main.replaceWith(newContent); }) .catch(function (err) { console.error('[Kameleoon] Swap failed:', err); }); } ); ``` Variation B is now set up. You're just one step away from launching your experiment. Use the tabs in the left sidebar to define: * **Targeting:** Define who should see the experiment (all users, specific user segments). * **Traffic allocation:** Choose how to split visitors between the original and variation B. * **Goals:** Set how you'll measure success (click, conversions, orders). Since we want to run this experiment for **50% of our traffic** on **product pages**, we'll configure the targeting as follows: * **Include** URLs that contain `/products/`. * **Exclude** URLs with the parameter `view=version-b` to prevent an infinite redirect loop. Next, choose the primary goal used to measure your experiment's success. In this case, we want to increase the number of orders. If you've installed the **Shopify x Kameleoon app**, select the automatically tracked **Shopify orders** goal. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/goals.png) Your experiment is now ready to be pushed live! We **highly recommend simulating your experiment before launching**. Simulating lets you verify that visitors assigned to the **Buy it now** variation are correctly shown the **URL B content**. Once you've simulated your experiment, return to Kameleoon and click **Launch** to launch your experiment. Data collection will begin as soon as the first targeted visit ends on your store. As a general guideline, we recommend running the experiment for 2-3 weeks, depending on your traffic volume, before evaluating results. Kameleoon will help you determine when to stop the experiment by analyzing key indicators like statistical significance, uplift, and data stability over time. For a full understanding of how Kameleoon stats model works, we highly recommend reading [this documentation](../../../experiment-analytics/statistical-methods/statistical-significance). When the template `version-b` is the winning one, no extra code is needed. The customer can just use this template as the default one. You can use the content swap method you've just implemented on other Shopify pages using the same approach. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/6.png) ## Create variants with a graphic or code editor In the previous section, we explored how to set up a content swapping test using Shopify's alternate template URL parameter—a powerful method if you know exactly which template sections to update and have the technical skills to modify your Liquid files. Another flexible and efficient approach is creating page variants using a graphic or code editor. Instead of redirecting visitors to an alternate URL, this method modifies pages on the fly—for example, by hiding the Add to Cart button in real time. The advantage? Changes happen so quickly that users won't notice they're part of an A/B test. The biggest different here is ease of use. Kameleoon's Graphic editor lets you visually delete, edit, or rearrange elements without touching any code. However, for more advanced changes, JavaScript and CSS knowledge will come in handy. Fortunately, Kameleoon also offers a powerful Code editor to support this. Let's walk through how to set up this experiment in Kameleoon: 1. Open the [Kameleoon app](https://app.kameleoon.com/). 2. Click **New experiment** > **With the graphic editor**. 3. Enter the required information and click **Create**. Kameleoon's Graphic editor will open directly on the product page URL of your choice. 4. Select the **Add to Cart** button. 5. To hide the button: * Click the **three-dots menu** in the left sidebar > **Hide**; * **Or** click the **Hide** icon in the toolbar that appears beneath the selected element. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/hide.png) That's it—variation B is now ready! Finalize your experiment by configuring it just like the split URL setup: * Allocate 50% of traffic. * Target all pages with URLs containing `/products/`. * Set **Shopify Orders** as your primary KPI. Just like with the split URL experiment, we highly recommend simulating your experiment on your device to ensure the variation displays correctly across all product pages. Finally, click **Launch** to start the experiment on your store. You can also achieve the same result by adding CSS or JavaScript directly in the variation using Kamneleoon's Code editor. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/code-editor.png) ## Use JS SDK in Liquid to toggle features Activating or disabling code directly in your `product.liquid` file using feature flags and Kameleoon's JavaScript SDK is the most advanced option of the three techniques we've covered. While more technical, it's extremely powerful if you want to progressively roll out features to your users. Typically, feature flags require a server-side SDK embedded in your backend infrastructure. These SDKs handle tasks like user bucketing, targeting, and tracking experiment results. However, in Shopify, you don't control the server, so server-side SDKs aren't an option. That's where Kameleoon's client-side JS SDK comes in. The SDK allows you to run feature experiments entirely in the browser, within your Shopify theme files. If you're comfortable editing Liquid templates, this is the recommended approach. To get started: 1. Go to the [Kameleoon app](https://app.kameleoon.com/) 2. Navigate to the **Feature flags** menu. 3. Click **New feature flag** and follow the steps in [this guide](../../feature-experimentation/create-and-manage-flags/manage-your-feature-flags). Your feature flag should contain one experiment rule with multiple variations, with **Off** as your control (original behavior). Once your feature flag is created in Kameleoon, note the **feature flag key** (for example, `shopify-pdp-page`). You'll need this key to reference the flag in your Shopify theme code. Now, it's time to write the logic in your `product.liquid` (or `product-template.liquid`) file that will control whether the Add to Cart CTA is shown or hidden based on the visitor's variation. Here's the goal: * If the visitor is in **variation B**, we'll hide the CTA. * If the visitor is in **variation A** (the control), we'll display the CTA. **What the script does:** * Ensures the Kameleoon JS SDK is loaded and initialized. * Checks if the feature flag is active and which variation the visitor is bucketed into. * Applies the logic to hide or show the CTA accordingly. To implement: 1. In your Shopify admin, go to **Online Store** > **Themes** > **Actions** > **Edit Code**. 2. Open the **`product-template.liquid`** file (or equivalent). 3. Insert the Kameleoon feature flag logic. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/running-an-ab-test-on-a-shopify-store/image-28.png) 4. Click **Save** to apply the changes to your theme. That's it! Your new feature experiment using the Kameleoon JS SDK is now live. # Set up an experiment on a single-page app (React, Next.js, Vue.js...) Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/advanced-experiment-types/set-up-experiment-single-page-app Configure Kameleoon to run experiments on single-page applications by enabling SPA support and handling dynamic page changes. ## What is a single-page app (SPA)? ### Definition and purpose A single-page application (SPA) is a type of web application designed to provide a smoother and faster user experience by dynamically updating content without reloading the entire page. SPAs are typically built using modern JavaScript frameworks like React, Next.js, or Vue.js. Many SPAs also utilize server-side rendering (SSR), which adds complexity to client-side implementations like A/B testing and personalization. The primary advantage of SPAs is improving the visitor’s navigation experience by loading resources once and updating the content dynamically, rather than reloading the entire page after each action. ### Implementation challenges and solutions SPAs introduce unique challenges for tools like Kameleoon that rely on page loads to apply variations or run scripts. To ensure optimal performance, it is crucial to adapt the implementation strategy based on the type of SPA you’re working with. In the following sections, we will outline best practices and procedures for handling each scenario, ensuring smooth integration and accurate tracking of visitor behavior across your website. ## Native setup If your website is a full-site SPA, enabling the **"support for dynamic websites**" option ensures Kameleoon looks for URL changes. When the URL changes, all Kameleoon scripts rerun, including targeting and variation code. Kameleoon will also monitor updates in your SPA by using a **`MutationObserver`** to track changes in the DOM, even when the page URL remains static. This allows Kameleoon to apply (or reapply) variation changes dynamically as updates occur on your website. Kameleoon supports various modifications made through the graphic editor, including: * Style changes * Text modifications * Position updates (swap, insert before/after) * Custom CSS selectors This approach ensures that all relevant changes are consistently applied in a dynamic environment. To enable **support for dynamic websites**: 1. Click **Admin** > **Projects**. 2. Locate your project's card and click the **Edit** icon. 3. Click **Configuration** and unfold the **General** menu. 4. Scroll down to **Advanced settings** and toggle **Enable support for dynamic websites (Single Page App, Progressive Web App...)** **ON**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/set-up-an-experiment-on-a-single-page-app/advanced-settings.png) Several options are available to help you optimize your configuration: * **Choose the scope:** You can enable the feature for the entire site or limit it to specific elements using the Graphic editor. Restricting the scope to selected elements helps reduce the overall script weight. See how to mark an element as dynamic [here](../graphic-based-experiments/edit-a-variation#enable-dynamic-elements). * **Set a custom attribute (optional):** This option improves element identification and helps avoid issues related to dynamic attributes and selectors. If your website does not generate stable or unique HTML IDs, you can define a custom attribute for Kameleoon to use when identifying modified elements. This attribute takes priority over the element ID when building the selector. * **Avoid dynamic ID selectors (optional):** This option also improves element identification when dealing with dynamic attributes and selectors. By default, Kameleoon ignores HTML IDs that contain numeric sequences longer than five digits. You can define your own regular expression to exclude additional ID patterns if needed. ### Set a custom attribute You can define a custom attribute (for example, `data-id`, `data-qa`) to identify elements on the page. Custom attributes are particularly useful when your site generates dynamic IDs for HTML elements. The Kameleoon Graphic Editor identifies elements using **CSS selectors**, which fall into two categories: * **ID-Based Selection:** If the element has an ID, Kameleoon will use it to locate and modify the element when the page loads. * **Combinator Selector:** If no ID is found, Kameleoon creates a selector path using the nearest parent element with an ID. In cases where your IDs are dynamic and change frequently, the Graphic editor might struggle to identify elements. To resolve this issue, you can add a static custom attribute (for example, `"); }, null, true ); }` } insertMyNewCTA(); ``` ### Retrieve data from the dataLayer When using GTM as the retrieval method for setting custom data values, Kameleoon relies on a defined `dataLayer` to access its values. If the `dataLayer` is updated after each URL change by stacking new entries instead of removing the old ones, Kameleoon may retrieve outdated values. This retrieval happens because the old data persists across pages, and Kameleoon might execute before the `dataLayer` is updated. To prevent this issue, ensure that outdated entries are removed before adding new ones. Alternatively, implement custom code to wait for changes in the `dataLayer` length before retrieving the latest values: ```javascript theme={null} `window.dataLayerLength = window.dataLayerLength || 0; Kameleoon.API.Core.runWhenConditionTrue(() => { return window.dataLayer && window.dataLayerLength != window.dataLayer.length }, () => { window.dataLayerLength = window.dataLayer.length //then, retrieve and use dataLayer info here })` ``` ## General Considerations ### Event listeners, timeouts, and intervals Use `Kameleoon.API.Utils` to manage event listeners, timeouts, or intervals. These methods ensure that listeners and timers are automatically removed when a URL change occurs without a page reload. These removals prevent duplicates when Kameleoon reruns. ### Unique element IDs When adding elements via Kameleoon, ensure their `id` starts with `kameleoonElement`. This naming convention ensures the element is removed before Kameleoon reruns, avoiding duplication or conflicts. **Example:** `
` ### Page view incrementation Kameleoon only counts a new page when all its scripts are re-executed, which happens under two conditions: * When `Kameleoon.API.Core.enableSinglePageSupport()` is called, combined with a URL change. * When `Kameleoon.API.Core.load()` is explicitly triggered. By following all the guidelines above, you can ensure that variations are implemented effectively and consistently across SPAs, enhancing user experience while maintaining data integrity. For any additional assistance, feel free to contact the Kameleoon team. ## Alternatives ### REACT and JS SDKs Kameleoon offers a [React SDK](../../../../developer-docs/sdks/web-sdks/react-js-sdk) and a [JavaScript/TypeScript SDK](../../../../developer-docs/sdks/web-sdks/js-sdk) designed for single-page applications. These SDKs provide an alternate method for running experiments and managing feature flags within your SPA by integrating the SDK into your application’s codebase. For a comprehensive list of features available for SPAs, refer to our [SDK documentation](../../../../developer-docs/feature-experimentation/get-started/overview). ### GatsbyJS plugin Kameleoon also provides a dedicated plugin for GatsbyJS applications. To integrate Kameleoon with your GatsbyJS app, follow the instructions outlined in [this article](https://www.gatsbyjs.com/plugins/gatsby-plugin-kameleoon/). ### Next.js framework If your website is built with Next.js, there's an important consideration when using Kameleoon's Graphic editor. Next.js websites load in a specific way that could cause conflict with Kameleoon's changes if they happen too quickly, potentially causing the page to display incorrectly. #### Recommended solution The Kameleoon team created a dedicated Next.js setup guide that solves this issue automatically. This setup ensures: * Kameleoon loads quickly and efficiently. * Your page displays smoothly without flickering. * Changes appear at the right time without breaking your site. * Page navigation works correctly. **See the step-by-step guide:** [Implementation with Next.js](../../../../developer-docs/web-experimentation/implementation-and-deployment/implementation-with-nextjs) #### Alternative approaches If you can't use the recommended setup above, there are other ways to prevent conflicts. Your developer can add a simple signal that tells Kameleoon "the page is ready for changes now." * **Method 1: Page ready indicator** * Add a marker to the `` element once the page is fully loaded. Then set up your Kameleoon experiments to only run when this marker is present. * **Method 2: Custom event** * Use Kameleoon's command queue to send a signal once your page is ready: `Events.trigger('my page is hydrated')`. * Then configure your experiments to use the **Custom event** targeting criteria to wait for this signal before making changes. For more details on implementing custom events and other targeting, refer to [this article](../../../assets/segments/create-a-segment#technical) The dedicated Next.js setup handles all of this automatically, so you won't need to worry about these technical details. # Set up multivariate tests Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/advanced-experiment-types/setting-up-multivariate-tests Set up multivariate tests to simultaneously test multiple page element variations and identify the best-performing combination. For more information on the differences between A/B and multivariate tests, watch the [Get started with web experimentation](https://academy.kameleoon.com/get-started-with-web-experimentation/164197?utm_source=user_manual\&utm_medium=online) course in the Kameleoon Academy. ## What is a multivariate test? A classic A/B test compares two versions of a page. A multivariate test (MVT) tests multiple variations of several page elements at the same time to find the combination that maximizes conversions. For example, suppose you want to test a call-to-action (CTA) button with two colors (red and orange) and two wordings (**Shop** and **Add to cart**). A single MVT can test and compare all six possible combinations. ## MVT glossary * **Multivariate test:** An experiment that measures the conversion of one or more combinations of several elements. * **Section:** A group of variations for a single element. * **Variation:** A suggested change for a given element. An MVT can include several variations, grouped into sections. * **Combination:** A set of variations from different sections that is displayed to exposed visitors. ## Create a multivariate test To create a multivariate test: 1. Click **New experiment** > **In the graphic editor**. 2. Select **Graphic MVT** from the **Experiment type** dropdown. 3. Fill in the required information and click **Continue**. ## Set up sections and variations Each section groups the variations of one element. The following example tests the color and wording of a CTA. There are two colors (red and orange) and two wordings: **Shop** and **Add to cart**. To test the colors, create a first section (Section A, called **Color**) that includes your reference version and the variations **red** and **orange**. A Color section with the reference version and the red and orange variations To test the wording, create a second section (Section B, called **Wording**) that includes your reference version and the variations **Shop** and **Add to cart**. A Wording section with the reference version and the Shop and Add to cart variations Click **Create**. The MVT version of the Graphic editor opens. ## Use the MVT editor You can create your variations' content the same way you would in an A/B experiment. However, the MVT editor is slightly different. ### Sections Click a section in the left panel to select it. The following options are available: * Click the **duplicate icon** to duplicate the section. * Click the **three-dots menu** to: * Rename the section. * Delete the section. An MVT experiment must have at least two sections. ### Variations The selected section's variations are displayed in the left panel. The following options are available: * Click the **duplicate icon** to duplicate the variation. * Click the **three-dots menu** to: * Rename the variation. * Add custom code (JavaScript or CSS) to the variation. * Preview the variation in a new tab. * Search and replace words on the page. * Delete the variation. Deleting all of a section's variations also deletes the section itself. Kameleoon recommends changing no more than two elements on your page (a maximum of two sections), with three to four variations per element. Kameleoon combines the variations across sections to find the best combination, so the more sections you create, the more traffic you need to get usable, reliable results. To learn more, read the article on [statistical significance](../../../experiment-analytics/statistical-methods/statistical-significance). Kameleoon automatically creates all possible combinations from the variations you design, using a full factorial design that tests every combination simultaneously. ## Allocate traffic For more information on traffic allocation in MVT experiments, watch the [How to finalize your web experiment](https://academy.kameleoon.com/how-to-finalize-your-web-experiment/175314) course in the Kameleoon Academy. Once you have created your variations, finalize your experiment the same way as [a classic A/B experiment](../configure-and-launch/finalizing-an-experiment). The only difference is your experiment's traffic distribution. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/setting-up-multivariate-tests/user-manual_images_experimentation_web-experimentation_advanced-experiment-types_setting-up-multivariate-tests_traffic-allocation.png) ### Traffic allocation for the experiment To manage the experiment's traffic allocation, click and drag the slider next to **Exclude a percentage of the exposed visitors** to your desired percentage. ### Traffic allocation for exposed visitors You must choose one of two ways to distribute traffic among exposed visitors: * **By section:** You set the traffic share of each variation within each section. Kameleoon then derives each combination's traffic from the shares of the variations it contains. Use the **Sections** tab when you want to weight individual variations, such as showing the red CTA to more visitors than the orange one. * **By combination:** You set the traffic share of each full combination directly. Use the **Combinations** tab when you want precise control over specific combinations, such as excluding or boosting a particular pairing. The two tabs are independent: editing the distribution in one tab doesn't affect the other, and only one applies to your experiment. Kameleoon uses the tab that is selected when you click **Launch**. By default, the **Sections** tab is selected. #### Distribute traffic by section Click **Sections** to distribute traffic by section. Check the checkbox next to a variation to include it in your experiment. To edit a variation's traffic allocation, do one of the following: * Click and drag the variation's slider. * Enter a percentage in the text field. Click the **padlock** to lock a variation's traffic allocation. Click the **padlock** again to unlock it. In the following example, 30% of exposed visitors see a red CTA and 40% see an orange CTA. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/setting-up-multivariate-tests/Screenshot-2025-04-02-at-11.00.14AM-1536x136.png) Click **Allocate equally** to distribute traffic equally between variations. Clicking **Allocate equally** undoes your changes. #### Distribute traffic by combination Click **Combinations** to distribute traffic based on the combinations you've created. Suppose you want to test a CTA's color **and** its wording. You would have two sections: **A** (color) and **B** (wording). ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/setting-up-multivariate-tests/combinations-traffic.png) | Section A: COLOR | Section B: WORDING | | ---------------------- | ------------------------- | | Variation A0: Original | Variation B0: Original | | Variation A1: Red | Variation B1: Add to cart | | Variation A2: Orange | | The generated combinations have the following names: * A0B0 Original / Original * A0B1 Original / Add to cart * A1B0 Red / Original * A1B1 Red / Add to cart * A2B0 Orange / Original * A2B1 Orange / Add to cart You can exclude combinations in the **Combinations** tab. For example, in an MVT that changes both the background and text colors, you can exclude combinations where the background and text colors are the same. Check the checkbox next to a combination to include it in your experiment. To edit a combination's traffic allocation, do one of the following: * Click and drag the combination's slider. * Enter a percentage in the text field. Click the **padlock** to lock a combination's traffic allocation. Click the **padlock** again to unlock it. Click **Allocate equally** to distribute traffic equally between combinations. Clicking **Allocate equally** undoes your changes. ## Simulate, launch, and analyze your MVT Once you've created your variations and distributed traffic, simulation, launch, and analysis work the same as in an A/B experiment. ### Simulate your MVT Kameleoon recommends simulating your experiment before going live. The simulation panel generates your experiment's combinations. Click **Currently displayed in simulation** to check the display of the combination of your choice. To learn more, read the article on [simulation mode](../../feature-experimentation/using-the-rollout-planner/validation-and-rollback/using-simulation-mode). ### Launch the MVT If everything displays correctly and your targeting, goals, and reporting tools are set up, you are ready to launch. Click **Launch**. ### Analyze the results If you selected Kameleoon as your reporting tool, your MVT's results are transferred to the A/B experiment Results page. Each combination is considered a variation, as defined for classic A/B experiments. You might experience a short latency (up to 10 minutes) between launching your experiment and its visibility on your website. Don't worry if your experiment does not appear immediately. # URL redirection split tests Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/advanced-experiment-types/url-redirection-split-test Run A/B tests that redirect visitors to different page URLs, with guidance on consent, analytics, SRM, and SEO considerations. URL redirection split tests are only available in the Graphic editor and Code editor—they aren't available in PBX. Unlike a classic A/B experiment, an A/B experiment with URL redirection implies that the tested page's different versions are developed and hosted on your web server: the versions are made available to visitors directly via your website. Let's take the following example: you have two subscription pages you would like to test. These are their URLs: `http://mywebsite.com/SubscriptionA.html` `http://mywebsite.com/SubscriptionB.html` The pages are accessible via your website. With Kameleoon, you can A/B test these two pages and analyze their performance and results. ## Simple URL redirection Launch the Kameleoon Graphic editor or Code editor as usual. Click the **arrow** next to Add variation and select **Add URL redirection**. You can then configure URL redirection for the variation. There are two types of redirection: **Global redirection** and **Redirection by parameter**. Kameleoon Web Experimentation performs redirections using JavaScript. If you prefer to perform URL redirection with the HTTP response status code 302, use Kameleoon's [Feature Experimentation](https://www.kameleoon.com/en/platform/feature-experimentation) solution and an SDK. When setting up a redirection experiment, Kameleoon automatically handles the self-redirection for the original variation, which is highly recommended for the following reasons: * **Consistency in user experience**: Redirecting the original variation ensures that all users are treated the same way, whether they are shown the control or a variant. Without this redirection, users in the original variation may experience slight delays or differences due to how variations are served, which could introduce bias into the test results. See section 9 of this [article](https://www.exp-platform.com/Documents/2009-ExPpitfalls.pdf) for more information. * **Accurate data collection**: In redirection-based tests, failing to redirect to the original variation could cause discrepancies in how interactions are measured. For example, visitors to the original page may not experience the same tracking and reporting systems as those on the redirected variation, leading to incomplete or skewed data (see [section on SRM](#url-redirection-and-sample-ratio-mismatch)). This process only applies when the redirection test is created in the Kameleoon app. It does **not** apply if the redirection is handled through the API. To reduce the risk of Sample Ratio Mismatch (SRM), you should duplicate the original variant and manage the self-redirection of the original variation using Kameleoon's API as well. ### Global redirection Global redirection is a simple URL redirection without further parameters. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/advanced-experiment-types/url-redirection-split-test/redirection-sidebar.png) You need to type a complete URL (and not just a fragment of the URL). For example, you can indicate a global redirection from: `http://www.website/page1` to: `http://www.website/page2` You can also choose to include any query parameters in the redirect. For example, if you are redirecting users from `https://www.example.com/products?category=shoes` to `https://www.example2.com/products`, the query parameter **`category=shoes`** will be passed along to the redirection URL (`https://www.example2.com/products?category=shoes`). ### Redirection by parameter If you want to use the same URL but with extra parameters, select **Redirection by parameter**. Indicate the parameters to add at the end of the URL. This option can be useful if you want to change the default sorting of results on a product page, for instance. Repeat this operation for every variation you want to test, indicating, for each, which URL visitors must be redirected to. In the case of a split URL A/B experiment, it’s important to correctly target your experiment. You should not use the **Presence of an element on the page** targeting option because it will significantly increase the flickering effect. Kameleoon would have to wait until the page loaded to check the presence or absence of the targeted element and then redirect visitors to a variation. For this kind of experiment, use the other targeting options (URL or advanced JavaScript condition). Likewise, if JavaScript code is used for complex redirection, keep the box **Load this JavaScript code after page has finished loading (at DOMReady)** unchecked. Also, it’s not necessary to indicate in your experiment's targeting that both pages (A and B) are relevant: page A is sufficient. ## URL redirection on several pages When a split URL A/B experiment runs on several pages (for example, every product information page), you need more features than those available in the redirection panel shown above. You often must manage the redirection with a personalized JavaScript code. Say, for instance, you want to redirect every visitor accessing the following pages: `http://mywebsite.com/product/sheet/technology,product,id.aspx` to these pages: `http://mywebsite.com/product_AB/sheet/technology,product,id.aspx` The `technology`, `product` and `ID` parameters change according to the product information page displayed. To run this test, you must write JavaScript code to ensure that every possible case is taken into account. Here is an example: ```javascript theme={null} var url = window.location.href; var redirect_url = url.replace("/product/", "/product_AB/"); Kameleoon.API.Core.processRedirect(redirect_url); ``` Once the JavaScript code is written, you must carefully define the target. If you want to target via a URL, you need to restrict the test to URLs containing the following fragment: `http://mywebsite.com/product/sheet/` Running a split URL A/B experiment on several pages implies that elements of identification are not managed as parameters but directly in the URL. The page type will not be `category.php?product=` but `/category/product.html`. Don't hesitate to consult [our developer documentation on URL redirection](../../../../developer-docs/apis/activation-api-js/api-reference/api-reference#processredirect) ## URL redirection and consent policy When Kameleoon performs a redirection, certain data (such as the variation ID being exposed) must be temporarily stored in the visitor's browser to ensure proper tracking after the redirection is completed. However, since data storage is not permitted before consent is provided, we recommend running redirect experiments only for users who have given their consent. To implement this, use the following JavaScript targeting condition in your experiment's configuration: `return Kameleoon.API.Visitor.experimentLegalConsent || false;` If you choose to run the experiment for users who have not provided their consent, Kameleoon will temporarily store the variation ID in session storage to maintain the initial allocation when the user reloads the page. [More about consent policy](../../../../developer-docs/privacy-and-compliance/consent-management) ## URL redirection and third-party analytics tools ### Impact on Custom Analytics Integrations When using a custom analytics integration in a redirection experiment, data is not sent when the visitor is initially targeted since the analytics tool may not have enough time to load before the redirection occurs. To ensure accurate tracking, Kameleoon stores the data in the browser before redirection, then sends the data after redirection (on the variation page), which ensures analytics tools receive the correct information while still allowing redirects to occur smoothly (without flickering). ### Impact on Referrer tracking When Kameleoon performs a redirection, third-party analytics tools lose access to the original referrer `document.referrer`. For example, if a visitor arrives at your website via a paid Facebook campaign but is immediately redirected to a variation, the referrer recorded will be the original page (before redirection)—not the Facebook campaign. *Facebook campaign → original page (before redirection) → variation page (after redirection)* In Google Analytics 4 (GA4), this means the page's original version will always be recorded as the **referrer** when visitors are redirected to a variation. To retrieve the correct referrer, you can either check the data in Kameleoon or use `Kameleoon.Gatherer.Referrer.obtain()` on the variation page and save the value in a custom variable on your side to ensure the correct referrer (Facebook campaign, for example) is captured. ## URL redirection and Sample Ratio Mismatch Even though Kameleoon automatically redirects the original variation, conducting experiments involving URL redirects increases the likelihood of encountering an SRM. SRM occurs when visitors redirected to variant B fail to see the page or when data collection only takes place after page B loads. SRM results in a certain amount of data loss in variant B that would not be present on the original page. To address SRM, follow the guidelines described [here](../../../experiment-analytics/statistical-methods/sample-ratio-mismatch#what-to-do-when-your-experiment-is-positive-for-srm). When configuring your experiment with a traffic allocation of original 0%, control 50%, and redirection 50%, ensure you define the new control as the reference in the Results page. ## How to QA URL redirection experiments To QA split URL experiments, open an incognito tab in your browser and follow these steps: 1. Go to your page, including the UTM parameters: `https://www.site.com?utm_param` 2. Open a new tab with the simulation. 3. Refresh the tab; you will be targeted. 4. Switch to your variation. The redirection will then be performed. Kameleoon tracks conversions for targeted visitors upon initial exposure and for all subsequent return visits within the attribution window. The attribution window determines the period during which visitor conversions and transactions are attributed to a specific variation. Visitor conversions are only taken into account in an experiment if the visit has been targeted by the experiment or if it falls within the attribution window. For more information, [you can refer to this article](../../../experiment-analytics/analyze-results/data-and-metrics/how-kameleoon-counts-conversions). ## URL redirection and SEO impact If you're worried about the potential impact of redirection experiments on your website's SEO, or if you've noticed that your webpages have been de-indexed since starting your experiments, refer to [this](../../../faq#does-kameleoon-have-an-impact-on-seo-why-has-my-webpage-been-de-indexed) article. # Using the Code editor Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/code-based-experiments/using-the-code-editor Create and manage code-based experiments by injecting JavaScript and CSS directly into variations using the Kameleoon Code editor. *Watch [this video](https://academy.kameleoon.com/get-started-with-web-experimentation/164379?utm_source=user_manual\&utm_medium=online) for more information about using the Code editor.* **In this article:** * An overview of the Code editor's interface and main features. * Step-by-step instructions for creating variations using the Code editor, including working with HTML, CSS, and JavaScript code. * Tips for optimizing your variations for maximum impact. * Best practices for testing and validating your variations before launching your experiment. ## User benefits With the Kameleoon Code editor, you can create, launch, and manage code-based experiments without using the Graphic editor. Inject JavaScript or CSS code directly into your variations and save time. ## Access the Code editor ### From the Experiments dashboard Click **New experiment** in your Experiments dashboard > **With the code editor**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experimentation/using-the-code-editor/with-the-code-editor.png) Then, you can name your test and associate it with a website and page URL. ## Structure of the Code editor Our Code editor has the following structure: * **Header**: Displays the experiment's name and status. Also includes the **Simulate** and **Launch** buttons. * **Variation panel**: Lists variations and lets you add new ones. Each variation is selectable for editing. * **Code area**: You can edit JavaScript (JS) or CSS code specific to the selected variation. Includes tabs to toggle between JS and CSS. * **Left sidebar:** Includes criteria that you must define before launching your experiment and general settings. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experiments/using-the-code-editor/Screenshot-2025-04-01-at-9.38.33 AM-1.png) ## Header ### Experiment information The header displays the main information associated with the experiment: * its name * its status * the last interaction (for example, last save, update, date of launch). Hover over the **?** icon to access additional information about the experiment. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experiments/using-the-code-editor/Screenshot-2025-04-01-at-9.54.16 AM.png) You can check your experiment's status and ensure your changes were saved. Two types of saving are available: * **Automatic**, when the experiment's status is draft, scheduled, or paused. * **Manual**, for online and diverted experiments (via the green button in the **Finalize** tab). ### Header actions #### Simulate We strongly recommended simulating your Developer A/B experiment to confirm your experiment displays and functions correctly. To simulate your experiment, click **Simulate** to open simulation mode in a new tab. #### Schedule To schedule your experiment: 1. Click the **three-dots menu** to the right of **Simulate** > **Schedule.** 2. Specify a start date, an end date, or both. 3. Configure **Advanced schedule** options if necessary. 4. Click **Schedule** to confirm your schedule's creation. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experiments/using-the-code-editor/Capture-décran-2025-01-16-à-17.04.36.png) Click **+Add a schedule** to add multiple schedules to your experiment. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experiments/using-the-code-editor/Screenshot-2025-04-01-at-10.09.38 AM.png) #### Estimate the duration To estimate the amount of time it will take for your experiment to obtain exploitable results: 1. Click the **three-dots menu** to the right of **Simulate** > **Estimate the duration.** 2. Specify the required information. 3. Click **Calculate.** ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experiments/using-the-code-editor/Screenshot-2025-04-01-at-10.14.08 AM.png) ## Variations panel ### Insert your code You can add, modify, or remove code in the JS and/or CSS fields (select the corresponding tab: **JS** or **CSS**) for all variations. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experiments/using-the-code-editor/Screenshot-2025-04-01-at-10.16.46 AM.png) In the top right of the code window is an expand option. Click this button to expand the code area. You can also split the code window into two, either vertically or horizontally, using dedicated buttons. Click the button again to restore the default view. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experiments/using-the-code-editor/Screenshot-2025-04-01-at-10.20.31 AM.png) Click **Add variation** to add a new variation. Click the **chevron** to add a **code variation** or a **URL redirection**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experiments/using-the-code-editor/Screenshot-2025-04-01-at-10.23.08 AM.png) Our code editor provides you with several features: * **JavaScript auto-complete**: When you start typing, the editor will display a drop-down list of suggested auto-completion options, letting you pick your desired method, parameter, or variable. Hover information and method signature information is also shown, so you can complete your code with fewer errors. * **Syntax error detection**: Code syntax errors are underlined, and a hover window will show you more information about the error. * **CSS color selection**: In the CSS editor, a pop-up color selector lets you automatically fill in your RGBA values. Kameleoon provides an API and several recommended features for writing your JavaScript code. Note that Kameleoon does not include jQuery; instead, it uses the version already present on your website. Since Kameleoon may load before jQuery, you must ensure jQuery is fully loaded before running your variation’s JavaScript code. To check if jQuery has loaded, use the following code: ```javascript theme={null} Kameleoon.API.Core.runWhenConditionTrue(function(){ return typeof jQuery != "undefined"; //allows to check that jQuery is loaded. Returns True if it is, or False otherwise. Kameleoon will execute this condition again every 200ms. }, function(){ //Enter here the code you want to execute in your variation. For example if you want to change the text of a block and this block has the id "block-2345", you can use the following Kameleoon API function Kameleoon.API.Core.runWhenElementPresent("#bloc-2345", function(){ //Enter here your JavaScript code jQuery("#bloc-2345").text("My new text"); }); }, 200); ``` JavaScript code does not run directly in the editor. To preview your modification, simulate your experiment. If you want more information about `Kameleoon.API.Core`, you can read our documentation for developers: * [Find out more about the `runWhenElementPresent()` method](../../../../developer-docs/apis/activation-api-js/api-reference/api-reference#runwhenelementpresent) * [Find out more about the `runWhenConditionTrue()` method](../../../../developer-docs/apis/activation-api-js/api-reference/api-reference#runwhenconditiontrue) ### Variation menu Click the **three-dots menu** to display the variation menu. You can: * Rename a variation * Preview a variation * Add a display limit * Delete a variation ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experiments/using-the-code-editor/Screenshot-2025-04-01-at-10.29.14 AM-1.png) Changes made in this menu only apply to the selected variation. #### Rename variation Click **Rename variation** to edit a variation's name. Type its new name and click the **X** icon or press **enter** to confirm. #### Preview Click **Preview variation** to open your variation in a new tab and check its display. #### Add a display limit Click **Add a display limit** to control how often a variation is shown. Enable any limits you'd like. Hover over the **?** icon to display a tooltip providing more information about a limit. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experiments/using-the-code-editor/Screenshot-2025-04-01-at-11.06.32 AM.png) Click **Save** to confirm your choices. #### Delete Click **Delete variation** > **Yes** to delete a variation. You cannot delete the final variation: you must have at least one variation in your experiment. #### Duplicate Click the **duplicate icon** to the right of the **three-dots menu** to generate a copy of the variation. ## Left sidebar In the left sidebar, you'll find the criteria you must define before launching your experiment. You cannot launch your experiment without completing these steps. ### Finalization steps The steps are the same as in the Graphic editor: * Targeting * Traffic allocation * Goals * Integrations Click each of these sections and define the required criteria. A green checkmark will appear next to the sections when you've completed them, and the **Launch** button turns blue. [Learn more about these Finalization steps](../configure-and-launch/finalizing-an-experiment#access-the-finalization-page) ### General settings You can find your experiment's general settings here. This menu consists of the following sections: * Main information * Experiment code * Experiment custom script * Advanced settings #### Main information ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experiments/using-the-code-editor/Screenshot-2025-04-01-at-11.23.26 AM.png) Here, you can manage your experiment's main information. You can specify the URL that the editor loads, your experiment's tags, and its hypothesis. #### Experiment code ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experiments/using-the-code-editor/Screenshot-2025-04-01-at-11.26.12 AM.png) Here, you will find your experiment's general code. Kameleoon applies this code to each of your experiment's variations. Click the toggle to add this code to the original variation. #### Experiment custom script The JavaScript code added in this section lets you write global code that applies specifically to the experiment. This code runs alongside Kameleoon’s global script, ensuring that all changes are automatically removed when the experiment ends. Additionally, this script executes **before** both the Experiment and Variation code, and it runs regardless of any targeting conditions you’ve set, meaning it will always execute as soon as Kameleoon loads. #### Advanced settings Here, you can access your experiment's advanced settings. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/code-based-experiments/using-the-code-editor/Screenshot-2025-04-01-at-11.52.36 AM.png) ##### Custom attribution window Use this section to define an attribution window in days and hours. The attribution window is the time period during which a visitor's conversions and revenue are linked to a specific variation. By default, the attribution window is set at the website level, but you can customize it below before launching your experiment. Learn more about custom attribution windows [here](../../../experiment-analytics/analyze-results/data-and-metrics/how-kameleoon-counts-conversions). ##### Display limits [Read the above section on display limits.](#add-a-display-limit) You can set up display limits in **Advanced settings** or the **Variation** menu. The **Advanced settings** section provides an overview of all limits you've configured, regardless of where they were set. ##### JavaScript code options Enable this option to load the experiment's JavaScript code after the page loads. This option ensures that all page elements are fully loaded before executing JavaScript code, preventing conflicts and improving performance. It avoids issues with dynamic content or scripts running too early, which can be helpful if your variations depend on elements that load after the initial page render. # Define your experiment's targeting Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/configure-and-launch/define-your-experiments-targeting Configure who is targeted and when by setting segments and triggers for your web experiment before launch. The first step in finalizing your experiment is setting up targeting. In Kameleoon, targeting is defined by a: * **Segment:** *Who* will be targeted. * **Trigger:** *When* they will be targeted. You must configure both before you launch your experiment. When you open the **Targeting** page, the trigger is automatically set to the website URL you specified when creating the experiment. You can see a summary of your current targeting settings in the **Summary** panel at the top of the page. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/define-your-experiments-targeting/Capture-decran-2025-08-13-a-16.36.09.png) ## Defining a segment Use the **Segments** panel to choose who will be included in your experiment. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/define-your-experiments-targeting/Capture-decran-2025-08-13-a-16.37.01.png) ### All visitors Target all visitors without any restrictions. ### Target a segment Select an existing segment you've already created in Kameleoon. You can also click **Create a new segment** to open the Segment Builder. For detailed instructions, refer to [Create a segment](../../../assets/segments/create-a-segment). ## AI-powered targeting Use **AI Predictive Targeting** to reach visitors most likely to convert, without manually creating a segment. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/define-your-experiments-targeting/Capture-decran-2025-08-13-a-16.38.17.png) ## Target specific visitors You can quickly create a one-off segment for a specific experiment. The segment will not appear in your main segment list. Choose one or more targeting conditions and fill in the required fields. You can add or remove conditions as needed. **Available targeting conditions include:** * Likelihood to convert * Device type * IP geolocation * Browser cookie * Segment * Visitor type ## Edit or reset a segment From the **Summary** panel, click **Edit** to modify the segment, or **Reset** to revert to **All visitors**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/define-your-experiments-targeting/Capture-decran-2025-08-13-a-16.39.35.png) ## Targeting a deprecated segment If a legacy segment contains a Trigger condition, it will be marked as deprecated. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/define-your-experiments-targeting/Capture-decran-2025-08-13-a-16.39.41.png) You can still use the segment, but you cannot set a separate trigger to avoid conflicts. For more information, refer to [Update your segments for better targeting](../../../assets/segments/update-your-segments-and-triggers-for-better-targeting). ## Defining a trigger Use the **Triggers** panel to specify *when* your visitors should be targeted. By default, new experiments have a trigger based on the website URL entered when the experiment was created. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/define-your-experiments-targeting/Capture-decran-2025-08-13-a-16.40.21.png) ### When a web page is reached Trigger the experiment when visitors access pages that match the specified URL criteria. #### A specific page You can target visitors based on the exact URL of the page they're visiting. Specify the page's URL in the text box. When you select this option, the targeting will apply **not only to the specified URL**, but also to **any version of the URL that includes parameters** (for example, query strings). So, if a visitor is on the specified URL with any additional parameters, they will still be targeted. For example, targeting `www.example.com/product` will also match `www.example.com/product? ref=homepage`. #### The URLs containing a specific fragment You can target visitors who are on a page whose URL contains a specific fragment. Specify the fragment in the text field. This option is useful when you want to include multiple pages or variations of a URL without listing each one individually. For example, targeting the fragment `/product` will match URLs like `www.example.com/product/123`, `www.example.com/category/product?`, or `www.example.com/product review`. #### The URLs of all modified pages *(Available only for experiments created with the Graphic editor)* You can target the pages you have modified in your experiment. When you select this option, the campaign will apply to the URLs of all pages where changes have been made, based on the modifications configured in the editor. #### The entire site If you want your campaign to run across all of your site’s pages, select **The entire site**. When you select this option, every page within the project scope will be included, regardless of the URL structure or parameter. Only use this option when your campaign is relevant across the entire site. #### When a specific trigger occurs Select an existing trigger from your list or click **Create a new trigger**. For detailed steps, refer to [Create a trigger](../../../assets/triggers/create-a-trigger). #### When a combination of triggers occurs Create a one-off trigger for this experiment only. To configure this option, select a targeting condition from the list and fill out its fields. You can also add another condition or remove the one you don't need by clicking the corresponding buttons. **Available targeting conditions include:** * Trigger * Visited URL * JavaScript code * Custom event * Browser cookie ## Edit or reset a trigger In the **Summary** panel, click **Edit** to change the trigger or **Reset** to revert to **A specific page** (pre-filled with your experiment URL). Next, continue to the finalization flow by distributing your experiment's traffic. To accurately simulate targeting that includes targeting, use [the updated simulation mode](../../feature-experimentation/using-the-rollout-planner/validation-and-rollback/using-simulation-mode). # Finalizing an experiment Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/configure-and-launch/finalizing-an-experiment Learn how to finalize your web experiment by defining targeting, allocating traffic, and setting goals before launch. # Finalize an experiment *Watch [this video](https://academy.kameleoon.com/get-started-with-web-experimentation/164197?utm_source=user_manual\&utm_medium=online) in the Kameleoon Academy to learn the differences between A/B and multivariate tests.* ## Access the finalization page After you create your variations, you are ready to launch your experiment. On the right side of the header, click **Finalize**. This opens the finalization page, where you complete these steps before launching: ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/finalizing-an-experiment/finalize.png) * [Define targeting](#define-targeting) * [Allocate traffic to variations](#distribute-traffic) * [Define goals](#define-goals) (Mandatory, unless you configure Integrations) * [Associate integrations](#set-up-reporting-tools) (Mandatory, unless you configure Goals) * [Simulate your experiment](#simulate) (Optional) On the finalization page, you can also: * Estimate the experiment duration * Schedule the experiment ## Define targeting Targeting is the first step in finalizing your A/B experiment. To learn more, see [Define your experiment's targeting](./define-your-experiments-targeting). ## Distribute traffic The second step is traffic allocation. By default, Kameleoon distributes traffic evenly among variations, but you can change this setting. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/finalizing-an-experiment/traffic-allocation.png) In this example, Kameleoon shows each variation to 33.33% of visitors. To change the traffic allocation: * Click and drag the slider next to a variation. * **OR** click the number next to a slider and enter a percentage. To save this step and proceed, click **Next**. ### Excluded traffic Kameleoon automatically assigns traffic not allocated to a variation to **Excluded traffic**. These visitors see the original version of your page. ### Equal allocation per variation Specify the total percentage of traffic to divert to experiment variations. For example, if you have three variations and set a 75% diversion, Kameleoon allocates 25% of the total traffic to the original page and 25% to each variation. ### Different allocation per variation To allocate different percentages to each variation, use the sliders to adjust the values. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/finalizing-an-experiment/different-traffic.png) You can also click the percentage value and enter a new one. To return to an equal distribution, click **Allocate equally** below the list of variations. ### Allocation method ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/finalizing-an-experiment/traffic-allocation.png) Select a traffic allocation method from the dropdown menu: * **Manual:** Set a static traffic allocation for your visitors manually. * **Multi-armed Bandit:** Kameleoon automatically adjusts traffic allocation based on variation performance. * **Contextual Bandit:** Kameleoon personalizes variations based on specific visitor attributes and dynamically selects the best variation for each visitor. **Contextual Bandit** requires the **Contextual Bandit** add-on. Contact your Customer Success Manager for more information. Using custom data as model input (Custom Data Premium) additionally requires the **AI Predictive Targeting** add-on. #### Contextual bandits Contextual bandits use machine learning to optimize traffic allocation dynamically. They adapt in real time to redistribute traffic based on variation performance and user context. Understanding the differences between multi-armed bandits and contextual bandits helps you choose the best method for your experiments: * **Multi-armed bandits:** * Optimize traffic distribution across variations to maximize a specific goal, such as clicks or conversions. * Treat all users equally and do not distinguish between user attributes. * Ideal when user-specific data is unavailable or unnecessary, and you want to finding the best-performing variation for the entire audience. * **Contextual bandits:** * Incorporate additional user-specific data, such as device type, location, or behavior, into decision-making. * Tailor variations to specific users for improved, personalized outcomes. * Optimize decisions in dynamic environments by leveraging user attributes. To learn more about how Kameleoon’s contextual bandits work, read the [Kameleoon statistical paper](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/pdf/statistics-at-kameleoon.pdf). ##### Configure contextual bandits To enable contextual bandits: 1. Navigate to the **Finalization** panel. 2. Click **Traffic allocation**. 3. In the **Select the allocation method** dropdown menu, select **Contextual bandit**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/finalizing-an-experiment/contextual-bandit.png) By default, the algorithm optimizes traffic based on predefined user attributes in Kameleoon. Contextual bandits use the same machine learning model as [AI Predictive Targeting](/user-manual/ai-predictive-targeting/overview), but the model does not use custom data by default. To leverage the full power of contextual bandits, provide custom data as input for the machine learning model. Custom data helps the algorithm make more accurate predictions based on business-specific attributes, such as CRM segments, purchase history, or in-app behavior. Custom Data Premium requires the AI Predictive Targeting add-on. To use custom data in your experiment: 1. Open your custom data configuration panel. 2. Enable **Use this custom data as input for AI Predictive Targeting**. Kameleoon’s algorithm then uses these attributes to deliver the most relevant variation to each visitor. To learn more, see [AI Predictive Targeting](/user-manual/ai-predictive-targeting/overview). ### Advanced reallocation Advanced reallocation is only available for **online** experiments. Use **Advanced reallocation** to redistribute traffic among variations in your experiment. When you apply this feature, Kameleoon resets the traffic allocation and treats returning visitors as new visitors. This is useful for focusing on specific variations or excluding others from further traffic. At the top-right of the traffic distribution step, click **Advanced reallocation**. In the panel, choose which variations to include in the reallocated traffic. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/finalizing-an-experiment/advanced-reallocation.png) The reallocation takes effect after you click **Reallocate** and then click **Save** at the top-right of the page. ### Set a reference variation When you analyze experiment results, Kameleoon uses a reference variation to calculate the performance uplift of other variations. By default, Kameleoon sets the **Original** variation as the reference. ![Reference variation](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/finalizing-an-experiment/reference.png) #### Requirements for reference variations To ensure accurate reporting, a reference variation must meet the following criteria: * **Allocated traffic**: The reference variation must have a traffic percentage greater than 0%. * **Enabled status**: The variation must be active. If you allocate 0% traffic to the **Original** variation, you must select another variation as the reference. If the chosen reference variation has no traffic or is disabled, Kameleoon displays a warning: "Pick a reference variation with traffic allocated." #### Change the reference variation To switch the reference to a different variation: 1. In the **Traffic allocation** section, locate the variation you want to use as a reference. 2. Click the **three-dots menu** for that variation. 3. Select **Set as reference variation**. A badge appears next to the variation to indicate its status as the reference for the results page. ## Define goals *This step is mandatory unless you configured an integration (reporting tool).* Select one or more goals to use Kameleoon as a reporting tool. ### Available goals To use Kameleoon as a reporting tool, define a conversion goal. A goal is the metric you aim to improve with your A/B experiment. Kameleoon supports the following goal types: * **Engagement:** The visitor visits other pages after the landing page. * **Click tracking:** The visitor clicks on a specific element you defined. * **Scroll tracking:** The visitor scrolls beyond a specific part of your page. * **Access to a page:** The visitor reaches a specific page. * **Number of pages viewed:** The visitor visits a set number of pages. * **Time elapsed:** The visitor spends a predefined amount of time on your website. * **Custom goal:** For complex metrics, you can create custom goals using the [Kameleoon API](../../../../developer-docs/apis/activation-api-js/api-reference/api-reference). ### Create a new goal To learn how to add a goal, see [Create a goal](../../../assets/goals/create-a-goal). ### Associate a goal with your experiment After you create a goal, associate it with your experiment: 1. On the Finalization page, click **Goals**. 2. Select your goal. 3. To save this step, click **Next**. ## Set up reporting tools *This step is mandatory unless you configured a goal.* ### Add a new integration To learn how to add a new integration, see [Integrations overview](../../../integrations/integrations-overview). ### Activate an integration on an experiment After you add a reporting tool to your integrations list, you can associate it with an experiment. To associate an integration: 1. On the Finalization page, click **Integrations**. 2. Select the tool. 3. To save this step, click **Next**. ## General settings Use this menu to manage the overall configuration for your experiment: * Main information * Experiment code * Experiment custom script * Advanced settings ### Main information ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/finalizing-an-experiment/Screenshot-2025-04-01-at-11.23.26 AM.png) Manage the experiment's core details here, including the editor load URL, tags, and hypothesis. ### Experiment code ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/finalizing-an-experiment/Screenshot-2025-04-01-at-11.26.12 AM.png) This section contains the general code that Kameleoon applies to every variation. To add this code to the original variation, click the toggle. ### Experiment custom script Use this section to add JavaScript code that applies to the entire experiment. This code runs with Kameleoon’s global script. Kameleoon automatically removes these changes when the experiment ends. This script executes **before** all experiment and variation code. It runs regardless of targeting conditions as soon as Kameleoon loads. ### Advanced settings Access advanced configuration options here. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/finalizing-an-experiment/Screenshot-2025-04-01-at-11.52.36 AM.png) #### Custom attribution window Define an attribution window in days and hours. The attribution window is the period when Kameleoon links visitor conversions and revenue to a specific variation. By default, Kameleoon sets the attribution window at the website level. You can customize it here before you launch the experiment. To learn more, see [How Kameleoon counts conversions](../../../experiment-analytics/analyze-results/data-and-metrics/how-kameleoon-counts-conversions). #### Display limits To learn how to create a display limit, see [Using the code editor](../code-based-experiments/using-the-code-editor#add-a-display-limit). You can configure display limits in **Advanced settings** or the **Variation** menu. The **Advanced settings** section provides an overview of all configured limits. #### JavaScript code options Enable this option to load the experiment's JavaScript code after the full page loads. This ensures that all page elements load before the code executes, which prevents conflicts and improves performance. Use this if your variations depend on elements that load after the initial page render. ## Simulate Use simulation mode to check whether: * Your variations or personalizations display correctly. * Your targeting is configured correctly. * Goals lead to conversions. * Visitors see the intended content. To learn more, see [Simulate a campaign](./simulate-a-campaign). ## Estimate experiment duration In the Finalization panel, you can estimate the duration of your experiment. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/finalizing-an-experiment/estimate-the-duration.png) Provide the following information to generate an estimate: * **Average daily visitors:** The estimated number of visitors to the tested pages per day. * **Current conversion rate:** The baseline conversion rate for your main goal. * **Minimum Detectable Effect (MDE):** The smallest change in the goal metric you aim to identify, relative to the control variation. * **Desired reliability rate:** The level of confidence required to confirm results (defaults to 95%). Increasing this value reduces the risk of false positives but requires more visitors. This is an estimate. After you launch, the reliability index on the results page provides actual data. For more information, see [Access the results page](../../../experiment-analytics/analyze-results/results-page/access-the-results-page). The estimator automatically accounts for traffic allocation and the number of variations. You can also use the free [A/B testing duration calculator](https://www.kameleoon.com/ab-testing-calculator) for a precise estimate. ## Launch ### Launch immediately When you complete all mandatory finalization steps, a green check icon appears. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/finalizing-an-experiment/checkmarks.png) Kameleoon recommends simulating your experiment before you launch to verify the display, targeting, and goal conversions. When you are ready, click **Launch**. The **Configuration summary** panel displays your experiment settings. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/finalizing-an-experiment/summary.png) To modify settings, click a configuration option and select **Edit**. When you are satisfied, click **Launch** in the bottom-right. Your experiment is now online. A short latency period (up to 10 minutes) might occur between launching an experiment and seeing it on your website. ### Schedule You can schedule your experiment with a start date, an end date, or both. To schedule the experiment, click the **three-dots** menu and select **Schedule**: ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/finalizing-an-experiment/schedule.png) Alternatively, click **Schedule** at the bottom of the **Configuration summary**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/finalizing-an-experiment/summary.png) **Advanced schedule** lets you set the time zone and automate when the experiment ends. Automatic stops trigger when the reliability rate stabilizes at your configured value or when traffic reaches a defined threshold. Avoid setting an end date for A/B experiments before launch. Use the confidence rate as your primary indicator for when to stop an experiment. For experiments tied to specific events or timeframes, you can define an end date. Always review the confidence rate before you analyze results. When a scheduled experiment reaches its end date, Kameleoon **pauses** the experiment. You can resume it at any time. # Simulate a campaign Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/configure-and-launch/simulate-a-campaign Simulate a web experiment or personalization to verify that variations display correctly, targeting conditions are met, and goals convert as expected. *Watch [this video](https://academy.kameleoon.com/how-to-finalize-your-web-experiment/175320?utm_source=user_manual\&utm_medium=online) for more information on simulating an experiment.* Simulation mode lets you check whether: * Your variations or personalizations are displayed correctly. * Your campaign's targeting is configured correctly, and if not, understand why. * The goals you have set are converting. * Your visitors see the right content for them, at the right time. ## Open the simulation panel ### From the Graphic editor A new browser window will open displaying the simulation with a control panel at the bottom of the screen. This panel provides various options. To maximize the simulated webpage view, click **Hide** to collapse the panel. To reopen the panel, click **Show**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/simulate-a-campaign/Capture-décran-2024-01-30-à-15.37.09.png) ### From the Code editor To simulate your experiment in the Code editor, click **Simulate** in the top right corner of the page. A new browser window will open displaying the experiment simulation with a control panel. Collapse the panel by clicking **Hide** and reopen it using **Show**. ### From the Personalization creation page Kameleoon lets you review your personalization, targeting criteria, and display configurations prior to deployment. To launch a preview, locate and click the **Simulate** button situated at the bottom of the personalization creation interface. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/simulate-a-campaign/simulate-launch.png) A new browser window will open, presenting the simulation. A control panel will appear at the bottom of this window, offering various options. To enlarge the simulated webpage view, click **Hide**. To restore the control panel, click **Show**. ### From the dashboards You can initiate the simulation from your dashboards (Experiment and Personalization). To do this, access the secondary actions associated with a campaign card. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/simulate-a-campaign/dashboard.png) ## Structure of the simulation panel ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/simulate-a-campaign/simulation-panel.png) The simulation panel consists of five primary tabs: * Preview * Campaigns * Segments * Triggers * Conversions ### Preview The **Preview** tab lets you simulate how your campaign will behave before publishing it live. It shows which variation is currently displayed, whether targeting conditions are met, and details about the generated visitor session. #### Key sections * **Variation selector:** * Use the dropdown in the top-right to select which variation (for example, Original, Variation 1) you want to preview. * **Force display toggle:** * By default, variations only display if targeting conditions are met. Switching **Force display** to **on** overrides targeting rules and forces the chose variation to render. **Status** will also change to **Targeted**. * **Results:** * Shows whether your campaign is targeted for the current simulation. * For example, **Not targeted** indicates that the current visitor/session does not meet targeting conditions. * Click **Targeting** to view more details on your current visit's targeting. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/simulate-a-campaign/results.png) * **Variation currently displayed:** * Indicates which variation is being rendered in the preview. * **Generated visitor code:** * Each simulation generates a unique visitor code, which you can use to reproduce or share the same preview session. * Click the **three-dots menu** to generate a new visit or reset visit data. * **Number of generated visits:** * Displays how many times the simulated visitor has visited the site. You can generate a new visit or reset visit data using the **three-dots menu** next to the visitor code. #### Typical use cases * Checking if a campaign correctly targets the intended audience. * Previewing different variations of a campaign. * Debugging targeting issues. * Forcing the display of a variation regardless of targeting. ### Campaigns ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/simulate-a-campaign/campaigns.png) The **Campaigns** tab shows the campaign currently being simulated and other campaigns that may be running on the same page. It helps you preview how multiple campaigns interact and verify targeting, variation assignment, and conflict. #### Key sections * **Simulated campaign:** * Displays the campaign you are currently simulating. * **Type:** Indicate if it's an experiment or personalization. * **Status:** Shows whether the campaign is currently targeted (**Not targeted** if the simulation visitor does not meet conditions). * **Currently assigned:** Dropdown to choose which variation is displayed. * **Segment:** Lists the visitor segment being targeted. * **Force display:** Overrides targeting rules to display the selected variation. * **Other campaigns on the page:** * Lists all additional campaigns that would also run on the current page. For each campaign: * **Type:** Experiment or personalization. * **Status:** Whether the campaign is targeted or not. * **Currently assigned:** Dropdown to preview a specific variation. * **Segment:** The segment targeted by that campaign. * **Simulate button:** Allows you to run a simulation of that campaign in isolation. * **Exclude:** Click the **three-dots menu** > **Exclude** to exclude a campaign from the simulation. Click the **three-dots menu** > **Undo exclusion** to include it again. #### Typical use cases * Checking which campaigns are active for a given page and why some may not be targeted. * Seeing how the simulated campaign interacts with others on the page. * Manually assigning variations across multiple campaigns to reproduce specific scenarios. * Verifying overlapping campaigns and adjust targeting or priority as needed. ### Segments ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/simulate-a-campaign/segments.png) The **Segments** tab lets you test how different visitor profiles interact with your campaign. #### Key sections * **Type:** Displays the type of segment. * **Condition:** The condition which visitors must fulfil to be targeted. * **Status:** The current visitor's status based on whether they fulfil the condition's criteria. * **Value:** The current visit's value for each condition (**Desktop** if visitor is on desktop). * **Boolean operators:** The segment's boolean operators are displayed to the right of the conditions. If **AND**, all conditions must be met for a visitor to be targeted as part of the segment. If **OR** only a limited number of conditions must be met. #### Typical use cases * Viewing the interaction of your experiment's segments. * Seeing whether a visit matches your segments' criteria. * Ensuring your segments are correctly defined. ### Triggers The **Triggers** tab displays the conditions that must be met for your campaign to launch. It lets you confirm whether each trigger is correctly recognized during simulation. #### Key sections * **Targeting status:** The overall targeting results (**Targeted** or **Not targeted**). This section quickly shows whether the simulated visitor meets the campaign's targeting rules. * **Trigger list:** * Each trigger is listed with the following details: * **Name:** The label assigned to the trigger. * **Type:** The type of trigger. * **Condition:** The rule that must be satisfied for the trigger to apply. * **Status:** Indicated whether the condition is currently met (**True** or **False**). * **Value:** The measured value for the simulated visitor. #### Typical use cases * Ensuring your campaign launches only when the correct conditions are met. * Simulating visitors who almost—but not quite—meet a trigger, to confirm expected behavior. * Quickly spotting why a campaign didn't trigger by checking condition values (for example, not enough page views). ### Conversions ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/simulate-a-campaign/conversions.png) The **Conversions** tab shows how your simulated visitor interacts with the goals associated with your campaign. It helps you verify whether conversions are tracked correctly during testing. #### Key sections * **Associated goals:** Displays all goals linked to the campaign, including the **Primary goal** (highlighted as such). * **Status:** Shows whether each goal has been met during the simulation. * **Converted (green)** if the simulated visitor triggered the goal. * **Not converted (red)** if the visitor did not. * **Number of conversions:** Indicates how many times the simulated visitor triggered the goal (useful for goals that can occur multiple times, like page views). * **Goal ID:** The unique identifier for each goal, useful for troubleshooting or cross-referencing in reports and implementation. * **Revenue:** Displays any revenue attributed to the goal (if revenue tracking is configured). #### Typical use cases * Confirming that goals fire correctly when their conditions are met. * Ensuring the primary goal is properly set and measured alongside other goals. * If a goal does not convert as expected, using the simulation to pinpoint why. * Verifying that revenue is correctly captured and linked to conversions. ### Toolbar ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/simulate-a-campaign/toolbar.png) There is a toolbar in the simulation panel, providing you with several options. #### Share Click **Share** to access options to share your simulation. You can share via: * **URL:** Click **Copy** to copy the URL to your clipboard. * **QR code:** Switch to **QR** to get a scannable QR code linking to your simulation. #### Views Click any of the three available options to minimize, maximize, or customize the size of the simulation panel. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/configure-and-launch/simulate-a-campaign/views.png) #### Hide Click **Hide** to hide the simulation panel. Click the blue simulation icon to reopen the panel. #### Exit Click **Exit** to exit simulation mode. You will return to the domain you're simulating. #### Secondary actions Click the **three-dots menu** to access available secondary actions: * **Language:** Click **Language** to edit the simulation panel's language. Select the language from the dropdown menu and click **Save**. * **Generate new visit:** Click **Generate new visit** to add a new simulated visit to your site. Conversion and visit data will be updated accordingly. * **Reset visitor:** Click **Reset visitor** to reset all visit data. Conversions and visits are set to zero. # Add and manage variations Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/graphic-based-experiments/add-and-manage-variations Add, duplicate, rename, and delete variations in the Kameleoon Graphic editor, including URL redirection and custom code options. The Kameleoon Graphic Editor simplifies adding and managing variations for experiments. The following guide describes the basic functions in the Variations panel, including adding new variations, duplicating existing ones, and using the URL redirection feature. ## Variations panel overview ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experiments/add-and-manage-variations/variation-panel.png) The Variations panel, located on the left side of the editor, is where you manage your experiment's variations. Here you can add, edit, duplicate, and delete variations. * **Control variation:** The original page before any changes. This control page serves as a reference for the experiment; you cannot change or delete it. * **Variation 1, Variation 2, and so on:** The different variations you create to test against the control variation. You can modify each variation independently. By default, Kameleoon creates a variation called "Variation 1". You can add or delete as many variations as you want, but you must always keep at least one variation in your experiment. ## Adding a new variation To add a new variation: * Click **+ Add variation** in the Variations panel. A new variation appears in the list. You can start modifying the new variation by adding or editing elements. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experiments/add-and-manage-variations/new-variation.png) ## Managing variations ### Duplicating a variation 1. Hover over the variation you want to duplicate. 2. Click the **duplicate icon** that appears next to the variation name. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experiments/add-and-manage-variations/manage-variations.png) ### Renaming a variation 1. Click the **three dots** next to the variation's name. 2. Select **Rename variation** from the dropdown menu. 3. Enter the new name and press Enter. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/add-and-manage-variations/rename-variation.png) ### Custom code **Custom code** lets you add custom CSS and JS code to your variations. To add custom code: 1. Click the **three dots** next to a variation's name. 2. Click **CSS** or **JSS** to access your desired code. 3. Enter your custom code > click **Save**. ### URL redirection The URL redirection feature allows you to redirect users to a different URL as part of your experiment. Use URL redirection to test completely different pages against each other. To set up URL redirection: 1. Click the **three dots** next to a variation's name. 2. Select **Redirection URL** from the dropdown menu. 3. A panel opens on the right-hand side of the editor. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experiments/add-and-manage-variations/redirection-url.png) **Global redirection:** * Select **Global redirection** to redirect all users assigned to the variation to a specific URL. * Enter the target URL in the provided field. **Include query parameters:** * To include query parameters from the original URL in the redirected URL, check the box labeled **Include query parameters in the redirect**. * The **Include query parameters** option ensures that any query parameters (the text after the `?` in the original URL) pass to the new URL, maintaining the integrity of dynamic content or tracking information. **Redirection by parameter:** * Select **Redirection by parameter** to redirect users based on specific query parameters in the URL. * Enter the parameter name in the provided field. The redirection occurs only if the specified parameter is present in the original URL. 4. After configuring the redirection settings, click **Save** to apply the changes. ### Preview Click **Preview** to open a preview of your variation in a new tab. ### Search & replace Click **Search & replace** to search for a specific word or character and replace it with new text. To search and replace within a variation, click the **three dots** next to a variation's name > **Search & replace**. The pop-in provides several options. * **Replace all:** * Choose this option to replace all instances of the entered text, both partial and complete. * For example, if you **search** for "run" and **replace** with "walk", Kameleoon replaces **all** instances of "run" (such as **run** and **run**ning) with **walk** ("run" becomes **walk**, "running" becomes **walk**ing). * **Distinguish uppercase letters and lowercase letters:** Choose this option to make the search and replace **case-sensitive**. * For example, if you search for **Blueberry**, Kameleoon replaces only instances of **B**lueberry (not "blueberry", "blueBerry", or "BLUEBERRY"). * **Replace whole words corresponding to the research only:** * Choose this option to replace instances of **whole** words. The tool does not replace word fragments (such as "running" from the previous example). ### Delete variation To delete a variation: 1. Click the three dots next to a variation's name. 2. Click **Delete variation** > **YES**. Your experiment must always have at least one variation. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/add-and-manage-variations/delete-varation.png) # Edit a variation Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/graphic-based-experiments/edit-a-variation Select, modify, and add elements in the Kameleoon Graphic editor using CSS selectors, the element toolbar, and device styling rules. The following guide explains how to select elements, modify properties, and add new components. It also covers customizing styles for different devices and setting interaction states. To learn how to create and manage variations, [refer to the article on adding and managing variations](./add-and-manage-variations). ## Select an element The Graphic Editor simplifies element selection. When you hover over parts of a webpage in the editor, Kameleoon highlights each element. Double-click an element to select it. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experiments/edit-a-variation/AI-CSS.gif) When you select an element, options appear above the selected element, allowing you to select another relative or edit the element's CSS selector. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/edit-a-variation/select-an-element.png) ### Element details Upon selection, the element's details, such as its tag, are displayed. Element details help you understand the type of content you are interacting with. #### Highlight You can access the **Highlight in preview** options by clicking the **cogwheel icon**. These switches allow you to highlight elements directly in the preview with different colors. * **Added Elements**: Highlighted with one color to show newly added elements. * **Changed Elements**: Highlighted with another color to identify elements you've modified. Visual feedback from highlighting makes it easy to spot changes or additions. #### Search, sorting, and filtering Element panel The Element panel provides useful tools for searching, sorting, and filtering. * The **search bar** allows you to find elements by name or tag. For example, if you type "div", the search will return all `
` elements, and any elements with "div" in their name. * The **sorting options** help you navigate through long lists of elements. * **Newest on top**: Sorts elements by their creation or first modification date, with the most recently created or modified elements appearing at the top. This sorting method respects the original creation or first modification date: regardless of future edits, the oldest elements still appear first. * **Oldest on top**: Sorts elements by their creation or first modification date, with the oldest elements appearing on top. This method respects original creation or modification dates, as per **Newest on top**. * The Element panel allows you to **Filter** items based on specific criteria, allowing you to narrow the list of elements to those relevant to your current task. ### Select another relative The **Select another relative** feature helps you navigate the hierarchical structure of webpage elements. Use this feature when you need to select a related element that you cannot access directly. For example, if you've selected a heading within a banner and want to select the entire banner, click **Select another relative** and navigate to the parent element. ### Edit CSS selectors Use CSS selectors to specify which elements your changes affect. You can refine existing selectors, generate new ones with AI, or manually input custom code. To target an element, you can use standard selector types (such as hierarchy, tag, class, or content), or use **AI-generated selectors** if you are unfamiliar with CSS syntax. **Manual input** is also available for precise targeting, which is useful when an element is deeply nested or shares multiple classes with other elements. #### Available selector types The following table describes the available selector types, when to use them, and their potential risks: | Selector type | Description | Recommended use | Risk | | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------- | | **AI Generation/Automatic** | Automatically generates a selector by combining multiple attributes into a fingerprint. | Use as a starting point or if you are unfamiliar with CSS. | **Complexity:** Selectors can be long and difficult to debug if they fail. | | **Hierarchy** | Identifies an element based on its exact position in the DOM (for example, `body > div#main > section > ul > li:first-child`). | Use when the element lacks a unique ID or class and its position is static. | **Fragility:** Small layout or container changes often break the selector. | | **Class** | Targets elements by their CSS class name (for example, `.btn-primary` or `.promo-banner`). | Use to target groups of elements with the same design or when a unique class exists. | **Over-targeting:** Changes might unintentionally affect other elements that share the class. | | **Attribute** | Targets specific HTML attributes (for example, `[data-testid="submit-button"]`). | Use for precise targeting, specifically when testing data attributes are available. | **Dynamic values:** Selectors break if attributes contain dynamic values (like session IDs) that change. | | **Content** | Selects elements based on visible text content (for example, `:contains("Sign Up")`). | Use when the code structure changes frequently, but the text remains constant. | **Localization:** Text updates or language translations cause the selector to fail. | | **Tag** | Targets elements by HTML tag name only (for example, `

`, ``, or `
`). | Use for global styling or in combination with other selectors. | **Broad scope:** Alone, this targets many elements and can break page layouts. | | **Manual** | Applies custom CSS or JS selectors that you write. | Use when you need complex logic or specific targeting not handled by other types. | **User error:** Requires CSS knowledge; typos or site updates can break the experiment. | ## Change an existing element Once an element is selected, you have multiple modification tools at your disposal. The tools are accessible in the element toolbar and the right-hand panel. ### Element toolbar ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/edit-a-variation/select-an-element.png) The element toolbar appears right above the selected element, providing quick access to several editing options: * **Move**: Change the element's position. * **Resize**: Adjust the element's dimensions. * **Duplicate**: Create a copy of the selected element. * **Delete**: Remove the element from the page. * **Edit content**: Modify the text or image within the element. ### Right-hand panel ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/edit-a-variation/right-sidebar.png) The right panel in the editor provides in-depth options for customization. Here you can access more detailed settings for the selected element, including: * **Content**: Edit the text, image, or other content within the element. * **Text**: Adjust text alignment, line height, and make text capitalized, uppercase, or lowercase. * **Background**: Change the element's background color or image. * **Opacity**: Change the element's opacity. * **Border**: Add borders or modify their color, style, and width. * **Shadow**: Apply shadow effects to give the element depth. * **Padding and margin**: Fine-tune the spacing around and within the element. * **Device styling rules**: Customize how the element appears on different devices (desktop, tablet, mobile). * **CSS and classes**: Add custom CSS classes or styles for more advanced customization. * **Attributes**: Edit HTML attributes of the element. * **HTML content**: Directly modify HTML content if needed. ## Add a new element Adding a new element in Kameleoon's Graphic Editor is straightforward and allows for extensive customization to fit your design needs. ### Open the Elements panel ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experiments/edit-a-variation/open-elements-panel.png) In the left sidebar, click **+ Add** to open the elements panel. ### Choose an element to add You have several options such as Text, Heading, Image, Widgets, and HTML. Click on the type of element you want to add. ### Select position of the element You can choose the new element's position relative to other elements. Options include **Inside the page** or **Above the page**, and can be set to **Relative** or **Absolute**. Specify the exact position relative to a selected reference element (for example, before, replace, or after). #### Manual positioning For precise positioning, enable the manual position option and specify the element's top, right, left, and bottom values in pixels. ### Define the reference element You can define the reference element's CSS selector to position the new element accurately. Click the reference element in the preview zone or manually input the CSS selector. ### Adjust display settings Choose the display settings for different devices (desktop, tablet, mobile). You can modify the element's visibility in the left panel later if needed. ### Use the color picker #### Eye dropper Use the eyedropper tool to select any color on your site's page and apply it to another element. #### Contrast ratio In the same color picker, you can check the selected color's contrast ration with white. #### Colors preset with the ones used on your site In the lower part of the color picker, you will find the colors you use most on your site. Click one to apply the color to an element. ## Advanced actions ### States The states feature allows you to customize the appearance and behavior of elements based on their interaction states. To edit an element's state: 1. Click the element you want to edit. The element toolbar and right panel open. 2. Click the **State** tab in the right panel. 3. Select the state you want to assign to the selected element: **Hovered**, **Active**, **Focus**, or **Disabled**. Once you select a state, various customization options appear. You can change font, text, line, style, color, alignment, line height, border, shadow, padding, and margin for the selected state. For example, if you select the Disabled state, you can change the text color to indicate that an element is inactive. ### Device styling rules In the right-hand sidebar, you can define styling rules for an element that may differ from one device to another. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experiments/edit-a-variation/Capture-décran-2024-07-10-à-15.58.08.png) By default, changes made on one device mirror across all other devices, except for size, rotation, padding, and position settings. **Kameleoon recommends this synchronization method for A/B testing, as it yields more reliable results.** In some cases, you can select the **Customized per device** mode. Changes made on one device remain exclusively on that device. **Kameleoon does not recommend the customized per device setting for A/B testing, as it may lead to less reliable results.** #### Multi-device feature You can use the multi-device feature in the Kameleoon Graphic Editor to preview how your design appears on different devices. To view your website's appearance on different devices, click the phone, tablet, or desktop icon at the top of the editor. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experiments/edit-a-variation/Capture-décran-2024-04-25-à-17.54.41-1920x1223.png) You can toggle between devices to test responsiveness and make necessary adjustments to your design elements for optimal display across devices. To test your design on different smartphone resolutions, click the three-dots menu near the device selection toolbar. A submenu lists various smartphone models along with their screen resolutions. Click a specific model to change the preview area resolution. You can then review and adjust the design to ensure it functions on the specific device. #### Enable dynamic elements If you [enabled support for dynamic websites](../advanced-experiment-types/set-up-experiment-single-page-app#native-setup) in your project settings and set the scope to **Selected elements** in the Graphic editor, you can include specific elements by clicking the **three-dots menu** next to a modified element and selecting **Enable dynamic elements**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/edit-a-variation/dynamic-element.png) ## Edit hidden elements To edit a click-triggered menu or hover-over text on a card: 1. Enter navigation mode by clicking the icon in the header. 2. Hover or click on the trigger element 3. Hold CMD (Mac) or CTRL (PC) on your keyboard. 4. Click the element. You'll be redirected to design mode. # Getting started with the Graphic editor Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/graphic-based-experiments/getting-started-with-the-graphic-editor Open and navigate the Kameleoon Graphic editor to create A/B experiment variations directly on your website without writing code. *Watch the [video tutorial](https://academy.kameleoon.com/get-started-with-web-experimentation/164219) for instructions on using the Graphic editor.* The Graphic editor is Kameleoon's visual, no-code tool for building A/B experiment variations. It loads directly on top of your website in the browser, letting you click on any element and modify it without writing code. You can update text, swap images, restyle buttons, and adjust layouts, then preview and launch your experiment immediately. Building test variations typically requires writing and deploying code, which creates a bottleneck when product managers, marketers, or designers depend on engineering resources. The Graphic editor removes that bottleneck so your whole team can run experiments independently. **Before you start:** * The Graphic editor doesn't work in incognito mode. * When cross-site cookies are blocked, the Graphic editor won't work. * Firefox blocks cookies by default. If you're using Firefox, you must manually enable cookies. **Enhance the use of the Graphic editor with the [Kameleoon Graphic editor extension](#kameleoon-graphic-editor-extension).** To troubleshoot issues with the Graphic editor and view best practices, [refer to the troubleshooting article](./troubleshooting-the-graphic-editor). ## Open the Graphic editor Kameleoon's editing mode provides the tools to create webpage variations and launch A/B experiments. ### Via your website To launch Kameleoon: 1. Navigate to a webpage on which you have installed the Kameleoon script. 2. Press **shift + F2** on Windows, or **fn + shift + F2** on Mac. If nothing happens, add `#kameleoon=true` to the end of your URL. 3. Once Kameleoon loads, a pop-in opens. Fill in your username and password to access the editor. 4. A pop-in opens prompting you to select an experiment (if you've already created one) or create a new one. Click **Create** to create an experiment. 5. Fill in your experiment's information, and select **Classic A/B** under **Experiment type**. 6. Click **Start**. The Graphic editor opens on your web page. ### Via the Kameleoon app You can also launch the editor from the Kameleoon app. 1. Log in to your [Kameleoon app](https://login.kameleoon.com/app). 2. Click **New experiment** > **With the graphic editor**. 3. Fill in your experiment's information, and select **Graphic A/B** under **Experiment type**. 4. Click **Create**. The Graphic editor opens on your web page. ## Structure ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experiments/getting-started-with-the-graphic-editor/0.png) ### Experiment panel (left side) **Function**: Manages the current experiment, including variations and elements on the page. **Features**: * Add variations and elements. * Edit CSS selectors. * View and manage elements present on different pages. ### Main editing area (center) **Function**: Allows direct interaction with webpage elements for editing. **Features**: * Select and modify text, images, and other content. * Access editing shortcuts. ### Right panel (right side) **Tabs:** Design, State, History **Features**: * Customize content, text, background, border, shadow, padding, margin, and more. * Manage element states (for example, default, hovered, active, focus, disabled). * Manage change history for each element. ### Top toolbar **Function**: Offers tools for viewing and finalizing changes. **Features**: * Device mode switching. * Simulate changes. * Finalize the experiment. ## Customize the Graphic editor display * **Zoom**: Adjust the zoom level to fit your screen and preferences. * **Reduce Left Panel**: Minimize the left panel to increase workspace. * **Hide Left Panel**: Completely hide the left panel for a distraction-free view. * **Full screen Mode**: Expand the editor full screen for an immersive editing experience. ## Simulation and finalization * **Simulation**: Click **SIMULATE** to preview how changes will look and function on your website. * **Finalization**: Click **FINALIZE** to access the Finalization steps. ## Device switching Use the top toolbar to switch between different device views (desktop, tablet, mobile) to ensure the design is responsive and displays correctly on all devices. ## Kameleoon Graphic editor extension Enhance the use of the Graphic editor with the Kameleoon Graphic editor extension. ### When to use the Graphic editor extension * Some websites restrict the usage of an iframe. To address iframe restrictions, use the Graphic editor extension to override these limitations and launch the Graphic editor. * Certain websites present a mobile version when detecting a mobile user agent. To ensure the Graphic editor displays the mobile version correctly, the browser must identify as a mobile device. The extension facilitates the mobile identification process. ### How to install the Graphic editor extension [Visit the Chrome Store](https://chromewebstore.google.com/detail/kameleoon-graphical-edito/jglbnpagaignkdmebicmmblgmledhpip) to download the Kameleoon Graphic editor extension. # Troubleshooting the Graphic editor Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/graphic-based-experiments/troubleshooting-the-graphic-editor Diagnose and resolve Graphic editor issues including failed loads, CSS selector conflicts, and data discrepancies with third-party analytics. The following section provides instructions to troubleshoot issues with the Graphic Editor and describes best practices to avoid issues in the future. ## What scenarios do the following tips resolve? * When changes you made to an experiment's variants in the Graphic editor don't appear, even though you saved and simulated them. * When edits you made of all pages with the Graphic editor don't appear after pushing an experiment live. * When the Graphic editor won't load. ## How do graphic editors work? While making changes with the Graphic editor seems easy, your webpage's architecture (for example, how it's coded) can make editing complicated. Like most visual editors built to create experiments, Kameleoon's Graphic editor uses [CSS selector](https://www.w3schools.com/cssref/css_selectors.asp) paths to identify the elements you edit. Selectors are the cornerstone of any action you take in the Graphic editor. Kameleoon uses two types of CSS selector paths: * **Simple selectors, such as the unique ID of the element:** Because it is unique, it cannot be repeated on a page or assigned to another element on the same page. Therefore, changes to this element made in the Graphic editor are confined to that element. * **Combinator selectors:** The element is selected based on a specific relationship with its parent elements. Kameleoon's Graphic Editor follows two straightforward rules: * **If Kameleoon finds an ID for the selected element:** Kameleoon uses the ID by default to identify the element when the page loads and applies the changes. * **If Kameleoon doesn't find an ID for the selected element:** Kameleoon creates a combinator selector from the closest parent element that has an ID. For instance, if a product name element lacks an ID but the header has an ID, Kameleoon creates a unique path from the header element to the product name. ## What causes issues? In general, IDs assigned to elements on [single-page applications](../advanced-experiment-types/set-up-experiment-single-page-app) are generated dynamically, meaning their values and selector paths continuously change. However, Kameleoon can track these changes. To activate the tracking option, you must set an element selection method on a page by indicating a custom attribute. To do so: 1. Click **Admin** > **Project**. 2. Click the **pencil** icon for the project you'd like to edit. 3. In the **Configuration** menu, click **General**. 4. Under **Advanced settings**, toggle **Enable support for dynamic websites (Single Page App, Progressive Web App...)** to **ON**. 5. Under **Set a custom attribute (optional)** define your desired custom attribute (for example, `data-id`, `data-qa`). ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/getting-started-with-the-graphic-editor/advanced-settings.png) ### The selector path used does not allow for the precise selection of an element Not all elements have an ID. When the ID is absent, Kameleoon will generate a unique path from the closest parent element with an ID to the element you want to change. Here is an example of a selector path that identifies the block that contains product thumbnail images: `#ProductSection-product-template > div:first-child > div:first-child > div:nth-of-type(6) > div:first-child > ul:nth-of-type(1) > div:first-child`. This path starts at the parent block, `ProductSection-product-template`, and goes through five other child blocks before reaching the thumbnail block. So, the selector follows Product section template > block1 > block2 > block3 > block4 > block5 > thumbnail. Generally, the broader the selector path, the more likely the selector will fail to cover all use cases on the website. Because each website is unique, the selector limitation presents distinct challenges for graphic editors. Product pages may have varied layouts (such as different HTML markups); therefore, they require different selectors. For instance, some product pages may have a block for ratings, while others do not. The inconsistency in element presence breaks the original selector path Kameleoon found when creating the variant. The risk of inconsistent element changes within an experiment grows proportionally to the length and breadth of the selector path Kameleoon identifies and depends on the dynamic nature of the product webpage layout. When the risk is too great, use other selection options Kameleoon offers from the hierarchy toolbar. You may find an HTML class that is safer to use or ask a developer or CSM to create a CSS selector or validate a choice. Alternatively, you can have AI generate a path for an element. 1. Select an element. 2. In the left sidebar, click **Edit selector**. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/getting-started-with-the-graphic-editor/css-selector.png) 3. Click **AI generation** > **Validate**. ### Conflicting changes One reason for the popularity and widespread use of graphic editors is the ease with which they allow you to start experimentation without requiring any code. Changes are straightforward in the Graphic editor; however, you must be cautious about introducing conflicting changes to your variants. Conflicting changes generally refer to edits made to a child element that override edits made to a parent element. An example includes editing the color of a text element (the child), then selecting the parent and changing the color again. Kameleoon will not apply or display the changes correctly because the change to the child element renders first. To avoid conflicting changes, follow these rules: * Never combine HTML code with other native editing capabilities of the Graphic Editor, unless you understand the exact results. * If you plan to make changes to the same element, ensure you always select the element with the same CSS selector. Watch out for elements consisting of multiple elements. ## Graphic editor fails to load There are a few reasons the Graphic editor may fail to load. ### The Graphic editor fails to load for anyone #### Step 1: Verify the Kameleoon script installation If the Graphic editor isn't loading, and you are being redirected to the login page or another destination, check whether the Kameleoon script is correctly installed on the page. To do this: 1. Open your browser's developer tools. * On Mac, press **Command + Option + I** * On Windows, press **Control + Shift + C** 2. Navigate to the **Elements** tab and press **Command + F** (Mac) or **Control + F** (Windows) and search for **Kameleoon** in the DOM. Alternatively, you can: 1. Open the **Network** tab. 2. Filter by **Kameleoon** after refreshing the page to confirm if the script is being loaded. * **If the Kameleoon script is present:** Move on to the next troubleshooting step. * **If the Kameleoon script is not present:** You must install the script on the website to proceed. To install the Kameleoon script, refer to the [Web experimentation installation guide](../../../get-started/web-experimentation-installation-guide#install-the-kameleoon-script) Alternatively, if you have the [Kameleoon Chrome extension](https://chromewebstore.google.com/detail/kameleoon-debug-assistant/nimncjjomfcjmfnghgaopccmdggjfoam) installed: 1. In **Developer tools**, click the **double arrows** > **Kameleoon**. 2. Click **Dev tools** > **Tag injection**. 3. Enter your sitecode under **Sitecode to inject**. 4. Click **Inject tag**. #### Step 2: Verify domain and subdomain configuration Ensure that the domain and all relevant subdomains have been correctly configured in Kameleoon. 1. Click **Admin** > **Project**. 2. Select **Setup** for the relevant project. 3. Click **Modify setup**. 4. Navigate to the **Domain configuration** section and add all necessary domains and subdomains. * For subdomains, use an asterisk (`*`). For example, `*.mywebsite.com`. 5. After adding the required domains, validate your configuration. 6. At the top of the page, click the **pencil** icon next to your project title to modify the domain URL if needed. #### Step 3: Check for CORS policy errors To ensure the Graphic editor functions correctly, check your browser's console for any CORS (cross-origin resource sharing) policy errors. 1. Open the console using the following shortcuts: * On Mac: **`Command + Option + J`** * On Windows: **`Control + Shift + J`** 2. Look for any CORS-related errors in red, as shown in the image below. If you encounter CORS policy issues, you must whitelist the following Kameleoon domains and subdomains in your server's CORS policy configuration: * `*.kameleoon.com` * `*.kameleoon.eu` * `*.kameleoon.io` For more information, follow the steps outlined [here](../../../../developer-docs/web-experimentation/faq#what-are-the-kameleoon-domains-that-i-need-to-whitelist). ### The Graphic editor loads for some users and not for others #### Step 1: Clear cache You may be viewing an outdated version of your website, which could prevent the Graphic editor from loading. To resolve this issue: ##### Option 1: Empty your cache 1. Open the browser inspector using one of these shortcuts: * On Mac: **`Command + Option + I`** * On Windows: **`Control + Shift + C`** 2. Right-click on the browser's refresh button and select **Empty cache and hard reload**. Once complete, try relaunching the Graphic editor. ##### Option 2: Use private browsing (incognito mode) You can also try opening the Graphic editor in a private browsing window to ensure that no cached files are interfering. #### Step 2: Allow third-party cookies Ensure that your browser allows third-party cookies, as they are essential for the Graphic editor to work properly. To enable third-party cookies: 1. Go to your browser's **Settings**. 2. Navigate to **Privacy & Security**. 3. Locate the **Third-party Cookies** section and ensure they're allowed. #### Step 3: Disable ad blockers Ad blockers can sometimes interfere with the proper functioning of the Graphic editor. To resolve this issue, try one of these solutions: 1. Disable your ad blocker and relaunch the Graphic editor. 2. Open a private browsing window where the ad blocker might not be active and relaunch the Graphic editor. 3. Try using another browser without ad blockers and see if the Graphic editor works there. #### Step 4: Disable other browser extensions Check if you have any browser extensions activated that could interfere with the proper loading of the Graphic editor. Extensions related to privacy (such as Ghostery) or performance optimizers (uBlock Origin, for example) can prevent the editor from loading correctly. #### Step 5: Disable the VPN Check your **VPN** application settings or taskbar for active connections and toggle it off if it’s enabled. Disconnecting from the VPN will allow direct access to your network without routing through a different server, which may help load the Kameleoon graphic editor correctly. #### Step 6: Switch to a different Wi-Fi network If the Graphic editor still won't launch, there could be network-related issues. Try connecting to a different network and relaunch the editor. #### Step 7: Use the Chrome Dev browser The Chrome Dev browser is often more compatible with tools like the Kameleoon Graphic editor. If you're facing issues with the standard Chrome browser, switch to [Chrome Dev](https://www.google.com/chrome/dev/). #### Step 8: Install the Graphic editor extension Installing the [Kameleoon Graphic editor extension](https://chromewebstore.google.com/detail/kameleoon-graphical-edito/jglbnpagaignkdmebicmmblgmledhpip) can help bypass common errors, such as CORS policy issues, and improve the editor's loading performance. #### Step 9 – Check firewall or security tools (such as Edgesuite or WAF) If your company uses a firewall, Web Application Firewall (WAF), or proxy tool such as Edgesuite/Akamai, the Kameleoon Graphic Editor requests may be blocked. To resolve this: Contact your IT team and ask them to whitelist Kameleoon’s domains in the firewall/WAF configuration. The domains and subdomains listed in [the FAQ article](../../../../developer-docs/web-experimentation/faq#easy-setup-with-wildcards) must be accessible. Ensure both HTTPS traffic (GET, POST, OPTIONS) and WebSocket connections are allowed to these domains. After updating the firewall configuration, relaunch the Graphic Editor to confirm if the issue is resolved. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experiments/troubleshooting-the-graphic-editor/Screenshot_2025-09-09_at_14.38.14-1920x879.png) ## Data discrepancies between Kameleoon and third-party analytics platforms Kameleoon offers many [analytics integrations](../../../integrations/integrations-overview) that measure campaign impact. However, you may see different results (such as visits, visitors, or conversions) between the Kameleoon reporting system and the third-party analytics platform. Small variations are usually normal, even if the integration is correctly set up. Different analytics platforms often define metrics or are configured differently. Some analytics platforms do not manage [ITP issues with the Safari browser](../../../../developer-docs/web-experimentation/technical-concepts/itp-management), as Kameleoon does, and [bot filtering](../../../faq#how-does-kameleoon-filter-bot-traffic-from-my-results) rules are not identical. However, investigate discrepancies greater than 7–10%. # Visualize modified/tracked elements on a page Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/graphic-based-experiments/visualize-modified-tracked-elements-on-a-page Highlight added and modified elements in the Graphic editor to track and manage all changes made across your experiment's variations. Kameleoon allows you to track site changes in web experiments. Tracking changes helps large teams manage multiple modifications. To use this feature, click the **cog** icon next to the element search bar in the Graphic editor. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/visualize-modified-tracked-elements-on-a-page/elements-settings.png) Check **Added elements** and **Modified elements** under **Highlight in preview** to highlight elements that have been added or modified. Visualize elements edited throughout the experiment lifecycle. Kameleoon labels modified or added elements as **Modified** or **Added** in the left panel. ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/experimentation/web-experimentation/graphic-based-experimentation/visualize-modified-tracked-elements-on-a-page/modified-added.png) # Website development - Best practices for A/B testing Source: https://docs.kameleoon.com/user-manual/experimentation/web-experimentation/graphic-based-experiments/website-development-best-parctices-for-ab-testing Follow website development best practices for HTML structure, code modularity, SPA support, and event management to optimize A/B testing. Developing a website optimized for A/B testing campaigns requires consideration of several technical and structural elements. The following sections describe the key aspects. ## 1. Clean and semantic HTML structure * **Proper use of HTML tags**: Use semantic tags (such as `
`, `