{"id":74277,"date":"2022-03-17T18:23:05","date_gmt":"2022-03-17T12:53:05","guid":{"rendered":"https:\/\/vwo.com\/blog\/?p=74277"},"modified":"2025-05-05T14:49:44","modified_gmt":"2025-05-05T09:19:44","slug":"how-vwo-makes-experimentation-on-spa-friction-free","status":"publish","type":"post","link":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/","title":{"rendered":"How VWO Creates a Friction-Free Visitor Experience When Running Experiments on a Single Page Application (SPA)"},"content":{"rendered":"\n<p><em>A deep dive into how VWO\u2019s native support to dynamic websites makes experimentation easy for you as you build seamless experiences for your visitors.<\/em><\/p>\n\n\n\n<p>Many websites are built as Single Page Applications (SPAs) as they have few key advantages over traditional static websites: Dynamic websites are fast, compact and responsive. Such websites enable you to optimize the content that your visitor sees to create engaging and unique experiences. If you hear from your development team that your website is built using React, Vue, AngularJS, Ember, or Backbone, you are probably working with a SPA, and this article is relevant to you.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\"><em><a href=\"https:\/\/vwo.com\/ab-testing\/#guide-download\"><span style=\"text-decoration: underline\">Download Free: A\/B Testing Guide<\/span><\/a><\/em><\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2400\" height=\"1400\" src=\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png\" alt=\"VWO creates friction-free experience while experimenting on SPA\" class=\"wp-image-74359\" srcset=\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png 2400w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png?tr=w-1600 1600w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png?tr=w-1366 1366w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png?tr=w-1024 1024w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png?tr=w-768 768w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png?tr=w-640 640w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png?tr=w-375 375w\" sizes=\"(max-width: 2400px) 100vw, 2400px\" \/><\/figure>\n<\/div>\n\n\n<p>In this article, we talk about how we, at VWO, make <a href=\"https:\/\/vwo.com\/tools\/cro-experimentation-checklist\/\">experimentation<\/a> on dynamic websites effective and easy with in-built support for SPA testing so that you focus only on your website experience optimization efforts and nothing else.&nbsp;&nbsp;<\/p>\n\n\n\n<p>But first, let&#8217;s talk about the problem that brought you here in the first place.<\/p>\n\n\n<h2 class=\"js-cro-guide-subheading gtm_heading \" data-level=\"level1\" data-menu=\"Challenges of running experiments on dynamic websites\" id=\"challenges-of-running-experiments-on-dynamic-websites\" data-menu-id=\"challenges-of-running-experiments-on-dynamic-websites\" style=\"text-align:left\"><strong>Challenges of running experiments on dynamic websites<\/strong><\/h2>\n\n\n<p>You are probably here because when you are running experiments on a SPA, the changes you make to your landing page are not visible to the end-users. As a result, you cannot test and validate your ideas as quickly as you want and this leaves you frustrated.<\/p>\n\n\n\n<p>Firstly, let&#8217;s understand that SPAs are different from traditional websites. The entire web page loads each time someone visits a conventional website. In SPA, however, only some sections of the page are updated. This is because, in SPAs, resources like HTML, CSS, Scripts, etc., which build the look and feel of your webpage, are only loaded once. <\/p>\n\n\n\n<p>Based on how the visitor interacts with different parts of the web page, what you see on a specific section of the page dynamically changes in response to the visitor&#8217;s action. Say, if a visitor clicks a button, a pop-up opens. This pop-up is the dynamic change made by the framework as per the visitor interaction without impacting performance. Some more examples where there is dynamic change on a SPA are as below:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Items on a search result list that can be expanded to view its details.<\/li>\n\n\n\n<li>In a form, some fields appear on the page only when a visitor selects a predefined value from a dropdown.<\/li>\n\n\n\n<li>The website uses some components like a calendar, color picker, etc. which get re-loaded every time the user needs to use them.<\/li>\n<\/ul>\n\n\n\n<p>While this is good for user experience, running a test campaign with changes made to any of these dynamic elements (like search result lists, dropdowns, <a href=\"https:\/\/vwo.com\/glossary\/widgets\/\">widgets<\/a>, pop-ups, banners, etc.) on your web pages becomes difficult. This is because the modifications made to a component need to get applied every time something dynamically changes on the website.&nbsp;<\/p>\n\n\n\n<p>Think of it this way &#8211; you are running a test on a webpage. Every time the webpage loads when a visitor visits the page or the page creates a dynamic element as described above, the SPA framework shows the original state (different from the variation you want to show as part of your test). <\/p>\n\n\n\n<p>What you need is an experimentation platform that ensures that your test variation replaces the original view so that the visitors see the variation you want them to see. So, while setting a test on a SPA, (say you&#8217;re testing the content within a pop-up box), you will expect the test control and variation to look like this:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2400\" height=\"1350\" src=\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-1.png\" alt=\"How you want your test changes to reflect in SPA\" class=\"wp-image-74407\" srcset=\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-1.png 2400w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-1.png?tr=w-1600 1600w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-1.png?tr=w-1366 1366w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-1.png?tr=w-1024 1024w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-1.png?tr=w-768 768w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-1.png?tr=w-640 640w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-1.png?tr=w-375 375w\" sizes=\"(max-width: 2400px) 100vw, 2400px\" \/><\/figure>\n<\/div>\n\n\n<p>But,&nbsp;in absence of SPA-support, the changes made on the variation will revert to control, making both look identical. Quite like this:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2400\" height=\"1350\" src=\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-2-with-X.png\" alt=\"Test changes throw an error in SPA\" class=\"wp-image-74420\" srcset=\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-2-with-X.png 2400w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-2-with-X.png?tr=w-1600 1600w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-2-with-X.png?tr=w-1366 1366w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-2-with-X.png?tr=w-1024 1024w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-2-with-X.png?tr=w-768 768w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-2-with-X.png?tr=w-640 640w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-2-with-X.png?tr=w-375 375w\" sizes=\"(max-width: 2400px) 100vw, 2400px\" \/><\/figure>\n<\/div>\n\n\n<p>This is just a simplified version of what is happening. If you are interested in understanding technically what happens behind the screen, keep reading ahead, else you can skip to the next section of the article.<\/p>\n\n\n\n<p>Some website frameworks like GatsbyJS, Next.js, ReactJS, etc., use server-side rendering and store a snapshot of your original webpage as it should load. So, when you modify an element on the page for testing purposes, the framework detects the change as an \u2018issue\u2019 and reverts the page to its original state as it appears in the stored snapshot. This, in turn, hinders your A\/B test. <\/p>\n\n\n\n<p>Secondly, the latest frameworks like React, Gatsby, Next.js, Vue.js, Angular, etc., use the concept of state-based rendering. For example, in React, whenever a change is implemented in one of the states due to the A\/B test variation, the website\u2019s interface automatically reloads itself to its original form, so visitors never see the variation. This creates a sub-optimal experience for website visitors.<\/p>\n\n\n<h2 class=\"js-cro-guide-subheading gtm_heading \" data-level=\"level1\" data-menu=\"How VWO makes experimentation on Single Page Applications effortless\" id=\"how-vwo-makes-experimentation-on-single-page-applications-effortless\" data-menu-id=\"how-vwo-makes-experimentation-on-single-page-applications-effortless\" style=\"text-align:left\"><strong>How VWO makes experimentation on Single Page Applications effortless<\/strong><\/h2>\n\n\n<p>Now that we have discussed the problem, let&#8217;s talk about the solution.<strong> <\/strong>VWO\u2019s advanced native SPA support in its Visual Editor, which is part of VWO Testing, ensures that modifications made in an experiment get applied in SPAs to ensure the campaigns&#8217; reliability and give a frictionless experience to your visitors.&nbsp;<\/p>\n\n\n<h3 class=\"js-cro-guide-subheading gtm_heading \" data-level=\"level2\" data-menu=\"1. Testing dynamic elements on your website\" id=\"1-testing-dynamic-elements-on-your-website\" data-menu-id=\"1-testing-dynamic-elements-on-your-website\" style=\"text-align:left\">1. <strong>Testing dynamic elements on your website<\/strong><\/h3>\n\n\n<p>While dynamic elements have been defined in the previous section, let&#8217;s look at them closely with a specific example.<strong> <\/strong>Consider that you have an eCommerce website. Upon clicking the \u2018X\u2019 (Close) button on the \u2018Cart page\u2019, an alert appears as a pop-up. Now, you would like to test copy changes on the action box to see if actionable messaging and Call to Action could keep people from closing the Cart page. The alert box is not initially present on the website code but gets added upon by the SPA framework when the visitor clicks on the \u2018X&#8217; (Close) button. Here, the button that opens the pop-up you are running the test on is called the target element.<\/p>\n\n\n\n<p>VWO ensures that the change you want to test is applied to the pop-up as soon as it loads. All you have to do is enable a setting with the click of a button. You can read more about this setting in our <a href=\"https:\/\/help.vwo.com\/hc\/en-us\/articles\/900000678806-Configuring-Single-Page-Application-Server-Side-Rendering-Support-in-Editor-Settings-for-Your-Website-in-VWO\" target=\"_blank\" rel=\"noreferrer noopener\">knowledge base article<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2070\" height=\"1386\" src=\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-3.png\" alt=\"How VWO ensures that the change you want to test is applied to the target element as soon as it loads in a SPA\" class=\"wp-image-74415\" srcset=\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-3.png 2070w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-3.png?tr=w-1600 1600w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-3.png?tr=w-1366 1366w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-3.png?tr=w-1024 1024w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-3.png?tr=w-768 768w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-3.png?tr=w-640 640w, https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Image-3.png?tr=w-375 375w\" sizes=\"(max-width: 2070px) 100vw, 2070px\" \/><figcaption class=\"wp-element-caption\">How VWO ensures that the change you want to test is applied to the target element as soon as it loads in a SPA<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading has-text-align-center\"><em><a href=\"https:\/\/vwo.com\/ab-testing\/#guide-download\"><span style=\"text-decoration: underline\">Download Free: A\/B Testing Guide<\/span><\/a><\/em><\/h2>\n\n\n\n<p><strong>How does VWO ensure that the changes are applied correctly?<\/strong><\/p>\n\n\n\n<p>Easy.&nbsp;<\/p>\n\n\n\n<p>VWO watches the page elements (videos, images, tables, sections, etc.) for changes made to them at any point in time. Therefore, when the target element (the Close &#8216;X&#8217; button in the example above) loads, VWO detects it and applies the modification you made in the Variation. This happens even if the web page is not reloaded, but the visitor just interacts with a section on the website.<\/p>\n\n\n\n<p>Let\u2019s get a little technical and explore it further. You can comfortably skip this and move to the next point if technical details are not for you.<\/p>\n\n\n\n<p>In a dynamic website, based on user behavior, elements are added, removed, or modified. A DOM tree is like a repository of all website components (buttons, banners, pop-ups, widgets, etc.) and keeps a snapshot of the current state of the website.<\/p>\n\n\n\n<p>VWO\u2019s library uses Mutation Observer \u2013 a browser interface that allows VWO to observe changes in the DOM tree of a SPA. This helps detect any new element added, removed, or modified on the page. In such an event, VWO applies the changes on the elements automatically. So whenever elements dynamically load, changes are applied before they are shown to the visitor. This improves the reliability of campaigns, ensuring that the changes in the variations are applied completely.<\/p>\n\n\n\n<p><strong>How does VWO manage changes hindered by framework rendering<\/strong>?<\/p>\n\n\n\n<p> VWO keeps the <a href=\"https:\/\/vwo.com\/blog\/call-to-action-buttons-ultimate-guide\/\">CTA button<\/a> hidden until the framework rendering is complete. VWO repeatedly checks if the rendering is done. Once the framework rendering is complete, the VWO campaign starts executing.<\/p>\n\n\n\n<p>You can read more about these settings in our <a href=\"https:\/\/help.vwo.com\/hc\/en-us\/articles\/900000678806-Configuring-Single-Page-Application-Server-Side-Rendering-Support-in-Editor-Settings-for-Your-Website-in-VWO\" target=\"_blank\" rel=\"noreferrer noopener\">knowledge base article<\/a>.<\/p>\n\n\n<h3 class=\"js-cro-guide-subheading gtm_heading \" data-level=\"level2\" data-menu=\"2. Testing any other page element on your website\" id=\"2-testing-any-other-page-element-on-your-website\" data-menu-id=\"2-testing-any-other-page-element-on-your-website\" style=\"text-align:left\">2. <strong>Testing any other page element on your website<\/strong><\/h3>\n\n\n<p>When a page loads, modern SPA frameworks revert modified elements to their original state every time the website loads. So, if you are testing the page, all your modifications will be reverted to the original. Not just the dynamic elements, but for all elements on the page, VWO keeps track of the changes you have made to tackle the challenge of testing with the SPA framework. While applying these changes to your webpage, VWO detects all changes made on the page (insertion, deletion, and modification of DOM nodes) by the test and re-applies them to ensure regularity in user experience.&nbsp;<\/p>\n\n\n\n<p>No explicit actions are required to enable this improvement on VWO. This is an in-built feature available for all VWO campaigns built with the Visual Editor, irrespective of the framework on which your website is built.<\/p>\n\n\n\n<p>Let&#8217;s look at some use-case examples of changes that the VWO Visual Editor handles.<\/p>\n\n\n\n<p>1. Say you\u2019ve removed a secondary CTA button ( say \u201cAdd to wishlist\u201d) from your eCommerce website to test if this change affects the number of clicks on the primary CTA (say \u201cAdd to cart\u201d). This is a testing use case where you delete an element on the website. Even though you have deleted the button, it persists in the virtual DOM created by frameworks like React and will throw an error when the website loads. <\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Video-5.mp4\"><\/video><figcaption class=\"wp-element-caption\">Elements deleted while testing persist in the virtual DOM created by frameworks like React and throw an error<\/figcaption><\/figure>\n\n\n\n<p>2. Now imagine that your eCommerce website has a registration flow that shows a text input box to capture visitors\u2019 email addresses besides the \u2018Submit now\u2019 button. When you make changes to the look and feel of the text input box, the styled-components of the website associated with it change. VWO\u2019s Visual Editor ensures that the latest applied changes are what the visitors see. Watch how you can make changes to a form field in a SPA and make sure that the visitors sampled for the variation see those changes instead of seeing control.<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/SPA-Video-4.mp4\"><\/video><figcaption class=\"wp-element-caption\">How VWO ensures that the visitors sampled for the variation in a test see the exact changes in a SPA<\/figcaption><\/figure>\n\n\n<h2 class=\"js-cro-guide-subheading gtm_heading \" data-level=\"level1\" data-menu=\"How to use VWO for your Single Page Application?\" id=\"how-to-use-vwo-for-your-single-page-application\" data-menu-id=\"how-to-use-vwo-for-your-single-page-application\" style=\"text-align:left\"><strong>How to use VWO for your Single Page Application?<\/strong><\/h2>\n\n\n<p>To use VWO for your SPA, you simply need to add the <a href=\"https:\/\/help.vwo.com\/hc\/article_attachments\/360050063154\/Screenshot_2019-11-08_at_5.23.23_PM.png\" target=\"_blank\" rel=\"noreferrer noopener\">VWO SmartCode<\/a> in the head section of your website and enjoy the default support for SPA websites.<\/p>\n\n\n\n<p>With integration as simple as this, you can get started right away. Sign up for a free trial, explore VWO\u2019s capabilities, or request a demo with our product experts. You can also learn more about our latest, exciting <a href=\"https:\/\/vwo.com\/product-updates\/\" target=\"_blank\" rel=\"noreferrer noopener\">product updates<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A deep dive into how VWO\u2019s native support to dynamic websites makes experimentation easy for you as you build seamless experiences for your visitors. Many websites are built as Single Page Applications (SPAs) as they have few key advantages over traditional static websites: Dynamic websites are fast, compact and responsive. Such websites enable you to&#8230;<\/p>\n","protected":false},"author":421,"featured_media":74359,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"post_read_time":0,"footnotes":""},"categories":[10676],"tags":[],"feature":[10526],"industry-type":[],"product":[],"role":[],"region":[],"class_list":["post-74277","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-a-b-testing","feature-experimentation-platform"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Creating a friction-free Experience when experimenting on SPA | VWO<\/title>\n<meta name=\"description\" content=\"How VWO\u2019s native support to dynamic websites makes experimentation easy for you as you build a seamless experience for your visitors.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creating a friction-free Experience when experimenting on SPA | VWO\" \/>\n<meta property=\"og:description\" content=\"How VWO\u2019s native support to dynamic websites makes experimentation easy for you as you build a seamless experience for your visitors.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/vwoofficial\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-17T12:53:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-05T09:19:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/OG-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1260\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Niti Sharma\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/OG-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-2.png\" \/>\n<meta name=\"twitter:creator\" content=\"@VWO\" \/>\n<meta name=\"twitter:site\" content=\"@VWO\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Niti Sharma\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/\"},\"author\":{\"name\":\"Niti Sharma\",\"@id\":\"https:\/\/vwo.com\/blog\/#\/schema\/person\/1f62759ff402a50d25e3396391400634\"},\"headline\":\"How VWO Creates a Friction-Free Visitor Experience When Running Experiments on a Single Page Application (SPA)\",\"datePublished\":\"2022-03-17T12:53:05+00:00\",\"dateModified\":\"2025-05-05T09:19:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/\"},\"wordCount\":1771,\"publisher\":{\"@id\":\"https:\/\/vwo.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png\",\"articleSection\":[\"A\/B Testing\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/\",\"url\":\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/\",\"name\":\"Creating a friction-free Experience when experimenting on SPA | VWO\",\"isPartOf\":{\"@id\":\"https:\/\/vwo.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png\",\"datePublished\":\"2022-03-17T12:53:05+00:00\",\"dateModified\":\"2025-05-05T09:19:44+00:00\",\"description\":\"How VWO\u2019s native support to dynamic websites makes experimentation easy for you as you build a seamless experience for your visitors.\",\"breadcrumb\":{\"@id\":\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#primaryimage\",\"url\":\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png\",\"contentUrl\":\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png\",\"width\":2400,\"height\":1400,\"caption\":\"VWO creates friction-free experience while experimenting on SPA\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/vwo.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A\/B Testing\",\"item\":\"https:\/\/vwo.com\/blog\/a-b-testing\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How VWO Creates a Friction-Free Visitor Experience When Running Experiments on a Single Page Application (SPA)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vwo.com\/blog\/#website\",\"url\":\"https:\/\/vwo.com\/blog\/\",\"name\":\"Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/vwo.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vwo.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vwo.com\/blog\/#organization\",\"name\":\"VWO\",\"url\":\"https:\/\/vwo.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/vwo.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2018\/09\/VWOLogo.png\",\"contentUrl\":\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2018\/09\/VWOLogo.png\",\"width\":780,\"height\":492,\"caption\":\"VWO\"},\"image\":{\"@id\":\"https:\/\/vwo.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/vwoofficial\/\",\"https:\/\/x.com\/VWO\",\"https:\/\/www.instagram.com\/vwoofficial\/\",\"https:\/\/www.linkedin.com\/company\/vwo\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/vwo.com\/blog\/#\/schema\/person\/1f62759ff402a50d25e3396391400634\",\"name\":\"Niti Sharma\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/vwo.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2021\/02\/12963866_10206117053153200_8233309633622942906_n-150x150.jpg\",\"contentUrl\":\"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2021\/02\/12963866_10206117053153200_8233309633622942906_n-150x150.jpg\",\"caption\":\"Niti Sharma\"},\"description\":\"I've worked as a writer and editor in the B2B SaaS space for over 6 years. I read and write on all things CRO and experience optimization. I'm a chai fanatic and a paranoid parent. When I'm not copyediting or working on marketing projects, I love to spend my time reading. Besides B2B content, my passion lies in modern, behavioral astrology. I'm a dreamer and wish to write stories for children someday :)\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/niti-s-54601224\/\"],\"url\":\"https:\/\/vwo.com\/blog\/author\/nitisharma\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Creating a friction-free Experience when experimenting on SPA | VWO","description":"How VWO\u2019s native support to dynamic websites makes experimentation easy for you as you build a seamless experience for your visitors.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/","og_locale":"en_US","og_type":"article","og_title":"Creating a friction-free Experience when experimenting on SPA | VWO","og_description":"How VWO\u2019s native support to dynamic websites makes experimentation easy for you as you build a seamless experience for your visitors.","og_url":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/","og_site_name":"Blog","article_publisher":"https:\/\/www.facebook.com\/vwoofficial\/","article_published_time":"2022-03-17T12:53:05+00:00","article_modified_time":"2025-05-05T09:19:44+00:00","og_image":[{"width":2400,"height":1260,"url":"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/OG-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-2.png","type":"image\/png"}],"author":"Niti Sharma","twitter_card":"summary_large_image","twitter_image":"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/OG-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-2.png","twitter_creator":"@VWO","twitter_site":"@VWO","twitter_misc":{"Written by":"Niti Sharma","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#article","isPartOf":{"@id":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/"},"author":{"name":"Niti Sharma","@id":"https:\/\/vwo.com\/blog\/#\/schema\/person\/1f62759ff402a50d25e3396391400634"},"headline":"How VWO Creates a Friction-Free Visitor Experience When Running Experiments on a Single Page Application (SPA)","datePublished":"2022-03-17T12:53:05+00:00","dateModified":"2025-05-05T09:19:44+00:00","mainEntityOfPage":{"@id":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/"},"wordCount":1771,"publisher":{"@id":"https:\/\/vwo.com\/blog\/#organization"},"image":{"@id":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#primaryimage"},"thumbnailUrl":"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png","articleSection":["A\/B Testing"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/","url":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/","name":"Creating a friction-free Experience when experimenting on SPA | VWO","isPartOf":{"@id":"https:\/\/vwo.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#primaryimage"},"image":{"@id":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#primaryimage"},"thumbnailUrl":"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png","datePublished":"2022-03-17T12:53:05+00:00","dateModified":"2025-05-05T09:19:44+00:00","description":"How VWO\u2019s native support to dynamic websites makes experimentation easy for you as you build a seamless experience for your visitors.","breadcrumb":{"@id":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#primaryimage","url":"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png","contentUrl":"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2022\/03\/Feature-image_How-Audience-Targeting-helps-you-build-Personalized-Experiences-1.png","width":2400,"height":1400,"caption":"VWO creates friction-free experience while experimenting on SPA"},{"@type":"BreadcrumbList","@id":"https:\/\/vwo.com\/blog\/how-vwo-makes-experimentation-on-spa-friction-free\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vwo.com\/blog\/"},{"@type":"ListItem","position":2,"name":"A\/B Testing","item":"https:\/\/vwo.com\/blog\/a-b-testing\/"},{"@type":"ListItem","position":3,"name":"How VWO Creates a Friction-Free Visitor Experience When Running Experiments on a Single Page Application (SPA)"}]},{"@type":"WebSite","@id":"https:\/\/vwo.com\/blog\/#website","url":"https:\/\/vwo.com\/blog\/","name":"Blog","description":"","publisher":{"@id":"https:\/\/vwo.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vwo.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/vwo.com\/blog\/#organization","name":"VWO","url":"https:\/\/vwo.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vwo.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2018\/09\/VWOLogo.png","contentUrl":"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2018\/09\/VWOLogo.png","width":780,"height":492,"caption":"VWO"},"image":{"@id":"https:\/\/vwo.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/vwoofficial\/","https:\/\/x.com\/VWO","https:\/\/www.instagram.com\/vwoofficial\/","https:\/\/www.linkedin.com\/company\/vwo"]},{"@type":"Person","@id":"https:\/\/vwo.com\/blog\/#\/schema\/person\/1f62759ff402a50d25e3396391400634","name":"Niti Sharma","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vwo.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2021\/02\/12963866_10206117053153200_8233309633622942906_n-150x150.jpg","contentUrl":"https:\/\/static.wingify.com\/gcp\/uploads\/sites\/3\/2021\/02\/12963866_10206117053153200_8233309633622942906_n-150x150.jpg","caption":"Niti Sharma"},"description":"I've worked as a writer and editor in the B2B SaaS space for over 6 years. I read and write on all things CRO and experience optimization. I'm a chai fanatic and a paranoid parent. When I'm not copyediting or working on marketing projects, I love to spend my time reading. Besides B2B content, my passion lies in modern, behavioral astrology. I'm a dreamer and wish to write stories for children someday :)","sameAs":["https:\/\/www.linkedin.com\/in\/niti-s-54601224\/"],"url":"https:\/\/vwo.com\/blog\/author\/nitisharma\/"}]}},"_links":{"self":[{"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/posts\/74277","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/users\/421"}],"replies":[{"embeddable":true,"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/comments?post=74277"}],"version-history":[{"count":54,"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/posts\/74277\/revisions"}],"predecessor-version":[{"id":87143,"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/posts\/74277\/revisions\/87143"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/media\/74359"}],"wp:attachment":[{"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/media?parent=74277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/categories?post=74277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/tags?post=74277"},{"taxonomy":"feature","embeddable":true,"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/feature?post=74277"},{"taxonomy":"industry-type","embeddable":true,"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/industry-type?post=74277"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/product?post=74277"},{"taxonomy":"role","embeddable":true,"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/role?post=74277"},{"taxonomy":"region","embeddable":true,"href":"https:\/\/vwo.com\/blog\/wp-json\/wp\/v2\/region?post=74277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}