WooCommerce CRO Technique
How to define RPV, conversion rate and AOV consistently for WooCommerce
This technique creates one written metric spec for WooCommerce and then applies the same formulas, filters and revenue basis in GA4, Looker Studio and Woo order checks. It helps when teams keep arguing because one report uses sessions, another uses active users, and Woo revenue is being compared against a different GA4 revenue basis.
Summary
Bottom Line: Define one session-based commercial spec and make every dashboard use it: RPV = net sales ÷ sessions, conversion rate = orders ÷ sessions, and AOV = net sales ÷ orders.
- For WooCommerce CRO, the least ambiguous reporting standard is usually session-based: sessions in the denominator for RPV and conversion rate, orders in the denominator for AOV. GA4 defines sessions and user metrics separately, so writing this down is what stops dashboard drift.
- Treat gross vs net as a decision, not an accident. WooCommerce’s own Analytics defines Net Sales as gross sales minus returns and coupons, while Total Sales adds taxes and shipping back in.
- In GA4, Session key event rate and User key event rate are built-in rate metrics, but they are not the same thing as every store’s chosen ecommerce “conversion rate”. If you mean orders per session, calculate and label that explicitly.
- Average purchase revenue per active user is close to a user-based revenue metric, but it is not the same as session-based RPV because the denominator is active users, not sessions.
- Build the formulas once as data-source fields in Looker Studio, or as GA4 calculated metrics where appropriate, so every chart pulls from the same defined fields rather than ad hoc chart maths.
How To Implement
Write the definitions in a one-page analytics spec before you touch any dashboard
Put the formulas in plain English and in formula form. For most WooCommerce CRO reporting, a practical house standard is:
RPV = Net sales / SessionsConversion rate = Orders / SessionsAOV = Net sales / OrdersThen write the exact meaning of each noun: Net sales means product revenue after refunds and coupons, excluding shipping and tax; Sessions means GA4 sessions; Orders means completed purchase transactions included in your chosen Woo status set. WooCommerce’s own Analytics definitions support the net-sales and AOV side of this, while GA4’s session and transaction metrics support the denominator choices.Freeze the WooCommerce commercial settings that drive your order-side truth set
In WP Admin → Analytics → Settings, review Excluded Statuses and Date Type. WooCommerce includes Processing, On hold, and Completed by default, excludes Pending payment, Cancelled and Failed by default, and lets you report Revenue and Orders by Date created, Date paid or Date completed; the default is Date paid. If you want a clean commercial baseline, Date paid is usually the safest match for paid-order reporting, but the important thing is that you document the choice and keep it identical everywhere.
Be explicit about checkout type, Draft orders and HPOS before reconciling order counts
This technique is sitewide rather than template-specific, so the metric definitions do not change between classic shortcode checkout and Cart & Checkout Blocks. What does change is order behaviour: WooCommerce documents that Draft orders are created when customers start checkout with the block-based checkout experience, so Draft orders should never leak into your reported “orders” count. Also note that HPOS is enabled by default for new installs from WooCommerce 8.2 onward, and order data lives in dedicated Woo order tables when HPOS is authoritative; any custom export, plugin or script you use for reconciliation needs to support that storage model.
Validate the GA4 purchase implementation before you trust any revenue metric
GA4’s recommended
purchaseevent requires atransaction_id, and Google says that parameter helps avoid duplicate purchase events. For revenue, Google recommends settingvalueto the sum of(price * quantity)for all items and says not to includeshippingortaxin that value; shipping and tax are separate optional parameters. GA4’s Purchase revenue metric is the sum of purchase revenue minus refunds, while Transactions counts completed purchases. That means the cleanest cross-platform match is to make your GA4 purchase payload reflect the same commercial basis you documented in Woo, then validate it against Woo before publishing any report.If you use the official Woo extension, check the exact plugin area rather than guessing
In the official Google Analytics for WooCommerce extension, GA4 is configured in WooCommerce → Settings → Integration → Google Analytics, with tracking options including Purchase Transactions, Add to Cart Events and Checkout Process Initiated. Woo also notes that purchase tracking with that extension requires a payment gateway that redirects to the thank you / order received page after payment. If you use WooCommerce Google Analytics Pro, its settings live in WooCommerce → Settings → Integrations → Google Analytics Pro, and Woo documents compatibility with Cart and Checkout blocks from WooCommerce 8.3 for that extension. Measurement note: before you sign off the dashboard, compare a sample of recent Woo orders against GA4 transactions to confirm that your live gateway flow actually fires the purchase event in your current checkout stack.
Build the shared formulas in GA4 only where they stay unambiguous
GA4 now supports Calculated metrics under Admin → Custom definitions → Calculated metrics, but standard properties are limited to 5 calculated metrics. A practical setup is to create:
RPV_session = {Purchase revenue} / {Sessions}AOV_reporting = {Purchase revenue} / {Transactions}and, if your team wants an explicitly order-based rate,Order conversion rate = {Transactions} / {Sessions}. This last formula is often the clearest replacement for the legacy ecommerce conversion rate because it is unambiguous and isolated from GA4’s wider key-event model. If your team instead wants “sessions with at least one purchase divided by sessions”, then use Session key event rate forpurchaseand label it exactly that way in the spec.Put the master formulas in the Looker Studio data source, not inside random charts
In Looker Studio, create data-source calculated fields rather than chart-specific fields, because data-source fields are available in any report that uses that source and can be reused in charts, controls and other calculated fields. The exact formulas are:
RPV = SUM(Purchase revenue) / SUM(Sessions)Conversion rate = SUM(Transactions) / SUM(Sessions)AOV = SUM(Purchase revenue) / SUM(Transactions)Create them by editing the data source, clicking Add a field, naming the field, and saving the formula. This is the single best way to stop one tab, one scorecard or one copied chart from quietly using a different denominator.Standardise the segmentation layer, not just the top-line formulas
For session-based CRO views, use session-scoped dimensions with session-based metrics: Device category, Country, and Session default channel group are the clean defaults. Use First user default channel group only when you deliberately want first-touch acquisition analysis, because it answers a different question. For “new vs returning”, document the exact lens you mean: GA4 exposes New users and Returning users as user metrics, while New / established is a user dimension defined around users first seen within the last 7 days, so it is not a clean synonym for “returning”. If you need a reusable new-vs-returning split in reports, define that logic explicitly and keep the same logic in every report.
Add a Woo reconciliation view and only reconcile after data has settled
Use WooCommerce’s Analytics exports or report CSVs as the order-side check, because Woo lets you download report tables to CSV and control the included statuses and date basis from Analytics → Settings. GA4, meanwhile, warns that data processing can take 24–48 hours, and WooCommerce 10.5 adds an Analytics Updates setting with Scheduled imports every 12 hours or Immediately for faster refreshes. A safe operating rule is: do not judge metric drift from same-day data. Reconcile on a stable lookback window after GA4 and Woo Analytics have both finished processing.
How To Measure
The primary KPI here is metric consistency: the same RPV, conversion rate and AOV definition showing the same answer in every approved dashboard for the same date range, market and segment. In GA4, the core inputs are purchase, refund and session_start, surfaced through Purchase revenue, Transactions, Sessions and, if you use that definition, Session key event rate. Read those metrics in the segment cuts that matter operationally: Device category, Country, Session default channel group, and your documented new-vs-returning split rather than sitewide only. Success looks like one agreed formula library, no silent denominator swaps, and Woo month-end checks lining up with GA4/Looker after data has settled and after consent-related data loss is understood. Guardrail metrics are purchase event coverage, refund coverage, unexpected shifts in transaction_id deduplication, opt-in or consent-related tracking loss where relevant, and any increase in unexplained gap between Woo net sales/orders and GA4 purchase revenue/transactions after the same date and status rules are applied.
Pitfalls
- Myth: “GA4 has one standard conversion rate just like old Universal Analytics.” It does not. GA4 exposes Session key event rate and User key event rate, and those are different from an explicitly defined orders per session formula. If you do not name the exact formula, people will compare unlike-for-like numbers.
- Myth: “Average purchase revenue per active user is the same thing as RPV.” It is not. That metric is user-based and uses active users as the denominator, while session-based RPV uses sessions.
- Mistake: mixing Woo “Total Sales” with GA4 purchase revenue. Woo Total Sales includes taxes and shipping, while Woo Net Sales excludes them and subtracts returns and coupons. Google recommends excluding shipping and tax from the purchase event value, and GA4 keeps shipping and tax as separate parameters. If you blend those revenue bases, your AOV and RPV will drift even when tracking is otherwise correct.
- Mistake: using session metrics against first-user acquisition dimensions without saying so. Session default channel group and First user default channel group are both valid, but they answer different questions. Use one deliberately; do not swap them across tabs and still call the KPI the same thing.
- Mistake: trusting same-day reconciliation. GA4 says processing can take 24–48 hours, and Woo Analytics imports are also scheduled or immediate depending on settings. Daily noise is normal; persistent drift after settlement is the real problem.
- Mistake: assuming every paid order will appear in GA4 if Woo has it. Woo’s official free GA extension says purchase tracking requires a gateway that returns users to the Woo thank-you page. If your gateway flow, consent setup or extension support is incomplete, Woo can record the order while GA4 misses the purchase event.
- Edge case: block checkout Draft orders. Woo documents that Draft orders are created in block-based checkout. If someone exports Woo orders carelessly, Draft can pollute order counts even though it should not be treated as a purchase.
- Edge case: Woo core Order Attribution is not a substitute for GA4 session history. Woo’s Order Attribution Tracking is last-click, session-scoped, and Woo says it cannot be used to track visitors across sessions. It is useful for order metadata and order-side diagnostics, but it is not the same model as user-based GA4 acquisition reporting.
Examples
FAQs
For WooCommerce CRO, use sessions unless you deliberately want a user-based acquisition metric and are willing to label it that way everywhere. GA4 defines sessions and user metrics separately, and its user-based revenue metric uses active users, not sessions.
No. It is purchase revenue divided by active users, so it is only “RPV” if your written spec says that a visitor means an active user rather than a session. For most WooCommerce CRO dashboards, that is not the cleanest choice.
Yes, but only if your spec says conversion rate means sessions with the purchase key event divided by sessions. If what you really mean is orders per session, calculate Transactions ÷ Sessions and label it as order conversion rate so no-one confuses it with GA4’s broader key-event model.
The usual causes are different revenue bases, different included order statuses, late refund timing, consent-related data loss, or a purchase implementation that does not perfectly mirror Woo order totals. Woo’s official GA extension also warns that users must grant consent for Google platforms to capture data, which can create discrepancies between store data and GA4.
Sources & Further Reading
- Analytics and Sales Reports Documentation – — WooCommerce’s primary definitions for Gross Sales, Total Sales, Net Sales, Orders, Average Order Value, plus Analytics → Settings for excluded statuses, date type and update behaviour. Date: date not stated on page; current documentation accessed June 2026.
- Order Statuses Documentation – — Official Woo definitions for core order statuses and the note that Draft orders are created with block-based checkout. Date: date not stated on page; search result showed publication in 2024.
- High-Performance Order Storage Documentation – — Official HPOS documentation, including the note that HPOS is enabled by default for new installs from WooCommerce 8.2 and the admin path for storage settings. Date: date not stated on page; search result showed publication in 2022.
- Google Analytics for WooCommerce Documentation – — Official setup path for the free Woo GA extension, purchase tracking options, gateway redirect caveat, and consent-related discrepancy note. Date: date not stated on page; search result showed publication in 2024.
- WooCommerce Google Analytics Pro Documentation – — Official setup path for the Pro extension and Woo’s note that the extension supports Cart & Checkout Blocks from WooCommerce 8.3. Date: date not stated on page; search result showed publication in 2015 with later updates.
- About Analytics sessions – — Google’s official definition of sessions, session timeout, session estimation, and the note that standard reports, Explorations and Looker Studio use HLL++ for session counts. Date: date not stated on page.
- Understand user metrics – — Google’s definitions of Total users, Active users, New users and Returning users, which is essential when deciding whether RPV is session-based or user-based. Date: date not stated on page.
- Analytics dimensions and metrics – — Google’s master list for Session key event rate, User key event rate, Purchase revenue, Transactions, Returning users, Device category, Country, and traffic-source dimensions. Date: date not stated on page.
- Recommended events – — Google’s official purchase event requirements, including transaction_id, shipping, tax, customer_type, and the instruction that value should exclude shipping and tax. Date: last updated 2026-06-03 UTC.
- About calculated fields – — Official Looker Studio guidance on data-source versus chart-specific calculated fields and why data-source fields are reusable across reports. Date: last updated 2026-06-15 UTC.
- Add, edit, and troubleshoot calculated fields – — Official step-by-step instructions for creating data-source and chart-specific calculated fields in Looker Studio. Date: last updated 2026-06-15 UTC on the page footer; search result highlighted 2026-04-23 update history.
- Create calculated metrics – — Official GA4 instructions for creating calculated metrics, including the 5 calculated metrics per standard property limit. Date: date not stated on page.
Want us to implement this for you?
We run measured CRO consultancy for WooCommerce. If you want help prioritising, testing & implementing these improvements, tell us about your store.
Book PilotAbout This Page
- Written By: Eliot Webb – Founder & WooCommerce CRO Consultant
- Last Reviewed: 17 Jun 2026
- Last Updated: