{"id":88469,"date":"2025-02-14T21:51:58","date_gmt":"2025-02-14T21:51:58","guid":{"rendered":"https:\/\/peraltafinancing.com\/analytics\/google-optimize-anti-flicker-snippet-delay-test\/"},"modified":"2025-02-14T21:51:58","modified_gmt":"2025-02-14T21:51:58","slug":"google-optimize-anti-flicker-snippet-delay-test","status":"publish","type":"post","link":"https:\/\/fivemor.com\/?p=88469","title":{"rendered":"Google Optimize Anti-flicker Snippet Delay Test"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<p>Recently <a href=\"https:\/\/www.simoahava.com\/analytics\/simple-way-measure-a-b-test-flicker-impact\/\">I published an article<\/a> on how to set up an <em>impact test<\/em> for the \u201cflicker effect\u201d omnipresent in client-side A\/B-testing tools. Be sure to check out that article first to get some context to what we\u2019re going to be talking about here.<\/p>\n<div style=\"aspect-ratio: 1018 \/ 506;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/05\/optimize-anti-flicker-snippet-test.jpg\" title=\"Optimize anti-flicker snippet test\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"506\" width=\"1018\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/05\/optimize-anti-flicker-snippet-test.jpg#ZgotmplZ\" alt=\"Optimize anti-flicker snippet test\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>In this short follow-up, I\u2019ll show you how to measure the average time of the <a href=\"https:\/\/support.google.com\/optimize\/answer\/7100284\">anti-flicker snippet<\/a> delaying page visibility, if you choose to deploy the snippet. The methodology is very similar.<\/p>\n<p>If you recall, the anti-flicker snippet <strong>hides<\/strong> the entire page while waiting for the Optimize container to load. So we\u2019ll be measuring how long it took for the page to become unhidden. Visibility is restored if the Optimize container loads successfully, or if the load ends in a timeout (4 seconds by default).<\/p>\n<p>The test below is run by splitting 50% of traffic to the <a href=\"https:\/\/support.google.com\/optimize\/answer\/9692472?hl=en\">asynchronous Optimize snippet<\/a> and 50% of the traffic to the <a href=\"https:\/\/support.google.com\/optimize\/answer\/6314801\">Google Tag Manager Optimize tag<\/a>.<\/p>\n<p>We\u2019re using <a href=\"https:\/\/www.simoahava.com\/analytics\/getting-started-with-google-analytics-app-web\/\">Google Analytics: App + Web<\/a> with its wonderful <a href=\"https:\/\/www.simoahava.com\/analytics\/enable-bigquery-export-google-analytics-app-web\/\">BigQuery export<\/a> for the analysis. We\u2019ll be using Google Tag Manager to collect and send the data forward.<\/p>\n<p>                <span class=\"simmer\"><br \/>\n  <span class=\"close\">X<\/span><\/p>\n<p>\n    <span class=\"fa fa-md fa-bell\"\/><br \/>\n    <strong>The Simmer Newsletter<\/strong>\n  <\/p>\n<p>\n    Subscribe to the <a href=\"https:\/\/www.simoahava.com\/newsletter\/\">Simmer newsletter<\/a> to get the latest news and content from Simo Ahava into your email inbox!\n  <\/p>\n<p>  <\/span><\/p>\n<h2 id=\"modify-the-page-template\">Modify the page template<\/h2>\n<p>You need to edit the <strong>page template<\/strong>. The anti-flicker snippet <strong>must<\/strong> be added directly to the page template, and we also need to write the logic that determines whether the user should see the Optimize snippet or whether Optimize should be loaded via Google Tag Manager.<\/p>\n<p>At the very <strong>top<\/strong> of the <code\/> element on your experiment pages, add the following HTML block:<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-html\" data-lang=\"html\"><span style=\"color:#aaa;font-style:italic\"><!-- The style declaration for the anti-flicker snippet --><\/span>\nstyle&gt;.<span style=\"color:#0a0;text-decoration:underline\">async-hide<\/span> { <span style=\"color:#00a\">opacity<\/span>: <span style=\"color:#099\">0<\/span> <span style=\"color:#4c8317\">!important<\/span>} <span style=\"color:#1e90ff;font-weight:bold\">style<\/span>&gt;\n\nscript&gt;\n  (<span style=\"color:#00a\">function<\/span>() {\n    <span style=\"color:#aaa;font-style:italic\">\/\/ Modify the optimizeId to match your Optimize container ID, gtmId\n<\/span><span style=\"color:#aaa;font-style:italic\"\/>    <span style=\"color:#aaa;font-style:italic\">\/\/ to match your GTM container ID, and dataLayerName to match the name\n<\/span><span style=\"color:#aaa;font-style:italic\"\/>    <span style=\"color:#aaa;font-style:italic\">\/\/ of the dataLayer array on your site.\n<\/span><span style=\"color:#aaa;font-style:italic\"\/>    <span style=\"color:#00a\">var<\/span> optimizeId = <span style=\"color:#a50\">'GTM-NGM64B'<\/span>,\n        gtmId = <span style=\"color:#a50\">'GTM-PZ7GMV9'<\/span>,\n        dataLayerName = <span style=\"color:#a50\">'dataLayer'<\/span>,\n        hideObj = {},\n        hideGTMId = <span style=\"color:#0aa\">Math<\/span>.random() 0.5 ? optimizeId : gtmId;\n    \n    hideObj[hideGTMId] = <span style=\"color:#00a\">true<\/span>;\n    \n    <span style=\"color:#aaa;font-style:italic\">\/\/ Helper to handle the dataLayer.push()\n<\/span><span style=\"color:#aaa;font-style:italic\"\/>    <span style=\"color:#00a\">var<\/span> dPush = <span style=\"color:#00a\">function<\/span>(status) {\n      <span style=\"color:#0aa\">window<\/span>[dataLayerName].push({\n        event: <span style=\"color:#a50\">'optimize_anti_flicker_test'<\/span>,\n        milestones: {\n          antiFlickerStart: <span style=\"color:#0aa\">window<\/span>[dataLayerName].hide.start,\n          antiFlickerEnd: <span style=\"color:#00a\">new<\/span> <span style=\"color:#0aa\">Date<\/span>().getTime(),\n          testStatus: status\n        }\n      });\n    };\n\n    <span style=\"color:#aaa;font-style:italic\">\/\/ MODIFIED anti-flicker snippet\n<\/span><span style=\"color:#aaa;font-style:italic\"\/>    (<span style=\"color:#00a\">function<\/span>(a,s,y,n,c,h,i,d,e) {\n      s.className + = <span style=\"color:#a50\">' '<\/span> + y;\n      h.start = <span style=\"color:#099\">1<\/span> * <span style=\"color:#00a\">new<\/span> <span style=\"color:#0aa\">Date<\/span>;\n      h.end = i = <span style=\"color:#00a\">function<\/span>(){\n        clearTimeout(t); \n        s.className = s.className.replace(<span style=\"color:#0aa\">RegExp<\/span>(<span style=\"color:#a50\">' ?'<\/span> + y), <span style=\"color:#a50\">''<\/span>)\n      };\n      (a[n] = a[n] || []).hide = h;\n      <span style=\"color:#00a\">var<\/span> t = setTimeout(<span style=\"color:#00a\">function<\/span>() {\n        dPush(<span style=\"color:#a50\">'timeout'<\/span>);\n        i();\n        h.end = <span style=\"color:#00a\">null<\/span>;\n      }, c);\n      h.timeout = c;\n    })(<span style=\"color:#0aa\">window<\/span>, <span style=\"color:#0aa\">document<\/span>.documentElement, <span style=\"color:#a50\">'async-hide'<\/span>, dataLayerName, <span style=\"color:#099\">4000<\/span>, hideObj);\n\n    <span style=\"color:#aaa;font-style:italic\">\/\/ Determine where to load Optimize from (inline vs. GTM)\n<\/span><span style=\"color:#aaa;font-style:italic\"\/>    <span style=\"color:#00a\">if<\/span> (hideGTMId === optimizeId) {\n      <span style=\"color:#00a\">var<\/span> el = <span style=\"color:#0aa\">document<\/span>.createElement(<span style=\"color:#a50\">'script'<\/span>);\n      el.src = <span style=\"color:#a50\">'https:\/\/www.googleoptimize.com\/optimize.js?id='<\/span> + optimizeId;\n      el.addEventListener(<span style=\"color:#a50\">'error'<\/span>, <span style=\"color:#00a\">function<\/span>() {\n        dPush(<span style=\"color:#a50\">'optimizeSnippetError'<\/span>);\n        <span style=\"color:#0aa\">window<\/span>[dataLayerName].hide.end &amp;&amp; <span style=\"color:#0aa\">window<\/span>[dataLayerName].hide.end();\n      });\n      <span style=\"color:#0aa\">document<\/span>.head.appendChild(el);\n    } <span style=\"color:#00a\">else<\/span> {\n      <span style=\"color:#0aa\">window<\/span>[dataLayerName].push({\n        gtmOptimize: <span style=\"color:#00a\">true<\/span>\n      });\n    }\n    \n    <span style=\"color:#aaa;font-style:italic\">\/\/ Configure the Optimize callback\n<\/span><span style=\"color:#aaa;font-style:italic\"\/>    <span style=\"color:#00a\">function<\/span> gtag() {dataLayer.push(arguments)};\n    gtag(<span style=\"color:#a50\">'event'<\/span>, <span style=\"color:#a50\">'optimize.callback'<\/span>, {\n      callback: <span style=\"color:#00a\">function<\/span>() {\n        dPush(hideGTMId === optimizeId ? <span style=\"color:#a50\">'optimizeSnippet'<\/span> : <span style=\"color:#a50\">'gtmTag'<\/span>);\n      }\n    });\n  })();\n<span style=\"color:#1e90ff;font-weight:bold\">script<\/span>&gt;<\/code><\/pre>\n<\/div>\n<p>You should only add this snippet on pages that are actually running the experiment, to make sure you don\u2019t accidentally collect measurements from pages that aren\u2019t actually running Optimize.<\/p>\n<p>In the first block of variables, make sure you update <code>optimizeId<\/code>, <code>gtmId<\/code>, and <code>dataLayerName<\/code> to reflect your Optimize ID, Google Tag Manager container ID, and name of the <code>dataLayer<\/code> array, respectively.<\/p>\n<p><code>var hideGTMId = Math.random()  chooses randomly (50% chance) whether to load Optimize using the asynchronous inline snippet or through a Google Tag Manager tag.<\/code><\/p>\n<p>The <strong>anti-flicker snippet<\/strong> is <em>modified<\/em> in this version. The main change is that <strong>if<\/strong> the timeout happens (by default 4000 milliseconds after the page was hidden), a <code>dataLayer.push()<\/code> is called with this information. Because of this, another modification to the snippet is to <em>stop<\/em> the timeout counter in case the page is unhidden (to avoid the timeout being erroneously reported to <code>dataLayer<\/code>):<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-javascript\" data-lang=\"javascript\">h.end = i = <span style=\"color:#00a\">function<\/span>() {\n  clearTimeout(t);\n  ...\n}\n<span style=\"color:#00a\">var<\/span> t = setTimeout(<span style=\"color:#00a\">function<\/span>() {\n  dPush(<span style=\"color:#a50\">'timeout'<\/span>);\n  ...\n}, c);\n<\/code><\/pre>\n<\/div>\n<p>The following block checks if Optimize should be loaded via the snippet or via GTM.<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-javascript\" data-lang=\"javascript\"><span style=\"color:#aaa;font-style:italic\">\/\/ Determine where to load Optimize from (inline vs. GTM)\n<\/span><span style=\"color:#aaa;font-style:italic\"\/><span style=\"color:#00a\">if<\/span> (hideGTMId === optimizeId) {\n  <span style=\"color:#00a\">var<\/span> el = <span style=\"color:#0aa\">document<\/span>.createElement(<span style=\"color:#a50\">'script'<\/span>);\n  el.src = <span style=\"color:#a50\">'https:\/\/www.googleoptimize.com\/optimize.js?id='<\/span> + optimizeId;\n  el.addEventListener(<span style=\"color:#a50\">'error'<\/span>, <span style=\"color:#00a\">function<\/span>() {\n  dPush(<span style=\"color:#a50\">'optimizeSnippetError'<\/span>);\n    <span style=\"color:#0aa\">window<\/span>[dataLayerName].hide.end &amp;&amp; <span style=\"color:#0aa\">window<\/span>[dataLayerName].hide.end();\n  });\n  <span style=\"color:#0aa\">document<\/span>.head.appendChild(el);\n} <span style=\"color:#00a\">else<\/span> {\n  <span style=\"color:#0aa\">window<\/span>[dataLayerName].push({\n    gtmOptimize: <span style=\"color:#00a\">true<\/span>\n  });\n}\n<\/code><\/pre>\n<\/div>\n<p>If the inline snippet wins the draw, the Optimize element is added to the page together with an <code>error<\/code> listener that unhides the page in case there\u2019s an error loading Optimize (e.g. user is blocking the script load).<\/p>\n<p>If Optimize is loaded via Google Tag Manager, then the key <code>gtmOptimize<\/code> is pushed to <code>dataLayer<\/code> with the value <code>true<\/code>. This is then later used as a trigger condition for the Optimize tag.<\/p>\n<p>As soon as the Optimize or Google Tag Manager container loads, or the anti-flicker snippet runs into its timeout, or there\u2019s an error in loading Optimize, a <code>dataLayer.push()<\/code> happens with the following content:<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-javascript\" data-lang=\"javascript\">{\n  event: <span style=\"color:#a50\">'optimize_anti_flicker_test'<\/span>,\n  milestones: {\n    antiFlickerStart: <span style=\"color:#0aa\">window<\/span>[dataLayerName].hide.start,\n    antiFlickerEnd: <span style=\"color:#00a\">new<\/span> <span style=\"color:#0aa\">Date<\/span>().getTime(),\n    testStatus: status\n  }\n}\n<\/code><\/pre>\n<\/div>\n<p>Here, <code>status<\/code> is one of <code>gtmTag<\/code> (if Optimize loaded via Google Tag Manager), <code>optimizeSnippet<\/code> (if loaded via Optimize), <code>timeout<\/code> (if the timeout is reached), or <code>optimizeSnippetError<\/code> (if the Optimize snippet ran into an error).<\/p>\n<blockquote>\n<p>One thing to note is that this setup does <strong>not<\/strong> test if Google Tag Manager is blocked. This is something you might want to test for as well, if you want to get an even more comprehensive idea of what\u2019s going on with your experiment implementations.<\/p>\n<\/blockquote>\n<h2 id=\"google-tag-manager-setup\">Google Tag Manager setup<\/h2>\n<p>In Google Tag Manager, we\u2019ll need to create an <strong>App + Web tag<\/strong> (because we want to do the analysis in <a href=\"https:\/\/www.simoahava.com\/analytics\/enable-bigquery-export-google-analytics-app-web\/\">BigQuery<\/a> again). We\u2019ll also need a <strong>Custom Event trigger<\/strong> and some <strong>Data Layer variables<\/strong>.<\/p>\n<h3 id=\"the-trigger\">The trigger<\/h3>\n<p>This is what the Custom Event trigger looks like.<\/p>\n<div style=\"aspect-ratio: 1844 \/ 934;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/05\/optimize-anti-flicker-test-trigger.jpg\" title=\"Custom event trigger\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"934\" width=\"1844\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/05\/optimize-anti-flicker-test-trigger.jpg#ZgotmplZ\" alt=\"Custom event trigger\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>This trigger will fire whenever the <code>dataLayer.push()<\/code> with the snippet test data is executed on the page. There\u2019s also a condition to only fire this tag on the homepage, <strong>which you can and should modify\/remove if you\u2019re running experiments elsewhere as well!<\/strong>.<\/p>\n<h3 id=\"the-variables\">The variables<\/h3>\n<p>You\u2019re going to need <strong>four<\/strong> <code>dataLayer<\/code> variables.<\/p>\n<table>\n<thead>\n<tr>\n<th>Variable name<\/th>\n<th>Value of the \u201cData Layer Variable Name\u201d field<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>DLV &#8211; milestones.testStatus<\/td>\n<td><code>milestones.testStatus<\/code><\/td>\n<td>One of <code>gtmTag<\/code>, <code>optimizeSnippet<\/code>, <code>timeout<\/code>, or <code>optimizeSnippetError<\/code>.<\/td>\n<\/tr>\n<tr>\n<td>DLV &#8211; milestones.antiFlickerStart<\/td>\n<td><code>milestones.antiFlickerStart<\/code><\/td>\n<td>Timestamp of when page hiding began.<\/td>\n<\/tr>\n<tr>\n<td>DLV &#8211; milestones.antiFlickerEnd<\/td>\n<td><code>milestones.antiFlickerEnd<\/code><\/td>\n<td>Timestamp of when page hiding ended.<\/td>\n<\/tr>\n<tr>\n<td>DLV &#8211; gtmOptimize<\/td>\n<td><code>gtmOptimize<\/code><\/td>\n<td>Is <code>true<\/code> if Optimize should be loaded in a GTM tag.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>This is what a variable would look like, per the specification in the table above:<\/p>\n<div style=\"aspect-ratio: 1764 \/ 1072;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/05\/dlv-antiflickerend.jpg\" title=\"Data Layer Variable\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1072\" width=\"1764\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/05\/dlv-antiflickerend.jpg#ZgotmplZ\" alt=\"Data Layer Variable\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<h3 id=\"the-tags\">The tags<\/h3>\n<p>First, you\u2019ll need to create the <strong>App + Web Event tag<\/strong>. Make sure you have a <a href=\"https:\/\/www.simoahava.com\/analytics\/getting-started-with-google-analytics-app-web\/#create-a-base-configuration-tag\">base tag<\/a> as well!<\/p>\n<div style=\"aspect-ratio: 1842 \/ 1962;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/05\/app-web-anti-flicker-tag.jpg\" title=\"App+Web Anti-flicker event tag\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1962\" width=\"1842\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/05\/app-web-anti-flicker-tag.jpg#ZgotmplZ\" alt=\"App+Web Anti-flicker event tag\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>The tag is set to trigger with the Custom Event trigger we created <a href=\"#the-trigger\">above<\/a>, and it sends the values of the three <code>milestones<\/code> variables to App + Web as custom parameters. Feel free to change the keys and event names as you wish.<\/p>\n<p>Next, we need to fire the Google Optimize tag <strong>conditionally<\/strong>, depending on if the <code>gtmOptimize<\/code> key is in <code>dataLayer<\/code> with the value <code>true<\/code>.<\/p>\n<p>Since Optimize needs to run in a <a href=\"https:\/\/www.simoahava.com\/analytics\/understanding-tag-sequencing-in-google-tag-manager\/\">tag sequence<\/a>, this is actually pretty convoluted to do. In addition to the Google Optimize tag itself, you need a new <strong>Universal Analytics Page View<\/strong> tag which only fires when <code>gtmOptimize<\/code> is <code>true<\/code>, and you need to block your <strong>regular Page View tag<\/strong> in this circumstance as well.<\/p>\n<div style=\"aspect-ratio: 1852 \/ 1440;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/05\/optimize-tag-anti-flicker.jpg\" title=\"Optimize tag\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1440\" width=\"1852\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/05\/optimize-tag-anti-flicker.jpg#ZgotmplZ\" alt=\"Optimize tag\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Don\u2019t worry about the Tag Sequencing setting, you set it up in the new Page View tag that you\u2019ll also need to create:<\/p>\n<div style=\"aspect-ratio: 2562 \/ 1388;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/05\/optimize-pageview-tag.jpg\" title=\"New Page View tag\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1388\" width=\"2562\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/05\/optimize-pageview-tag.jpg#ZgotmplZ\" alt=\"New Page View tag\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Take note of the new trigger: \u201cAll Pages &#8211; Anti-flicker\u201d is a <strong>Page View<\/strong> trigger with a single condition: <code>{{DLV - gtmOptimize}} equals true<\/code>.<\/p>\n<p>Finally, make sure you <strong>block<\/strong> your <em>regular<\/em> Page View tag to avoid double-counting on pages where the Optimize-specific Page View already fired:<\/p>\n<div style=\"aspect-ratio: 1866 \/ 596;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/05\/pv-blocked.jpg\" title=\"Page View trigger\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"596\" width=\"1866\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/05\/pv-blocked.jpg#ZgotmplZ\" alt=\"Page View trigger\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>The blocking trigger is a Custom Event trigger that blocks any event if <code>gtmOptimize<\/code> is <code>true<\/code>:<\/p>\n<div style=\"aspect-ratio: 1848 \/ 932;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/05\/block-if-optimize.jpg\" title=\"Block if Optimize\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"932\" width=\"1848\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/05\/block-if-optimize.jpg#ZgotmplZ\" alt=\"Block if Optimize\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<h2 id=\"test-the-setup\">Test the setup<\/h2>\n<p>Once you\u2019ve set everything up, try loading the page with the page template modification in Preview mode. Make sure you see a request to App + Web with your custom parameters in place.<\/p>\n<div style=\"aspect-ratio: 3030 \/ 1152;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/05\/app-web-hit-works.jpg\" title=\"App+Web hit works\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1152\" width=\"3030\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/05\/app-web-hit-works.jpg#ZgotmplZ\" alt=\"App+Web hit works\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>If it doesn\u2019t work, check the browser console for errors. Also, make sure that the Optimize container actually loads, and that you have an experiment running on the page where you are testing!<\/p>\n<h2 id=\"dig-deep-with-bigquery\">Dig deep with BigQuery<\/h2>\n<p>Once the data starts flowing into BigQuery, you should find your events with a query like this:<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-SQL\" data-lang=\"SQL\"><span style=\"color:#00a\">SELECT<\/span>\n  *\n<span style=\"color:#00a\">FROM<\/span> \n  `project.dataset.events_202006*`\n<span style=\"color:#00a\">WHERE<\/span>\n  event_name = <span style=\"color:#a50\">'optimize_anti_flicker_snippet_test'<\/span><\/code><\/pre>\n<\/div>\n<p>We\u2019re simply loading all the hits with the <code>optimize_anti_flicker_snippet_test<\/code> data to get an overview of what those hits look like.<\/p>\n<div style=\"aspect-ratio: 3248 \/ 1370;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/05\/sql-anti-flicker-events.jpg\" title=\"Anti-flicker events\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1370\" width=\"3248\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/05\/sql-anti-flicker-events.jpg#ZgotmplZ\" alt=\"Anti-flicker events\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>To get a count of different test types, you can run a query like this:<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-SQL\" data-lang=\"SQL\"><span style=\"color:#00a\">SELECT<\/span>\n  (<span style=\"color:#00a\">SELECT<\/span> value.string_value <span style=\"color:#00a\">FROM<\/span> <span style=\"color:#00a\">UNNEST<\/span>(event_params) <span style=\"color:#00a\">WHERE<\/span> <span style=\"color:#00a\">key<\/span> = <span style=\"color:#a50\">'test_status'<\/span>) <span style=\"color:#00a\">as<\/span> test_status,\n  <span style=\"color:#00a\">COUNT<\/span>(*) <span style=\"color:#00a\">as<\/span> <span style=\"color:#00a\">count<\/span>\n<span style=\"color:#00a\">FROM<\/span>\n  `project.dataset.events_202006*`\n<span style=\"color:#00a\">WHERE<\/span>\n  event_name = <span style=\"color:#a50\">'optimize_anti_flicker_snippet_test'<\/span>\n<span style=\"color:#00a\">GROUP<\/span> <span style=\"color:#00a\">BY<\/span> <span style=\"color:#099\">1<\/span>\n<span style=\"color:#00a\">ORDER<\/span> <span style=\"color:#00a\">BY<\/span> <span style=\"color:#099\">2<\/span> <span style=\"color:#00a\">DESC<\/span><\/code><\/pre>\n<\/div>\n<p>This query pulls in the value of <code>test_status<\/code> from the events, and does an aggregate count of each status. This is what the end result would look like:<\/p>\n<div style=\"aspect-ratio: 1166 \/ 586;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/05\/test-status-counts.jpg\" title=\"Test status counts\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"586\" width=\"1166\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/05\/test-status-counts.jpg#ZgotmplZ\" alt=\"Test status counts\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Finally, to get some averages in place, you can modify the query to look like this:<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-sql\" data-lang=\"sql\"><span style=\"color:#00a\">WITH<\/span> milestones <span style=\"color:#00a\">AS<\/span> (\n  <span style=\"color:#00a\">SELECT<\/span> \n    (<span style=\"color:#00a\">SELECT<\/span> value.string_value <span style=\"color:#00a\">FROM<\/span> <span style=\"color:#00a\">UNNEST<\/span>(event_params) <span style=\"color:#00a\">WHERE<\/span> <span style=\"color:#00a\">key<\/span> = <span style=\"color:#a50\">'test_status'<\/span>) <span style=\"color:#00a\">as<\/span> test_status,\n    (<span style=\"color:#00a\">SELECT<\/span> value.int_value <span style=\"color:#00a\">FROM<\/span> <span style=\"color:#00a\">UNNEST<\/span>(event_params) <span style=\"color:#00a\">WHERE<\/span> <span style=\"color:#00a\">key<\/span> = <span style=\"color:#a50\">'anti_flicker_start'<\/span>) <span style=\"color:#00a\">as<\/span> anti_flicker_start,\n    (<span style=\"color:#00a\">SELECT<\/span> value.int_value <span style=\"color:#00a\">FROM<\/span> <span style=\"color:#00a\">UNNEST<\/span>(event_params) <span style=\"color:#00a\">WHERE<\/span> <span style=\"color:#00a\">key<\/span> = <span style=\"color:#a50\">'anti_flicker_end'<\/span>) <span style=\"color:#00a\">as<\/span> anti_flicker_end\n  <span style=\"color:#00a\">FROM<\/span> \n    `project.dataset.events_202006*`\n  <span style=\"color:#00a\">WHERE<\/span>\n    event_name = <span style=\"color:#a50\">'optimize_anti_flicker_snippet_test'<\/span>\n)\n<span style=\"color:#00a\">SELECT<\/span> \n  test_status,\n  <span style=\"color:#00a\">COUNT<\/span>(*) <span style=\"color:#00a\">as<\/span> <span style=\"color:#00a\">count<\/span>,\n  ROUND(<span style=\"color:#00a\">AVG<\/span>(anti_flicker_end - anti_flicker_start), <span style=\"color:#099\">2<\/span>) <span style=\"color:#00a\">as<\/span> average_delay_in_ms,\n<span style=\"color:#00a\">FROM<\/span> \n  milestones\n<span style=\"color:#00a\">WHERE<\/span> anti_flicker_end - anti_flicker_start 5000\n<span style=\"color:#00a\">GROUP<\/span> <span style=\"color:#00a\">BY<\/span> <span style=\"color:#099\">1<\/span>\n<span style=\"color:#00a\">ORDER<\/span> <span style=\"color:#00a\">BY<\/span> <span style=\"color:#099\">3<\/span> <span style=\"color:#00a\">DESC<\/span><\/code><\/pre>\n<\/div>\n<p>The <code>WITH...AS<\/code> block creates a source table with just the test status and the flicker start and end times in place. We can then query this common table expression (CTE) to get our counts and averages properly.<\/p>\n<p>As you can see, I have a <code>WHERE<\/code> clause in place where I make sure the delta is no more than 5000 milliseconds. This is because sometimes the experiment resulted in abnormally high deltas, probably due to the Optimize container being <em>extremely<\/em> slow to load, and thus producing the end time much later than the timeout.<\/p>\n<p>With the <code>WHERE<\/code> clause, we ignore such abnormal deltas. We can do that because we are only interested in how long the page was <em>hidden<\/em>, and if the page is hidden more than 4 seconds (and change), it\u2019s automatically revealed by the anti-flicker snippet itself.<\/p>\n<p>Anyway, this query produces the following result for my dataset:<\/p>\n<div style=\"aspect-ratio: 1018 \/ 506;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/05\/optimize-anti-flicker-snippet-test.jpg\" title=\"Anti-flicker snippet test\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"506\" width=\"1018\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/05\/optimize-anti-flicker-snippet-test.jpg#ZgotmplZ\" alt=\"Anti-flicker snippet test\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>The average time for the page to be hidden if the snippet runs into its timeout is 3.8 seconds. That\u2019s kinda weird as the timeout shouldn\u2019t happen before <code>4000<\/code> milliseconds have passed. I\u2019d dig deeper into it, but I can also just assume that all <code>timeout<\/code> occurrences were hidden the full 4 seconds nevertheless.<\/p>\n<p>When Optimize is loaded using a Google Tag Manager tag, the page is hidden for an average of 964 milliseconds. When loaded with the asynchronous inline snippet, it\u2019s hidden for 581 milliseconds by average.<\/p>\n<h2 id=\"summary\">Summary<\/h2>\n<p>It\u2019s a fairly convoluted setup, but the purpose isn\u2019t to do this for every single one of your experiments. It\u2019s to satisfy your curiosity about whether or not the anti-flicker snippet is degrading user experience or not, and this gives you just <em>one<\/em> variable to work with (average delay of page unhiding).<\/p>\n<p>It\u2019s not without its flaws &#8211; the timer starts when the anti-flicker snippet is executed at the top of <code\/>, when realistically it should only start when the page <em>would normally<\/em> produce the <strong>first visible element<\/strong> (<a href=\"https:\/\/gtmetrix.com\/blog\/first-contentful-paint-explained\/\">First Contentful Paint<\/a>).<\/p>\n<p>The analysis is also detached &#8211; just knowing the delay isn\u2019t that interesting. What would make it more significant is to see if the length of the anti-flicker effect had an impact on how the user interacts with the site. It\u2019s possible a lengthy delay in painting the page could result in the user bouncing back to the previous page, as they might assume the page does not work.<\/p>\n<p>Just to belabor the point: this article showed you a methodology you could potentially employ to measure the effect of flicker mitigation efforts in client-side A\/B-testing. The flicker <strong>is<\/strong> a problem, and knowing just how <em>much<\/em> of a problem is the first step in solving it.<\/p>\n<p>Let me know in the comments if you have suggestions for improving the experiment!<\/p>\n<\/p><\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Recently I published an article on how to set up an impact test for the \u201cflicker effect\u201d omnipresent in client-side A\/B-testing tools. Be sure to check out that article first to get some context to what we\u2019re going to be talking about here. In this short follow-up, I\u2019ll show you how to measure the average [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":88470,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12033],"tags":[43154,1781,1531,11464,43155,13597],"dealstore":[],"offerexpiration":[],"class_list":["post-88469","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","tag-antiflicker","tag-delay","tag-google","tag-optimize","tag-snippet","tag-test"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Google Optimize Anti-flicker Snippet Delay Test - Som2ny Network<\/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:\/\/fivemor.com\/?p=88469\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Google Optimize Anti-flicker Snippet Delay Test - Som2ny Network\" \/>\n<meta property=\"og:description\" content=\"Recently I published an article on how to set up an impact test for the \u201cflicker effect\u201d omnipresent in client-side A\/B-testing tools. Be sure to check out that article first to get some context to what we\u2019re going to be talking about here. In this short follow-up, I\u2019ll show you how to measure the average [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fivemor.com\/?p=88469\" \/>\n<meta property=\"og:site_name\" content=\"Som2ny Network\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-14T21:51:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/optimize-anti-flicker-snippet-test.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1018\" \/>\n\t<meta property=\"og:image:height\" content=\"506\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fivemor.com\/?p=88469#article\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/?p=88469\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\"},\"headline\":\"Google Optimize Anti-flicker Snippet Delay Test\",\"datePublished\":\"2025-02-14T21:51:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=88469\"},\"wordCount\":1594,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=88469#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/optimize-anti-flicker-snippet-test.jpg\",\"keywords\":[\"Antiflicker\",\"Delay\",\"Google\",\"Optimize\",\"Snippet\",\"Test\"],\"articleSection\":[\"Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fivemor.com\/?p=88469#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fivemor.com\/?p=88469\",\"url\":\"https:\/\/fivemor.com\/?p=88469\",\"name\":\"Google Optimize Anti-flicker Snippet Delay Test - Som2ny Network\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=88469#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=88469#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/optimize-anti-flicker-snippet-test.jpg\",\"datePublished\":\"2025-02-14T21:51:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fivemor.com\/?p=88469#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fivemor.com\/?p=88469\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/?p=88469#primaryimage\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/optimize-anti-flicker-snippet-test.jpg\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/optimize-anti-flicker-snippet-test.jpg\",\"width\":1018,\"height\":506},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fivemor.com\/?p=88469#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fivemor.com\/?bp_activities=1\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Google Optimize Anti-flicker Snippet Delay Test\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fivemor.com\/#website\",\"url\":\"https:\/\/fivemor.com\/\",\"name\":\"Som2ny Network\",\"description\":\"Daily Deals\",\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fivemor.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/fivemor.com\/#organization\",\"name\":\"Som2ny Network\",\"url\":\"https:\/\/fivemor.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"width\":300,\"height\":86,\"caption\":\"Som2ny Network\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/fivemor.com\"],\"url\":\"https:\/\/fivemor.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Google Optimize Anti-flicker Snippet Delay Test - Som2ny Network","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:\/\/fivemor.com\/?p=88469","og_locale":"en_US","og_type":"article","og_title":"Google Optimize Anti-flicker Snippet Delay Test - Som2ny Network","og_description":"Recently I published an article on how to set up an impact test for the \u201cflicker effect\u201d omnipresent in client-side A\/B-testing tools. Be sure to check out that article first to get some context to what we\u2019re going to be talking about here. In this short follow-up, I\u2019ll show you how to measure the average [&hellip;]","og_url":"https:\/\/fivemor.com\/?p=88469","og_site_name":"Som2ny Network","article_published_time":"2025-02-14T21:51:58+00:00","og_image":[{"width":1018,"height":506,"url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/optimize-anti-flicker-snippet-test.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fivemor.com\/?p=88469#article","isPartOf":{"@id":"https:\/\/fivemor.com\/?p=88469"},"author":{"name":"admin","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371"},"headline":"Google Optimize Anti-flicker Snippet Delay Test","datePublished":"2025-02-14T21:51:58+00:00","mainEntityOfPage":{"@id":"https:\/\/fivemor.com\/?p=88469"},"wordCount":1594,"commentCount":0,"publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"image":{"@id":"https:\/\/fivemor.com\/?p=88469#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/optimize-anti-flicker-snippet-test.jpg","keywords":["Antiflicker","Delay","Google","Optimize","Snippet","Test"],"articleSection":["Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fivemor.com\/?p=88469#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fivemor.com\/?p=88469","url":"https:\/\/fivemor.com\/?p=88469","name":"Google Optimize Anti-flicker Snippet Delay Test - Som2ny Network","isPartOf":{"@id":"https:\/\/fivemor.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fivemor.com\/?p=88469#primaryimage"},"image":{"@id":"https:\/\/fivemor.com\/?p=88469#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/optimize-anti-flicker-snippet-test.jpg","datePublished":"2025-02-14T21:51:58+00:00","breadcrumb":{"@id":"https:\/\/fivemor.com\/?p=88469#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fivemor.com\/?p=88469"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/?p=88469#primaryimage","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/optimize-anti-flicker-snippet-test.jpg","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/optimize-anti-flicker-snippet-test.jpg","width":1018,"height":506},{"@type":"BreadcrumbList","@id":"https:\/\/fivemor.com\/?p=88469#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fivemor.com\/?bp_activities=1"},{"@type":"ListItem","position":2,"name":"Google Optimize Anti-flicker Snippet Delay Test"}]},{"@type":"WebSite","@id":"https:\/\/fivemor.com\/#website","url":"https:\/\/fivemor.com\/","name":"Som2ny Network","description":"Daily Deals","publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fivemor.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fivemor.com\/#organization","name":"Som2ny Network","url":"https:\/\/fivemor.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","width":300,"height":86,"caption":"Som2ny Network"},"image":{"@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","caption":"admin"},"sameAs":["https:\/\/fivemor.com"],"url":"https:\/\/fivemor.com\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/88469","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=88469"}],"version-history":[{"count":0,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/88469\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/media\/88470"}],"wp:attachment":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=88469"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=88469"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=88469"},{"taxonomy":"dealstore","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fdealstore&post=88469"},{"taxonomy":"offerexpiration","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fofferexpiration&post=88469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}