A busy Friday night can produce three different stories: WooCommerce shows orders, your advertising dashboard claims conversions, and Google Analytics reports something else entirely. Before increasing the marketing budget, you need to understand what each system actually measured.
GA4 can connect visits, menu browsing, checkout activity, and purchases—but installing a tracking tag isn’t enough. This guide walks through a WooCommerce setup you can test, including the restaurant-specific details that complicate reporting: delivery charges, tips, payment redirects, and QR ordering.
What GA4 Can Tell You About Your WooCommerce Store
Google Analytics 4 records activity as events. A page view is an event. So is adding a pizza to the cart or completing an order. Events can carry parameters that describe what happened, such as the product, currency, and transaction ID.
Basic traffic tracking answers questions about visits: where people came from, which pages they opened, and which devices they used. Ecommerce tracking adds the commercial detail. Without it, GA4 might know that someone visited your checkout but have no purchase value or product information.
A properly configured store can investigate which newsletters generate orders, whether mobile shoppers progress through checkout, and which menu items earn revenue. These are different questions from “Which page gets the most traffic?” A popular menu page isn’t necessarily a profitable one.
For restaurants using FoodMaster’s WooCommerce restaurant ordering system, delivery, pickup, and dine-in ordering create useful measurement opportunities. However, don’t assume those order types automatically appear in GA4. Reporting them separately requires the integration to send an appropriate parameter, plus a custom dimension where needed.
WooCommerce remains the source of truth for recorded orders. Use its order records and payment gateway records to confirm payments, statuses, and refunds. GA4 describes the customer journey it could observe; consent choices, blocked scripts, and interrupted payment returns can prevent it from recording an otherwise valid order.
Create Your GA4 Property and Connect It to WordPress
Create the property and web stream
In Google Analytics, open Admin and create a property under the appropriate account. Give it a recognizable name, then choose the reporting time zone and currency carefully. Matching WooCommerce’s operating time zone makes daily comparisons easier, particularly when late-night orders straddle midnight.
Complete the business information prompts, then create a Web data stream using your store’s main HTTPS address. Open the stream details and find the measurement ID beginning with G-. That identifies the destination for your web events; it isn’t the same as a Google Tag Manager container ID.
Enhanced measurement can collect interactions such as scrolls and outbound clicks. It doesn’t turn WooCommerce orders into ecommerce events. You still need an integration that understands products, carts, and purchases.
Check what already sends tracking
Before installing anything, inspect your active plugins, theme settings, header/footer scripts, consent platform, and Google Tag Manager container. A previous developer may already have added a Google tag.
Use Tag Assistant to inspect the storefront and note which destinations receive data. Multiple tags aren’t automatically wrong, but two implementations sending the same ecommerce events to one GA4 property will distort reporting. Choose one owner for ecommerce tracking.
Connect the official WooCommerce integration
The official WooCommerce Google Analytics integration is the main walkthrough here. Before installation, check its current listing, documentation, changelog, and support notes against your WordPress, WooCommerce, and PHP versions. Confirm support for your checkout type and any custom ordering interface; plugin capabilities can change between releases.
- Back up the site and test changes on staging where possible, using a separate test stream or property.
- Install and activate WooCommerce Google Analytics, confirming the publisher and package identity.
- Open WooCommerce settings and locate its Google Analytics integration panel, commonly under Integration.
- Enter your GA4 measurement ID and enable the ecommerce tracking options offered by the installed version.
- Save, clear relevant caches, and test the live storefront’s consent-controlled tracking.
Option names vary by release, so use the current documentation rather than copying settings from an old screenshot. If the integration offers a separate base-tag switch, coordinate it with any existing tag. Don’t disable the only base tag or leave two implementations firing duplicate page views.
Finally, check whether script optimization delays analytics until an interaction. A purchase event that never gets a chance to run is effectively missing tracking, even when the settings look perfect.
Configure Ecommerce Events and Check the Data They Send
Start with four events. They provide a useful product-to-purchase journey without creating an unnecessarily elaborate tracking project. The event names must match GA4’s recommended names exactly.
| Event | When it should fire | Parameters to inspect |
|---|---|---|
| view_item | When a customer views a product’s details. | items containing item_id or item_name; value and currency when supplied. |
| add_to_cart | After a product is successfully added to the cart. | items, quantities, prices, and value with currency. |
| begin_checkout | When the customer starts checkout. | items, value, currency, and coupon when applicable. |
| purchase | When an order reaches the integration’s defined purchase trigger. | Unique transaction_id, items, value, currency, and separate tax or shipping parameters where supported. |
The items parameter is an array of product objects, not a single product title. Each object should identify the item and, for useful revenue reporting, include price and quantity. Stable item IDs help avoid splitting one product’s history when its display name changes.
Check menu modifiers too. A burger with extra cheese might be represented as a higher-priced item, a variation, or separate data, depending on your ordering setup. Verify that the event reflects the amount charged rather than assuming every add-on plugin integrates identically.
Separate built-in tracking from extra work
The WooCommerce integration supplies ecommerce events for supported interactions when the relevant tracking options are enabled. That doesn’t mean every GA4 recommended event is implemented, or that every custom button triggers it.
Test quick-add menus, AJAX carts, product options, and Checkout Blocks separately. Events such as add_shipping_info and add_payment_info may require additional implementation. Only build reports around events you have actually observed; adding unsupported events to a funnel creates artificial drop-offs.
Decide what revenue means
GA4’s recommended purchase value represents item revenue after discounts, excluding separately reported shipping and tax. For an illustrative order with $30 of food, a $5 discount, $4 delivery charge, $2 tax, and $3 tip, the customer pays $34. The item-based purchase value would be $25 if the tip is treated outside the merchandise items.
That last distinction matters. A delivery charge might be WooCommerce shipping or a fee. A tip might also be stored as a fee or another order component. The integration determines what gets sent, and its mapping may not match your preferred reporting definition.
If you use Tipping’s checkout tip options for WooCommerce, inspect an order containing a tip and compare its analytics payload with the WooCommerce breakdown. Don’t assume gratuities are included in—or excluded from—GA4 revenue. Document the mapping so your weekly comparisons use equivalent figures.
[IMAGE: Annotated WooCommerce test order beside a GA4 purchase payload, showing discounted food value, delivery, tax, tip, currency, items, and transaction ID]
Test Tracking Before Trusting Your Reports
A visible purchase event proves only that something fired. It doesn’t prove the amount is right, the transaction ID is unique, or the event fires once. Run a controlled order with a recognizable basket and record the expected amounts before checking analytics.
Use Tag Assistant and DebugView together
Connect Tag Assistant to your store and follow the customer journey. Use GA4 DebugView to examine incoming debug-enabled events; Tag Assistant can enable debug mode for a connected session. If nothing appears, check the property, tag destination, consent state, and whether debug mode is active.
- Open a product, add it to the cart, and start checkout. Confirm the expected event sequence.
- Complete an authorized test payment using a supported sandbox, or a small real transaction if necessary.
- Inspect purchase parameters: transaction_id, currency, value, items, quantities, tax, and shipping.
- Compare the event with the actual WooCommerce order, including discounts and fees.
- Reload the order confirmation page and check for another purchase dispatch.
GA4 uses transaction IDs to help deduplicate purchases, but don’t make that your only safeguard. Fix repeated triggers and verify that the integration sends a stable, nonempty ID for each order. Avoid transaction identifiers containing customer information.
Test the awkward routes
Repeat the journey on a real phone and through each major payment method. Off-site payment redirects deserve particular attention: a customer can pay successfully and close the browser before returning. Browser tracking tied to the thank-you page can miss that order.
Check the Checkout Block explicitly if your store uses it. A classic-checkout test doesn’t establish block compatibility. Also test failed payments, retries, and cash-on-delivery orders: the integration may record an order submission before payment is collected, depending on its trigger.
Respect consent and keep personal data out
Test both accepted and rejected consent states. Depending on the consent implementation, rejection may block analytics entirely or alter what signals are sent. Browser blockers can also limit collection. Don’t work around those choices merely to make totals match.
Never send customer names, email addresses, delivery addresses, or order notes to GA4. Inspect page URLs and titles too: personal information can leak through query strings or customized confirmation pages. Arbitrary hashing doesn’t make customer information suitable for ordinary analytics parameters.
For implementation details, locate the existing cookie-consent tutorial through WPSlash’s cookie-consent tutorial search and verify the configuration against your current consent plugin. DebugView and Realtime are useful during testing; standard reports can take longer to populate.
Build a Checkout Funnel and Measure Marketing Campaigns
Create a funnel based on observed events
In GA4, open Explore and create a Funnel exploration. Add steps using event-name conditions: view_item, add_to_cart, begin_checkout, and purchase. Use indirectly followed steps when other events can legitimately occur between them.
Start with a closed funnel to examine users entering through the first step. An open funnel allows users to enter at later steps, which can reveal different journeys. Neither is universally correct; they answer different questions.
A restaurant quick-order menu may let customers add items without opening product details. In that case, starting at view_item excludes valid ordering paths. Use add_to_cart as the first step, or maintain a separate funnel for the product-detail route.
Break results down by device category before making design changes. A mobile-specific fall between cart and checkout might warrant checking sticky buttons, required fields, or payment availability. First rule out a mobile tracking failure.
Funnel drop-offs are not a list of recoverable abandoned carts. Explorations measure observed user progression under your configured rules; they don’t automatically identify a contactable shopper, a saved basket, or permission to send a reminder.
Label incoming campaigns consistently
UTM parameters describe incoming marketing links. Keep a shared naming convention, preferably lowercase, so inconsistent spelling doesn’t fragment campaign reporting. These illustrative values can be appended to your own ordering-page address:
| Placement | Example parameters | Purpose |
|---|---|---|
| Restaurant newsletter | utm_source=newsletter&utm_medium=email&utm_campaign=friday_family_meal | Separate email-driven orders from other traffic. |
| Google Business Profile ordering link | utm_source=google&utm_medium=organic&utm_campaign=business_profile_ordering | Identify visits through the tagged profile link. |
| Printed QR menu | utm_source=table_menu&utm_medium=qr&utm_campaign=dine_in_menu | Identify scans of that printed menu placement. |
The custom qr medium may appear as Unassigned in GA4’s default channel grouping. You can still analyze its source/medium directly or define a custom channel group. For FoodMaster QR table ordering, preserve the ordering system’s required table-identification parameters when adding campaign tags.
Keep UTMs off internal navigation. Tagging your own menu-to-checkout links pollutes campaign data rather than identifying a new marketing visit.
In Traffic acquisition, compare session source/medium or session campaign against purchases and Purchase revenue. Use that metric rather than casually substituting Total revenue, which has a broader definition. Advertising attribution reports answer a different credit-allocation question, so they needn’t match session-based reporting exactly.
[IMAGE: GA4 checkout funnel with add-to-cart, begin-checkout, and purchase steps, alongside campaign rows for newsletter, Google Business Profile, and printed QR menus]
Troubleshoot Missing Sales and Create a Weekly Reporting Routine
Investigate discrepancies by matching individual transaction IDs before comparing whole-month totals. A handful of known orders usually reveals more than repeatedly refreshing the revenue chart.
| Symptom | Checks and fixes |
|---|---|
| Missing purchases | Check consent, blockers, JavaScript errors, payment returns, and the integration’s order-status trigger. Confirm purchases reach the intended property. |
| Duplicate events | Inspect plugins, theme scripts, and Tag Manager for overlapping triggers. Check confirmation-page reloads and stable transaction IDs. |
| Payment provider appears as a referral | Review unwanted-referral settings in the web stream’s Google tag configuration. Use cross-domain measurement only for domains you control and can tag appropriately. |
| Reports look empty or incomplete | Check DebugView or Realtime first, then allow standard processing—often 24–48 hours. Verify date ranges, filters, and property selection. |
| Daily figures differ | Align time zones and revenue definitions. Account for consent gaps, refund handling, and unpaid or offline-payment orders. |
Unwanted-referral settings prevent specified referrals from being treated as new referral sources; they don’t magically repair every broken payment journey. Likewise, a WooCommerce refund won’t necessarily generate a GA4 refund event. Confirm integration support before expecting refunds to reconcile.
Once tracking is stable, use this weekly checklist:
- Compare GA4 Purchase revenue with the equivalent WooCommerce revenue basis.
- Compare purchase counts and transaction IDs with eligible WooCommerce orders.
- Calculate average order value using consistent revenue and order definitions.
- Review checkout progression by device and investigate sudden changes.
- Compare campaign purchases and revenue, not just sessions.
- Record promotions, outages, tracking changes, and unusual refund activity.
Keep repeat-order reporting separate. GA4 visitor retention isn’t a dependable substitute for customer-level purchase history: devices, consent, and browser storage affect recognition. Use WooCommerce customer/order reporting for repeat-purchase analysis, with appropriate privacy controls.
The goal isn’t to force every dashboard to display the same number. It’s to know which orders analytics observed, what its revenue includes, and where customers encounter friction. With those foundations checked, campaign and checkout decisions become much easier to defend.
Commission-free ordering
Run restaurant orders on your own WordPress site
FoodMaster adds delivery, pickup, dine-in, POS, and kitchen tools — with zero per-order fees.