Catches DNS / GTM / CDN / SEO-de-index events before any other dashboard does.
At a glance
A real-time alert that fires when GA4 sessions for the trailing hour drop >25% vs the same hour-of-day on the same day-of-week from the prior 7-day window. Designed to catch DNS, GTM, CDN, and SEO-de-index events within minutes, hours before any revenue-side card visibly degrades. The card is a fire-alarm bell, not a measurement.
| What it counts | (GA4 sessions in trailing 1h) ÷ (median GA4 sessions for the same hour-of-day & day-of-week across prior 7 weeks), expressed as a percentage. Fires when the ratio drops below 0.75 (i.e. 25% below baseline). |
| Sample basis | Sessions, the broadest top-of-funnel signal. Sessions drop before purchases drop in nearly every site-wide regression scenario, which is why this alert leads the pack. |
| Sampling threshold | None for the 1h × DOW dimension. The query is a metric-only runReport over a 1-hour window; never sampled. |
| Bot traffic filter | GA4’s built-in IAB Tech Lab bot filter applied. Bot waves can briefly inflate sessions and mask a real drop (e.g. an 80% real-user drop concurrent with a 60% bot wave looks like a 20% drop). Pair with GA4 Bot Traffic Share to disambiguate. |
| Time zone | The GA4 property’s timezone, NOT UTC. The DOW/hour-of-day baseline is anchored to property zone so an alert at “Tuesday 14:00” uses Tuesday-14:00 from prior weeks. |
| Currency | Not applicable, this card uses session counts, not revenue. |
| Refunds | Not applicable. |
| Tracking-gap framing | The structural GA4 tracking gap (10, 25%) affects sessions less than purchase events because the failure mode is different: sessions are recorded on any pageview, while purchases require the order-confirmation page to load successfully. A traffic-drop alert is therefore a relatively pure signal of real traffic loss, not a measurement artefact. Exception: GTM container delete = sessions go to zero; that’s both a measurement failure AND a real “we can’t see traffic” event. |
| Why 7-day baseline, not 30-day? | A 7-day baseline catches week-over-week patterns (Tuesday looks like last Tuesday). A 30-day baseline would smooth seasonal trends but lag on detecting acute changes. 7 days is the sweet spot for fire-alarm alerts. |
| Time window | RT (real-time, refreshed every 15 minutes; the trailing 1h is the alert window). |
| Alert trigger | drop >25% vs prior 7-day same-DOW window, sentiment_key ga_traffic_trend. The 25% threshold is calibrated to suppress normal hourly noise (typical hour-to-hour variance is 5, 15%) while catching real regressions early. |
| Roles | owner, marketing |
Calculation
Calculated automatically from your Google Analytics 4 data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A UK gardening retailer on Shopify, GA4 connected. Property timezone Europe/London. On 06 May 26 at 11:00 BST (a Wednesday), the alert fires.| Hour (BST) | Sessions (this Wed) | Median sessions (prior 7 Wednesdays, same hour) | Ratio | Status |
|---|---|---|---|---|
| 09:00, 10:00 | 412 | 396 | 1.04× | Normal |
| 10:00, 11:00 | 287 | 432 | 0.66× | Alert: drop 34% vs baseline |
| 11:00, 12:00 | 142 | 451 | 0.31× | Alert continues, getting worse |
| 12:00, 13:00 | 89 | 478 | 0.19× | Alert continues, severe |
- The alert fired at 10:00, 11:00, 13 minutes after the regression started. Detection latency: GA4 has up to 4-hour event-ingestion delay for batched reports, but the
runReportAPI for the trailing-hour window typically lags 5, 15 minutes. The alert detector’s 15-minute polling cycle adds another 0, 15 min. Total detection latency: 10, 30 minutes from a real traffic stop. That’s hours faster than waiting for revenue cards to dip; the merchant gets a head start on triage. - Triage workflow when this card fires. Order of investigation: (a) is the site reachable? Curl the homepage from a non-merchant IP. If 5xx, escalate to engineering; (b) is GA4 receiving events? Check Realtime → Events; if zero, the GTM container or GA4 measurement ID has been broken; (c) is Google Search Console showing crawl errors or de-indexing? Check Search Console → Coverage; (d) is your CDN healthy? Check Cloudflare/Fastly/Akamai dashboard for upstream errors; (e) is your DNS resolving?
dig yourdomain.comfrom multiple regions; (f) is paid traffic still flowing? Check Google Ads/Meta Ads dashboards for “running” status. - For this brand, the cause was a Shopify-side DNS regression. The brand’s apex domain
gardenshop.co.ukhad a custom CNAME that was accidentally removed during a DNS migration; users hittinggardenshop.co.ukgot NXDOMAIN, whilewww.gardenshop.co.ukstill worked. Most users (~70%) hit the apex first; only the www-aware bookmark crowd kept reaching the site. The 34% baseline retained =www.users + paid-ad direct-link users. The card detected this within 30 minutes; without it, the merchant would have noticed via revenue cards 4, 6 hours later. - What WOULD trip false positives? Three known patterns: (a) a planned site maintenance window (Sunday 3am, scheduled deploys); we suppress alerts during configured maintenance windows. (b) a public holiday that the 7-day baseline doesn’t account for (Boxing Day, Thanksgiving), the alert fires for “low traffic” that’s actually normal-for-holiday. (c) a viral PR moment the previous week that inflated the baseline, this week looks low by comparison. The card surfaces a “baseline anomaly” warning when the prior 7-day window has a >2σ outlier.
- Bot waves can mask the drop. If a bot scraping campaign is concurrent with a real traffic drop, sessions may appear steady while real users are gone. Cross-check GA4 Bot Traffic Share: if bot share suddenly spiked, real-user sessions are dropping more than this card shows.
Sibling cards merchants should reference together
| Card | Why pair it with Traffic Drop Alert |
|---|---|
| GA4 Sessions | The metric this alert is built on. Use to see the trend over a wider window. |
| GA4 Real-Time Active Users | The 30-min companion. If this card alerts AND active users is zero or near-zero, the site is fully unreachable. |
| GA4 Property Health | The composite measurement-health view. If Property Health is also amber/red, the “drop” may be a measurement regression (GTM broken) rather than a traffic loss. |
| GA4 Bot Traffic Share | The disambiguator. Real-user drop concurrent with bot wave can look like “no drop”; bot share data tells you what’s actually happening. |
| GA4 Conversion Rate | The downstream impact. If this alert fires AND CR holds steady, the remaining traffic is converting normally; if CR also drops, the regression is broader than just traffic. |
| GA4 Revenue Trend | The lagging-indicator validation. Revenue Trend will dip ~1, 4 hours after this card alerts (purchase events follow session loss). |
| Cross-channel: Revenue at Risk from Incident | If a monitoring-platform incident is open concurrent with this alert, the two corroborate. |
| Cross-channel: Traffic to Revenue Divergence | The 30D companion for measurement-vs-truth divergence. |
Reconciling against the vendor’s own dashboard
Where to look in GA4: GA4 doesn’t have a native “trailing-1h vs same-DOW-baseline” alert (its Custom Insights are limited and slow). The closest GA4-native rebuild:Realtime → Overview → Users by minute for the live signal. Compare the current 30-min count against the 30-min average GA4 displays. Reports → Realtime → Sessions by source to see if the drop is concentrated in one channel (bad PPC campaign, lost organic ranking) or across all channels (DNS, CDN, GTM-level).Other GA4 views that look like real-time traffic monitoring but aren’t:
- Reports → Acquisition (any view): 24h+ lag; useless for real-time alerting.
- GA4 Custom Insights: GA4’s own alert system. Slower polling (typically 24h), no DOW-aware baselining, can’t easily configure 1-hour windows.
- DebugView: per-session debugging; not aggregate counts.
| Reason | Direction of divergence |
|---|---|
| Polling lag. We refresh every 15 minutes. A regression at 14:30 may not surface until 14:45. | 0, 15 min lag |
| Baseline anomaly suppression. If the prior 7-day window had a >2σ outlier (viral moment, holiday, planned campaign), we flag the alert as low-confidence and don’t auto-page. | Variable |
| Maintenance windows. Configured maintenance windows suppress alerts; the card displays “in maintenance” in lieu of an alert. | Suppressed alerts during configured windows |
| Sessions vs active users. We use sessions; GA4’s Realtime Overview uses active users. The two correlate but aren’t identical (one user can have multiple sessions in an hour; sessions count higher). | Sessions count typically 1.05, 1.20× higher than active users |
| Card | Expected relationship | What divergences mean |
|---|---|---|
shopify.total_revenue | Revenue typically follows sessions with a 30, 90 minute lag. A traffic-drop alert is followed by a revenue dip ~1h later. | Revenue dipping WITHOUT a traffic-drop alert = checkout/CR regression (different problem). |
bigcommerce.total_revenue | Same shape. | Same. |
adobe_commerce.total_revenue | Same shape. | Same. |
datadog.datadog_incidents | If Datadog has an open incident concurrent with this alert, the two are likely the same root cause (DNS, CDN, infrastructure). | A traffic-drop alert WITHOUT a Datadog incident = the regression isn’t infrastructure-monitored (e.g. SEO de-index, paid-ad-account suspension, third-party tag block). |
google_search_console.organic_clicks | If the drop is SEO-driven, Search Console will show a concurrent click drop and possibly index-coverage warnings. | The fastest way to confirm an SEO-cause traffic drop. |