-
Notifications
You must be signed in to change notification settings - Fork 10
Description
We use Cloudflare Zaraz to integrate GA4 for event monitoring. While analyzing the underlying GA4 event data, we discovered an interesting phenomenon: a significant number of engagement_time_msec values are appearing as negative.
Root Cause Analysis
After investigating, we identified that this occurs when there's a time synchronization discrepancy between the user's device and Cloudflare Worker (Zaraz's execution environment). Specifically, negative engagement_time_msec values appear when the user's device time is ahead of the Worker time.
We conducted a test to reproduce this behavior:
- Set client time 4 minutes ahead of actual time
- Focus on a page, where client time is used to mark engagementStart
- When the user leaves the page, a
visibilitychangeevent triggers, andengagementDurationis calculated on the worker side as approximatelynow - engagementStart. In cases where the client time is ahead of the server time, this results in a negativeengagementDuration - This can be verified by querying the underlying event data in BigQuery for GA4, where
engagement_time_msecreflects this time difference
It's worth noting that the issue also affects accuracy when client time lags behind server time, resulting in inflated engagement duration values.
Suggested Solution
It might be worth considering using timestamps consistently (either all client-side or all edge-side) when calculating engagementDuration. This could help address potential issues since client-side time discrepancies are fairly common.


