{"id":257,"date":"2015-07-13T13:10:51","date_gmt":"2015-07-13T13:10:51","guid":{"rendered":"https:\/\/conversion.com\/6-essential-tips-for-any-developer-using-optimizely\/"},"modified":"2024-08-20T11:47:52","modified_gmt":"2024-08-20T11:47:52","slug":"6-essential-tips-for-any-developer-using-optimizely","status":"publish","type":"post","link":"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/","title":{"rendered":"6 Essential tips for any developer using Optimizely"},"content":{"rendered":"<section class=\"c-post-content\" data-ref=\"case-content\">\n\t<div class=\"post-content\">\n\t\t<div class=\"post-content__container container container--medium\">\n\t\t\t<aside class=\"post-content__sidebar post-content__sidebar--links\">\n\t\t\t\t<div class=\"sticky-menu\" data-ref=\"case-content-menu\">\n\t\t\t\t\t<h3 class=\"sticky-menu__title\">Contents<\/h3>\n\t\t\t\t\t<ul class=\"sticky-menu\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t                            \t\t\t\t\t\t\t<li class=\"sticky-menu__item\">\n\t\t\t\t\t\t\t\t<a class=\"sticky-menu__item-link  active\" href=\"#introduction\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t<span class=\"arrow\"><svg viewBox=\"0 0 16 20\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M10.6875 9.34375V7.34375L13.3438 10L10.6875 12.6562V10.6562H2.65625V9.34375H10.6875Z\" fill=\"#F6876F\"\/><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"sticky-menu__item-text\">Introduction<\/span>\n\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t                            \t\t\t\t\t\t\t<li class=\"sticky-menu__item\">\n\t\t\t\t\t\t\t\t<a class=\"sticky-menu__item-link \" href=\"#theoptimizelylogisyourbestfriend\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t<span class=\"arrow\"><svg viewBox=\"0 0 16 20\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M10.6875 9.34375V7.34375L13.3438 10L10.6875 12.6562V10.6562H2.65625V9.34375H10.6875Z\" fill=\"#F6876F\"\/><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"sticky-menu__item-text\">The Optimizely log is your best friend<\/span>\n\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t                            \t\t\t\t\t\t\t<li class=\"sticky-menu__item\">\n\t\t\t\t\t\t\t\t<a class=\"sticky-menu__item-link \" href=\"#usecustomjqueryfunctions\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t<span class=\"arrow\"><svg viewBox=\"0 0 16 20\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M10.6875 9.34375V7.34375L13.3438 10L10.6875 12.6562V10.6562H2.65625V9.34375H10.6875Z\" fill=\"#F6876F\"\/><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"sticky-menu__item-text\">Use custom jQuery functions<\/span>\n\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t                            \t\t\t\t\t\t\t<li class=\"sticky-menu__item\">\n\t\t\t\t\t\t\t\t<a class=\"sticky-menu__item-link \" href=\"#useonmousedowneventsforajaxloadedbuttons\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t<span class=\"arrow\"><svg viewBox=\"0 0 16 20\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M10.6875 9.34375V7.34375L13.3438 10L10.6875 12.6562V10.6562H2.65625V9.34375H10.6875Z\" fill=\"#F6876F\"\/><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"sticky-menu__item-text\">Use \u2018onmousedown\u2019 events for AJAX loaded buttons<\/span>\n\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t                            \t\t\t\t\t\t\t<li class=\"sticky-menu__item\">\n\t\t\t\t\t\t\t\t<a class=\"sticky-menu__item-link \" href=\"#usetheforcevariationparameters\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t<span class=\"arrow\"><svg viewBox=\"0 0 16 20\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M10.6875 9.34375V7.34375L13.3438 10L10.6875 12.6562V10.6562H2.65625V9.34375H10.6875Z\" fill=\"#F6876F\"\/><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"sticky-menu__item-text\">Use the force variation parameters<\/span>\n\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t                            \t\t\t\t\t\t\t<li class=\"sticky-menu__item\">\n\t\t\t\t\t\t\t\t<a class=\"sticky-menu__item-link \" href=\"#checktherevisionoftheoptimizelysnippet\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t<span class=\"arrow\"><svg viewBox=\"0 0 16 20\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M10.6875 9.34375V7.34375L13.3438 10L10.6875 12.6562V10.6562H2.65625V9.34375H10.6875Z\" fill=\"#F6876F\"\/><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"sticky-menu__item-text\">Check the revision of the Optimizely snippet<\/span>\n\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t                            \t\t\t\t\t\t\t<li class=\"sticky-menu__item\">\n\t\t\t\t\t\t\t\t<a class=\"sticky-menu__item-link \" href=\"#usethepagesjquerytoaccessmorefunctions\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t<span class=\"arrow\"><svg viewBox=\"0 0 16 20\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M10.6875 9.34375V7.34375L13.3438 10L10.6875 12.6562V10.6562H2.65625V9.34375H10.6875Z\" fill=\"#F6876F\"\/><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"sticky-menu__item-text\">Use the page\u2019s jQuery to access more functions<\/span>\n\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t                            \t\t\t\t\t\t\t<li class=\"sticky-menu__item\">\n\t\t\t\t\t\t\t\t<a class=\"sticky-menu__item-link \" href=\"#inconclusion\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t<span class=\"arrow\"><svg viewBox=\"0 0 16 20\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M10.6875 9.34375V7.34375L13.3438 10L10.6875 12.6562V10.6562H2.65625V9.34375H10.6875Z\" fill=\"#F6876F\"\/><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"sticky-menu__item-text\">In conclusion<\/span>\n\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t<\/aside>\n\n\t\t\t<div class=\"post-content__content\">\n\t\t\t\t<ul class=\"post-content__sections\">\n\t\t\t\t\t                        \t\t\t\t\t\t<li class=\"post-content__section\" id=\"introduction\" data-ref=\"case-content-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"post-content__section-title\">Introduction<\/h2>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"post-content__section-content\"><p>Developing within Optimizely is a unique undertaking that has few parallels with conventional front end development. In this post I will outline six gems of knowledge that I have gained while building tests in Optimizely for a wide range of Conversion.com clients. <i>Please note: this post assumes that you have knowledge of <\/i><a href=\"https:\/\/help.optimizely.com\/hc\/en-us\/articles\/200040335-How-Optimizely-Works-Snippet-order-of-execution-JavaScript-evaluation-timing-and-cookies\"><i>writing code within Optimizely<\/i><\/a><i>.<\/i><\/p>\n<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"post-content__index\">\n\t\t\t\t\t\t\t\t<h3 class=\"post-content__index-title\">Contents<\/h3>\n\t\t\t\t\t\t\t\t<ul class=\"post-content__index-links\" data-ref=\"case-content-menu\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"post-content__index-link\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"#introduction\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t\t\t\tIntroduction\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"post-content__index-link\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"#theoptimizelylogisyourbestfriend\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t\t\t\tThe Optimizely log is your best friend\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"post-content__index-link\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"#usecustomjqueryfunctions\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t\t\t\tUse custom jQuery functions\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"post-content__index-link\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"#useonmousedowneventsforajaxloadedbuttons\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t\t\t\tUse \u2018onmousedown\u2019 events for AJAX loaded buttons\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"post-content__index-link\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"#usetheforcevariationparameters\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t\t\t\tUse the force variation parameters\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"post-content__index-link\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"#checktherevisionoftheoptimizelysnippet\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t\t\t\tCheck the revision of the Optimizely snippet\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"post-content__index-link\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"#usethepagesjquerytoaccessmorefunctions\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t\t\t\tUse the page\u2019s jQuery to access more functions\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"post-content__index-link\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"#inconclusion\" data-ref=\"case-content-menu-item\">\n\t\t\t\t\t\t\t\t\t\t\t\tIn conclusion\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t                        \t\t\t\t\t\t<li class=\"post-content__section\" id=\"theoptimizelylogisyourbestfriend\" data-ref=\"case-content-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"post-content__section-title\">1. The Optimizely log is your best friend<\/h2>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"post-content__section-content\"><p>My first essential tip is the use of the invaluable Optimizely log. The log contains all the information on bucketing, segmentation, audiences and code execution on your site on page load while also displaying execution times of each part in the process (for further documentation on the log, see <a href=\"https:\/\/help.optimizely.com\/hc\/en-us\/articles\/205670207-The-console-data-object-and-Optimizely-log?flash_digest=9dea87673eff09ee26b42153bcd93f2956941cbc#log\">this Optimizely knowledge base article<\/a>).<\/p>\n<p>To access the log, you simply type the following into the console of your page:<\/p>\n<pre>window.optimizely.push(\u2018log\u2019);<\/pre>\n<p>this will then return something like so:<\/p>\n<p><a href=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/optimizely-log.png\"><img decoding=\"async\" class=\"wp-image-355 aligncenter\" src=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/optimizely-log.png\" alt=\"optimizely-log\" width=\"597\" height=\"320\" \/><\/a><\/p>\n<p>This is extremely useful to locate any code that is preventing the rest of your test(s) from running that in-turn will increase flicker for the user. As all code must be written in the Identifier\/Action format (see <a href=\"https:\/\/help.optimizely.com\/hc\/en-us\/articles\/200040335-How-Optimizely-Works-Snippet-order-of-execution-JavaScript-evaluation-timing-and-cookies#variation_code\">this useful knowledge base article from Optimizely<\/a> on how code is executed within tests), it can be easy to forget to add non-optimized code in your experiment. Here is an example of code being delayed because it doesn\u2019t follow the correct format:<\/p>\n<p><a href=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/optimizely-log-code.png\"><img decoding=\"async\" class=\"wp-image-354 aligncenter\" src=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/optimizely-log-code.png\" alt=\"optimizely-log-code\" width=\"597\" height=\"321\" \/><\/a><\/p>\n<p>The code highlighted is a simple variable declaration which unfortunately does not follow the correct format. You can also see, on the lines preceding, that Optimizely is continually waiting for the document to be ready in order to execute the code (our example shows it took 617ms from encountering the code to the document becoming ready, however on slower sites this can take much longer).<\/p>\n<p>You will inadvertently run into this when writing tests, and it is useful to use this tool to check that all of your code is compliant in order to reduce any possible flicker for the user.<\/p>\n<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t                        \t\t\t\t\t\t<li class=\"post-content__section\" id=\"usecustomjqueryfunctions\" data-ref=\"case-content-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"post-content__section-title\">2. Use custom jQuery functions in order to add non-compliant code<\/h2>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"post-content__section-content\"><p>There will be times when you need to add code that won\u2019t be in the right format and there\u2019s no way you can transform it. When this issue arises, you can simply create your very own custom jQuery functions in order to bypass it. To do so, you will need to first define your custom function within the Optimizely force parameters (see <a href=\"https:\/\/help.optimizely.com\/hc\/en-us\/articles\/200040185-Force-variation-code-or-Experiment-JavaScript-to-execute-immediately-when-Optimizely-loads\">this knowledge base article on force parameters<\/a>) and then reference the defined function in your code, e.g.:<\/p>\n<pre>\/* _optimizely_evaluate=force *\/\r\n$.fn.customFunction = function() {\r\n    var number = 10;\r\n    for (var i = 0; i &lt; 10; i++) {\r\n        number++;\r\n    }\r\n    $(this).append(number);\r\n};\r\n\/* _optimizely_evaluate=safe *\/\r\n$('.main').customFunction();<\/pre>\n<p>In this example, we have defined a function originally named \u2018customFunction\u2019 which increments a number ten times before appending it to the subject when called. The \u2018customFunction\u2019 is then called on the element(s) with the class \u2018main\u2019.<\/p>\n<p>The potential applications of this method are large, with other examples ranging from timeouts to loading external scripts. Another benefit for this is that the function needs to be called using a selector that is run within the Optimizely code engine, this can be then utilised in order to check for when that specific element is available to modify\/change.<\/p>\n<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t                            <div data-target=\"post-newsletter-anchor\" data-device=\"mobile\"><\/div>\n                        \t\t\t\t\t                        \t\t\t\t\t\t<li class=\"post-content__section\" id=\"useonmousedowneventsforajaxloadedbuttons\" data-ref=\"case-content-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"post-content__section-title\">3. Use \u2018onmousedown\u2019 events for AJAX loaded buttons &#038; outbound links to track goals inside Optimizely<\/h2>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"post-content__section-content\"><p>Most Optimizely tracking goals can be added via the \u201cCreate Goal\u201d window within the editor, however there may be times when you need to use custom events in order to record clicks on buttons &amp; links.<\/p>\n<p>When a click goal is added within the editor, Optimizely adds an \u2018onmousedown\u2019 event (see <a href=\"https:\/\/help.optimizely.com\/hc\/en-us\/articles\/200039905-Click-goals\">Optimizely\u2019s knowledge base article on click goals<\/a>) to the specified element and this is attached after all variation code has been run. The reason for this is so that it can more accurately track elements that may send the user away from the page.<\/p>\n<p>In cases where you want to track an element that may be pulled in via AJAX or you want to manually track outbound links, then you can use the same event listener on those elements. For example, if you wanted to track a link that goes to an external page, you could do something like this:<\/p>\n<pre>$('.link').mousedown(function(event) {\r\n    window.optimizely.push([\"trackEvent\", \"eventName\"]);\r\n});<\/pre>\n<p>If the element you want to track is loaded via AJAX (or it loads later after page load), then this method poses a problem as Optimizely will continually poll the page until document ready, at which point it will execute the code regardless of whether the element is there or not. To get around this, you can use the <i>.live()<\/i> jQuery function (this is currently <a href=\"http:\/\/api.jquery.com\/live\/\">deprecated<\/a> in all new versions of jQuery and replaced with \u2018on\u2019, however Optimizely uses the <a href=\"https:\/\/help.optimizely.com\/hc\/en-us\/articles\/202480860-Project-Settings-Implementation-JavaScript-jQuery-and-Privacy#jquery_settings\">older 1.6.4 version<\/a> that has this available) within the Optimizely force parameters like so:<\/p>\n<pre>\/* _optimizely_evaluate=force *\/\r\n$('.link').live('mousedown', function(event) {\r\n    window.optimizely.push([\"trackEvent\", \"eventName\"]);\r\n});\r\n\/* _optimizely_evaluate=safe *\/<\/pre>\n<p>This code will then execute on all elements with class \u2018link\u2019, regardless of when they get loaded onto the page.<\/p>\n<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t                        \t\t\t\t\t\t<li class=\"post-content__section\" id=\"usetheforcevariationparameters\" data-ref=\"case-content-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"post-content__section-title\">4. Use the force variation parameters to bypass audience and targeting settings<\/h2>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"post-content__section-content\"><p>When developing a test, you will want to check your code in as close to the environment that a user might see as possible. While the visual editor and the preview modes are convenient to use, they do directly modify the page in a way that could potentially affect the test and you are of course not seeing it in the same environment that the user will see it in. Fortunately, Optimizely allows you to force tests to appear regardless of their audience and targeting settings.<\/p>\n<p>Firstly, you will need to make sure your Optimizely project allows you to use the force variation parameters. To check this, simply go to Settings-&gt;Privacy within the dashboard and make sure \u201cDisable the force variation parameter\u201d is unchecked. If it is checked, just uncheck it and hit \u201cSave\u201d.<\/p>\n<p><a href=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/force-settings.png\"><img decoding=\"async\" class=\"wp-image-353 aligncenter\" src=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/force-settings.png\" alt=\"force-settings\" width=\"597\" height=\"384\" \/><\/a><\/p>\n<p>Once that setting has been updated, you can then go to your site and add the following URL parameter:<\/p>\n<pre>?optimizely_x[EXPERIMENT ID]=[VARIATION INDEX]<\/pre>\n<p>Just replace \u201cEXPERIMENT ID\u201d with the ID of your experiment (you can find this in the editor URL for your experiment under the parameter \u201cexperiment_id\u201d) and \u201cVARIATION INDEX\u201d (this is a zero based index where 0=Control, 1=Variation #1, etc.) so that it looks something like this:<\/p>\n<pre>http:\/\/domain.com\/?optimizely_x2850651259=1<\/pre>\n<p>If your test is a multivariate test however, then you will need to use a slightly different syntax:<\/p>\n<pre>?optimizely_x[EXPERIMENT ID]=\r\n[SECTION 1 VARIATION INDEX]_[SECTION 2 VARIATION INDEX]<\/pre>\n<p>As you can see, you separate each section variation with an underscore, where<\/p>\n<pre>http:\/\/domain.com\/?optimizely_x2850651259=1_0_1<\/pre>\n<p>will show variation 1 of section 1, the control of section 2 and variation 1 of section 3 of your test.<\/p>\n<p>Always remember that this method doesn\u2019t check for whether your test will run under certain conditions, and should only be used to check if your code works. For more information on force variation parameters, check out <a href=\"https:\/\/help.optimizely.com\/hc\/en-us\/articles\/200107480\">Optimizely&#8217;s knowledge base article on them<\/a>.<\/p>\n<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t                        \t\t\t\t\t\t<li class=\"post-content__section\" id=\"checktherevisionoftheoptimizelysnippet\" data-ref=\"case-content-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"post-content__section-title\">5. Check the revision of the Optimizely snippet to ensure you are seeing your latest code<\/h2>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"post-content__section-content\"><p>To ensure speed and reliability, the Optimizely snippet is loaded <a href=\"https:\/\/blog.optimizely.com\/2013\/12\/11\/why-cdn-balancing\/\">using Akamai<\/a> that, like all other CDNs, will evaluate the best server on their distributed network to serve the code with (generally this is the closest geographically). This however comes at a price of increased save times due to the nature of invalidating files on CDNs. I\u2019m sure many of you have had to wait minutes for your code to update, and while there is no way to improve the speed of this, you can check if the code you see on the site is the latest code that was last saved using the editor.<\/p>\n<p>Whenever you save a test in Optimizely, the console displays the next revision number that it is saving to and repeats this until it has fully invalidated to the CDN.<\/p>\n<p><a href=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/revision-attempt.png\"><img decoding=\"async\" class=\"wp-image-356 aligncenter\" src=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/revision-attempt.png\" alt=\"revision-attempt\" width=\"596\" height=\"234\" \/><\/a><\/p>\n<p>The first line that is highlighted displays the previous revision (\u201c12\u201d) along with the new revision (\u201c13\u201d) and the number of times it has been attempted (in this case it only attempted it once but this has been known to go over 100 if the Optimizely platform is under large load). The second line shows that it has completed updating the CDN to correct revision.\u00a0<em>Edit:<\/em>\u00a0As noted by Toby Urff from Optimizely, the editor\u00a0also shows when the snippet is up-to-date by showing &#8220;(Uploading to CDN)&#8221; next to the &#8220;Save&#8221; button while it saves and then\u00a0is hidden once\u00a0the revision number of the snippet\u00a0matches the revision number of that\u00a0save.<\/p>\n<p><a href=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/save-cdn.png\"><img decoding=\"async\" class=\" wp-image-370 aligncenter\" src=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/save-cdn.png\" alt=\"save-cdn\" width=\"408\" height=\"166\" \/><\/a><\/p>\n<p><a href=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/save-cdn-complete.png\"><img decoding=\"async\" class=\" wp-image-369 aligncenter\" src=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/save-cdn-complete.png\" alt=\"save-cdn-complete\" width=\"408\" height=\"166\" \/><\/a><\/p>\n<p>Once you have the test saved, you can go to your page and check the current revision by entering the following into the console:<\/p>\n<pre>window.optimizely.revision<\/pre>\n<p>This will return the revision number that you are currently in<\/p>\n<p><a href=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/revision.png\"><img decoding=\"async\" class=\" wp-image-357 aligncenter\" src=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/revision.png\" alt=\"revision\" width=\"513\" height=\"192\" \/><\/a><\/p>\n<p>This, combined with checking the log, is incredibly useful for debugging and checking your code is running correctly and you are seeing the latest version. This should also speed up your development time as you know exactly when the code has been updated.<\/p>\n<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t                        \t\t\t\t\t\t<li class=\"post-content__section\" id=\"usethepagesjquerytoaccessmorefunctions\" data-ref=\"case-content-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"post-content__section-title\">6. Use the page\u2019s jQuery to access more functions<\/h2>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"post-content__section-content\"><p>As I stated above, Optimizely provides a reduced snippet of 1.6.4 that doesn\u2019t have some commonly used functions such as <i>.hide()<\/i>, <i>.ajax()<\/i>, <i>.getScript()<\/i>, etc. This can provide a problem when attempting to build larger more complex tests that may require external APIs\/scripts. There are a few solutions to this: either load the full version of jQuery via Optimizely or not to load jQuery at all and use the page\u2019s version.<\/p>\n<p>Loading the full version via Optimizely can be a quick solution, but at the same time you are significantly increasing the snippet size. It also becomes redundant if you already have jQuery on the page. On the other hand, while using the page\u2019s version of jQuery may seem at first to be a better option in terms of overall file size, it can actually be slower if you are loading jQuery at the end of the page (as it is <a href=\"http:\/\/stackoverflow.com\/a\/2105394\/1252385\">generally recommended<\/a> that you should do).<\/p>\n<p>A middle ground to these two options is to include the reduced snippet with Optimizely, but use the website\u2019s version to access functions such as <i>.ajax()<\/i>. To do this, you will need to write a function within Optimizely\u2019s force parameters to check the existence of the page\u2019s jQuery and then execute your script. This could look something like this:<\/p>\n<pre>\/* _optimizely_evaluate=force *\/\r\nfunction checkjQuery() {\r\n    if (typeof window.$ !== \"undefined\") {\r\n        window.$.ajax({\r\n            url: '\/path\/to\/file',\r\n            type: 'POST',\r\n            data: {param1: 'value1'},\r\n        }).done(function() {\r\n            console.log(\"success\");\r\n        });\r\n    } else {\r\n        setTimeout(checkjQuery, 50);\r\n    }\r\n}\r\ncheckjQuery();\r\n\/* _optimizely_evaluate=safe *\/<\/pre>\n<p>Here you can see that we are accessing the website\u2019s version of jQuery using <i>window.$<\/i> and making sure it is not \u2018undefined\u2019. We are then accessing the <i>.ajax()<\/i> function via the <i>window.$<\/i> scope to access a fictional file called \u2018\/path\/to\/file\u2019. This code should load as soon as jQuery is available on the page. One thing to be aware of when using this method: if you are adding or changing content in an element that you create outside of the force parameters, then you must check for the existence of that as well as the page\u2019s jQuery. This is because there is a possibility of the page\u2019s jQuery loading faster than Optimizely can get to the line of code that creates the new element.<\/p>\n<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t                        \t\t\t\t\t\t<li class=\"post-content__section\" id=\"inconclusion\" data-ref=\"case-content-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"post-content__section-title\">In conclusion<\/h2>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"post-content__section-content\"><p>These tips have been slowly accrued while I have been working on the Optimizely platform over two years as a developer for Conversion.com. These have proven invaluable to me and I hope they bring the same benefit to you as well.<\/p>\n<p><i>Did you find anything useful in here? <\/i>Do you have essential tips for coding in Optimizely that haven\u2019t been mentioned? Get in touch with us in the comments and let us know your thoughts!<\/p>\n<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t                            <div data-target=\"post-newsletter-anchor\" data-device=\"mobile\"><\/div>\n                        \t\t\t\t\t\n\t\t\t\t<\/ul>\n\t\t\t<\/div>\n\n\t\t\t<aside class=\"post-content__sidebar post-content__sidebar--form\">\n\t\t\t\t<div class=\"sticky-newsletter\" data-target=\"post-newsletter-anchor\" data-device=\"desktop\">\n                \t<div class=\"post-newsletter\" data-target=\"post-newsletter\">\n    <h4 class=\"post-newsletter__title\">Real-world growth experiments. In your inbox. Every week. <\/h4>\n            <div class=\"post-newsletter__form post-newsletter__form--world kam-world\">\n        <script charset=\"utf-8\" type=\"text\/javascript\" src=\"\/\/js.hsforms.net\/forms\/embed\/v2.js\"><\/script> <script>   hbspt.forms.create({     region: \"na1\",     portalId: \"9358319\",     formId: \"4e927e03-4f90-466a-8646-7f94947f860c\"   }); <\/script>\n    <\/div>\n            <div class=\"post-newsletter__form post-newsletter__form--uk-us kam-uk-us\">\n            <script charset=\"utf-8\" type=\"text\/javascript\" src=\"\/\/js.hsforms.net\/forms\/embed\/v2.js\"><\/script><script>hbspt.forms.create({ region: \"na1\", portalId: \"9358319\", formId: \"03e799e7-ee63-4857-9182-cb3a687dba40\" });<\/script>\n        <\/div>\n        <div class=\"post-newsletter__terms\"><p>Join 5,000+ optimizers who subscribe to our content<\/p>\n<\/div>\n<\/div>\n\t\t\t\t<\/div>\n            <\/aside>\n\t\t<\/div>\n\t<\/div>\n<\/section>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":4,"featured_media":266,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[24],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>6 Essential tips for any developer using Optimizely | Conversion<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"6 Essential tips for any developer using Optimizely | Conversion\" \/>\n<meta property=\"og:url\" content=\"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/\" \/>\n<meta property=\"og:site_name\" content=\"Conversion\" \/>\n<meta property=\"article:published_time\" content=\"2015-07-13T13:10:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-20T11:47:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/6-essential-tips-for-any-developer-using-Optimizely-Final.png\" \/>\n\t<meta property=\"og:image:width\" content=\"805\" \/>\n\t<meta property=\"og:image:height\" content=\"502\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"James Marchant\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"James Marchant\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/\"},\"author\":{\"name\":\"James Marchant\",\"@id\":\"https:\/\/conversion.com\/#\/schema\/person\/9fa5a7051bb6de775c75e8ea4d1440b6\"},\"headline\":\"6 Essential tips for any developer using Optimizely\",\"datePublished\":\"2015-07-13T13:10:51+00:00\",\"dateModified\":\"2024-08-20T11:47:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/\"},\"wordCount\":7,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/conversion.com\/#organization\"},\"keywords\":[\"Tech &amp; Development\"],\"articleSection\":[\"Tools &amp; Platforms\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/\",\"url\":\"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/\",\"name\":\"6 Essential tips for any developer using Optimizely | Conversion\",\"isPartOf\":{\"@id\":\"https:\/\/conversion.com\/#website\"},\"datePublished\":\"2015-07-13T13:10:51+00:00\",\"dateModified\":\"2024-08-20T11:47:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/conversion.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"6 Essential tips for any devel&hellip;\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/conversion.com\/#website\",\"url\":\"https:\/\/conversion.com\/\",\"name\":\"Conversion\",\"description\":\"Better results with evidence\",\"publisher\":{\"@id\":\"https:\/\/conversion.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/conversion.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/conversion.com\/#organization\",\"name\":\"Conversion\",\"url\":\"https:\/\/conversion.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/conversion.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/12\/Colour-Logo.png\",\"contentUrl\":\"https:\/\/conversion.com\/wp-content\/uploads\/2022\/12\/Colour-Logo.png\",\"width\":1821,\"height\":193,\"caption\":\"Conversion\"},\"image\":{\"@id\":\"https:\/\/conversion.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/conversion.com\/#\/schema\/person\/9fa5a7051bb6de775c75e8ea4d1440b6\",\"name\":\"James Marchant\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/conversion.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a2954f78d14ce7cc8adf9f1f2c187871?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a2954f78d14ce7cc8adf9f1f2c187871?s=96&d=mm&r=g\",\"caption\":\"James Marchant\"},\"description\":\"James Marchant is the Head of Development at Conversion.com. He was the first full time developer to join the ranks in 2013 and since then has helped to define many of the agency's development policies.\",\"url\":\"https:\/\/conversion.com\/blog\/author\/jmarchant\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"6 Essential tips for any developer using Optimizely | Conversion","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:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/","og_locale":"en_GB","og_type":"article","og_title":"6 Essential tips for any developer using Optimizely | Conversion","og_url":"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/","og_site_name":"Conversion","article_published_time":"2015-07-13T13:10:51+00:00","article_modified_time":"2024-08-20T11:47:52+00:00","og_image":[{"width":805,"height":502,"url":"https:\/\/conversion.com\/wp-content\/uploads\/2022\/06\/6-essential-tips-for-any-developer-using-Optimizely-Final.png","type":"image\/png"}],"author":"James Marchant","twitter_card":"summary_large_image","twitter_misc":{"Written by":"James Marchant"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/#article","isPartOf":{"@id":"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/"},"author":{"name":"James Marchant","@id":"https:\/\/conversion.com\/#\/schema\/person\/9fa5a7051bb6de775c75e8ea4d1440b6"},"headline":"6 Essential tips for any developer using Optimizely","datePublished":"2015-07-13T13:10:51+00:00","dateModified":"2024-08-20T11:47:52+00:00","mainEntityOfPage":{"@id":"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/"},"wordCount":7,"commentCount":0,"publisher":{"@id":"https:\/\/conversion.com\/#organization"},"keywords":["Tech &amp; Development"],"articleSection":["Tools &amp; Platforms"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/","url":"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/","name":"6 Essential tips for any developer using Optimizely | Conversion","isPartOf":{"@id":"https:\/\/conversion.com\/#website"},"datePublished":"2015-07-13T13:10:51+00:00","dateModified":"2024-08-20T11:47:52+00:00","breadcrumb":{"@id":"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/conversion.com\/blog\/6-essential-tips-for-any-developer-using-optimizely\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/conversion.com\/"},{"@type":"ListItem","position":2,"name":"6 Essential tips for any devel&hellip;"}]},{"@type":"WebSite","@id":"https:\/\/conversion.com\/#website","url":"https:\/\/conversion.com\/","name":"Conversion","description":"Better results with evidence","publisher":{"@id":"https:\/\/conversion.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/conversion.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/conversion.com\/#organization","name":"Conversion","url":"https:\/\/conversion.com\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/conversion.com\/#\/schema\/logo\/image\/","url":"https:\/\/conversion.com\/wp-content\/uploads\/2022\/12\/Colour-Logo.png","contentUrl":"https:\/\/conversion.com\/wp-content\/uploads\/2022\/12\/Colour-Logo.png","width":1821,"height":193,"caption":"Conversion"},"image":{"@id":"https:\/\/conversion.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/conversion.com\/#\/schema\/person\/9fa5a7051bb6de775c75e8ea4d1440b6","name":"James Marchant","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/conversion.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a2954f78d14ce7cc8adf9f1f2c187871?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a2954f78d14ce7cc8adf9f1f2c187871?s=96&d=mm&r=g","caption":"James Marchant"},"description":"James Marchant is the Head of Development at Conversion.com. He was the first full time developer to join the ranks in 2013 and since then has helped to define many of the agency's development policies.","url":"https:\/\/conversion.com\/blog\/author\/jmarchant\/"}]}},"_links":{"self":[{"href":"https:\/\/conversion.com\/wp-json\/wp\/v2\/posts\/257"}],"collection":[{"href":"https:\/\/conversion.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/conversion.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/conversion.com\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/conversion.com\/wp-json\/wp\/v2\/comments?post=257"}],"version-history":[{"count":16,"href":"https:\/\/conversion.com\/wp-json\/wp\/v2\/posts\/257\/revisions"}],"predecessor-version":[{"id":7375,"href":"https:\/\/conversion.com\/wp-json\/wp\/v2\/posts\/257\/revisions\/7375"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/conversion.com\/wp-json\/wp\/v2\/media\/266"}],"wp:attachment":[{"href":"https:\/\/conversion.com\/wp-json\/wp\/v2\/media?parent=257"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/conversion.com\/wp-json\/wp\/v2\/categories?post=257"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}