Sidekick Settings

Sidekick Settings

Sidekick is the server-side page cache built into every HonestHosting WordPress Site. When it is enabled, Sidekick keeps a copy of each page WordPress renders and serves that copy to the next visitors, so most page views never have to run PHP or query the database. Cached pages are cleared automatically when content changes in WordPress (posts, comments, menus, terms), and you can clear the whole cache at any time with the icon button in the Sidekick row on the Site summary card.

Where the settings live

Every Site Type provides a set of Sidekick defaults. A Site can override individual settings: anything you do not override keeps following the Site Type, including future updates to its defaults.

To change the settings, edit the Site, turn on Sidekick Cache Enabled under Site Features, and expand the Performance Configuration section. The options are only shown while Sidekick is enabled. After saving, the platform updates the Site deployment automatically.

Sidekick is disabled by default. Turn on Sidekick Cache Enabled to start caching pages for a Site.

Settings reference

Cache rules

Setting Field in the app Default Description
enabled Sidekick Cache Enabled false Turns the Sidekick page cache on or off for the Site
cache_ttl Cache Time To Live (TTL) 300 How long a page stays cached, in seconds (60 - 86400)
cache_response_codes Cache Response Codes 2XX,301,302 Response status codes that may be cached. 2XX means any status from 200 to 299
nocache No Cache Paths /wp-admin,/wp-json,/wp-cron.php,/sitepro,/index.php/wp-json Path prefixes that are never cached, including everything beneath them (see multisite)
nocache_home No Cache Home false When true, the site root / is not cached. It applies to / only
nocache_regex No Cache Regex \.(mp4|webm|mp3|ogg|wav|pdf|zip|tar|gz|7z|exe)$ Regular expression for other paths or file types that should not be cached
nocache_query No Cache Query Parameters rest_route,unapproved,moderation-hash Query parameters that make a request skip the cache, on any path (see query parameters)
cache_key_queries Cache Key - Queries WordPress core query variables, ver, v, utm_*, gad_*, mc_cid Query parameters whose values are cached separately (see query parameters)
cache_ignore_queries Ignored Tracking Parameters gclid, fbclid, msclkid, and other click IDs Tracking parameters left out of the cache key (see query parameters)
cache_key_headers Cache Key - Headers Accept-Encoding Request headers included in the cache key. Do not change unless you understand the consequences
cache_key_cookies Cache Key - Cookies wordpress_logged_in_*,wordpress_sec_* Cookies included in the cache key (a trailing * matches by prefix). Do not change unless you understand the consequences

Size limits

Sizes use human-readable values such as 128KB, 64MB or 1GB.

Setting Field in the app Default Description
cache_memory_max_size Cache Memory Max Size 64MB Total memory the cache may use. 0 disables the memory cache
cache_memory_max_count Cache Memory Max Count 250 Maximum number of items kept in memory (100 - 100000)
cache_memory_item_max_size Cache Memory Item Max Size 128KB Largest single item kept in memory
cache_memory_stream_to_disk_size Cache Memory Stream To Disk Size 128KB Responses larger than this go straight to the disk cache instead of memory. 0 disables streaming
cache_disk_max_size Cache Disk Max Size 256MB Total disk space the cache may use. 0 disables the disk cache
cache_disk_max_count Cache Disk Max Count 1000 Maximum number of items kept on disk (100 - 100000)
cache_disk_item_max_size Cache Disk Item Max Size 10MB Largest single item kept on disk

How query parameters are handled

Every query parameter on a request (the part of the URL after ?) falls into exactly one class:

Class Setting What happens
No-cache nocache_query The request skips the cache
Cache key cache_key_queries The parameter is part of the cache key: each distinct value is cached separately
Ignored cache_ignore_queries The parameter is left out of the cache key, so those visits share the page’s cached copy
Anything else - The request is not cached. Sidekick can’t know whether the parameter changes the page, so it passes the request to WordPress without storing the response

No-cache by default (rest_route,unapproved,moderation-hash):

  • rest_route is the WordPress REST API, which WordPress serves on any URL that carries it (for example /?rest_route=/wp/v2/posts).
  • unapproved and moderation-hash are the “your comment is awaiting moderation” view WordPress shows to the person who just left a comment.

Cache key by default: the public query variables WordPress core registers (p, page_id, cat, s, paged, m, feed, orderby, post_type, the sitemap variables, and so on), so sites on plain permalinks keep caching, plus category, the asset version parameters ver and v, and the campaign labels utm_*, gad_* and mc_cid.

Full default cache key list

Ignored by default: per-click tracking IDs that are different on nearly every visit, so keying them would make every ad or email click a cache miss:

gclid,gbraid,wbraid,dclid,fbclid,msclkid,ttclid,twclid,li_fat_id,igshid,yclid,srsltid,_gl,_ga,mc_eid,_kx,_hsenc,_hsmi,mkt_tok

A few more things worth knowing:

  • A trailing * matches by prefix, so utm_* covers utm_source, utm_medium, utm_campaign, and so on.
  • If a parameter appears in both cache_key_queries and cache_ignore_queries, it is treated as a cache key.
  • * on its own in cache_key_queries caches every parameter that is not ignored, each value separately.
  • Plugin parameters (WooCommerce filters such as filter_color, lang, amp, …) are deliberately not in the defaults. Pages requested with them are not cached until you add them to cache_key_queries (see the examples below).

Adjusting list settings (+/-)

These settings are comma-separated lists:

  • nocache
  • nocache_query
  • cache_key_queries
  • cache_ignore_queries
  • cache_key_headers
  • cache_key_cookies
  • cache_response_codes

Rather than storing a full copy of the list for your Site, HonestHosting stores only your changes to the Site Type’s list. That way, when the defaults are improved later (for example, a new tracking ID is added to the ignored list), your Site picks up the change automatically while keeping your own additions and removals.

In the app

Simply edit the list. Each field shows the values currently in effect for the Site. When you save, the app compares your list with the Site Type’s list and saves only the differences, as adjustments. Type the values themselves in the field (entries cannot start with + or -). Clearing a field, or setting it back to match the Site Type’s list, removes your override.

Through the API

Sidekick overrides can be set with PATCH /v1/site/{uuid}/sidekick, or with the sidekick field of the site update endpoint (PUT /v1/site/{uuid}). See the API Reference. Values are strings, and an override for a list setting takes one of these forms:

Form Example Effect
Adjustments +filter_color,-fbclid Every entry starts with + (add the entry if missing) or - (remove it). Applied left to right to the Site Type’s value. Recommended: the Site keeps receiving future updates to the defaults
Plain list /wp-admin,/members No entry starts with + or -. Replaces the Site Type’s value entirely and will not pick up future changes to the defaults. Not accepted for nocache_query, cache_key_queries or cache_ignore_queries (the API returns 422)
* * cache_key_queries only: cache every parameter that is not ignored, each value separately
  • Mixing +/- entries with plain entries in the same value is rejected (422).
  • If the Site Type has no value for a setting, adjustments are applied to Sidekick’s built-in default instead.
  • If your adjustments remove every entry, the setting falls back to Sidekick’s built-in default rather than an empty list.

The sidekick object you send is the Site’s complete set of overrides: it replaces what is stored, and any setting you leave out goes back to the Site Type default. Include every override you want to keep, such as "enabled": "true". Sending an empty object ({}), or omitting the sidekick field from PUT /v1/site/{uuid}, removes all overrides.

For example, to keep Sidekick enabled, cache WooCommerce color filter pages, and ignore one extra tracking ID:

{
  "enabled": "true",
  "cache_key_queries": "+filter_color",
  "cache_ignore_queries": "+_branch_match_id"
}

Examples

Goal Setting Override In the app
Cache WooCommerce color filter pages cache_key_queries +filter_color Add filter_color to Cache Key - Queries
Share the cached page for a tracking ID the defaults don’t know cache_ignore_queries +_branch_match_id Add _branch_match_id to Ignored Tracking Parameters
A plugin reads fbclid on the server cache_ignore_queries -fbclid Remove fbclid from Ignored Tracking Parameters
Never cache a plugin’s API endpoint nocache_query +myplugin_api Add myplugin_api to No Cache Query Parameters
Never cache an extra private area of the site nocache +/members Add /members to No Cache Paths

A few notes on these examples:

  • -fbclid: once removed from the ignored list, fbclid falls into “anything else”, so those visits skip the cache and reach WordPress directly. Don’t add it to cache_key_queries instead: every click carries a different value, so keying it would create one cache entry per click.
  • +/members: nocache paths match by prefix, so /members also covers /members/account and /membership.

Other requests that always skip the cache

Regardless of the settings above, Sidekick never serves these from the cache:

  • Requests with an Authorization header.
  • Logged-in WordPress users, so they always see the live site.
  • Commenters who ticked “Save my name, email, and website in this browser for the next time I comment”, so they can see their own comments while they await moderation.
  • Responses that WordPress or a plugin marks as private or no-store.

For logged-in users and saved commenters, static files such as stylesheets, scripts, fonts and images are still served from the cache.

WordPress multisite

  • Subdirectory multisite: each nocache path also matches beneath one leading subsite folder, so /wp-admin covers /blog/wp-admin/... and /wp-json covers /blog/wp-json/.... On a single site, the only effect is that a path such as /news/wp-admin also skips the cache.
  • Subdomain or mapped-domain multisite works as-is: the hostname is part of the cache key.
  • nocache_home covers only the network root /. A subsite’s home page (such as /blog/) is cached normally.

Checking whether a page is cached

Sidekick adds an X-Sidekick-Cache header to its responses, which you can see in your browser’s developer tools:

Value Meaning
HIT Served from the Sidekick cache
MISS Not in the cache yet; the response has now been stored
BYPASS The request skipped the cache

Learn more

Sidekick is open source. The module’s documentation covers these topics in more depth: