Skip to main content

Website Monitoring Checklist: What to Monitor Beyond a 200 OK

· 15 min read
Avi Stramer
Founder, Testable

A website can return 200 OK while failing every customer who tries to use it.

The web server may be healthy, but the page could be blank because a JavaScript bundle did not load. The homepage might work while login is broken. A product page may render normally even though checkout cannot reach the payment API. A health endpoint can stay green while a background job quietly stops processing orders.

Good website monitoring therefore asks more than “Did the server answer?” It asks whether the parts of the website that users depend on are available, correct, fast enough, and functional.

This checklist shows how to build that coverage in layers, starting with inexpensive HTTP checks and adding browser-based synthetic monitoring only where it provides a stronger signal.

Why 200 OK is not enough

An HTTP status code describes the result of one request. It does not prove that the response contains the right page, that the browser can render it, or that the next step in a user journey will work.

Here are a few failures that can still produce a successful HTTP response:

  • A reverse proxy serves a branded error page with status 200.
  • The server returns an empty HTML shell, but the JavaScript application fails to start.
  • A cached homepage loads while the application API is unavailable.
  • Login accepts credentials but never creates a valid session.
  • Search returns a page with no results because its index is unavailable.
  • Checkout loads but cannot calculate tax, reserve inventory, or contact the payment provider.
  • A feature flag or configuration change hides an important button.

A basic uptime check is still valuable. It is fast, inexpensive, and easy to diagnose. The mistake is treating it as complete evidence that the website works.

The most useful monitoring strategy is layered:

LayerQuestion it answersTypical check
NetworkCan the host and required service be reached?Ping or TCP port check
HTTPDoes the endpoint return an acceptable response?HTTP request
ContentDid the endpoint return the expected page or data?HTTP response assertion
BrowserCan a real browser render and operate the site?Playwright, Puppeteer, or Selenium scenario
Business workflowCan a user complete the action that matters?Multi-step synthetic journey
OperationsWill the right people know and respond when it fails?Incident rules, notifications, and a status page

Each layer answers a different question. You usually need several of them, but you do not need a browser check for every URL.

1. Verify DNS and network reachability

Before monitoring the application, make sure users can reach the infrastructure that serves it.

DNS failures can prevent a browser from finding your site even when every application server is healthy. Firewall changes can block a required port. A host may respond to ICMP ping while its HTTPS port refuses connections—or it may intentionally ignore ping while the website works normally.

Use the check that matches the signal you need:

  • DNS resolution confirms that the hostname resolves to the expected destination.
  • Ping monitoring measures basic host reachability and network latency when ICMP is supported.
  • Port monitoring verifies that a service such as HTTPS on port 443 is accepting TCP connections.
  • HTTP monitoring proves that the web service can receive a request and produce a response.

These checks complement one another. A failed HTTP check with a successful ping points the investigation in a different direction than a host that cannot be reached at all.

2. Check the right HTTP status codes

An HTTP monitor should explicitly define which responses count as healthy. For many public pages that means a final 200, but the correct rule depends on the endpoint.

For example:

  • A newly created resource might correctly return 201 Created.
  • An asynchronous API operation might return 202 Accepted.
  • A page that requires authentication might intentionally return 401 Unauthorized without credentials.
  • A redirect check may need to verify both the redirect and its final destination.
  • A health endpoint should usually accept one exact status rather than every 2xx response.

Be deliberate about redirects. Automatically following every redirect can hide a loop, an unexpected move to a login page, or a domain configuration error. If a redirect is part of the expected behavior, verify its destination rather than merely accepting any final success response.

Also consider the request method. HEAD is efficient, but some applications and CDNs handle it differently from GET. Use GET when you need confidence in the same response path that browsers and customers use.

3. Validate the response content

Content validation is the simplest way to make an HTTP check substantially more useful.

Choose a small, stable signal that proves the expected response arrived. On a marketing site, that might be a distinctive heading or product name. For an API health endpoint, it might be a value such as "status":"ok". For an authenticated endpoint, it could be the account identifier associated with the monitoring user.

Avoid assertions that are likely to change for harmless reasons. Dates, rotating promotions, randomized recommendations, and exact response sizes tend to create noisy failures. Prefer content tied to the purpose of the page.

It can also be useful to assert that known error text is absent. A page containing “temporarily unavailable” should not pass merely because the company logo is still present.

For APIs, validate semantics rather than formatting alone:

  • Required fields are present.
  • Values have plausible types or ranges.
  • The response represents the expected account, tenant, or environment.
  • A list contains the expected test record.
  • A write followed by a read produces the intended state.

When correctness requires multiple requests, move beyond a single HTTP check and use an API collection or scripted scenario.

4. Measure response time and watch the trend

A website can be technically available but too slow to use.

Record response time for every check and establish a baseline before choosing an alert threshold. A fixed threshold copied from another service rarely reflects your application, network, or users. Look at normal performance by endpoint and region, then set thresholds that identify meaningful degradation.

Pay attention to trends as well as individual failures. A gradual increase in response time may reveal database pressure, an overloaded dependency, a cache problem, or resource exhaustion before the service goes down completely.

For HTTP checks, response time measures the request and response path. It does not represent the complete browser experience. HTML can arrive quickly while scripts, stylesheets, fonts, images, or API calls make the page slow. Use browser or page-performance monitoring when the rendered experience matters.

5. Monitor TLS certificates and domain expiration

Certificate and domain failures are both predictable and preventable, yet either can make a healthy application unreachable.

For HTTPS endpoints, monitor:

  • Certificate validity and expiration date.
  • The hostname covered by the certificate.
  • The certificate chain presented to clients.
  • Upcoming expiration far enough in advance to fix a failed renewal.

Domain expiration deserves a separate warning because renewing a TLS certificate does not renew the domain itself. Configure multiple notices—for example, 30 days, 7 days, and the day of expiration—and send them to an actively maintained destination rather than one person's inbox.

Automated renewal reduces risk, but it does not eliminate the need for monitoring. DNS challenges, permission changes, rate limits, and deployment mistakes can all interrupt automation.

6. Monitor critical APIs and third-party dependencies

Most websites depend on more than the server that returns their HTML. Authentication, search, payments, email, maps, analytics, feature flags, CDNs, and other services can affect whether the site works.

Start with APIs you control. Monitor health endpoints, but do not stop there: a generic health endpoint often checks a different path from the one customers exercise. Add targeted checks for the API calls behind your most important website actions.

For third-party services, monitor the behavior your application needs instead of only watching the provider's homepage or status page. A vendor can be generally operational while one region, account, or API method is failing. Use safe read-only requests when possible, respect rate limits, and avoid exposing credentials in logs or alerts.

Do not attempt to monitor every dependency individually on day one. Prioritize dependencies that can block revenue, authentication, data integrity, or customer communication.

7. Run the page in a real browser

An HTTP response check cannot execute JavaScript, evaluate the DOM, or interact with the page. Modern client-rendered applications therefore need at least a small amount of browser-based synthetic monitoring.

A browser monitor can confirm that:

  • The page renders meaningful content.
  • Important controls are visible and enabled.
  • JavaScript-driven navigation works.
  • Client-side API calls complete successfully.
  • A user can enter data and submit a form.
  • The application reaches the expected final URL or state.

Keep browser monitors focused. One scenario that attempts to cover the entire application will be slow, hard to diagnose, and fragile. Prefer a few small journeys, each proving one important behavior.

Tools such as Playwright provide auto-waiting locators and retrying assertions that make browser automation more resilient. Select elements through stable, user-facing contracts such as roles, labels, and dedicated test IDs instead of long CSS selectors tied to the page's current layout.

8. Test the user journeys tied to the business

The best monitor is not necessarily the one that checks the most pages. It is the one that proves the business can still serve its users.

Identify a short list of journeys that would cause an immediate customer or revenue impact if they failed. Common examples include:

  • Sign up for an account.
  • Log in and reach the dashboard.
  • Search for a product or record.
  • Add an item to a cart.
  • Complete a test checkout or reservation.
  • Submit a lead or support form.
  • Upload and retrieve a file.
  • Create, update, and delete an API resource.

Use dedicated monitoring accounts and clearly identifiable test data. Keep credentials in a secret store, grant the account only the permissions it needs, and clean up records created by the monitor. For destructive or financial actions, use a sandbox path or stop before the irreversible step while still asserting that the application is ready to proceed.

Separate journeys when they have different owners or alert priorities. A failed marketing form should not obscure a failed checkout flow, and the two incidents may need to notify different teams.

9. Track page resources and browser errors

A page can render its main heading while still delivering a badly degraded experience. Browser checks can collect evidence that a simple content assertion misses:

  • Failed JavaScript, stylesheet, image, or font requests.
  • Browser console errors.
  • Unexpected requests to the wrong environment.
  • Slow or failed XHR and fetch calls.
  • Screenshots showing blank, incomplete, or incorrectly styled pages.
  • Traces that connect a failed action to its network and DOM state.

Not every console message should fail a monitor. Many sites contain harmless warnings or noisy third-party scripts. Establish an allowlist or fail only on errors connected to critical application behavior.

Screenshots and traces are especially valuable after an alert. A notification that says “checkout failed” starts an investigation; a trace showing that the inventory request returned 503 can shorten it.

10. Monitor page performance in both the lab and the field

Synthetic browser checks measure performance under controlled conditions. Real user monitoring measures what actual visitors experienced across their devices, browsers, networks, and locations. These datasets answer different questions and can disagree without either one being wrong.

Use synthetic measurements to create a repeatable baseline, compare releases, and investigate specific pages. Use field data to understand the distribution of real customer experiences. Google's Core Web Vitals workflow recommends continuous monitoring in both the lab and the field to detect regressions.

Useful metrics include:

  • Time to First Byte (TTFB): How quickly the first response bytes arrive.
  • Largest Contentful Paint (LCP): How quickly the main visible content renders.
  • Interaction to Next Paint (INP): How responsive the page is to user interaction.
  • Cumulative Layout Shift (CLS): How visually stable the page remains.
  • Journey duration: How long a complete action such as login or checkout takes.

Monitor trends rather than treating one synthetic run as universal truth. Performance naturally varies with region, network path, device profile, cache state, and third-party behavior.

11. Check from the locations that matter

A monitor running next to your application can miss the failures experienced by distant customers. Conversely, one failed check from one location may indicate a regional network problem rather than a global outage.

Choose locations based on where users and infrastructure actually are. Multiple regions help you:

  • Detect geographic outages and routing problems.
  • Compare latency between customer markets.
  • Identify regional CDN or DNS failures.
  • Confirm an apparent outage before notifying responders.

Public probes are appropriate for public websites. Private applications and internal services need monitors running from inside the relevant network, VPC, or data center. A public check cannot validate a service it cannot securely reach.

12. Choose check frequency and failure thresholds intentionally

Check frequency controls how quickly you can discover a failure. With a five-minute interval, detection alone takes up to five minutes and averages roughly half that—before confirmation checks or alert delivery are considered.

Run revenue-critical and authentication journeys more frequently than low-impact informational pages, but account for the cost and side effects of each check. Browser journeys are heavier than HTTP requests, and write operations may create data or consume vendor quotas.

Avoid treating every failed request as an incident. A practical policy might combine:

  • A short timeout appropriate to the endpoint.
  • An immediate confirmation check.
  • Confirmation from another region when possible.
  • A small number of consecutive failures before opening an incident.
  • Consecutive successes before resolving it, to prevent flapping.

The goal is not to suppress failures. It is to make alerts credible enough that responders act on them.

13. Route alerts with enough context to act

An alert should tell the recipient what failed, how important it is, and where to begin investigating.

Include the monitor name, failed assertion or error, affected regions, time of failure, and a link to diagnostic evidence. Route notifications according to ownership and severity. The checkout team may need an immediate page, while a performance regression on a documentation page can wait for business hours.

Review alert history periodically. Alerts that are repeatedly ignored need a different threshold, owner, or severity—or the monitor may not be measuring something actionable.

Use maintenance windows for planned work so expected downtime does not distort uptime history or wake responders unnecessarily.

14. Prepare incident communication before the outage

Monitoring detects a problem; it does not automatically keep customers informed.

A status page should reflect the services customers recognize, not the internal architecture of your application. Connect it to real monitor state where appropriate, but retain the ability to add human context. During an incident, communicate what is affected, when the next update will arrive, and any available workaround. Afterward, record the resolution and publish a root-cause summary when useful.

Prepare subscriber notifications, ownership, templates, and maintenance announcements before they are needed. Trying to design the communication process during an outage adds avoidable pressure.

A minimum viable website monitoring setup

You do not need to implement every item at once. A strong first version for a typical web application is:

  1. An HTTP check for the homepage with an exact status and stable content assertion.
  2. An HTTP check for a critical API endpoint with response validation and a latency threshold.
  3. A browser monitor for the single most important user journey.
  4. Checks from at least two relevant regions, with confirmation before alerting.
  5. TLS certificate and domain-expiration warnings.
  6. Alerts routed to a named owner with useful failure evidence.
  7. A status page and maintenance-window process.

Add coverage based on risk and incident history. If an important failure reaches customers before your monitors detect it, turn that failure mode into a new or improved check.

Choosing the lightest check that proves the behavior

Website monitoring works best when each check has a clear purpose.

Use ping or port monitoring for basic reachability, HTTP monitoring for endpoints and response content, and browser monitoring for rendered pages and user journeys. Add API workflows, heartbeat checks, private runners, and status communication where the system requires them. The result should be a small portfolio of credible signals—not a large collection of checks nobody trusts.

Testable Monitoring supports HTTP, ping, port, heartbeat, Playwright, Postman, and other scripted monitors on hosted or self-hosted runners. It also connects checks to incidents, notifications, maintenance windows, metrics, and public or private status pages. Start with one workflow your users cannot afford to lose, then expand the coverage as you learn where the real risks are.

For implementation details, see the Testable documentation for HTTP monitors, custom browser and API monitors, and incident detection.