Traffic Tab — Data & Metrics Wiki

Every metric defined. Every source traced. No guessing.
Last updated: March 2026 Data source: GA4 via Snowflake Snowflake table: analytics.dbt_exports_os.export__ga4_events

Contents

1Tab Overview

The Traffic tab shows website session volume, quality, and channel composition sourced from Google Analytics 4. It answers:

  • Volume: How many sessions did we get, and how does that compare?
  • Quality: Did visitors engage (low bounce, high pages/session) or bounce?
  • Mix: Which channels drove traffic? Is the mix shifting toward or away from paid?
  • New user acquisition: What share of visitors are new to the brand?
2Data Source

Source: Google Analytics 4 events, transformed by dbt and stored in Snowflake.

Table: analytics.dbt_exports_os.export__ga4_events

Merchant filter: os_merchant = 'Jack Archer' (hardcoded — this table contains events from multiple brands).

What the Backend Query Does

The /api/traffic endpoint executes the following logic per day/channel combination:

  • Filter to event_action = 'session_start' (one row per session)
  • Group by os_dt (event date) and preferred_channel
  • Count distinct os_session_id → sessions
  • Count distinct user_pseudo_id → users
  • Count distinct user_pseudo_id where user_type = 'new user' → new_users
  • Sum session_pageviews → total_pageviews
  • Sum bounced_session::INT → bounced_sessions
The API is called twice per tab load: once for the current period, once for the comparison period. Both datasets live in frontend memory and are used to compute badge deltas and chart tooltips.
3KPI Cards
Total SessionsGA4

Total number of sessions across all active channels in the selected period.

Sessions = Σ sessions (for all channels matching active filter)

A session is a group of user interactions on the website that takes place within a given time frame. In GA4, a session begins at session_start event and ends after 30 minutes of inactivity or at midnight.

Sessions respond to the channel filter. If you've isolated "Paid Social" only, this card will show only Paid Social sessions.
Bounce RateComputed from GA4

Percentage of sessions that were "bounced" — the visitor left without any meaningful interaction.

Bounce Rate = bounced_sessions / total_sessions × 100%

A bounced session is flagged in GA4 when the visitor triggered only a single event (session_start) and no further engagement events (page_view, scroll, click, etc.) were recorded before leaving.

Lower is better. Badge is green when bounce rate falls vs. prior period. High bounce rate on paid channels typically signals ad/landing page mismatch.
Avg Pages / SessionComputed from GA4

Average number of pages viewed per session. A proxy for browse depth and engagement quality.

Pages / Session = total_pageviews / total_sessions
Higher is generally better, though a very high PPS could indicate navigation confusion. Context matters — compare to channel benchmarks, not just raw values.
New User %Computed from GA4

Percentage of users who are visiting the site for the first time (no prior GA4 history for that browser/device).

New User % = new_users / total_users × 100%

GA4 classifies a user as "new" if no user_pseudo_id cookie/fingerprint for that device has been seen before. This is a browser-level signal — someone visiting on both mobile and desktop appears as two "users".

A rising New User % can mean acquisition is improving, or that returning visitors are arriving via different devices/browsers (clearing cookies, incognito mode). Cross-reference with New Orders on the Overview tab for confirmation.
4Channel Definitions

GA4 assigns each session a preferred_channel based on UTM parameters, referrer, and GA4's default channel grouping logic. The dashboard maps these to 10 channels:

ChannelColorWhat It IncludesPreset Group
Direct / Unknown #424656 No UTM, no referrer (typed URL, bookmarks, dark social). NULL or "Direct" in GA4 mapped here. All
Paid Social #683728 Paid Meta (Facebook/Instagram), TikTok, Pinterest, Snapchat ads. UTM medium = cpc + social source. All, Paid
Email #004028 Klaviyo campaigns and flows. UTM source = klaviyo or medium = email. All, Organic
Paid Search #1c2130 Google Ads, Microsoft/Bing Ads. UTM medium = cpc + search source. All, Paid
SMS #71644d Klaviyo SMS campaigns/flows. UTM medium = sms or source = klaviyo_sms. All, Paid
Organic Search #2d6645 Google, Bing, and other search engines — non-paid. Referrer = search engine domain, no UTM. All, Organic
Untracked Social #a6abbd Organic social (Instagram bio link, Facebook page post). Referrer = social domain, no paid UTM. All, Organic
Referral #632330 Traffic from other websites (press, blogs, review sites) linking to jackarcherapparel.com. All, Organic
Affiliate #403520 Affiliate partner links. UTM medium = affiliate. All, Organic
Other #bdb8ae Everything not classified above — catch-all for unrecognized UTMs or sources. All
UTM discipline matters. If a Klaviyo email link is sent without UTMs, that traffic lands in "Direct / Unknown" instead of "Email". Similarly, if a Meta ad campaign is missing UTM tags, it may appear as "Referral" (via facebook.com referrer) or "Direct". Always ensure UTM parameters are set correctly in Klaviyo and Meta Ads campaigns.
5Sessions by Channel Chart

A stacked bar chart showing daily session volume broken down by channel. Each bar represents one day; each color band within the bar is one channel.

Two View Modes
ViewY-AxisBest For
% Share (default) 0–100% (each bar = 100% of that day's sessions) Seeing how channel mix shifts over time. Does Paid Social grow as a share? Does Organic shrink on weekends?
Volume Absolute session count (stacked) Seeing absolute traffic volume. Did total sessions drop, or just the mix shift?
📌
The chart tooltip shows, for each channel/day, the current period value and the comparison period value. Hovering over a bar reveals which channels are up or down vs. the prior period without needing to switch tabs.
6Traffic Quality Table

A breakdown table showing engagement quality by channel — the complement to volume. Use this to identify which channels drive high-quality traffic (low bounce, high pages/session) vs. raw session volume.

ColumnFormulaInterpretation
Channel Colored dot matching chart color. Sorted by total sessions descending.
Sessions Σ sessions for channel Total sessions + share % of all sessions in parentheses (e.g., "12,340 (28%)").
Bounce Rate bounced_sessions / sessions Lower = better engagement. Email and Direct typically have the lowest bounce rates.
Pages / Session total_pageviews / sessions Higher = deeper browse. Organic Search often has higher PPS as visitors are actively researching.
New User % new_users / users Paid Social and Organic Search typically have higher New User % (prospecting). Email and SMS skew toward returning users.
7Filters & Controls
ControlOptionsEffect
Channel Presets All · Paid Only · Organic Instantly filters which channels are active. "Paid Only" = Paid Social + Paid Search + SMS. "Organic" = Organic Search + Email + Referral + Affiliate + Untracked Social. Affects KPI cards, chart, and quality table.
Channel Pills One pill per channel (individual toggle) Click to toggle a channel on/off. Double-click to isolate that channel alone (or reset to all if already isolated). Minimum 1 channel must remain active.
Chart View % Share · Volume Switches the stacked bar chart between normalized (0–100%) and absolute (session count) Y-axis.
Period (global) Fiscal Wk, WTD, MTD, Last N Days, Custom Re-fetches traffic data for the new date range.
Comparison (global) Prev Period, Prev Week, Prev Month, Prev Year, Custom Re-fetches comparison period data. Affects KPI badge deltas and chart tooltips.
8Comparison Period Logic

Comparison periods are computed client-side from the current period start/end and the selected comparison mode. See the Email Tab Wiki §11 for the full date calculation formulas — they apply identically across all tabs.

For traffic-specific use: Prev Year (YoY) is particularly useful because traffic patterns are heavily day-of-week dependent. A WoW comparison on a Tuesday this year vs. Monday last week is often misleading — YoY aligns the same calendar weekday.

9Known Caveats
🚫
GA4 data has a ~24–48 hour processing lag. Yesterday's sessions are usually available by 9–10am ET the next day, but can occasionally be delayed. If today's WTD sessions look lower than expected, check whether yesterday's data has fully landed in Snowflake before concluding there's a traffic issue.
🚫
GA4 session count ≠ Shopify analytics session count. Shopify counts sessions using its own pixel; GA4 uses its own tracking. Discrepancies of 5–15% are normal. The Traffic tab uses GA4 exclusively for all metrics.
Direct / Unknown is a catch-all bucket. A significant portion of "Direct" traffic is actually dark social (links shared via messaging apps), email without UTMs, or mobile app traffic that strips referrers. If Direct traffic rises unexpectedly, check whether a major email or SMS send went out without UTM parameters.
New User % is device/browser scoped. GA4's user identification is cookie-based. A returning customer visiting on a new device, in incognito mode, or after clearing cookies will appear as a "new user." This metric measures new browser fingerprints, not literally new-to-brand customers.
📌
Bounce rate in GA4 ≠ Universal Analytics bounce rate. In GA4, a session only counts as "bounced" if no engagement events (scroll, click, etc.) were triggered. In UA, any single-page session was a bounce. GA4 bounce rates are typically much lower than the equivalent UA numbers — do not compare them directly to historical UA benchmarks.
Jack Archer Analytics — Internal Use Only ← All Wikis · Dashboard