Website uptime monitoring done properly: a practical checklist
Updated 7 August 2026 · by Cassian Wei · 2 min read
Most uptime monitoring is set up in 30 seconds — homepage URL, default settings, done — and then fails you twice: it misses real outages (site "up" but broken), and it wakes you for non-outages (one network blip at 4am). Here's the checklist for doing it properly.
1. Monitor what users actually need
- Homepage — fine as a start, but add a keyword check: assert a string from your rendered page is present. A 200 serving a blank template or a maintenance page is an outage; a status code alone won't catch it. (The inverse works too: alert when "error" or "out of stock" appears.)
- The API, not just the site — check a real endpoint and assert on the JSON:
json_path: "status"+json_expect: "ok"catches a healthy load balancer in front of a broken app. - Endpoints behind auth — send an
Authorizationheader with the check so your actual authenticated path is exercised, not just the login page. - The other ports — a TCP check on your database, SMTP-alternative or game server port; a TLS-expiry check; a DNS-record check if you've ever fat-fingered a zone file.
2. Check often enough to matter
Your time-to-know is bounded by check frequency. With 5-minute checks (the free tier of most established tools) plus confirmation logic, you learn about an outage up to ~10 minutes in — a short outage can come and go entirely unseen. Watchpup checks every 60 seconds on the free plan.
3. Be false-positive resistant
Alert on 2 consecutive failures, not one — a single timed-out check is usually the internet, not your server. (Watchpup does this by default; with 1-minute checks the confirmation costs you ~60s of detection time — with 5-minute checks it costs five.)
4. Watch latency, not just up/down
Slowness is the outage users experience most. Track response times and alert on degradation —
and look at percentiles, not averages: a healthy-looking average hides an ugly p95.
Watchpup records latency on every check, shows p50/p95/p99, and can alert when responses stay
slow — either past a fixed threshold or an "auto" threshold learned from the
monitor's own 24h median.
5. Make alerts land where you look
Email for the record, plus something that buzzes: Slack/Discord/Telegram webhook, or ntfy for free phone push without installing a vendor app. Set a reminder interval so an ongoing outage re-alerts until acknowledged by being fixed.
6. Tell your users before they ask
A public status page with incident history turns "is it just me?" support tickets into a link.
The 2-minute setup
curl -X POST https://watchpup.watchpup.workers.dev/api/signup \
-H 'content-type: application/json' \
-d '{"email":"you@example.com","password":"at-least-8-chars"}'
curl -X POST https://watchpup.watchpup.workers.dev/api/monitors \
-H 'authorization: Bearer wp_...' -H 'content-type: application/json' \
-d '{"kind":"http","url":"https://example.com","keyword":"Welcome","slow_ms":"auto"}'
Free: 15 monitors, 1-minute checks, all monitor kinds, status pages, no card. Compare the free plans honestly on /compare.
Watchpup is free uptime & cron monitoring — 1-minute checks, heartbeats, TLS/domain expiry, status pages, alerts everywhere. Sign up, try the live demo, or read more guides.