If your WordPress front-end shows blank pages while `/wp-admin` and `/wp-login.php` still load normally, the OTTO full-page cache has likely stored an empty (0-byte) response. This article shows you how to confirm the cause using response headers and restore your site immediately.

# **⚠️ What a 0-Byte OTTO Cache Response Looks Like**

A 0-byte cached response produces a specific symptom pattern you can distinguish from a PHP crash or a hosting outage:

- Every front-end URL — homepage, posts, and category pages — returns HTTP 200 with a completely blank body
- The browser shows a white or empty page with no error message and no partial content
- The WordPress admin (`/wp-admin`), login page (`/wp-login.php`), and REST API endpoints continue to load normally
- All visitors see blank pages — the issue is not limited to one browser or account

PHP errors and theme crashes typically break the admin dashboard too, or display a visible error message. A hosting outage returns a 5xx status code rather than HTTP 200. When you see HTTP 200 + blank body + working admin, check the OTTO cache first.

# **🔍 How to Confirm OTTO Cache Is Serving the Empty Response**

The `x-metasync-otto-cache` response header tells you whether OTTO served a page from its cache. A value of `HIT` combined with a blank page body confirms a 0-byte cache event.

## **Check response headers in browser DevTools**

1. Open your browser and press **F12** to open DevTools, then select the **Network** tab.
2. Load your homepage or any blank front-end URL.
3. Click the first document request in the list and open the **Headers** panel.
4. Under **Response Headers**, locate the `x-metasync-otto-cache` header.

If the value is `HIT` and the page is blank, OTTO is serving the stored 0-byte response. If the value is `MISS` or the header is absent, OTTO is not the cause — check your active theme and plugins instead.

## **Check response headers with curl**

Run the following command, replacing the URL with your site address:

`curl -sI https://yoursite.com`

Look for `x-metasync-otto-cache: HIT` and `content-length: 0` in the output. Both values together confirm the diagnosis.

# **🛠️ How to Clear the OTTO Cache and Restore Your Site**

Purging the OTTO full-page cache deletes the 0-byte entry and forces OTTO to re-cache a valid response on the next page visit. Your front-end returns to normal immediately after the purge.

## **Clear the cache from the WordPress admin**

1. Log in to `/wp-admin` — this continues to work even when the front-end is blank.
2. In the left sidebar, go to **Search Atlas** → **Settings** (OTTO cache: Clear Page Cache / Clear Post Cache / Clear all cache).
3. Click **Clear All Cache** and confirm when prompted.
4. Reload your front-end homepage to verify pages are rendering correctly.

## **Clear the cache from the Search Atlas dashboard**

1. Log in to [app.searchatlas.com](https://app.searchatlas.com) and open your site's **OTTO** workspace.
2. Go to **Settings** → **Full-Page Cache**.
3. Click **Purge Cache** and confirm. You'll see a green confirmation message when the purge completes.

After purging, OTTO re-caches a fresh response the next time each page is visited. Reload a front-end URL to confirm the blank pages are resolved.

# **💡 Why a 0-Byte Response Gets Cached**

OTTO stores the HTTP response it receives the first time it crawls a page. If that initial response is empty — due to a conflict at that exact moment — the empty response is stored and served to every subsequent visitor until the cache is cleared.

Common triggers include:

- **Page builder initialization failure:** Plugins like Elementor Pro can output a blank body if a license check or asset load fails at the moment OTTO first crawls the page.
- **Theme activation during cache warm-up:** Activating or switching a theme (such as Hello Elementor) while OTTO is building its cache can cause an empty response to be stored.
- **Managed hosting server rules:** Hosts like WP Engine apply server-level request filtering that can interfere with OTTO's cache-crawl requests and produce a 0-byte response.
- **Plugin deactivation while cache is live:** Deactivating a plugin that a cached page depends on causes the page to render blank, which OTTO then re-caches as valid content.

# **⚙️ How to Prevent Future 0-Byte Cache Events**

Follow these practices to reduce the risk of OTTO caching an empty response:

- Clear the OTTO cache **before and after** any theme change, major plugin update, or hosting migration.
- After any maintenance window, reload a front-end page and confirm that `x-metasync-otto-cache` shows `HIT` with visible content — not a blank page.
- Exclude pages that rely on external license checks or volatile dynamic content (steps below).

## **Exclude specific pages from the OTTO full-page cache**

If a specific page repeatedly triggers empty-cache events, exclude it so OTTO always serves it dynamically:

1. In `/wp-admin`, go to **Search Atlas** → **Settings** (OTTO cache) → **Exclusions**.
2. Enter the URL path (e.g., `/checkout` or `/my-account`) in the **Excluded URLs** field.
3. Click **Save**. OTTO bypasses the cache for those paths and serves them fresh on every request.

Excluded pages are always served dynamically and are not affected by future 0-byte cache events.

**🎯 You can now confirm a 0-byte OTTO cache event using the `x-metasync-otto-cache: HIT` header, restore your site by purging the cache from `/wp-admin` or the Search Atlas dashboard, and reduce recurrence by clearing the cache around theme and plugin changes. For more on configuring OTTO's caching rules, see the OTTO Full-Page Cache Settings article.**