Text version of this lessonExpand
GA4 setup is not just a code snippet. For an ecommerce store, setup is complete only when you have a reviewable acceptance packet: clear account structure, one installation path, test-order proof, internal traffic boundaries, consent status, and a rollback record.
Lesson output: GA4 setup acceptance packet
After this lesson, you should be able to hand over a setup table, not only say "GA4 is installed." The table should explain which path sends GA4 data, who published it, which events were tested, where the test-order proof lives, how internal traffic is handled, and whether Google Ads can use the key event.
| Handoff item | What to record | Pass standard |
|---|---|---|
| Account structure | Account, property, data stream, Measurement ID, timezone, currency, admins | The team knows the main data source |
| Installation path | Google tag, GTM, Shopify Google & YouTube app, or Customer events | One primary path sends the ecommerce events |
| Event acceptance | page_view, view_item, add_to_cart, begin_checkout, purchase | DebugView and a test order prove order and parameters |
| Internal traffic | Office IP, development site, test devices, agency sessions | A tested label or filter plan exists |
| Privacy and Ads | Consent Mode, customer privacy, Google Ads link, conversion import | Consent state and ad optimization signals have clear boundaries |
| Rollback record | Publisher, publish time, version record, pause or restore path | The team can pause the wrong path if purchase duplicates or disappears |
Correct the first mistake: Realtime users do not prove setup quality
Realtime traffic only proves that GA4 received some data. It does not prove that purchase fired, transaction_id exists, value, currency, and items are complete, or that the site is free from duplicate tracking.
Ecommerce setup needs a chain test: a shopper views a product and fires view_item, adds to cart and fires add_to_cart, enters checkout and fires begin_checkout, then completes a test order that fires purchase once with transaction_id, value, currency, and items. For example, a 20oz tumbler test order should be traceable in both Shopify orders and GA4 DebugView.
Stop rule
If you do not have a test order, DebugView screenshot, single installation path, and rollback record, do not import GA4 purchase into Google Ads and do not use this data to judge ad performance yet.
Set the account structure before creating the stream
GA4 is organized as Account → Property → Data stream. Most independent stores can start with one company or brand account, one main store property, and one web data stream. If you run multiple brands, country stores, or business lines, define naming and permission rules before data starts flowing.
- Account: Company or brand group name.
- Property: Brand plus main market, such as Brand - Global Store.
- Data stream: Main domain, such as www.example.com.
- Access: Grant access to individual Google accounts instead of sharing one login.
When creating the property, timezone affects daily and weekly reporting and conversion date assignment. Default currency affects revenue and conversion value display. Choose the settings based on how the team actually reviews performance, and avoid changing them often. GA4 revenue is not profit; profit still needs costs, refunds, shipping, and ad spend.
Three common installation paths: choose one primary path
The installation path is where the GA4 tag enters the site. More paths do not mean better tracking. More paths often create duplicate counting. Choose the primary path first, then write down the backup and rollback path.
| Path | Best fit | Acceptance focus | Main risk |
|---|---|---|---|
| Google tag | Simple sites, a small number of Google products, early lightweight tracking | One tag path on key pages and stable DebugView data | Governance and version history are weaker as tags grow |
| Google Tag Manager | Multiple tags, multiple teams, preview and version control needs | Container version, triggers, variables, and publish record are reviewable | Wrong triggers or variables can duplicate or miss events |
| Shopify Customer events / pixels | Shopify stores, especially checkout and purchase tracking | Pixels are clear in Customer events, and purchase reconciles to a Shopify test order | Old theme code, sandbox behavior, and customer privacy can create gaps |
Duplicate tracking guard: check four entry points before launch
The most common failure is not missing GA4. It is the theme, GTM, Shopify apps, and custom pixels all sending the same GA4 events. Check every entry point before launch.
- Theme code: Search theme.liquid, head custom code, and old Additional scripts for gtag, GTM, old UA, or third-party scripts.
- GTM container: Check GA4 config, GA4 event tags, triggers, variables, and duplicate firing in preview mode.
- Shopify apps and Customer events: Review Google & YouTube app, app pixels, custom pixels, and old pixel migration status.
- Third-party apps: Confirm whether review, popup, affiliate, email, heatmap, or ad apps inject tracking tags.
If no one can explain which entry point sent a page_view or purchase event, the setup is not ready for ad or analytics teams.
Enhanced measurement helps, but it does not replace ecommerce events
Enhanced measurement can collect page_view, scroll, outbound click, site search, video engagement, file download, and form interaction events. It is useful for page and content analysis, but it does not replace view_item, add_to_cart, begin_checkout, purchase, refund, or the items array.
Ecommerce events need separate acceptance because ad optimization, funnel analysis, product sales, and order reconciliation depend on their parameters. If purchase has no transaction_id, duplicate order checks are weak. If currency is missing, multi-currency revenue gets messy. If items are missing, you cannot explain which products sold.
Handle Consent Mode, customer privacy, and internal traffic early
If you sell into the EU, UK, EEA, or other privacy-sensitive markets, GA4 setup cannot stop at the tag. Check the cookie banner or CMP, Consent Mode, Shopify customer privacy, and how events behave before and after consent.
Internal traffic also needs care. In GA4, exclude filters permanently affect processed data once active. A safer path is to identify internal traffic first, keep the filter in testing, then activate it only after checking that real shoppers are not affected.
DebugView acceptance: walk through the store like a real shopper
- Open DebugView and confirm the test device appears in the debug stream.
- Visit home, collection, product, and cart-entry pages, and confirm page_view is not duplicated.
- Open a product page and confirm view_item includes item_id, item_name, price, and currency.
- Add to cart and confirm one click creates one add_to_cart.
- Enter checkout and confirm begin_checkout has reasonable value, currency, and item details.
- Place a test order and confirm purchase includes transaction_id, value, currency, and items, and matches the Shopify order ID.
- Check standard reports the next day. Do not rely only on Realtime because standard reports can have processing delay.
Final deliverable: GA4 setup handoff packet
The handoff packet should include the primary path, test-order proof, internal traffic rule, Google Ads link status, and rollback method. GA4 setup will be reused by Ads, funnel, and profit analysis. A clear record helps the team avoid treating tracking issues as business issues.
If purchase, items, or transaction_id are not verified, do not move straight into funnel reading. Continue to event naming, parameter design, and tracking QA first.