Free shipping over €100 · Free 30-day returns

Documentation / Tracking

Tracking

Every event this storefront sends, when it fires and what it carries. Each event goes to Bloomreach Engagement (Track API) and a copy to BigQuery datacop-cdp-hydrogen.bloomreach_events.events.

See it live: open the tracking explainer on the homepage → · Three ways to track an event →

Ids

Every event carries cookie (soft id): the dc_vid visitor cookie, set by the server, valid for two years. Every event also carries session_id, the visit from the server’s dc_ses cookie. Events where the server knows the email add email_id (hard id), which merges the cookie profile into the customer; the pop-up phone step adds phone_id (soft id). The “i” button bottom-left shows the cookie and email for this browser.

On every event

url, path, referrer, source (hydrogen_browser or hydrogen_server), session_id, walker_event_id and walker_name, plus the event’s own properties listed below.

Customer attributes

shopify_customer_id whenever an event knows the customer, email when an email is submitted in the pop-up, phone when a phone number is. Preferences and the cart are events only, so their history is kept.

Not from the storefront

Orders and Shopify customers reach Bloomreach through its Shopify integration, not through these events.

Cookies

Every id is set by the store’s own server, in the response to a page request, as a first-party cookie marked HttpOnly, Secure and SameSite=Lax. No script creates or stores an id in the browser. That is why it works better than the usual script-written ids:

  • It lasts. Safari cuts script-written ids to 7 days, and ids set by another company’s servers too. A cookie set by the store’s own server, the one that delivers the page, lives its full lifetime, so returning customers stay recognised. How long a cookie lives, by who sets it →
  • It cannot be read, stolen or faked. HttpOnly keeps it out of reach of every script on the page, including injected ones, and the server never takes a browser’s word for who it is.
  • One id everywhere. The same dc_vid is the Bloomreach soft id, the BigQuery cookie column and the key of the site’s personalization.
  • No bots in the data. A visit (dc_ses) is only announced to Bloomreach at its first page view from a real browser, so crawlers and uptime checks create no profiles.
CookieWhat it holdsLifetime
dc_vidThe visitor id: a random UUID, the Bloomreach soft id cookie and the BigQuery cookie column.2 years, renewed on every visit
dc_sesThe visit: id, start, last activity, visit number and a campaign fingerprint. A new visit starts after 30 minutes without activity or on a new campaign link.1 year (the visit itself ends after 30 idle minutes)
dc_ses_aWhich visit was already announced (session_start sent).1 year
dc_profileThe personalization snapshot (preferences, segments), signed so it cannot be edited.30 days
dc_linkedThis browser is already linked to its Shopify customer.1 year
dc_csLimits cart snapshots (cart_state) to one per half hour.30 minutes
sessionCustomer account login (Hydrogen).Browser session

Shopify sets its own cart, _shopify_y and _shopify_s cookies for the cart and its analytics. The browser’s local storage only keeps interface state (survey answers, pop-up progress), never an id.

page_visit

Triggered by
The visitor opens a page.
Fires when
Every page load and every client-side navigation to a new path. Changing only the query string (e.g. picking a product variant) does not count.
How often
One per path change.
Properties
location, title
Ids
cookie
walkerOS name
page view

session_start

Triggered by
A new visit begins: the first page after 30 minutes without activity, or a landing URL with new UTM / click-id parameters. The visit is kept by the server (HttpOnly cookie dc_ses), not by a browser script.
Fires when
At the visit’s first page view from a browser (bots that run no JavaScript never start one). UTM and click-id fields are read from the landing URL.
How often
Once per session.
Properties
utm_source, utm_medium, utm_campaign, utm_term, utm_content, click_id_param, click_id, click_platform (e.g. gclid / google), marketing, referrer, location, session_id, new_device, session_count
Ids
cookie
walkerOS name
session start

session_end

Triggered by
The previous visit is closed when the next one starts, the way Bloomreach’s own SDK reports it (a visit has no reliable moment of ending in a browser).
Fires when
At the start of the following session, so the last session of a visitor who never returns has no session_end.
How often
Once per session (that is followed by another).
Properties
session_id, session_start, session_last_activity, duration (seconds)
Ids
cookie
walkerOS name
session end

element_impression

Triggered by
A homepage element (hero, survey, strip, band…) is on screen, walkerOS data-elb tag with the impression trigger: at least half of it visible for about a second.
Fires when
Once per element per page view. BigQuery only, never sent to Bloomreach.
How often
Once per element per page view.
Properties
slot, element, element_type, variant (hero: default or cart), position, audience, test, arm, session_id
Ids
cookie (BigQuery)
walkerOS name
element impression

view_item

Triggered by
The visitor opens a product page.
Fires when
A product page is rendered.
How often
Once per product while on its page; switching variants does not repeat it.
Properties
item_id, product_id, handle, title, brand, category_name, price, currency, tags
Ids
cookie
walkerOS name
product view

view_category

Triggered by
The visitor opens a collection page.
Fires when
A collection page is rendered.
How often
Once per collection handle while on the page.
Properties
category_name (collection title), handle
Ids
cookie
walkerOS name
collection view

search

Triggered by
The visitor searches.
Fires when
The search page shows results for a term.
How often
Once per search term. An empty search sends nothing.
Properties
search_term, results
Ids
cookie
walkerOS name
search view

view_cart

Triggered by
The visitor opens the cart page.
Fires when
The cart page (/cart) is rendered. Opening the cart drawer does not count.
How often
Once per visit to the cart page.
Properties
cart_id, total_quantity
Ids
cookie
walkerOS name
cart view

cart_update

Triggered by
The visitor clicks add to cart anywhere on the site, including quick add on collection pages (one click in the saved size, or a size picked in the quick-add chooser).
Fires when
After Shopify has added the product to the cart. Quantity changes and removals do not send cart_update; they are covered by cart_state.
How often
One per add.
Properties
action = add, cart_id, product_list (variant id, quantity)
Ids
cookie
walkerOS name
product add

cart_state

Triggered by
The visitor adds, changes or removes a cart line, or starts a new session.
Fires when
After every cart change, with the cart as Shopify now holds it, and on the first page view of a session so an expired or emptied cart is re-synced.
How often
Every cart change, plus at most once per 30 minutes on a page view.
Properties
cart_id, lines (handle, title, variant_title, quantity, price, image), total_quantity, subtotal, currency
Ids
cookie
walkerOS name
cart state

customer_preference

Triggered by
The visitor answers a question in the homepage "Make it yours" survey, a pop-up or the preference center, or saves a default size on a product page (the size bar under the size buttons, or the "All sizes" pop-up, which sends one event per size it changes).
Fires when
The browser saves the answer at /api/weblayer; the server checks it, updates the visitor’s profile cookie (so the very next page is personalized) and sends the event. Deselecting an answer in the preference center sends an empty answer. Multi-select answers are one event with a comma list, e.g. "Football, Tennis".
How often
One per answered question.
Properties
question and answer as labels (e.g. "Favorite colors" / "Black, Green"; default sizes: "What is your usual default_mens_shirt_size?" / "L", shoe sizes without EU, e.g. "44"), question_key, answer_value, source (weblayer, pdp), weblayer, experiment, variant. Default sizes cover men’s and women’s tops, bottoms and shoes; the button shows only on products in one of those six categories.
Ids
cookie
walkerOS name
customer preference

email_subscribed

Triggered by
The visitor submits an email in the pop-up, unlocks a member-exclusive product ("Drop email to unlock" on a card, or the form on a locked product page), or saves the preference center with email marketing ticked.
Fires when
After the Shopify customer is created or found and email consent is saved.
How often
One per successful submission.
Properties
customer id, question, source (weblayer, member_unlock, back_in_stock, preference_center), weblayer
Ids
cookie + email_id
Attributes set
email (pop-up and member unlock), shopify_customer_id
walkerOS name
email subscribed

consent

Triggered by
The visitor subscribes to email marketing anywhere: the pop-up email step, "Drop email to unlock" on member products, "Notify me" with "Also email me offers and news" ticked, or the preference center opt-in. Unticking the preference center opt-in withdraws it.
Fires when
After Shopify has saved the email consent. In the preference center only when the opt-in actually changed.
How often
One per subscription (or withdrawal).
Properties
action (accept or withdraw), category = email_newsletter, valid_until = unlimited, source (popup:<pop-up>, member_unlock, back_in_stock, preference_center)
Ids
cookie + email_id
walkerOS name
email consent

sms_subscribed

Triggered by
The visitor submits a phone number in the pop-up, or ticks the SMS box in the preference center (with a number, or one already on file).
Fires when
After SMS consent is saved on the Shopify customer.
How often
One per successful submission.
Properties
customer id, question, source (pop-up or preference_center), weblayer
Ids
cookie + email_id + phone_id
Attributes set
phone, shopify_customer_id
walkerOS name
sms subscribed

consent (SMS)

Triggered by
The visitor submits a phone number in the pop-up phone step (desktop, or phones when no 2-tap SMS number is set), or changes the SMS box in the preference center (unticking withdraws). With 2-tap on phones the opt-in comes from the SMS provider instead.
Fires when
After Shopify has saved the SMS consent. In the preference center only when the box actually changed.
How often
One per successful submission.
Properties
action (accept or withdraw), category = sms_newsletter, valid_until = unlimited, source (popup:<pop-up>, preference_center)
Ids
cookie + email_id + phone_id
walkerOS name
sms consent

back_in_stock

Triggered by
On a collection page, the visitor’s saved size is sold out and they submit their email in the "Notify me" pop-up.
Fires when
After the email passes validation. The notice alone writes nothing to Shopify; a Bloomreach scenario sends the back-in-stock email. With "Also email me offers and news" ticked the visitor is also subscribed (email_subscribed + consent, source back_in_stock).
How often
One per submission.
Properties
action = subscribe, product_id, variant_id, handle, title, size, source = plp
Ids
cookie + email_id
Attributes set
email
walkerOS name
product notify

profile_updated

Triggered by
The visitor saves "About you" in the preference center.
Fires when
After the Shopify customer is updated.
How often
One per save.
Properties
customer id, source, fields (first_name, last_name, birthday)
Ids
cookie + email_id
Attributes set
shopify_customer_id
walkerOS name
profile updated

identity_linked

Triggered by
The visitor logs in to a customer account.
Fires when
The first page request after login on this device.
How often
Once per device and customer (dc_linked cookie, 1 year).
Properties
customer id, source = login
Ids
cookie + email_id
Attributes set
shopify_customer_id
walkerOS name
identity linked

ab_test

Triggered by
The visitor sees a homepage slot that a running Sanity A/B test decided.
Fires when
The homepage renders the test’s default experience or a variant for this visitor. Review links (?_ab, ?_el) and Studio preview send nothing.
How often
Once per browser per test and variant.
Properties
test_id, test_name, variant_id, variant_name, variant_role (default or variant), audience, slot, element_type, status = assigned
Ids
cookie
walkerOS name
abtest assigned

banner

Triggered by
The pop-up and every interaction with it, tracked by walkerOS data-elb tags on its elements. One event type; `action` says what happened: exposed (pill shown; in the control arm of a pop-up experiment nothing is shown and a hidden tag sends displayed = false, so both arms are counted), open (pill clicked), step (a step is shown), answer (option, Next or form submitted), back, skip (skip this step), dismiss (pill × or No thanks), close (card ×), complete (thank-you shown).
Fires when
exposed: after the pop-up’s delay, when the visitor is eligible (not completed, not snoozed). All other actions: each time they happen. Preview (?_wl=1) sends nothing. The answers themselves (values, email, phone) are separate server events, never in these tags.
How often
exposed: once per browser session per pop-up. Other actions: every time.
Properties
action, weblayer, experiment, variant, displayed (exposed only), and while the card is open step, steps, step_key, step_kind
Ids
cookie
walkerOS name
banner exposed / open / step / answer / back / skip / dismiss / close / complete