Alerts surface in the Alerts tab of the dashboard. They are computed on each dashboard load — no configuration required.
Alert types
There are five alert types across two sources: the standalone alerts endpoint and the dashboard's inline alert computation.
invisible_content (severity: critical)
Endpoint: GET /api/v1/analytics/{siteId}/alerts
A page is receiving significant bot traffic but has a crawlability score below 30. Bots are visiting content they cannot read.
Trigger: A path has more than 10 crawler visits in the selected period AND a joined crawlability score < 30.
What to do: Run a scan on the flagged path and address the crawlability failures. Common causes are JavaScript-rendered content, missing robots.txt permissions, or blocked resources.
Metadata fields: path, visit_count, crawlability_score
new_bot (severity: info)
Endpoint: GET /api/v1/analytics/{siteId}/alerts
A bot that was not seen in the prior 30 days appeared in the last 7 days.
Trigger: Bot present in crawler_visits in the last 7 days AND absent in the 30-day window ending 7 days ago.
What to do: Review the new bot in the Crawlers tab. If it is an AI training crawler you want to block, add a robots.txt rule. If it is expected, no action needed.
Metadata fields: bot
traffic_spike (severity: warning)
Endpoint: GET /api/v1/analytics/{siteId}/alerts
A page received more than 2× its average daily visit rate in the last 24 hours.
Trigger: recent_count (last 24h visits) > avg_daily × 2, where avg_daily is computed over the last 30 days. Only paths with an established baseline are evaluated.
What to do: Check which bot is driving the spike in the Crawlers tab. A spike from an AI training bot is generally benign. A spike from an unknown bot may indicate scraping.
Metadata fields: path, recent_count, avg_daily
no-data (severity: critical)
Source: Dashboard inline computation
No crawler visits have been recorded more than 72 hours after the site was added.
Trigger: Site age > 72 hours AND totalVisits === 0 AND no recorded lastVisitAt.
What to do: Go to Settings and verify your middleware is installed and deployed. Use the integration test to confirm beacons are reaching the ingest API.
visit-drop (severity: critical)
Source: Dashboard inline computation
No crawler visits received for more than 72 hours after a previously active site.
Trigger: lastVisitAt exists AND hours since lastVisitAt > 72.
What to do: Check that your middleware is still deployed. A deployment that removed or bypassed the middleware is the most common cause.
Alert response format
The standalone alerts endpoint returns:
{
"alerts": [
{
"type": "invisible_content",
"severity": "critical",
"title": "Invisible content detected",
"description": "Bots visited /blog/ai-seo 42 times but your crawlability score is 18/100.",
"metadata": {
"path": "/blog/ai-seo",
"visit_count": 42,
"crawlability_score": 18
}
}
]
}
Dashboard-computed alerts (no-data, visit-drop, traffic-drop, traffic-spike, new-bot) include id, severity, category, title, description, stats, actions, and triggeredAt fields.
Query parameters (standalone endpoint)
| Parameter | Type | Default | Max |
|-----------|------|---------|-----|
| days | integer | 30 | 90 |