tutorial

Uptime Monitoring for VitePress Documentation Deployments 2026

VitePress generates your docs blazing fast but won't alert you when they go offline. Add deploy heartbeats, HTTP monitors, and instant alerts in under 30 minutes — free.

Uptime Monitoring for VitePress Documentation Deployments 2026

VitePress is the fast, Vite-powered static site generator built for developer documentation. It builds in seconds and ships clean, performant docs. But once it's deployed, VitePress's job is done — it has no awareness of whether your deployed docs are actually reachable.

By the end of this guide you'll have continuous uptime monitoring on your VitePress deployment, heartbeat alerts for your build pipeline, and instant notifications when your docs go down — all on the free tier.


What VitePress doesn't monitor

VitePress produces a static bundle. The bundle is correct or it isn't — VitePress can tell you about build errors, but nothing about what happens after deployment.

Failure modes VitePress can't see:

  • Your hosting platform (Netlify, Vercel, Cloudflare Pages) has an incident
  • A deploy succeeds but a broken Vue component causes a hydration crash — the page loads but is unusable
  • Your custom domain's DNS or SSL cert lapses
  • GitHub Actions stops triggering deploys and your docs go stale
  • CDN caching serves a 404 after you restructure your URL scheme

These failures all look fine from the build side. Your users see errors; your monitoring sees nothing.


Step 1: Identify your VitePress monitoring targets

VitePress sites can be hosted on many platforms. The monitoring URL is your live domain, not the build artifact.

| Hosting | Monitor this URL | |---|---| | GitHub Pages | https://<org>.github.io/<repo>/ | | Cloudflare Pages | https://your-project.pages.dev or custom domain | | Netlify | https://your-project.netlify.app or custom domain | | Vercel | https://your-project.vercel.app or custom domain | | Self-hosted | https://docs.yourdomain.com |

Always prefer your custom domain over the platform subdomain — if DNS breaks, the custom domain monitor will catch it when the platform subdomain still resolves.


Step 2: Set up HTTP monitoring with Vigilmon

Sign up at Vigilmon — free tier, no credit card required.

  1. Click New Monitor → HTTP
  2. Enter your VitePress docs URL
  3. Set the check interval (5 minutes on free tier)
  4. Add a Keyword match — paste a string that must appear in your docs (e.g. the text in your homepage <h1>)
  5. Save

The keyword match is critical for VitePress: Vite's build can succeed but a Vue SSR rendering failure can serve a near-empty HTML shell with a 200 status. Matching on a known content string catches this.

Recommended monitors:

| Monitor | URL | Purpose | |---|---|---| | Root | https://docs.yourdomain.com/ | Catch total outages | | Getting started | https://docs.yourdomain.com/guide/getting-started | Catch routing failures | | API reference | https://docs.yourdomain.com/api/ | Catch deep URL structure issues |


Step 3: Heartbeat monitoring for VitePress build pipelines

If your docs depend on a scheduled build (nightly content refresh, automated changelog updates, version doc generation), a broken pipeline means stale docs. Add a heartbeat monitor so you know when builds stop succeeding.

In Vigilmon:

  1. Click New Monitor → Heartbeat
  2. Set the expected interval (e.g. 25 hours for a nightly build — add 1 hour buffer)
  3. Copy the heartbeat ping URL

GitHub Actions — VitePress with GitHub Pages:

# .github/workflows/docs.yml
name: Deploy VitePress Docs

on:
  push:
    branches: [main]
  schedule:
    - cron: '0 3 * * *'  # Nightly refresh

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: pages
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0  # Required for lastUpdated feature

      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm

      - name: Install dependencies
        run: npm ci

      - name: Build VitePress
        run: npm run docs:build

      - name: Upload Pages artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: docs/.vitepress/dist

  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

      - name: Ping heartbeat on success
        if: success()
        run: curl -s "${{ secrets.DOCS_HEARTBEAT_URL }}"

Cloudflare Pages (build hook):

Cloudflare Pages doesn't have native post-deploy webhooks on the free tier. Add a deploy notification via Cloudflare Workers or use their Pages Functions:

// functions/api/health.js — Cloudflare Pages Function
export async function onRequest() {
  return new Response(JSON.stringify({ status: 'ok' }), {
    headers: { 'Content-Type': 'application/json' },
  });
}

Monitor https://your-project.pages.dev/api/health — if the Pages Function serves, the deployment is live.


Step 4: Monitor version-specific doc paths

VitePress sites often serve multiple versions of docs — /v1/, /v2/, /latest/. A bad deploy can break one version without breaking others.

Add separate monitors for each active version:

https://docs.yourdomain.com/v1/guide/
https://docs.yourdomain.com/v2/guide/
https://docs.yourdomain.com/latest/guide/

In Vigilmon, group these monitors under a single status page so your team can see at a glance which version is affected.


Step 5: Monitor your search provider

VitePress supports Algolia DocSearch out of the box. Many teams also use VitePress's built-in local search. For Algolia, a stale index means search returns wrong results — or nothing at all.

Add an Algolia index health check to your build pipeline:

// scripts/check-search-index.mjs
import algoliasearch from 'algoliasearch';

const client = algoliasearch(
  process.env.ALGOLIA_APP_ID,
  process.env.ALGOLIA_SEARCH_KEY
);

const index = client.initIndex(process.env.ALGOLIA_INDEX_NAME);

const { nbHits } = await index.search('', { hitsPerPage: 0 });

if (nbHits === 0) {
  console.error('ERROR: Algolia index is empty — search is broken');
  process.exit(1);
}

console.log(`Search index OK: ${nbHits} records`);

Run this after each successful deploy. Zero records should block the pipeline and alert your team before users notice broken search.


Step 6: Webhook alerts

Slack:

  1. Create an incoming webhook at api.slack.com/messaging/webhooks
  2. In Vigilmon: Notifications → New Channel → Slack
  3. Paste the webhook URL and assign it to your VitePress monitors

Discord:

  1. Server Settings → Integrations → Webhooks → New Webhook → Copy URL
  2. In Vigilmon: Notifications → New Channel → Discord
  3. Paste and assign to monitors

Route alerts to a #docs or #incidents channel so the right people respond immediately.


Step 7: Public status page

Add a status page linked from your VitePress site so users know you're aware of an outage before they file an issue.

  1. In Vigilmon: Status Pages → New Status Page
  2. Select your VitePress monitors
  3. Save — you'll get a hosted status URL

Link it from your VitePress config.ts nav:

// docs/.vitepress/config.ts
import { defineConfig } from 'vitepress'

export default defineConfig({
  themeConfig: {
    nav: [
      { text: 'Guide', link: '/guide/' },
      { text: 'Status', link: 'https://status.yourdomain.com' },
    ],
  },
})

What you've built

| What | How | |---|---| | External uptime monitoring | Vigilmon HTTP monitors with keyword matching | | Build pipeline heartbeat | Ping on successful deploy; missed ping triggers alert | | Version-specific monitoring | Separate monitors per active docs version | | Search health check | Algolia index record count check in CI | | SSL certificate monitoring | Automatic via Vigilmon HTTPS monitors | | Instant alerts | Slack/Discord webhook notifications | | Public status page | Vigilmon status page linked from docs nav |

VitePress makes your docs fast. Vigilmon makes sure they're always online. Together you have complete coverage — fast builds and continuous availability.


Get started free at vigilmon.online — your first monitor is running in under a minute.

Monitor your app with Vigilmon

Free plan — 5 monitors, no credit card required. Up and running in 60 seconds.

Start free →