> ## Documentation Index
> Fetch the complete documentation index at: https://help.noxity.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Caching

> Full-page caching, mobile and user separation, preloading, and the advanced rules for excluding specific URLs, cookies, and user agents.

Caching is AccelerateWP's headline feature. When enabled, the first visitor to a page generates a static HTML copy; every visitor after that gets the static copy until the cache is invalidated. The result: WordPress only does its full PHP/MySQL render once, not on every hit.

This page covers everything under the **Cache** group of toggles.

## Full-page caching

Toggle: **Cache enabled**.

When on, AccelerateWP caches every public-facing page response. WordPress's own cache plugin hooks (e.g., `wp_cache_*`) are bypassed in favor of the file cache.

Cached pages are invalidated automatically when:

* A post or page is created, updated, or deleted.
* A comment is approved (which would change the page).
* A WordPress option that affects display is changed.
* The cache lifetime expires (default: 24 hours).

Manual cache purge: from your WordPress admin, click **Purge Cache** in the top admin bar (the Must-Use plugin adds it). Or from cPanel, click **Clear Cache** on the AccelerateWP page.

<Tip>
  After installing or updating a plugin that changes front-end output, purge the cache. AccelerateWP catches most cases automatically, but plugins that modify content via filters might not trigger the invalidation.
</Tip>

## Mobile cache

Toggle: **Separate cache for mobile devices**.

When on, AccelerateWP keeps two cached copies of every page: one for desktop, one for mobile. Useful when:

* Your theme renders different markup based on `wp_is_mobile()` or similar.
* A plugin adds mobile-only widgets.
* You serve different ads or banners on mobile.

When off, both desktop and mobile visitors share the same cached response, which is fine for fully responsive sites that render identical HTML.

## User cache

Toggle: **Separate cache for logged-in users**.

When on, logged-in WordPress users see a per-user cached version (so their dashboard widget, cart count, or "Welcome, Alex" banner doesn't leak across users). Anonymous visitors share one common cached response.

When off, logged-in users skip the cache entirely and get a live render every time. Sites with a small number of admins usually leave this off; sites with many subscribers (membership sites, learning platforms) should turn it on.

## Preload

The Preload section warms the cache so the *first* visitor to a page also gets a fast response.

| Toggle                    | What it does                                                                                                                       |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| **Preload Cache**         | After publishing or updating a post, AccelerateWP visits the page itself to warm the cache.                                        |
| **Preload Links**         | Adds Instant.page-style hover preloading. When a visitor hovers a link, the next page's HTML is fetched in the background.         |
| **Prefetch DNS Requests** | Adds `<link rel="dns-prefetch">` tags for external domains (Google Fonts, YouTube, your CDN). Browser starts the DNS lookup early. |
| **Preload Fonts**         | Adds `<link rel="preload">` tags for above-the-fold fonts so they don't block first paint.                                         |

Preload Cache is the most useful toggle. The others are micro-optimizations that help on bandwidth-constrained connections.

## Advanced rules

The escape hatch when caching breaks something. All of these are textareas that take one URL/cookie/user-agent per line.

### Never Cache URLs

URLs (or path patterns) that should always render live, never from cache.

Common entries:

```
/cart
/checkout
/my-account/(.*)
/wp-admin/(.*)
/wp-login.php
```

WooCommerce ships with sensible defaults. Add custom URLs for any flow that depends on session state.

### Never Cache Cookies

If a cookie is present in the request, skip the cache for that request.

```
wordpress_logged_in
wp-postpass
woocommerce_cart_hash
```

WordPress's standard logged-in cookie is already in the default exclusion list. Add custom membership cookies, paywall cookies, or A/B-test cookies here.

### Never Cache User Agents

Skip the cache for specific user agents. Common entries:

```
mobile
android
iPhone
```

Most sites should leave this empty. Use only when a specific bot or testing tool needs to bypass the cache.

### Always Purge URLs

URLs that should be flushed whenever any post is updated. Useful for category archives or custom indexes that don't auto-purge.

```
/blog/
/news/
/category/(.*)
```

### Cache Query Strings

By default AccelerateWP strips query strings from cache keys (so `/post?utm_source=foo` and `/post?utm_source=bar` share one cache entry). List query string parameters here that should be part of the cache key.

```
filter
sort
page
```

Set these for sites where filters change content (faceted search, paged listings).

## Common issues

<AccordionGroup>
  <Accordion title="Visitors see other users' cart contents">
    User cache is off, and your theme is rendering cart content directly into the cached HTML. Either turn on **Separate cache for logged-in users**, or add `/cart` and `/checkout` to **Never Cache URLs**.
  </Accordion>

  <Accordion title="Cache doesn't invalidate after publishing a post">
    Either Preload Cache is off (in which case the cache eventually expires by TTL but isn't refreshed immediately), or your post is being published via a non-standard path (REST API, an automation plugin) that doesn't fire the WordPress hooks AccelerateWP listens to. Add the affected URLs to **Always Purge URLs**.
  </Accordion>

  <Accordion title="Logged-in users see anonymous-cache content">
    The WordPress logged-in cookie isn't being set in a way AccelerateWP recognizes (custom auth plugin, headless setup). Add your custom auth cookie name to **Never Cache Cookies**.
  </Accordion>

  <Accordion title="Pages render with stale CSS or JS after a deploy">
    Either AccelerateWP's cache is serving the old HTML with the old asset URLs, or the browser cache is serving old assets. Hit **Clear Cache** in cPanel and hard-refresh (Cmd-Shift-R / Ctrl-F5). For a permanent fix, add a version query string to your asset URLs in the theme.
  </Accordion>
</AccordionGroup>

## Need a hand?

<CardGroup cols={2}>
  <Card title="Open a ticket" icon="life-ring" href="https://members.noxity.io/submitticket.php">
    Best for anything that needs an account check or a config change on our end.
  </Card>

  <Card title="Live chat" icon="messages" href="https://noxity.io/contact">
    Faster for quick questions during business hours.
  </Card>
</CardGroup>
