Skip to content

Negative engagementDuration Values Due to Time Synchronization Issues #40

@ioslh

Description

@ioslh

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.

Negative engagement time values

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:

  1. Set client time 4 minutes ahead of actual time
  2. Focus on a page, where client time is used to mark engagementStart

Engagement start marking

  1. When the user leaves the page, a visibilitychange event triggers, and engagementDuration is calculated on the worker side as approximately now - engagementStart. In cases where the client time is ahead of the server time, this results in a negative engagementDuration
  2. This can be verified by querying the underlying event data in BigQuery for GA4, where engagement_time_msec reflects this time difference

BigQuery results

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions