# Shopify24H CRO Kit

Status: spec/template ready
Date: 2026-05-07

The CRO Kit is the shared conversion tracking, attribution, and experiment layer
for Shopify24H storefronts and Meravoq-managed stores. It prevents each new
single-product store from rebuilding analytics by hand.

## Scope

The kit covers:

- storefront event schema
- UTM capture and checkout handoff
- provider adapters for Meta Pixel, GA4, PostHog, TikTok Pixel, and future tools
- Shopify checkout and purchase bridge expectations
- offer and variant analytics
- CRO experiment registry
- launch and scale QA gates

The kit does not publish ads, mutate Shopify, change checkout settings, or write
credentials by itself. Those actions remain approval-gated local-agent work.

## Default Storefront Events

| Event | When fired | Required properties |
| --- | --- | --- |
| `view_page` | First page load or route view | `store_id`, `launch_id`, `page_type`, `url`, `utm` |
| `view_product` | Product block or hero becomes visible | `product_id`, `product_handle`, `offer_stack_id` |
| `view_offer` | Offer or bundle row enters viewport | `variant_id`, `offer_id`, `quantity`, `price`, `compare_at_price` |
| `select_variant` | Buyer selects a bundle/variant | `variant_id`, `offer_id`, `quantity`, `price`, `position` |
| `click_checkout` | Buyer clicks checkout CTA | `variant_id`, `checkout_url`, `utm`, `cta_id`, `position` |
| `scroll_depth` | 50%, 75%, and 90% page depth | `depth`, `page_type`, `device_type` |
| `view_faq` | FAQ section enters viewport or item opens | `faq_id`, `question` |
| `view_policy` | Refund, privacy, terms, or contact viewed | `policy_type`, `surface` |
| `countdown_seen` | Countdown/urgency block enters viewport | `module_id`, `remaining_seconds`, `offer_id` |
| `experiment_exposure` | Visitor is assigned to an experiment variant | `experiment_id`, `variant_key`, `assignment_id` |

## Standard Properties

Every event should include:

- `schema_version`
- `event_id`
- `event_name`
- `occurred_at`
- `store_id`
- `launch_id`
- `brand_id`
- `session_id`
- `anonymous_id`
- `device_type`
- `url`
- `referrer`
- `utm_source`
- `utm_medium`
- `utm_campaign`
- `utm_content`
- `utm_term`
- `ad_id`
- `adset_id`
- `campaign_id`
- `provider_status`

Do not include customer names, email addresses, phone numbers, full addresses, or
payment data in storefront events.

## Provider Mapping

| CRO event | Meta | GA4 | PostHog | TikTok |
| --- | --- | --- | --- | --- |
| `view_page` | `PageView` | `page_view` | `view_page` | `PageView` |
| `view_product` | `ViewContent` | `view_item` | `view_product` | `ViewContent` |
| `view_offer` | custom | `view_promotion` | `view_offer` | custom |
| `select_variant` | custom | `select_item` | `select_variant` | custom |
| `click_checkout` | `InitiateCheckout` or custom pre-checkout | `begin_checkout` | `click_checkout` | `InitiateCheckout` |
| `scroll_depth` | custom | `scroll` | `scroll_depth` | custom |
| `view_faq` | custom | custom | `view_faq` | custom |
| `view_policy` | custom | custom | `view_policy` | custom |
| `countdown_seen` | custom | custom | `countdown_seen` | custom |
| `experiment_exposure` | custom | `experiment_viewed` | `experiment_exposure` | custom |

Meta optimization should not start at Purchase until the purchase path is
observable. Early tests may optimize to landing page view, checkout click, or
InitiateCheckout depending on event maturity.

## UTM And Checkout Handoff

All storefront checkout links should preserve:

```text
utm_source
utm_medium
utm_campaign
utm_content
utm_term
ad_id
adset_id
campaign_id
creative_id
placement
```

The storefront should append these to Shopify cart permalinks when the target
checkout URL permits query parameters. When the checkout domain differs from the
storefront domain, the QA evidence must state which provider is responsible for
purchase attribution on the Shopify side.

## Shopify Purchase Bridge

Use Shopify-native customer events, the Facebook & Instagram by Meta app, GA4, or
another approved Shopify pixel path for purchase-side tracking. The Cloudflare
storefront may track pre-checkout behavior, but Shopify checkout and purchase
events need a Shopify-compatible path.

Required bridge evidence:

- product/variant IDs used by storefront offers
- checkout URL or cart permalink per offer
- UTM preservation test
- Shopify-side purchase or test-order tracking path
- provider test event screenshot or payload sample
- blocker if purchase cannot be observed yet

## CRO Experiment Registry

Every experiment should be small enough to read from early traffic:

| Field | Meaning |
| --- | --- |
| `experiment_id` | Stable id, for example `exp-hero-price-anchor-001`. |
| `store_id` | Store being tested. |
| `hypothesis` | What conversion behavior should improve and why. |
| `primary_metric` | Usually `checkout_click_rate`, `variant_select_rate`, or `purchase_rate`. |
| `guardrail_metric` | Bounce, refund risk, compliance risk, or checkout error rate. |
| `variants` | Control and treatment keys. |
| `assignment_rule` | How visitors are assigned. |
| `start_stop_rule` | Budget, time, or sample threshold. |
| `decision` | `continue`, `iterate`, `scale`, `pause`, or `kill`. |

Do not run multiple overlapping page experiments unless the assignment and
metrics can separate their effects.

## First 3 Tests For A New One-Product Store

1. Offer ladder: single vs two-pack featured vs three-pack featured.
2. Hero promise: product-first benefit vs ritual/process framing.
3. Trust block order: reviews before use steps vs use steps before reviews.

## Launch QA Gates

Before paid traffic:

- `view_page` fires once per page view.
- `view_product` fires when the product block is visible.
- Every bundle emits `view_offer`.
- Variant changes emit `select_variant` with correct `variant_id` and price.
- Checkout clicks emit `click_checkout` and preserve UTM parameters.
- Policy links remain on the branded surface.
- Meta/GA4/PostHog/TikTok provider status is either `verified` or `blocked`.
- Shopify-side purchase tracking path is documented.

Before scale:

- event counts reconcile within a known tolerance across providers
- device split is visible
- offer selection share is visible
- checkout click rate is visible by campaign and variant
- refund/support signals are checked before increasing spend

## Metrics To Read First

| Metric | Formula | First use |
| --- | --- | --- |
| `checkout_click_rate` | `click_checkout / view_page` | Landing page quality. |
| `offer_select_rate` | `select_variant / view_offer` | Offer ladder clarity. |
| `featured_offer_share` | featured offer selections / all selections | Whether the intended bundle is winning. |
| `checkout_start_rate` | Shopify begin checkout / click checkout | Handoff quality. |
| `purchase_rate` | purchase / view_page | Full-funnel result after purchase is observable. |
| `gross_margin_after_ads` | revenue - COGS - shipping - ad spend - refunds | Scale safety. |

## Agent Handoff

Conversion and Analytics agents should return:

- event map
- provider map
- UTM policy
- QA evidence
- missing events
- experiment registry entries
- metrics snapshot fields changed
- scale or blocker recommendation
