Troubleshooting guide · website-errors · Published 2026-08-15 · 4 min read
Website loads but shows a blank page
Website blank page explained: tell a 200 with empty output from a 200 with hidden content, then fix the render or the source in order.
- ·200 with nothing
- ·Server side
- ·Client side
The 200 with nothing
A blank page is not the same as a not loading site. Here the request completes, the server answers HTTP 200, and the body renders nothing to the visitor. The blank page is a different failure from DNS and network errors (website-not-loading).
The first probe decides the branch in one command:
curl -sI https://example.com/page
A 200 with a normal size body but a white screen means the HTML is there and the browser renders it empty. A 200 with a tiny body, or a 204, means the server delivered nothing at all.
| Response | Size | Cause family |
|---|---|---|
| 200, full size, blank | Large | CSS hides content, JS removes it |
| 200, small body | Small | Empty template, partial render |
| 200, zero body | 0 | Broken output, fatal caught |
| 204, then blank | 0 | Server sent nothing on purpose |
When the HTML is present
If curl https://example.com/page returns the full HTML with text in it, the browser has the material and is not showing it. Check in order:
- Open the page source. If the text literally sits in the HTML, apply the server-side fix route described below. If the text appears only after scripts run, the cause is client-side; continue with the checks below.
- Disable JavaScript. The blank page often turns back to its content once JavaScript is off; that points to a script that runs on load and hides a container, such as a widget that fails and empties the document. Disable JavaScript in the browser tools to confirm.
- Check the console. An uncaught exception before the first paint can set
document.bodyto nothing in some frameworks. - Inspect the CSS. A
display:noneon the body or a 0-height container hides the render while the server still returns the bytes.
When the server sends nothing
A 200 that returns an empty body is an output problem at the source. The usual stories:
- A PHP script that dies before printing, with error reporting off, so the raw output is zero.
- An empty template or a partial that swallows content that never got populated.
- A page template that calls a helper with no result, e.g. the loop is empty and nothing prints.
- A framework SSR that failed after commit, leaving the shell blank.
The fix trail is to reveal the error:
- Turn on logging and error report. WordPress exposes it with
WP_DEBUGtrue, and other stacks with their own flags. - Read the access log for that URL: status is 200, but a repeating 500 pattern nearby points to that page's render.
- View source from the server rather than the browser.
curl -vs https://example.com/page 2>&1 | head -40prints the first bytes and shows exactly where the output stops. PowerShell:curl.exe -vs https://example.com/page 2>&1 | Select-Object -First 40. - Test a known-good page on the same server. If only one page is blank, the template is the fault; if the whole site is blank, the shared layout or the theme is.
Content providers
A page that loads blank can also be caused by content layers, not code:
- A CDN or cache served a stale empty copy. Purge it and fetch in a private window.
- The page is behind a login or a cookie. The 200 body is an empty shell that renders once the JS checks the session.
- A plugin or extension in the CMS writes whitespace or BOM before the header, so the output outside the HTML breaks.
Prevention
- Set the theme and app to always print a minimum text, e.g. a doctype plus a
<noscript>with a message, so an empty body is impossible and the next error is visible. - Add a smoke check that asserts the HTML contains the expected text and a minimum size after every build.
- Route the blank page through a monitor that catches 200-with-empty as a separate class, because it is silent in uptime checks that only test 200.