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)
  • advanced ad delivery like Lazy Loading ads, Click Fraud Protection, or alternative ads for ad block users
  • ads with PHP code

By default, you only need to enable the module. Cache-busting will automatically choose the best method.

Requirements for Cache-busting

The cache-busting works with caching provided by

  • plugins like WP Rocket, WP Super Cache, or W3 Total Cache
  • hosting providers
  • services like Cloudflare.

The specific cache-busting behavior can be enabled for each placement individually.

Steps to enable Cache-busting

  • Install and enable Advanced Ads Pro
  • Enable the cache-busting module in Advanced Ads > Settings > Pro.
  • Leave the appearing options at default
  • Refresh your website’s cache
  • By default, cache-busting is only applied to placements
  • Your website’s frontend does not have any critical JavaScript errors

Cache-busting methods

Advanced Ads comes with three technically different methods for cache-busting.

  1. off
  2. passive
  3. AJAX

By default, the cache-busting option for placements is set to “auto”. This tells Advanced Ads to choose the method with the smallest impact on performance.

Cache-busting option on the placement edit page.
Find-tune cache-busting options for each placement.

Only choose another method if you know the implications of it.


Advanced Ads automatically switches off cache-busting if it is not needed. As a rule of thumb: cache-busting is not needed if you show the same ad all the time to all of your users in a given position. E.g., as soon as you show different ads to users with different devices, locations, or privacy settings then cache-busting is needed.

The cache-busting module is not needed at all if your site is not cached or you are sure to not show different ads to different users.

See also “When you can disable cache-busting” below.


Passive cache-busting loads all possible ads into the page’s HTML code and uses JavaScript to deliver the correct ad. This method is super fast, but takes more space in your HTML code and doesn’t work for all conditions.

This method is selected automatically when you show dynamic ads and AJAX cache-busting is not needed. It especially handles these cases:


AJAX cache-busting uses an AJAX call (admin-ajax.php) to load the correct ad. This needs more performance but works with all dynamic features also mentioned under “passive”.

This method is needed for ads that use

  • PHP or WordPress shortcodes, though you can disable AJAX cache-busting if the content created by PHP or shortcodes is static
  • one of the following visitor conditions: Geo-location, User Capability, User Role, Logged-In
  • the “Ad Group” ad type

When you can disable cache-busting

Cache-busting either needs more performance (AJAX cache-busting) or source code (passive cache-busting). Therefore, you should consider 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)

Cache-busting settings

You find the main settings for cache-busting under Advanced Ads > Settings > Pro > Cache Busting.

Available options for the cache-busting module.
Available options for the cache-busting module.

Default cache-busting methods

Choose the default methods based on the information under “Cache-busting methods” above.

The default options should cover the most common use cases.

You might want to disable “AJAX” as a fallback option when you experience performance issues due to many calls to admin-ajax.php.

Forcing passive cache-busting

If you enable “Force passive cache-busting” then passive cache-busting would be used also for

  • ads and groups placed without a placement,
  • single ads in placements that would normally not use cache-busting.

You can disable the latter by setting the placement’s cache-busting option to “off”.

If the ad or group needs AJAX cache-busting, no cache-busting would be used at all since only passive cache-busting can be enabled for manually placed ads and groups.

Visitor profile

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:

  • Logged-In
  • User Role
  • User Can (Capabilities)
  • BuddyPress
  • Geo-Targeting

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 you change a lot of user information, like their roles or capabilities.

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.


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 if you meet issues we are not covering here.

Compatibility warning (passive cache-busting)

The following warning in the ad parameter options of an ad might indicate a compatibility problem between the ad content and passive cache-busting.

The code of this ad might not work properly with activated cache-busting.

This might be a false positive and your ad works without problems, but if you use passive cache-busting for this ad you should check in the frontend to be sure.

A few reasons for this warning:

  • use of <?php … ?> without the PHP option enabled
  • use of invalid PHP code
  • use of unknown HTML elements. This causes most of the known false positives, though
  • use of jQuery(document).ready()
  • use of any other JavaScript variable or object defined outside of the current ad

Header-Codes (AJAX cache-busting)

Some ad networks require you to add some 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

Advanced Ads Pro might use cookies in order to send dynamic information to ads. Very restrictive types of caches might either remove those cookies in order to allow cache or set cookies that break the caching at all. Please ask the developer or your caching plugin or your hoster if you are not sure about this.

Cache-Busting in Widgets

You have to options when it comes to using cache-busting in widgets

  • Use the Sidebar Widget placement and assign it to the widget
  • Enable Advanced Ads > Settings > Pro > Cache Busting > Force passive cache-busting

Either of them will enable cache-busting for the ad(s) in the widget, when needed.

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 affect performance?

AJAX cache-busting certainly adds more weight on the server 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 to all visitors? do not cache-bust it!
  • try to combine ads and position using javascript: fewer requests mean faster page load
  • 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.

Does it contain any external JavaScript (<script src="..">)? Then it is loaded asynchronous due to browser limitations.

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.
  • check for JavaScript errors in the browser’s developer console. Those could break cache-busting too.

Issues with the AJAX call

AJAX cache-busting uses admin-ajax.php to request ads from the server. It uses the advads_ads_select action.

Advanced Ads only uses AJAX calls when needed (see above) and combines all AJAX-loaded ads into a single call. Individual calls are used when an ad is delayed (e.g., using deferred triggers for PopUp ads) or automatic ad rotations.

If you experience issues with the AJAX call then disable AJAX cache-busting as the default or fallback method under Advanced Ads > Settings > Pro > Cache Busting.

Looking for cache-busting code

When cache-busting is used for a placement, the ad’s code is not directly visible in the frontend. Instead, a placeholder is visible in the source code. This placeholder is only filled if the ad or placement conditions allow it.

The placeholder includes a random ID and class and a class based on the placement name. The prefix is derived from the ID Prefix option set under Advanced Ads > Settings > General. E.g.,

<div class="prefix-47fc157d9a98c6a5ef9fa250b5c5103b prefix-below-the-content" id="prefix-47fc157d9a98c6a5ef9fa250b5c5103b"></div>
Code language: HTML, XML (xml)

The placeholder is easy to confuse with the placement container because the latter uses the same static class derived from the placement name and a shorter ID. E.g.,

<div class="prefix-below-the-content" id="prefix-1977363758">...</div>
Code language: HTML, XML (xml)

Debug mode

Cache-busting has its own debug mode, which you can enable by adding #debug=trueto the current URL (and reload the page). The output is displayed in the JavaScript error console. If you don’t know what this means then this might be too technical for you. We are considering adding a simpler debug mode in the future.

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

When JavaScript files are minified by a script, plugin or hosting service, it might break how cache-busting works too. As a last measure, exclude the following files from minification:

  • /wp-content/plugins/advanced-ads-pro/modules/cache-busting/inc/postscribe.js
  • /wp-content/plugins/advanced-ads-pro/modules/cache-busting/inc/base.min.js
  • /wp-content/plugins/advanced-ads/public/assets/js/advanced.js