CrawlCheck

Findings · 2026-09-17 · By

A 200 status hid an empty page for weeks

One of our own internal pages returned HTTP 200 while showing a single apology sentence instead of its content. Every check we ran passed, because none of them read the page.

For weeks one of CrawlCheck's own internal pages returned HTTP 200 while showing a single apology sentence where its content should be. An error inside the page was caught and replaced with fallback text, so the status never changed. Uptime pings, status codes and a syntax check all passed, because none of them read the page. A 200 tells you the server answered, not that the page works. Add at least one check that opens the rendered page and confirms the content you expect is there, especially on pages behind a login.

One of our own internal pages had been showing a single sentence where its content should be: The control panel could not be built this time. Every request for it returned HTTP 200. We found it only because two rows we added did not appear.

What was wrong? #

A part of the page failed when it ran. The failure was caught, the whole page body was swapped for a polite apology, and the response went out as a success. Catching the error was reasonable on its own: one broken part should not take a page down. Catching it around the entire page turned a loud failure into a silent one.

Why did every check say the page was fine? #

Because each check measured the response, not the content. The header, navigation and layout all rendered. Only the content was missing, and nothing looked for it.

CheckWhat it confirmedResult while the page was empty
Uptime pingThe page answersPass
Status code200, not an errorPass
Syntax checkThe code is validPass
Anything reading the rendered page—Did not exist

It is the same shape as our proof files that said pending: the monitoring confirmed a job ran, and nothing opened the result.

What changed? #

The failing part was fixed, and it now loses only its own section when its input is missing, so the worst case is an empty table rather than an empty page. We have not established the date the fault started and do not claim one. No records were lost; they were being written correctly and simply could not be displayed.

What should a site owner take from it? #

If your site catches errors and shows fallback content, something has to record that it happened, because the whole point of the fallback is to keep the status code at 200. A log line or a counter is enough. Then add one check that loads the page and looks for a word that must be there. Our guide to what a 200 can hide covers the crawler side of the same problem, and why audits go stale covers why a page that was fine once needs checking again. The free scan treats a 200 with the wrong content as a finding, not a pass.

The main product

Found this on your own site? We fix it for $100.

Scan free to see where you stand. The fix is one site, every finding implemented and re-measured, with a sealed before and after.

Free browser extension

Check this on any site you open, without leaving the page.

CrawlCheck for Chrome grades every site you visit A–F and shows, from your own browser, what search engines and AI assistants are actually served. Free, no account.

Questions this post answers

Was any customer data affected?

No. The page only displays records, and those records were being written correctly the whole time. Nothing was lost; it could not be shown.

Why did the automated checks pass?

They confirmed that the code was valid and that the page answered. Neither reads what the page actually shows, and the error only appeared when the page was rendered.

What stops it happening again?

The failing part now loses only its own section when something is missing, and a caught error that substitutes fallback content has to be recorded somewhere it will be seen.

How can I catch the same problem on my own site?

Add a check that loads the rendered page and confirms a word or element that must be present. A status code alone cannot tell you the content is there.

Related findings

Comments

Comments are read before they appear. Nothing is published automatically, and no account is needed.

Writing about this? Facts, live figures and marks — every number on that page is dated and traceable to a scan.

All findings · The dataset · How the dataset works