# Find out why WordPress pages are not cached with ChatGPT dots

> Finding out why pages are not cached with ChatGPT dots means letting an always-on dot watch your xSpeed hit ratios through xSpeed Hub, and having it read the health checks and benchmark history when one of them falls.

Page: https://xspeedcache.com/agent/chatgpt-dots/troubleshoot-cache/
Last updated: October 2026

A dot keeps working after you close the chat, and that changes how this job starts. You do not wait for a visitor to complain. You ask your dot once, in plain words, for a weekday check of every site, and it posts a short report in the conversation each morning. The xspeedhub app it uses is the developer-mode app you created for ChatGPT, shared through the plugin settings, so the dot reaches the same sites your chats do. One morning the report says blog fell from 78% to 31% overnight, and that is where the troubleshooting begins.

The dot works through the reads. get_cache_status confirms that page caching is still on. get_health shows every environment check passing, and its hourly buckets show the misses starting in the early hours. get_benchmark_history puts past benchmark runs and settings changes on one timeline, and that is where the cause shows: an exclusion pattern for the category archives was added the evening before, and those archives carry most of the blog's traffic. The cached request still hits, so caching works; it no longer covers those pages. xSpeed's own docs call exclusions a safety tool, not a tuning knob, because every pattern is a page rebuilt on every visit. The dot names the change and its time. It does not undo it, because editing exclusions is a settings change and the check was written as report only.

Your dot follows OpenAI's defaults for which actions need approval, and Custom rules let you change that for an action you describe: Take action without asking, Take action if pre-approved, Ask before taking action, or Hand off to you. A diagnosis is reads, so it can run in the background. Turning caching back on, or emailing xSpeed support when nothing explains a drop, is different, and a rule set to Ask before taking action makes the dot stop and ask you in the conversation. OpenAI says background work follows the same action rules, so a rule you write once also covers the scheduled run.

## Set up ChatGPT dots once

### 1. Put your sites in xSpeed Hub

Sign in at app.xspeedcache.com with Google or email; the Hub is free and has no site cap. Then connect each WordPress site from its own dashboard: click Connect Hub in the xSpeed Cache top bar, then Connect via xSpeed Hub. Each site needs the free xSpeed Cache plugin.

### 2. Create the xspeedhub app in ChatGPT

In ChatGPT on the web, turn on Developer mode under Settings, Security and login. Open Plugins, select the plus button and create a developer-mode app named xspeedhub with this URL and OAuth. Click Scan Tools, approve access on the xSpeed Hub page that opens, then click Create. If ChatGPT already has the app, skip this step. On a Business workspace only an admin or owner can turn on developer mode and publish the app.

```
https://app.xspeedcache.com/xspeed/mcp
```

### 3. Check that your dot can see it

OpenAI says plugin permissions are shared across dots and ChatGPT. Open your dot's profile, then Customize and Plugins, and check that xspeedhub is there. That screen uses the shared ChatGPT settings, and OpenAI notes the apps available to a dot may differ, so confirm it before you hand over a task.

```
Dot profile  >  Customize  >  Plugins  >  xspeedhub
```

### 4. Add a custom rule for site changes

Under Customize, Custom rules, describe the action and pick a behavior: Take action without asking, Take action if pre-approved, Ask before taking action, or Hand off to you. Add a rule that covers purging a cache, changing settings or running a speed test through xSpeed Hub, and choose Ask before taking action.

```
Customize  >  Custom rules  >  xSpeed Hub changes: Ask before taking action
```

Full setup: https://xspeedcache.com/agent/chatgpt-dots/

### Before you send a prompt that changes something

Reads change nothing on your sites, though contact_support emails xSpeed support. Writes run once your connection allows them, so your client's approval prompt and a read-only connection (the token's Read-only everywhere switch, or a Viewer sign-in) are the gates that matter. In a ChatGPT chat, write actions from a developer-mode app need your confirmation by default, and ChatGPT treats a tool without a read-only annotation as a write. xSpeed Hub's tools carry no such annotation. A dot comes with OpenAI's defaults for which actions need approval, and Custom rules let you set, for an action you describe, Take action without asking, Take action if pre-approved, Ask before taking action or Hand off to you. xSpeed Hub has no confirmation step of its own, so a rule that lets your dot act without asking runs a purge or a settings change as soon as your connection allows writes. Keep xSpeed Hub changes on Ask before taking action. For read-only access, sign in as a Viewer member of the workspace; the connection token's Read-only everywhere switch does not apply, because the app signs in with OAuth.

## Prompts

- Every weekday at 8:00, use xSpeed Hub to read the cache status of every site and post any site whose hit ratio fell by more than 20 points. Report only.
- Using xSpeed Hub, read the benchmark history for blog and tell me which settings change lines up with the drop.
- With xSpeed Hub, run the health report on blog and quote any warning word for word. Do not change anything.

## Example session

```
You: Using xSpeed Hub, find out why blog dropped to 31% in this morning's check. Report only.
  → get_cache_status(site: blog) [read-only]: page cache on, 212 cached pages, hit ratio 31% in the last 24h
  → get_health(site: blog) [read-only]: all environment checks pass; hourly misses rise from 02:00
  → get_benchmark_history(site: blog) [read-only]: 3 runs, cached request a hit each time; settings change Oct 4, 21:40: exclusion pattern /category/ added
Agent: Caching works: every benchmark run hit. The drop lines up with a settings change last night, when the category archives were excluded from the cache, and they carry most of the traffic. If that was not intended, remove the pattern in the cache settings. I changed nothing.
```

## How it works

1. **Start with the quick summary**: get_cache_status returns whether page caching is on, the stats (cached pages, size, hit ratio, last purge) and the web server xSpeed detected. It is a glance. If caching is off, or the hit ratio is far below what you expect, the agent moves on to the diagnostic.
2. **Run the diagnostic**: get_health is the tool for troubleshooting. It returns the environment checks with pass or warn tones (the advanced-cache.php drop-in, the WP_CACHE constant, rewrite rules, PHP and WordPress versions, caching plugin conflicts), the cache stats, 24 hourly hit and miss buckets and a 30-day hit-ratio series. The Hub tells the agent to use it, not get_cache_status, when you are troubleshooting rather than glancing.
3. **Time cached against uncached**: run_benchmark requests the home page once with the cache bypassed and once normally, after a warm-up request, and returns the timings. If the second request still is not a cache hit, the page cache is not serving the home page, and the result says so. It measures xSpeed's own response time. It does not return a Lighthouse score.
4. **Read what the checks mean**: A warn is a lead, not always a fault. A static-file rewrite warning, for example, can mean the nginx snippet is not in your server config yet, or that xSpeed could not verify it, which is not evidence the config is wrong. The agent reads the detail line and tells you which one it is.
5. **Fix it or hand it over**: If caching is simply off, toggle_cache turns it on. If another caching plugin owns the drop-in, the site refuses to enable xSpeed and says why; removing the other plugin is yours to do. If nothing explains it, contact_support emails xSpeed support with the agent's summary, after the agent has confirmed the message with you.

## Reference

| | |
| --- | --- |
| Quick check | get_cache_status (read): cache on or off, stats, detected web server |
| Diagnostic | get_health (read): environment checks, 24 hourly buckets, 30-day hit-ratio series, recent activity |
| One site per call | get_health does not accept site: "all"; call it for each site you care about |
| Benchmark | run_benchmark (read): home page only, cache bypassed against cache served, timings in milliseconds |
| Benchmark on every site | run_benchmark accepts site: "all" or a list of handles, one result per site |
| Benchmark history | get_benchmark_history reads past runs and the settings changes on the same timeline |
| Pro suggestions | get_pro_audit (read): which Pro features would help this site, from its settings and stats |
| Hit ratio scope | Counts requests that reach your server; pages answered by a CDN or Cloudflare edge are not counted |
| Support | contact_support emails xSpeed support with your account email and site list attached; classed read |
| Turning caching on | toggle_cache (write); refused by the site when another plugin owns the cache drop-in |

## Rules

- Diagnose with the read tools first. get_cache_status, get_health, run_benchmark and get_pro_audit change nothing on the site, so a read-only connection can run all of them. For clients that send the connection token, that means Read-only everywhere on; an OAuth sign-in gets the scopes the client asks for, unless the member is a Viewer.
- Do not answer a PageSpeed question with run_benchmark. It measures cached against uncached response time and returns no Lighthouse score; for a score, use the speed test or scan jobs.
- toggle_cache is a write. It runs as soon as your connection allows writes, and the Hub tells the agent to confirm the target site first. That is guidance to the agent, so your client's approval prompt is the gate that matters.
- contact_support sends a real email. The Hub tells the agent to confirm the message with you before sending, but the tool is classed read, so even a read-only connection can send one.
- The agent cannot edit your server configuration or another plugin's settings. When a check needs an nginx snippet or a conflicting plugin removed, it tells you what to do and you do it.

## Good to know with ChatGPT dots

Two things keep a dot's troubleshooting honest. First, the Custom rule has to name the actions you mean. Describe turning caching on or off and emailing xSpeed support explicitly. contact_support is classed as a read by the Hub, so a Viewer sign-in does not stop it, and the Hub's request that the agent confirm the message with you is guidance to the model, not a lock. Second, the hit ratio counts only requests that reach your server, so behind a CDN a low figure can be a counting effect; ask the dot to quote the benchmark next to the ratio in every report. Dots are also limited by plan: OpenAI lists Pro outside the EEA, Switzerland and the UK, Business Premium, and a beta on Enterprise, Edu and Healthcare.

## More prompts for this job

They work in any client connected to xSpeed Hub.

- Using xSpeed Hub, why is the cache hit ratio so low on shop? Run the full health check and tell me the most likely cause.
- Using xSpeed Hub, is page caching actually working on blog? Benchmark cached against uncached and tell me if the second request was a hit.
- xSpeed Hub's get_health on docs shows a warning about the static-file rewrite. What does it mean and do I need to act?
- Use xSpeed Hub to check whether another caching plugin is conflicting with xSpeed on shop.
- Caching looks off on the staging site. Use xSpeed Hub to turn it on and tell me if the site refuses.
- Using xSpeed Hub, which Pro features would help the shop site, based on how it is set up now?
- With xSpeed Hub, compare the last few benchmark runs on blog and tell me whether my settings changes helped.

## Frequently asked questions

### Can a ChatGPT dot keep an eye on my WordPress cache hit ratio?

Yes. Ask your dot in plain words for a recurring check and it posts the results in the conversation. The Hub has no scheduler for agent prompts, so the schedule is the dot's. Word it as report only, so a scheduled run reads cache status and health and changes nothing.

### Will my dot email xSpeed support on its own?

It can if your rules let it act without asking. contact_support sends a real email and the Hub classes it as a read, so a read-only sign-in does not block it. Add a Custom rule that sets emailing xSpeed support to Ask before taking action.

### Why are my WordPress pages not being cached?

The common causes are that page caching is switched off, the advanced-cache.php drop-in or the WP_CACHE constant in wp-config.php is missing, another caching plugin owns the drop-in, or the pages set cookies or headers that make them uncacheable. An agent can read all of these from get_health through xSpeed Hub and tell you which one applies to your site.

### What is the difference between get_cache_status and get_health?

get_cache_status is a quick summary: whether caching is on, the stats and the detected web server. get_health is the diagnostic. It adds the environment checks with pass or warn tones, 24 hourly hit and miss buckets and a 30-day hit-ratio series. The Hub tells the agent to use get_health when you are troubleshooting.

### Does run_benchmark give me a PageSpeed score?

No. run_benchmark measures how fast your own cache answers compared with an uncached request for the home page. For a Lighthouse score, ask for a speed test or a speed scan instead.

### Can the agent check every site at once?

Only partly. run_benchmark accepts every site in one call. get_cache_status and get_health take one site per call, and get_health does not accept site: "all", so for a fleet the agent calls them site by site or you use the Hub dashboard for the rollup.

### Will troubleshooting change anything on my site?

Not with the diagnostic tools. They are read tools and change nothing. Changes only happen if the agent calls a write tool such as toggle_cache, which runs once your connection allows writes, so your AI client's approval prompt and a read-only connection (the connection token with Read-only everywhere on, or a Viewer sign-in) are the gates.

## Find out why pages are not cached with other agents

[Claude Code](https://xspeedcache.com/agent/claude-code/troubleshoot-cache/) · [Claude](https://xspeedcache.com/agent/claude/troubleshoot-cache/) · [Claude Cowork](https://xspeedcache.com/agent/claude-cowork/troubleshoot-cache/) · [ChatGPT](https://xspeedcache.com/agent/chatgpt/troubleshoot-cache/) · [Codex](https://xspeedcache.com/agent/codex/troubleshoot-cache/) · [Cursor](https://xspeedcache.com/agent/cursor/troubleshoot-cache/) · [GitHub Copilot in VS Code](https://xspeedcache.com/agent/github-copilot/troubleshoot-cache/) · [Windsurf](https://xspeedcache.com/agent/windsurf/troubleshoot-cache/) · [Gemini CLI](https://xspeedcache.com/agent/gemini-cli/troubleshoot-cache/) · [Antigravity](https://xspeedcache.com/agent/antigravity/troubleshoot-cache/) · [Zed](https://xspeedcache.com/agent/zed/troubleshoot-cache/) · [Kiro](https://xspeedcache.com/agent/kiro/troubleshoot-cache/) · [OpenCode](https://xspeedcache.com/agent/opencode/troubleshoot-cache/) · [OpenClaw](https://xspeedcache.com/agent/openclaw/troubleshoot-cache/) · [Hermes Agent](https://xspeedcache.com/agent/hermes-agent/troubleshoot-cache/) · [Grok Build](https://xspeedcache.com/agent/grok-build/troubleshoot-cache/) · [Grok](https://xspeedcache.com/agent/grok/troubleshoot-cache/) · [Grok Bot](https://xspeedcache.com/agent/grok-bot/troubleshoot-cache/) · [Muse](https://xspeedcache.com/agent/muse/troubleshoot-cache/) · [Manus](https://xspeedcache.com/agent/manus/troubleshoot-cache/) · [Kimi Code](https://xspeedcache.com/agent/kimi/troubleshoot-cache/) · [Paperclip](https://xspeedcache.com/agent/paperclip/troubleshoot-cache/) · [NanoClaw](https://xspeedcache.com/agent/nanoclaw/troubleshoot-cache/)

## More with ChatGPT dots

- [Purge the WordPress cache with ChatGPT dots](https://xspeedcache.com/agent/chatgpt-dots/purge-cache/)
- [Scan a website for speed problems with ChatGPT dots](https://xspeedcache.com/agent/chatgpt-dots/speed-scan/)
- [Run and track PageSpeed tests with ChatGPT dots](https://xspeedcache.com/agent/chatgpt-dots/pagespeed-tests/)
- [Raise a WordPress site's PageSpeed score with ChatGPT dots](https://xspeedcache.com/agent/chatgpt-dots/optimize-site/)
- [Tune WordPress cache settings with ChatGPT dots](https://xspeedcache.com/agent/chatgpt-dots/cache-settings/)
- [Warm the WordPress cache with ChatGPT dots](https://xspeedcache.com/agent/chatgpt-dots/preload-cache/)
- [Set up the Redis object cache with ChatGPT dots](https://xspeedcache.com/agent/chatgpt-dots/object-cache/)
- [Manage Cloudflare caching with ChatGPT dots](https://xspeedcache.com/agent/chatgpt-dots/cloudflare/)
- [Manage every WordPress site at once with ChatGPT dots](https://xspeedcache.com/agent/chatgpt-dots/fleet/)

## Documentation

- How to read your cache diagnostics: https://xspeedcache.com/docs/cache-diagnostics/
- Understanding cache hits and misses: https://xspeedcache.com/docs/hits-and-misses/
- How to check your site health: https://xspeedcache.com/docs/health/
- Common problems and troubleshooting: https://xspeedcache.com/docs/common-problems-and-troubleshooting/
- How to enable Page Cache: https://xspeedcache.com/docs/page-cache/
