Learn how to set up continuous website security monitoring. Covers uptime, SSL expiry, security headers, vulnerability scanning, and alert setup.
Anay Pandya
1,411 words
Anay Pandya
Founder of ZeriFlow · 10 years fullstack engineering · About the author
Key Takeaways
Running a security scan once is like getting a health checkup and then never visiting the doctor again. Your website's security posture changes constantly:
<div class="zf-stat-callout" style="background:#0d1117;border:1px solid rgba(16,185,129,0.25);border-left:3px solid #10b981;border-radius:4px;padding:16px 20px;margin:24px 0"> <p style="margin:0 0 4px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:0.15em;color:#10b981;font-family:monospace">ZeriFlow Data — 12,400+ sites analyzed</p> <p style="margin:0;font-size:13px;color:#e2e8f0;line-height:1.6;font-family:monospace">In ZeriFlow's dataset of 12,400+ scanned sites, the average security score is 52/100 — with 68% failing at least one critical check in categories including TLS configuration, check your security headers, DNS authentication, and cookie handling.</p> </div>
Keep reading
Is your site actually secure?
Run a free check — 60 seconds
Continuous monitoring catches these changes before attackers exploit them. The difference between a one-time scan and continuous monitoring is the difference between a photograph and a security camera.
An effective monitoring setup covers five areas:
Your SSL certificate is the foundation of your site's security. Monitor:
Security headers can disappear after a deployment, CDN change, or server update. Monitor:
Downtime can indicate an attack in progress (DDoS) or a compromised server:
DNS changes can redirect your traffic to an attacker's server:
New vulnerabilities are disclosed daily. Monitor:
An expired SSL certificate is one of the most common and most preventable security issues. Here is how to set up monitoring:
Create a script that checks your certificate and alerts you before expiry:
#!/bin/bash
# check-ssl.sh — Run daily via cron
DOMAIN="yoursite.com"
ALERT_DAYS=14
EMAIL="admin@yoursite.com"
EXPIRY=$(echo | openssl s_client -servername "$DOMAIN" -connect "$DOMAIN:443" 2>/dev/null \
| openssl x509 -noout -enddate | cut -d= -f2)
EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( (EXPIRY_EPOCH - NOW_EPOCH) / 86400 ))
if [ "$DAYS_LEFT" -lt "$ALERT_DAYS" ]; then
echo "SSL certificate for $DOMAIN expires in $DAYS_LEFT days ($EXPIRY)" \
| mail -s "SSL EXPIRY WARNING: $DOMAIN" "$EMAIL"
fiAdd to crontab:
# Run daily at 9 AM
0 9 * * * /path/to/check-ssl.shIf you prefer a managed solution:
Security headers disappearing after a deployment is surprisingly common. Here is how to detect it:
#!/bin/bash
# check-headers.sh
DOMAIN="https://yoursite.com"
EXPECTED_HEADERS=(
"strict-transport-security"
"content-security-policy"
"x-content-type-options"
"x-frame-options"
"referrer-policy"
)
HEADERS=$(curl -sI "$DOMAIN")
MISSING=()
for header in "${EXPECTED_HEADERS[@]}"; do
if ! echo "$HEADERS" | grep -qi "$header"; then
MISSING+=("$header")
fi
done
if [ ${#MISSING[@]} -gt 0 ]; then
echo "MISSING HEADERS on $DOMAIN: ${MISSING[*]}" \
| mail -s "Security Header Alert: $DOMAIN" admin@yoursite.com
fiAdd header checks to your deployment pipeline to catch issues before they reach production:
# .github/workflows/security-check.yml
name: Post-deploy Security Check
on:
deployment_status:
types: [completed]
jobs:
check-headers:
if: github.event.deployment_status.state == 'success'
runs-on: ubuntu-latest
steps:
- name: Check security headers
run: |
HEADERS=$(curl -sI https://yoursite.com)
echo "$HEADERS" | grep -qi "strict-transport-security" || exit 1
echo "$HEADERS" | grep -qi "x-content-type-options" || exit 1
echo "$HEADERS" | grep -qi "content-security-policy" || exit 1
echo "All critical security headers present"| Tool | Free tier | Features |
|---|---|---|
| UptimeRobot | 50 monitors, 5-min checks | Email, Slack, webhook alerts |
| Better Stack (formerly Better Uptime) | 10 monitors | Incident management, status pages |
| Freshping | 50 monitors, 1-min checks | Multi-location checks |
| Hetrix Tools | 15 monitors | Uptime + blacklist monitoring |
One-time scans catch today's issues. Scheduled scans catch tomorrow's:
Set up a weekly automated scan to detect:
Once a month, review your scan results for trends:
| Feature | Free Tools | Paid Tools |
|---|---|---|
| Uptime monitoring | Yes (limited checks) | Yes (1-second intervals) |
| SSL expiry alerts | Yes (basic) | Yes (with auto-renewal) |
| Security header checks | Manual scripts | Automated with drift detection |
| Vulnerability scanning | OWASP ZAP (manual) | Automated, scheduled |
| Alerting | Email only | Email, Slack, SMS, PagerDuty |
| Historical data | Limited | Months/years of trends |
| Number of sites | Usually limited | Unlimited or high limits |
For a small business with 1-5 websites, a combination of free tools covers the basics well. As you grow, invest in paid tools for automation and deeper coverage.
ZeriFlow combines multiple monitoring concerns into a single security scan:
Each scan takes about 60 seconds and produces a score out of 100. Run it weekly as part of your monitoring routine to catch configuration drift and new issues.
When a monitoring alert fires, follow this process:
| Alert type | Action |
|---|---|
| Site down | Check hosting status, DNS, and server logs |
| SSL expired | Renew certificate immediately; check auto-renewal settings |
| Security header missing | Identify which deployment removed it; redeploy with headers |
| DNS change | Verify with domain registrar; check for unauthorized access |
| New vulnerability | Assess severity; patch if critical, schedule if medium/low |
The goal of monitoring is not to prevent all incidents — it is to detect them fast enough that the impact is minimal. A security issue caught in 5 minutes is a minor inconvenience. The same issue caught after 3 months is a potential data breach.
<!-- zf-internal-links -->
Related resources
Website Vulnerability Scanner
Run a broader website security audit across headers, TLS, DNS, cookies, SEO, and disclosure checks.
Security Headers Checker
Check CSP, HSTS, X-Frame-Options, and other response headers.
SSL Checker
Review TLS certificate, HTTPS, and transport security signals.
DMARC Checker
Validate email authentication records for domain spoofing protection.
CSP Checker
Review Content-Security-Policy coverage and common gaps.
December 1, 2025
Website Security Checklist 2025: 20 Things to Check Before Launch
Monitor your security score
Schedule recurring scans and catch regressions after deployments.