The cache-busting in Advanced Ads Pro is needed on cached websites that serve ads with dynamic features like:
- rotate ads in the same group
- show different ads to different users (e.g. based on browser width, device or referrer)
- ads with PHP code
The cache-busting works with caching that is either provided by a caching plugin (e.g. WP Rocket, WP Super Cache or W3 Total Cache) and with cache set up by your hosting provider or through Cloudflare.
Cache-busting can be enabled for each placement individually.
Table of Contents
Passive, AJAX or no cache-busting?
There are two cache-busting methods, passive and AJAX.
AJAX cache-busting uses an AJAX call to load the correct ad. This takes a bit more performance but works with all dynamic features.
While the best choice in many cases is to keep the cache-busting setting of a placement on auto and use passive cache-busting as the default method, knowing about the advantages and disadvantages of each method might help you to make a better choice for your specific case.
|no cache-busting||fast, no script conflicts||ad rotations, PHP output and visitor conditions are cached and might not work properly|
|AJAX cache-busting||most flexible and reliable cache-busting method|
little extra output in the frontend
|conflicts with ad codes that don’t support AJAX requests|
extra call to WordPress
|passive cache-busting||loads ads as fast as without cache-busting|
performs check in the browser, not on your server
not possible with all visitor conditions (see below)
conflicts with complex ad codes
Go with the default settings
If you are using the default cache-busting options including the auto option in the placement settings then you are probably fine. Advanced Ads only uses cache-busting if needed and will switch it off to save performance when all of these conditions are met:
- only one ad is displayed (single ad selected or an ad group with only one ad inside)
- no visitor condition is selected
- no PHP or shortcode is used
- no ad group ad type used
- not using the Privacy module
The next method (passive or AJAX) will be selected based on the main settings (see below).
When to disable cache-busting
Cache-busting either needs more performance (AJAX cache-busting) or source code (passive cache-busting). Therefore, you should consider to not using it in some cases, e.g.
- you have so many different pages, that despite caching, the ads in a rotation are delivered equally
- your PHP output is static, e.g. echo “hello”;
- you only use visitor conditions for visitors that don’t use caching (e.g. admins)
Features that don’t work with passive cache-busting
- user capability, user role, and logged-in visitor condition
- the geolocation condition
- using PHP or a shortcode in the ad code
- using the ad-group ad type
You can change the fallback method (AJAX cache-busting or no cache-busting) in the main options.
Features that need cache-busting
Our cache-busting technology allows us to built amazing features on top of it. So it is needed as a basis for these features:
- lazy load for ads
- auto-refreshing ad groups
For some visitor conditions, Advanced Ads cache-busting falls back to an AJAX request. Since AJAX requests need additional performance on the server and show up with a delay, we try to reduce them as much as possible. This is why we store the information retrieved through AJAX in the user’s browser.
Visitor conditions that make use of this feature are:
- User Role
- User Can (Capabilities)
The visitor information is stored in a cookie. When the cookie exists and is valid, cache-busting doesn’t need an AJAX request for those visitor conditions where it normally does, e.g. geo-targeting.
Advanced Ads determines automatically when a cookie refresh is needed, e.g., when an ad uses a condition that wasn’t used before by any ad. You can also use the Update user profile button on Advanced Ads > Settings > Pro to force an update. This might be needed when are updates user information somewhere else, e.g., changed roles for some users.
The default cookie expiry is set to 30 days. You can change this period by adding the ADVANCED_ADS_PRO_USER_COOKIE_MAX_AGE constant with the duration in seconds to your wp-config.php file.
define( 'ADVANCED_ADS_PRO_USER_COOKIE_MAX_AGE', 604800 ); // cookie expiry in 7 days
You can set this constant to 0 in order to disable the cookie.
By adding #debug=true to the URL you can see a readable output of the cookie in the browser console.
There is still an AJAX request when using our Tracking with an appropriate method enabled.
In order to use cache-busting, you would need to
- install and enable the Advanced Ads Pro add-on
- enable the cache-busting module in Advanced Ads > Settings > Pro.
- leave the appearing options at default (see above for adjustments)
- refresh your website’s cache
Cache and cache-busting are very advanced features and it is possible that some plugins and servers use too restrictive settings. Please let us know about it.
Compatibility warning (passive cache-busting)
The code of this ad might not work properly with activated cache-busting.
- use of <?php … ?> without the PHP option enabled
- use of jQuery(document).ready()
Header-Codes (AJAX cache-busting)
Some ad networks require you to add come extra code into the <head> section of your theme. Delivering these kinds of tags with cache busting might result in problems with your ad networks. We also lack a use case in which such dynamic header codes are needed, so please let us know if you have one.
You must not include ads between wp_head() and the </head> tag.
Caching and Cookies
Cache-Busting in Widgets
In order to use cache-busting in widgets, you need to use the Sidebar Widget placement.
Only this placement type can be selected in the Advanced Ads widget and also the cache-busting setting will be honored.
No cache-busting within Feed or external sites
If you send out a feed or your content is promoted on external sites, cache-busting is not working and will fall back to not display the ad at all. If you want to display ads within your feed, rather create another ad with the appropriate display conditions.
Other questions about AJAX cache-busting
How does cache-busting effect performance?
Ajac cache-busting certainly adds more load to the backend as the number of requests is increased.
To avoid issues with your provider and load times you should:
- use passive cache-busting whenever possible
- not use cache-busting on static positions: does a placement only serve a single ad and for any request? do not cache-bust it!
- use persistent object cache plugins like W3 Total Cache or em-object-cache to avoid excessive database load
- bypass proxies for AJAX calls (especially the /wp-admin/admin-ajax.php path)
Does cache-busting work for all ads?
There are some issues with ad-codes that try to include multiple external scripts at once (<script src=”..”>).
Please split those into multiple ads or do not use cache-busting on them.
You must not include ads between wp_head() and the </head> tag.
How are cache-busted ads loaded?
The ad content is retrieved from the backend and analyzed.
Otherwise, ads block page load until they are loaded.
How to force asynchronous loading with cache-busting
Add the async parameter to the <script> tag like with <script async>.
My ads are loaded asynchronous (sometimes) but should be blocking!
Due to browser limitations, there is a forced switch to load any ad asynchronous while an external script is included.
You certainly have a <script src=”..”> loaded before your ad.
If possible add async (see above) to the troublesome ad or do not use cache-busting for it if possible.
While reading the Limitations & FAQ section might help to fix issues as well, here are a few quick ideas to check in case Cache-Busting doesn’t seem to work for you:
- cache-busting also changes some markup in the frontend, so be sure to clear your cache after you changed cache-busting options or setup.
- cache-busting only works when the ad or group is displayed using a Placement.
The debug output contains information about cache-busting (AJAX and passive), site setup and which ads are loaded. That helps us to understand your setup without a login. No data is visible that other parties couldn’t also see without debug mode.
JS file Minification