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.
| Cookie | What it holds | Lifetime |
|---|
dc_vid | The visitor id: a random UUID, the Bloomreach soft id cookie and the BigQuery cookie column. | 2 years, renewed on every visit |
dc_ses | The 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_a | Which visit was already announced (session_start sent). | 1 year |
dc_profile | The personalization snapshot (preferences, segments), signed so it cannot be edited. | 30 days |
dc_linked | This browser is already linked to its Shopify customer. | 1 year |
dc_cs | Limits cart snapshots (cart_state) to one per half hour. | 30 minutes |
session | Customer 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