Why is my website down
Most outages come from six causes: a bad deploy, a crashed app or database, a full disk, an expired domain or SSL certificate, a broken DNS record, or your host having its own outage, and the error you see already narrows it to one or two.
Start with what changed. Outages without a cause are rare, outages whose cause nobody remembers are common. A deploy 20 minutes ago, a DNS edit yesterday, a card that expired last month on the account that pays for the domain. Then read the error, because the error already rules out most of the list.
Website down reasons, by the error you see
- 502 Bad Gateway or 504 Gateway Timeout: the proxy or CDN is up and the app behind it is not. A crashed process, an out-of-memory kill, or a deploy that never started listening.
- 500 Internal Server Error: the app runs but throws. Usually the last deploy or a database it cannot reach. The logs from that minute name it.
- 503 Service Unavailable: the host, the load balancer or your own health check says it cannot serve. Check your provider status page before your code.
- Could not resolve host, or DNS_PROBE_FINISHED_NXDOMAIN in Chrome: the name points nowhere. An expired domain or a broken DNS record.
- "Your connection is not private": the SSL certificate expired or does not match the name. Auto-renewal fails silently more often than anyone admits.
- Connection refused or a timeout: the server is off, the port is closed, or a firewall drops you. A full disk ends here too, once the app cannot write and stops answering.
Find out which one in a minute
SITE=example.com
# Status code, time, and the IP the request actually went to
curl -sS -o /dev/null -w '%{http_code} in %{time_total}s from %{remote_ip}\n' "https://$SITE"
# Does the name resolve? Empty output means DNS.
dig +short "$SITE"
# When does the SSL certificate expire?
echo | openssl s_client -connect "$SITE:443" -servername "$SITE" 2>/dev/null \
| openssl x509 -noout -enddate
# When does the domain expire?
whois "$SITE" | grep -i 'expir' A status of 000 means curl got no HTTP answer at all, and the line it prints above says why. An empty dig answer means DNS. A notAfter date in the past means the certificate. An expiry date in the past means renew the domain before anything else.
Why is my website down for me but not others
If the site loads on your phone over mobile data but not on your laptop, the site is fine. The usual suspects: your resolver still caching an old IP after a migration, a firewall or WAF rule that blocked your IP after too many requests, a VPN exit the host refuses, or a browser holding a cached 301 to a dead URL. Flush DNS, try a private window, turn the VPN off, in that order.
Why is my website not loading but not down
A 200 that takes 9 seconds is an outage to the user and a green tick to most monitors. Slow pages come from a query without an index, a connection pool at its limit, or a third-party script that blocks rendering. Watch response time, not only status. A check that went from 200 ms to 4 seconds over a week is telling you something before anything goes down. Logdash records the response time of every check and counts anything slower than 10 seconds as down.
Hear about the next one from a monitor
- Add the URL Create a service in Logdash and point it at the site or its health route. Every 5 minutes on the free plan, every minute on Builder, every 15 seconds on Pro.
- Connect Telegram Add a Telegram channel once and attach it to the monitor. The bot confirms the setup with a welcome message.
- Break it once Stop the app for one check. The monitor flips to down and a Telegram alert reaches your phone with the status code and the error, so the first line of your diagnosis arrives with the alert.
Every cause on this list ends as a failed HTTP check, so the monitor catches all of them once they happen. It does not warn you before a certificate or a domain expires. It tells you on the first check that fails because one did.