GA4, Google & ChatGPT Ads with Google Tag Manager & Server-Side Tagging
To accept the cookie and load the video press “Load video”.
To accept the cookie and load the video press “Load video”.
Video
Description
Highlights
- Supported consent managers: Shopware standard, Cookiebot, Usercentrics, CMP, CCM19, Acris, CookieScript, CookieFirst, Cookie Consent Plus, Didomi
- Supported tracking pixels: GA4, Google Ads, ChatGPT Ads, Microsoft Ads, Meta Pixel, Pinterest, TikTok
- Client-side and server-side tagging via Google Tag Manager
- Google Consent Mode V2 including Advanced Consent Mode
- Free setup by an expert – book an appointment directly
Features
- Set up in minutes: pre-configured Google Tag Manager container available for download
- Supports all common consent managers: Shopware standard, Cookiebot, Usercentrics, CMP, CCM19, Acris, CookieScript, CookieFirst, Cookie Consent Plus, Didomi
- Google Consent Mode V2 and Advanced Consent Mode incl. functionality_storage, personalization_storage and security_storage
- Client-side and server-side tagging: add your own server-side tag manager script
- All key GA4 events: view_item, add_to_cart, remove_from_cart, add_to_wishlist, begin_checkout, add_payment_info, add_shipping_info, purchase, search, login, sign_up, generate_lead
- Google Ads: dynamic remarketing and dynamic conversion tracking
- Enhanced conversion tracking (email, phone number, first name, last name, address) – hashed with SHA-256
- UTM parameter tracking on every order, configurable per sales channel, incl. organic referrer
- Captures traffic from AI assistants and ChatGPT Ads
- Additional channels: Microsoft Ads, Meta Pixel, Pinterest, TikTok
- Customer lifetime value, including guest orders
- New vs. returning customers (customer_type), customer group in the purchase event
- Net or gross values – net follows the GA4 recommendation
- User ID tracking and analysis by brand, category, search term and payment method
- B2B option: hide prices for guest users, localStorage entries with TTL
About the Extension
Clean GA4, Google Ads and ChatGPT Ads tracking for Shopware
This extension connects Google Analytics 4, Google Ads and further advertising channels entirely through Google Tag Manager – client-side and server-side, GDPR-compliant and without any changes to your template. You get a pre-configured Tag Manager container to download and are up and running within minutes.
Free setup by an expert: Simply book an appointment!
Features for GA4
- Complete GA4 dataLayer: add_payment_info, add_shipping_info, add_to_cart, add_to_wishlist, add_to_compare, begin_checkout, purchase, remove_from_cart, select_item, view_cart, view_item, view_item_list, search, login, sign_up, generate_lead
- Net or gross values for value & price – net follows Google’s recommendation
- Google Consent Mode V2 including Advanced Consent Mode
- Client-side and server-side tagging: add your own server-side tag manager script
- Data protection implementation in the standard Shopware data protection plugin
- Contact form tracking
- Manufacturers/brands – analyse revenue by brand
- Categories (up to 5) – analyse revenue by category
- Search function – see which products are being searched for frequently
- Payment info – see which payment method is used most and what revenue it generates
- Product add-to-cart – see which products are viewed often but not purchased
- Customer group in the purchase event (addition.customer_group) – segment by customer group in GA4
- Coupon and discount tracking including a dedicated add_coupon_code event
- Option for user ID tracking
- Option to track product clicks on category pages, the search page and cross-selling CMS elements
Features for Google Ads
- DataLayer for dynamic remarketing
- Dynamic conversion tracking
- Enhanced conversion tracking (email, phone number, first name, last name, address) – hashed with SHA-256
- User ID tracking
- Customer lifetime value – including guest orders
- New vs. existing customers (customer_type / account_type), including guest orders
Further advertising channels
Microsoft Ads, Meta Pixel, Pinterest and TikTok are included in the same container – with consent logic and values for all key events.
Supported consent managers
- Shopware standard cookie banner
- Cookiebot
- Usercentrics
- Consent Management Platform (CMP)
- Cookie Consent Manager / CCM19
- Acris EU Cookie Policy Pro
- CookieScript
- CookieFirst
- Cookie Consent Plus
- Didomi
The consent variables functionality_storage, personalization_storage and security_storage are available as well. For consent tools without a direct integration, a ga4_event label serves as a fallback.
UTM parameter tracking on every order
Every order records which channel the user came from – Google Ads, Microsoft Ads, Facebook, Instagram, Pinterest, TikTok and others. The organic referrer is captured too, including traffic from AI assistants and ChatGPT Ads. UTM parameters can be configured separately for each sales channel.
Compatibility
Tested with QuickView and the Shopware Evolve CMS elements, Advanced Search from Shopware Commercial, PayPal Express Checkout, the NEON configurator and common discount and coupon plugins. B2B shops can hide price data for guest users, and localStorage entries can be given a TTL.
Clean GA4, Google Ads and ChatGPT Ads tracking for Shopware
This extension connects Google Analytics 4, Google Ads and further advertising channels entirely through Google Tag Manager – client-side and server-side, GDPR-compliant and without any changes to your template. You get a pre-configured Tag Manager container to download and are up and running within minutes.
Free setup by an expert: Simply book an appointment!
Features for GA4
- Complete GA4 dataLayer: add_payment_info, add_shipping_info, add_to_cart, add_to_wishlist, add_to_compare, begin_checkout, purchase, remove_from_cart, select_item, view_cart, view_item, view_item_list, search, login, sign_up, generate_lead
- Net or gross values for value & price – net follows Google’s recommendation
- Google Consent Mode V2 including Advanced Consent Mode
- Client-side and server-side tagging: add your own server-side tag manager script
- Data protection implementation in the standard Shopware data protection plugin
- Contact form tracking
- Manufacturers/brands – analyse revenue by brand
- Categories (up to 5) – analyse revenue by category
- Search function – see which products are being searched for frequently
- Payment info – see which payment method is used most and what revenue it generates
- Product add-to-cart – see which products are viewed often but not purchased
- Customer group in the purchase event (addition.customer_group) – segment by customer group in GA4
- Coupon and discount tracking including a dedicated add_coupon_code event
- Option for user ID tracking
- Option to track product clicks on category pages, the search page and cross-selling CMS elements
Features for Google Ads
- DataLayer for dynamic remarketing
- Dynamic conversion tracking
- Enhanced conversion tracking (email, phone number, first name, last name, address) – hashed with SHA-256
- User ID tracking
- Customer lifetime value – including guest orders
- New vs. existing customers (customer_type / account_type), including guest orders
Further advertising channels
Microsoft Ads, Meta Pixel, Pinterest and TikTok are included in the same container – with consent logic and values for all key events.
Supported consent managers
- Shopware standard cookie banner
- Cookiebot
- Usercentrics
- Consent Management Platform (CMP)
- Cookie Consent Manager / CCM19
- Acris EU Cookie Policy Pro
- CookieScript
- CookieFirst
- Cookie Consent Plus
- Didomi
The consent variables functionality_storage, personalization_storage and security_storage are available as well. For consent tools without a direct integration, a ga4_event label serves as a fallback.
UTM parameter tracking on every order
Every order records which channel the user came from – Google Ads, Microsoft Ads, Facebook, Instagram, Pinterest, TikTok and others. The organic referrer is captured too, including traffic from AI assistants and ChatGPT Ads. UTM parameters can be configured separately for each sales channel.
Compatibility
Tested with QuickView and the Shopware Evolve CMS elements, Advanced Search from Shopware Commercial, PayPal Express Checkout, the NEON configurator and common discount and coupon plugins. B2B shops can hide price data for guest users, and localStorage entries can be given a TTL.
Details
- Available: English, German, Dutch, Italian, French, Spanish
- Latest update: 11 November 2026
- Publication date: 1 December 2022
- Version: 4.7.16
- Category: Tracking
Resources
Reviews (95)
Average rating of 5 out of 5 stars
Tolles Plugin
Average rating of 5 out of 5 stars
Super Plugin, super Service
Average rating of 5 out of 5 stars
Works!
Average rating of 5 out of 5 stars
Super - funktioniert einwandfrei
Average rating of 5 out of 5 stars
Endlich GA4 für SW6
Average rating of 5 out of 5 stars
Eine Anforderung für die Schweiz wurde in kürzester Zeit auf Kundenwunsch umgesetzt.
About the Extension Partner
MISSION OM GmbH
Partner Status
-
Shopware
Extension Partner
Details
-
Ø-Rating:
5
Average rating of 5 out of 5 stars
- Partner since: 2022
- Extensions: 4
Support
- Based in: Germany
- Speaks: German, English
- Response time: Very quickly
Set up in three steps
- Install and activate the plugin
- Download the pre-configured Google Tag Manager container and import it into your own container
- Enter your GA4 measurement ID, Google Ads conversion ID and your consent manager in the plugin settings
You can find the full installation guide with screenshots in the documentation.
Prefer to do it together? We will set up the plugin with you free of charge and check the configuration in your shop: Book an appointment
4.7.16 6.7.0.0 - 6.7.16.0
* compiled for Shopware 6.7.x.x
* fixed issue with the Quickview reporting the categories shifted by one level (`item_category2` missing, the deeper levels moved up) and `item_variant` with a trailing space; it reports the same categories and variant as the product detail page now (G4SW6-131)
* fixed issue with the product listing after filtering, sorting or pagination reporting the categories shifted by one level and `item_variant` with a trailing space in `view_item_list` (G4SW6-131)
* fixed issue with `item_list_name` in category listings still containing the SEO title of the page instead of the category name on Shopware 6.7; the category name is read from the category of the page, the page title is never used as list name (G4SW6-133)
* fixed issue with `select_item` from the search suggest sending `price` as a string and always as gross price; it is a number now and follows `taxConfiguration` (net/gross) and the advanced prices, the same as in the listing and in `view_item`; `item_variant` no longer has a trailing space (G4SW6-140)
* fixed issue with the cart discount (promotions, e.g. a customer group discount) being distributed to the items in `purchase` only; `view_cart`, `begin_checkout`, `add_shipping_info` and `add_payment_info` now report the price after the discount, `items[].discount` and the promotion as item `coupon`, so the sum of `price × quantity` equals `value` in all checkout events (G4SW6-122)
* added the parameter `search_type` to the `search` event: `suggest` for the search suggest, `results` for the search results page; GTM setups can filter on `search_type = results` to count submitted searches only (G4SW6-124)
* fixed issue with the search suggest sending a `search` event for every partial term and repeating the same term; the event is sent after 1 second without typing and only once per term and page view (G4SW6-124)
* fixed issue with `item_variant` being empty in the checkout events and `purchase` when the product was not stored in the browser (e.g. a cart restored after login on another device); the variant is loaded with the product on the cart, confirm and finish pages now (G4SW6-130)
* fixed issue with `remove_from_cart` on the cart page `/checkout/cart` missing `item_variant` and reporting `item_list_name: "checkout"`; it reports the same item data as the offcanvas cart, including the list the product was added from (G4SW6-130)
* fixed issue with the placeholders `product` and `checkout` being sent as `item_list_id` / `item_list_name`; they are omitted in all events, real lists (categories, search results, wishlist) are kept (G4SW6-130)
* fixed issue with delivery promotions (e.g. a shipping discount code) being sent as an additional item without `item_id` in `view_cart`, `begin_checkout`, `add_shipping_info`, `add_payment_info` and `purchase` in all channels (GA4, Google Ads, Meta, Microsoft Ads, Pinterest, TikTok, OpenAI); promotion lines are never reported as items, a delivery promotion only reduces `shipping` (G4SW6-141)
* fixed issue with `view_item` and `view_item_list` reporting the cheapest tier of the advanced (rule based) prices instead of the price of the reported quantity; `items[].price` is now the unit price that belongs to `items[].quantity`, selected like the cart does it (G4SW6-135)
* fixed issue with `select_item` and `add_to_wishlist` reporting the cheapest tier; they report the price of one piece
* fixed issue with quantities above the last price tier not using the last (open ended) tier in the data layer
* fixed issue with the initial listing and the AJAX rendered listing (filter, pagination) reporting different prices for the same product; the cheapest tier stays available as information in `extra.cheapestAdvancedPrice`
* fixed issue with `view_item` reporting quantity 1 although the product has a minimum purchase quantity; the option `Use minimum purchase quantity in view_item` (default: on) reports `quantity = minPurchase` and `value = price × quantity` on the product detail page and in the QuickView (G4SW6-126)
* fixed issue with `item_category` containing the navigation category of the sales channel; the first level below it is `item_category` now (G4SW6-132)
* fixed issue with the category fallback using categories of other category trees (e.g. of another sales channel); only categories below the navigation category of the current sales channel are used, a main category outside of that tree is ignored and products without a category in the tree get no `item_category`
* fixed issue with `coupon` of `begin_checkout` and `purchase` containing the name of the promotion instead of the redeemed coupon code; the code is reported now, automatic promotions without a code keep their name (G4SW6-115)
* fixed issue with `coupon` being missing for promotions with the "shipping" scope; their codes are read from the cart promotions
* fixed issue with the AJAX rendered listing (filter, pagination) reporting the price of the field "General" instead of the advanced prices of the context (DISCO-335989)
* fixed issue with the AJAX rendered listing reporting the net price although `taxConfiguration` is gross, and with the QuickView always reporting the net price
* fixed issue with all orders being attributed to `Direct / Direct` when the landing page with UTM parameters is delivered from a cache (Shopware HTTP cache, Varnish, CDN): the origin was detected on the server only, so only the visitor that caused the cache miss was attributed
* added the client side capture of the UTM and click parameters (first party cookie `disco_ga4_traffic_origin`), which the server uses at checkout when it never saw the parameters itself; the detection logic is shared, the capture contains no personal data and its lifetime follows the storage duration of the plugin data
* added the configuration `Capture tracking parameters in the browser` (UTM Parameter Tracking), enabled by default
* fixed issue with `Direct / Direct` being stored on the first request and blocking every later origin of the same session; the placeholder is now replaced as soon as a real source is detected (e.g. an ad click after a direct visit)
* fixed issue with a new external referrer not overwriting a previously stored origin of the same session
* fixed issue with Rakuten Advertising parameters (`ranMID`, `ranEAID`, `ranSiteID`) never being recognised, because the query parameters are normalised to lower case
* fixed issue with the HTTP cache being bypassed for UTM requests although the traffic source was already stored in the session; the bypass is skipped in that case
* fixed issue with the HTTP cache being bypassed while the sales channel is not resolved yet
* fixed issue with the HTTP cache being bypassed although the UTM parameter tracking is disabled
* fixed issue with the session being started before the UTM parameter tracking setting was checked, which made the response uncacheable even with the tracking switched off
* added the configuration `Bypass HTTP cache for UTM requests` (UTM Parameter Tracking), so shops that are affected by load peaks caused by automated link scanners can serve UTM URLs from the HTTP cache again
* fixed issue with order level discounts (promotions, vouchers) not being part of the item prices of the purchase event, as required by Google Analytics 4 (`price` = price after the item discount, `value` = sum of `price * quantity`); the distribution uses Shopware's promotion `composition` payload, third party vouchers are distributed proportionally to the line totals
* fixed issue with a separate order discount being subtracted from the purchase value; the top level `discount` of the purchase event is Google Ads data only now
* fixed issue with item prices of carts with several tax rates not adding up to the right `value` in the purchase event (each item is converted with its own tax rate)
* fixed issue with `items[].index` having gaps in the purchase event; it is now `0, 1, 2, ...`
* fixed issue with the placeholder item lists `product` and `checkout` being sent as `item_list_id` / `item_list_name`
* fixed issue with the data layer being cleared several pushes before the purchase event; it is cleared directly before the event now, so no empty values can be read by Google or the other channels
* fixed issue with `customer_type` / `new_customer` of a guest's first order being `returning`; guests are logged out before the finish page is rendered, so the order history is read from the order instead of the local storage
* EasyCoupon line items and delivery discounts are not distributed to the items
* fixed issue with select_item was sent without ecommerce.currency
* fixed issue with select_item, add_to_wishlist, view_cart, begin_checkout, add_shipping_info, add_payment_info and add_to_cart (cart page) still sending the GA4 ecommerce object when GA4 is disabled
* fixed issue with search suggest: a backslash or apostrophe in the search term or product name broke the script or showed as ' in item_name; values are now JSON-encoded for the JavaScript context
* fixed issue with search suggest: parentId was always empty and quantity was missing (Microsoft Ads value was NaN)
* fixed issue with search term, category, sales channel, shipping and payment method names not being encoded for the JavaScript context
* fixed issue with search suggest: clicking a link without a price (e.g. category or search term links) threw a TypeError; prices with currency symbols or local separators (CHF 18.–, 1'234.50, 18,00 €) are now parsed, and price is omitted instead of NaN
* fixed issue with payment and shipping method changes throwing a TypeError on custom markup (e.g. Saferpay stored cards); the name now falls back to the label text, and add_payment_info / add_shipping_info are still sent
* fixed issue with remove_from_cart not being sent when the cart line item has no .line-item-row class (e.g. Shogun-based themes); falls back to .line-item and reads the quantity from the hidden line item data
* fixed issue with view_cart being sent after every offcanvas cart reload (quantity change, remove); it is now sent once per opening of the offcanvas cart
* fixed issue with item_list_name in category listings using the page (SEO) title instead of the category name; the page title is now only a fallback
* fixed issue with Consent Mode granting ad_storage, ad_user_data and ad_personalization when only Analytics was accepted; analytics and ads consent are now separate, every update sends granted or denied explicitly, and a withdrawn consent is passed on without reload
* fixed issue with Microsoft UET consent: default is now denied and every consent change sends an update with granted or denied
* fixed issue with purchase not being sent over HTTP, where crypto.subtle is not available; purchase is now sent without the hashed fields
* fixed issue with add_to_cart / remove_from_cart throwing a TypeError when no item data was available, e.g. on quantity changes on the cart page
* fixed issue with taxConfiguration = netto (gross prices in the shop): value did not match the sum of price × quantity, and add_to_cart reported a lower value for larger quantities; the net item price is now derived from the net line total and GA4 item prices keep up to 6 decimals
* fixed issue with Ads value being 1 or more cents off when calculated from a rounded net price: gross Ads values now use the gross price directly and net Ads values use the net line total
4.7.9 6.7.0.0 - 6.7.16.0
* compiled for Shopware 6.7.x.x
* fixed issue with discount calculation was depending on items order
* fixed issue with tax on shipping was inconsistent
* fixed issue with net / brutto price was inconsistent through checkout events (add_to_cart and begin_checkout not the same)
* fixed issue with TrafficOriginCacheSubscriber: Cache bypass (private/no-store) even for external referrers without UTM, e.g., organic Google search
* fixed issue with taxConfiguration = gross: GA4 value included shipping;
* fixed issue with Ads values were too low when a shopping cart discount was applied
* fixed issue with TrafficOriginCacheSubscriber reads utmTracking without a sales channel ID, while FrontendSubscriber reads it with one—behavior varies by sales channel
* fixed issue with HTTP cache obscures the source (UTM / click IDs)
* fixed issue with UTM Tracking: Return Visits from Payment Providers (Wallee, HeyLight) Can Override Campaign Source
* sendPurchaseAdditionalData: added Migration for Existing Installations and Recommendations for GTM Tags with "additional"
* fixed issue where Product assignment was missing in the fallback template (ga4Product in disco_hidden_line_items_information)
* improvement : Standardize the meaning of "data-tax" and "data-shipping" in the checkout and header templates
4.7.8 6.7.0.0 - 6.7.15.1
* compiled for Shopware 6.7.x.x
* new consent banner WebCAre
* fix: utm parameter, now bypassing cache and ignoring /_esi/ requests
* fix: add_payment add_shipping not being triggered for a second order in the same session.
* fix: rounding for larger qty
* Added more channels for utm parameters : ChatGPT Ads, Hubspot Ads, ShareASale, Rakuten Advertising
* performance tweak for add_to_cart (400 ms reduction)
* fix: 0 in phone number were removed in certain cases.
* fix: order version in custom value
* fix: brutto price with shipping was including extra taxes (shipping price was already included in total tax, it is now separated).
* fix: brutto total value was wrong for several tax rate included in order
* fix: nested line items for Bill of Materials (Stücklisten) and Bundle Plugins (like Pickware)
* added new configuration for client data in additional array
* fix: client data in additional array is no present only if consent is active and if configuration sendPurchaseAdditionalData is set to active
* fix: utm_campaign lost in some cases -> utm_source and utm_medium not empty -> keep both and preserve utm_campaign if present
* fix: php error in some cases in subscriber
* fix: fix currency not being the proper isoCode for some countries (like Poland)
* fix: select_item missing when using Plugin QuickView
* fix: currency missing in ecommerce level in view_item_list event
4.7.7 6.7.0.0 - 6.7.15.1
* compiled for Shopware 6.7.x.x
* added idealo_de in utm source check ( in case utm_medium is empty but utm_source is idealo_de)
* add extra fallback in utm source parameters when at least one of utm_source utm_medium is not empty but not recognised by our plugin.
* ATTENTION : updated the utm source logic so that we return first utm_source and utm_medium if both are not empty.
* replaced condition on discount for compatibility with easy coupon plugin
* fixed generate_lead not working since the introduction of ChatGPT-Ads
* added hashed userId as sha256_user_id (user_id is still present and not hashed)
* fixed negative value in purchase for discount value larger than items total value
4.7.6 6.7.0.0 - 6.7.14.0
* compiled for Shopware 6.7.x.x
* fixed compatibility issue with Swag Custom Products plugin decorating the sales channel repository.
4.7.5 6.7.0.0 - 6.7.13.1
* compiled for shopware 6.7.x.x
* fixed custom search plugin for special entities, like Blog or Manufacturer, not working or creating PHP errors after last version 1.7.3
* improved data quality of products (brand and category) in checkout pages. Now using Subscriber instead of storage. Storage kept as fallback.
* added ChatGPT Ads datalayer and events
* added unique event_id on each event
* fixed discount logic for easy-coupon plugin
4.7.4 6.7.0.0 - 6.7.13.1
* compiled for Shopware 6.7.x.x
* fixed login event being triggered on everypage after last version 1.7.3
* fixed purchase event being triggered on page refresh after last version 1.7.3
* fixed add_payment_info event being triggered twice in the checkout journey after last version 1.7.3
* fixed add_shipping_info event being triggered twice in the checkout journey after last version 1.7.3
* fixed coupon code not being saved propery in local storage after last version 1.7.3
* removed some console logs still present after last version 1.7.3
* fixed logic for coupon for listprice (Streichpreis), giving discrepencies for net price after last version 1.7.3
4.7.3 6.7.0.0 - 6.7.12.2
* compiled for Showpare 6.7.x.x
* improved compatibility with other plugins when exist cms-pages with empty cms elements.
* improved advances prices : prices per any rles (sales channel etc) and graduated prices.
* improved checkout prices logic, prices were missing in some cases.
* correct JS error on removing promotion from Cart.
* added option to supress locastorage entries with TTL.
4.7.2 6.7.0.0 - 6.7.12.2
* Compiled for Shopware 6.7.x.x
* Correction for event "remove_from_cart" when Meta is active
* Added some extra checks in FrontendSubscriber for empty Cross Selling elements
4.7.1 6.7.0.0 - 6.7.11.0
* Compiled for Shopware 6.7.x.x
* Improved compatibility with Variants loaded via QuickView (Shopware Evolve CMS-elements)
4.7.0 6.7.0.0 - 6.7.10.1
* compiled for Shopware 6.7.x.x
* added null check on cross selling logic to prevent Fatal error: Call to a member function getCrossSellings() on null
* Added compatibility with QuickView (Shopware Evolve CMS-elements):
- Enhanced QuickView integration to trigger view_item event instead of select_item when QuickView is active for this product.
- Ensured the add_to_cart is triggered on the QuickView Modal view
* fixed a bug with null category breadcrumb data (in rares cases warning was triggered : Warning: Trying to access array offset on null in GA4TwigExtensions)
* fixed bug in value, included in purchase event for Meta
* added option to hide price for guest users (B2B option)
* added some links in the backend for documentation and review
3.7.16 6.6.0.0 - 6.6.10.31
* compiled for Shopware 6.6.x.x
* fixed issue with the Quickview reporting the categories shifted by one level (`item_category2` missing, the deeper levels moved up) and `item_variant` with a trailing space; it reports the same categories and variant as the product detail page now (G4SW6-131)
* fixed issue with the product listing after filtering, sorting or pagination reporting the categories shifted by one level and `item_variant` with a trailing space in `view_item_list` (G4SW6-131)
* fixed issue with `item_list_name` in category listings still containing the SEO title of the page instead of the category name on Shopware 6.7; the category name is read from the category of the page, the page title is never used as list name (G4SW6-133)
* fixed issue with `select_item` from the search suggest sending `price` as a string and always as gross price; it is a number now and follows `taxConfiguration` (net/gross) and the advanced prices, the same as in the listing and in `view_item`; `item_variant` no longer has a trailing space (G4SW6-140)
* fixed issue with the cart discount (promotions, e.g. a customer group discount) being distributed to the items in `purchase` only; `view_cart`, `begin_checkout`, `add_shipping_info` and `add_payment_info` now report the price after the discount, `items[].discount` and the promotion as item `coupon`, so the sum of `price × quantity` equals `value` in all checkout events (G4SW6-122)
* added the parameter `search_type` to the `search` event: `suggest` for the search suggest, `results` for the search results page; GTM setups can filter on `search_type = results` to count submitted searches only (G4SW6-124)
* fixed issue with the search suggest sending a `search` event for every partial term and repeating the same term; the event is sent after 1 second without typing and only once per term and page view (G4SW6-124)
* fixed issue with `item_variant` being empty in the checkout events and `purchase` when the product was not stored in the browser (e.g. a cart restored after login on another device); the variant is loaded with the product on the cart, confirm and finish pages now (G4SW6-130)
* fixed issue with `remove_from_cart` on the cart page `/checkout/cart` missing `item_variant` and reporting `item_list_name: "checkout"`; it reports the same item data as the offcanvas cart, including the list the product was added from (G4SW6-130)
* fixed issue with the placeholders `product` and `checkout` being sent as `item_list_id` / `item_list_name`; they are omitted in all events, real lists (categories, search results, wishlist) are kept (G4SW6-130)
* fixed issue with delivery promotions (e.g. a shipping discount code) being sent as an additional item without `item_id` in `view_cart`, `begin_checkout`, `add_shipping_info`, `add_payment_info` and `purchase` in all channels (GA4, Google Ads, Meta, Microsoft Ads, Pinterest, TikTok, OpenAI); promotion lines are never reported as items, a delivery promotion only reduces `shipping` (G4SW6-141)
* fixed issue with `view_item` and `view_item_list` reporting the cheapest tier of the advanced (rule based) prices instead of the price of the reported quantity; `items[].price` is now the unit price that belongs to `items[].quantity`, selected like the cart does it (G4SW6-135)
* fixed issue with `select_item` and `add_to_wishlist` reporting the cheapest tier; they report the price of one piece
* fixed issue with quantities above the last price tier not using the last (open ended) tier in the data layer
* fixed issue with the initial listing and the AJAX rendered listing (filter, pagination) reporting different prices for the same product; the cheapest tier stays available as information in `extra.cheapestAdvancedPrice`
* fixed issue with `view_item` reporting quantity 1 although the product has a minimum purchase quantity; the option `Use minimum purchase quantity in view_item` (default: on) reports `quantity = minPurchase` and `value = price × quantity` on the product detail page and in the QuickView (G4SW6-126)
* fixed issue with `item_category` containing the navigation category of the sales channel; the first level below it is `item_category` now (G4SW6-132)
* fixed issue with the category fallback using categories of other category trees (e.g. of another sales channel); only categories below the navigation category of the current sales channel are used, a main category outside of that tree is ignored and products without a category in the tree get no `item_category`
* fixed issue with `coupon` of `begin_checkout` and `purchase` containing the name of the promotion instead of the redeemed coupon code; the code is reported now, automatic promotions without a code keep their name (G4SW6-115)
* fixed issue with `coupon` being missing for promotions with the "shipping" scope; their codes are read from the cart promotions
* fixed issue with the AJAX rendered listing (filter, pagination) reporting the price of the field "General" instead of the advanced prices of the context (DISCO-335989)
* fixed issue with the AJAX rendered listing reporting the net price although `taxConfiguration` is gross, and with the QuickView always reporting the net price
* fixed issue with all orders being attributed to `Direct / Direct` when the landing page with UTM parameters is delivered from a cache (Shopware HTTP cache, Varnish, CDN): the origin was detected on the server only, so only the visitor that caused the cache miss was attributed
* added the client side capture of the UTM and click parameters (first party cookie `disco_ga4_traffic_origin`), which the server uses at checkout when it never saw the parameters itself; the detection logic is shared, the capture contains no personal data and its lifetime follows the storage duration of the plugin data
* added the configuration `Capture tracking parameters in the browser` (UTM Parameter Tracking), enabled by default
* fixed issue with `Direct / Direct` being stored on the first request and blocking every later origin of the same session; the placeholder is now replaced as soon as a real source is detected (e.g. an ad click after a direct visit)
* fixed issue with a new external referrer not overwriting a previously stored origin of the same session
* fixed issue with Rakuten Advertising parameters (`ranMID`, `ranEAID`, `ranSiteID`) never being recognised, because the query parameters are normalised to lower case
* fixed issue with the HTTP cache being bypassed for UTM requests although the traffic source was already stored in the session; the bypass is skipped in that case
* fixed issue with the HTTP cache being bypassed while the sales channel is not resolved yet
* fixed issue with the HTTP cache being bypassed although the UTM parameter tracking is disabled
* fixed issue with the session being started before the UTM parameter tracking setting was checked, which made the response uncacheable even with the tracking switched off
* added the configuration `Bypass HTTP cache for UTM requests` (UTM Parameter Tracking), so shops that are affected by load peaks caused by automated link scanners can serve UTM URLs from the HTTP cache again
* fixed issue with order level discounts (promotions, vouchers) not being part of the item prices of the purchase event, as required by Google Analytics 4 (`price` = price after the item discount, `value` = sum of `price * quantity`); the distribution uses Shopware's promotion `composition` payload, third party vouchers are distributed proportionally to the line totals
* fixed issue with a separate order discount being subtracted from the purchase value; the top level `discount` of the purchase event is Google Ads data only now
* fixed issue with item prices of carts with several tax rates not adding up to the right `value` in the purchase event (each item is converted with its own tax rate)
* fixed issue with `items[].index` having gaps in the purchase event; it is now `0, 1, 2, ...`
* fixed issue with the placeholder item lists `product` and `checkout` being sent as `item_list_id` / `item_list_name`
* fixed issue with the data layer being cleared several pushes before the purchase event; it is cleared directly before the event now, so no empty values can be read by Google or the other channels
* fixed issue with `customer_type` / `new_customer` of a guest's first order being `returning`; guests are logged out before the finish page is rendered, so the order history is read from the order instead of the local storage
* EasyCoupon line items and delivery discounts are not distributed to the items
* fixed issue with select_item was sent without ecommerce.currency
* fixed issue with select_item, add_to_wishlist, view_cart, begin_checkout, add_shipping_info, add_payment_info and add_to_cart (cart page) still sending the GA4 ecommerce object when GA4 is disabled
* fixed issue with search suggest: a backslash or apostrophe in the search term or product name broke the script or showed as ' in item_name; values are now JSON-encoded for the JavaScript context
* fixed issue with search suggest: parentId was always empty and quantity was missing (Microsoft Ads value was NaN)
* fixed issue with search term, category, sales channel, shipping and payment method names not being encoded for the JavaScript context
* fixed issue with search suggest: clicking a link without a price (e.g. category or search term links) threw a TypeError; prices with currency symbols or local separators (CHF 18.–, 1'234.50, 18,00 €) are now parsed, and price is omitted instead of NaN
* fixed issue with payment and shipping method changes throwing a TypeError on custom markup (e.g. Saferpay stored cards); the name now falls back to the label text, and add_payment_info / add_shipping_info are still sent
* fixed issue with remove_from_cart not being sent when the cart line item has no .line-item-row class (e.g. Shogun-based themes); falls back to .line-item and reads the quantity from the hidden line item data
* fixed issue with view_cart being sent after every offcanvas cart reload (quantity change, remove); it is now sent once per opening of the offcanvas cart
* fixed issue with item_list_name in category listings using the page (SEO) title instead of the category name; the page title is now only a fallback
* fixed issue with Consent Mode granting ad_storage, ad_user_data and ad_personalization when only Analytics was accepted; analytics and ads consent are now separate, every update sends granted or denied explicitly, and a withdrawn consent is passed on without reload
* fixed issue with Microsoft UET consent: default is now denied and every consent change sends an update with granted or denied
* fixed issue with purchase not being sent over HTTP, where crypto.subtle is not available; purchase is now sent without the hashed fields
* fixed issue with add_to_cart / remove_from_cart throwing a TypeError when no item data was available, e.g. on quantity changes on the cart page
* fixed issue with taxConfiguration = netto (gross prices in the shop): value did not match the sum of price × quantity, and add_to_cart reported a lower value for larger quantities; the net item price is now derived from the net line total and GA4 item prices keep up to 6 decimals
* fixed issue with Ads value being 1 or more cents off when calculated from a rounded net price: gross Ads values now use the gross price directly and net Ads values use the net line total
3.7.9 6.6.0.0 - 6.6.10.31
* compiled for Shopware 6.6.x.x
* fixed issue with discount calculation was depending on items order
* fixed issue with tax on shipping was inconsistent
* fixed issue with net / brutto price was inconsistent through checkout events (add_to_cart and begin_checkout not the same)
* fixed issue with TrafficOriginCacheSubscriber: Cache bypass (private/no-store) even for external referrers without UTM, e.g., organic Google search
* fixed issue with taxConfiguration = gross: GA4 value included shipping;
* fixed issue with Ads values were too low when a shopping cart discount was applied
* fixed issue with TrafficOriginCacheSubscriber reads utmTracking without a sales channel ID, while FrontendSubscriber reads it with one—behavior varies by sales channel
* fixed issue with HTTP cache obscures the source (UTM / click IDs)
* fixed issue with UTM Tracking: Return Visits from Payment Providers (Wallee, HeyLight) Can Override Campaign Source
* sendPurchaseAdditionalData: added Migration for Existing Installations and Recommendations for GTM Tags with "additional"
* fixed issue where Product assignment was missing in the fallback template (ga4Product in disco_hidden_line_items_information)
* improvement : Standardize the meaning of "data-tax" and "data-shipping" in the checkout and header templates
3.7.8 6.6.0.0 - 6.6.10.29
* compiled for Shopware 6.6.x.x
* new consent banner WebCAre
* fix: utm parameter, now bypassing cache and ignoring /_esi/ requests
* fix: add_payment add_shipping not being triggered for a second order in the same session.
* fix: rounding for larger qty
* Added more channels for utm parameters : ChatGPT Ads, Hubspot Ads, ShareASale, Rakuten Advertising
* performance tweak for add_to_cart (400 ms reduction)
* fix: 0 in phone number were removed in certain cases.
* fix: order version in custom value
* fix: brutto price with shipping was including extra taxes (shipping price was already included in total tax, it is now separated).
* fix: brutto total value was wrong for several tax rate included in order
* fix: nested line items for Bill of Materials (Stücklisten) and Bundle Plugins (like Pickware)
* added new configuration for client data in additional array
* fix: client data in additional array is no present only if consent is active and if configuration sendPurchaseAdditionalData is set to active
* fix: utm_campaign lost in some cases -> utm_source and utm_medium not empty -> keep both and preserve utm_campaign if present
* fix: php error in some cases in subscriber
* fix: fix currency not being the proper isoCode for some countries (like Poland)
* fix: select_item missing when using Plugin QuickView
* fix: currency missing in ecommerce level in view_item_list event
3.7.7 6.6.0.0 - 6.6.10.29
* compiled for Shopware 6.6.x.x
* added idealo_de in utm source check ( in case utm_medium is empty but utm_source is idealo_de)
* add extra fallback in utm source parameters when at least one of utm_source utm_medium is not empty but not recognised by our plugin.
* ATTENTION : updated the utm source logic so that we return first utm_source and utm_medium if both are not empty.
* replaced condition on discount for compatibility with easy coupon plugin
* fixed generate_lead not working since the introduction of ChatGPT-Ads
* added hashed userId as sha256_user_id (user_id is still present and not hashed)
* fixed negative value in purchase for discount value larger than items total value
3.7.6 6.6.0.0 - 6.6.10.23
* compiled for Shopware 6.6.x.x
* fixed compatibility issue with Swag Custom Products plugin decorating the sales channel repository.
3.7.5 6.6.0.0 - 6.6.10.23
* compiled for shopware 6.6.x.x
* fixed custom search plugin for special entities, like Blog or Manufacturer, not working or creating PHP errors after last version 1.7.3
* improved data quality of products (brand and category) in checkout pages. Now using Subscriber instead of storage. Storage kept as fallback.
* added ChatGPT Ads datalayer and events
* added unique event_id on each event
* fixed discount logic for easy-coupon plugin
3.7.4 6.6.0.0 - 6.6.10.23
* compiled for Shopware 6.6.x.x
* fixed login event being triggered on everypage after last version 1.7.3
* fixed purchase event being triggered on page refresh after last version 1.7.3
* fixed add_payment_info event being triggered twice in the checkout journey after last version 1.7.3
* fixed add_shipping_info event being triggered twice in the checkout journey after last version 1.7.3
* fixed coupon code not being saved propery in local storage after last version 1.7.3
* removed some console logs still present after last version 1.7.3
* fixed logic for coupon for listprice (Streichpreis), giving discrepencies for net price after last version 1.7.3
3.7.3 6.6.0.0 - 6.6.10.21
* compiled for Showpare 6.6.x.x
* improved compatibility with other plugins when exist cms-pages with empty cms elements.
* improved advances prices : prices per any rles (sales channel etc) and graduated prices.
* improved checkout prices logic, prices were missing in some cases.
* correct JS error on removing promotion from Cart.
* added option to supress locastorage entries with TTL.
3.7.2 6.6.0.0 - 6.6.10.21
* Compiled for Shopware 6.6.x.x
* Correction for event "remove_from_cart" when Meta is active
* Added some extra checks in FrontendSubscriber for empty Cross Selling elements
3.7.1 6.6.0.0 - 6.6.10.19
* Compiled for Shopware 6.6.x.x
* Improved compatibility with Variants loaded via QuickView (Shopware Evolve CMS-elements)
3.7.0 6.6.0.0 - 6.6.10.18
* compiled for Shopware 6.6.x.x
* added null check on cross selling logic to prevent Fatal error: Call to a member function getCrossSellings() on null
* Added compatibility with QuickView (Shopware Evolve CMS-elements):
- Enhanced QuickView integration to trigger view_item event instead of select_item when QuickView is active for this product.
- Ensured the add_to_cart is triggered on the QuickView Modal view
* fixed a bug with null category breadcrumb data (in rares cases warning was triggered : Warning: Trying to access array offset on null in GA4TwigExtensions)
* fixed bug in value, included in purchase event for Meta
* added option to hide price for guest users (B2B option)
* added some links in the backend for documentation and review
3.6.14 6.6.0.0 - 6.7.10.1
* compiled for Shopware 6.6.x.x and Shopware 6.7.x.x
* improved backend speed - subscriber logic now loads only in frontend
* added for fallbacks for empty checkout items like custom elements from other plugins.
* added compatibility for Discount and Coupon plugins.
3.6.12 6.6.0.0 - 6.7.10.0
* compiled for shopware 6.6.x.x and 6.7.x.x
* integration of Didomi Consent Banner
3.6.11 6.6.0.0 - 6.7.8.1
* compile for Shopware 6.6.x.x and 6.7.x.x
* new subscriber logic for improved compatibility and performance. This new logic will enhance compatibility with plugin extending Context or Page objects.
* script for ga4product Object is now JSON loaded, hence reducing DOM object number
* add google_business_vertical: 'retail' on ecommerce.items level for all ga4 events as per the new ga4 documentation
* added customer_type (new / returning) on ecommerce level for purchase ga4 event as per the new ga4 documentation.
* enhanced UserCentrics V2 compatibility for scripts including auto blocking
3.6.10 6.6.0.0 - 6.7.8.0
* compiled for Showare 6.6.x.x and 6.7.x.x
* added fallbacks for shipping cost missing in purchase event for custom checkouts.
3.6.9 6.6.0.0 - 6.7.7.1
* compiled for Shopware 6.6.x.x and 6.7.x.x
* added new custom event to trigger consent update for Advanced Consent Mode
* ga4_event label for all events added for fallback when using consent tools not compatible with our Plugin. this added for all ga4 events
* improved logic for affiliateCode and campaignCode
* improved unit price logic for custom product plugins.
3.6.8 6.6.0.0 - 6.7.7.1
* compiled for Shopware 6.6.x.x and 6.7.x.x
* analytics_storage, ad_storage, ad_personalization ad_user_data can now be granted for ga4 if google ads is disabled
* improved uuid check for custom function to be compatible with Pseudo-Elements in Listing-Collections
* added a delay for purchase event to make it is loaded after add_payment and add_shipping event in server side tag manager configurations
* added utm parameters tracking for Agents and Shopping Assistants
3.6.7 6.6.0.0 - 6.7.6.1
* compiled for Shopware 6.6.x.x and 6.7.x.x
* defer tag manager script loading for client side tag manager
* defer tag manager script loading for server side tag manager
* added value in most pinterest events
* added new variables: language, country, landipage (true is first page visited in session)
* corrected viewsearch results event for meta ads
* google ads items correction in purchase event
* corrected missing categories in view_item_list event for pagination (nth page of pagination)
* corrected search suggestion subscriber (for some cases it prohibited closing the search suggestions modal)
3.6.6 6.6.0.0 - 6.7.5.1
* compiled for Shopware 6.6.x.x and 6.7.x.x
* added value for meta ads add_to_cart event
* corrected content items array for initiatecheckout event (meta ads)
* bugfix for internationl phone number format
* improved customer_lifetime_value logic with storage
* added optional value and currency for meta events (optional in the documentation but it is actually required, now it is there)
3.6.5 6.6.0.0 - 6.7.5.0
* compiled for Shopware 6.6.x.x and 6.7.x.x
* fix for begin_checkout event using Paypal express checkout
* fix for cookies for Shopware 6.7.4.0 when using Standard Shopware Cookie-Banner
3.6.4 6.6.0.0 - 6.7.3.1
* compiled for Shopware 6.6.x.x und 6.7.x.x
* fix for empty CMS-elements FrontendSubscriber
3.6.3 6.6.0.0 - 6.7.3.1
* compiled for Shopware 6.6.x.x and 6.7.x.x
* fix for cross-selling entity request in CMS-pages
* added customer group in the additional array on purchase event for allowing filtering by customer group in Google Analytics. located in addition.customer_group
3.6.2 6.6.0.0 - 6.7.3.1
* compiled for Shopware 6.6.x.x und 6.7.x.x
* fix for cookie logic for Google Ads and Tiktok
3.6.1 6.6.0.0 - 6.7.3.1
* compiled for Shopware 6.6.x.x and 6.7.x.x
* added trim on title for some shops importing Product with non ASCII characters and including tabs or new line.
3.6.0 6.6.0.0 - 6.7.3.0
* compiled for Shopware 6.6.x.x and 6.7.x.x
* introduced new cookie logic for shopware 6.7.3.0
* adding net-gross pricing option for google analytics. We recommend to use net price as the documentation says. https://m-om.link/WVOSYC
* PLEASE make sure by saving that the new setting is the one you want. Gross is like the previous versions of plugin. Net is the new method and the one recommaned by GA4.
* quickfix for shopware 6.4 on product page bug introduced in 1.5.28. this issue only affected shopware version 6.4.x.x
* improved new_customer value logic (introducing customer_type as in new documentation of google Ads)
* renamed customer_type to account_type because of google Ads
3.5.30 6.6.0.0 - 6.7.2.2
* compiled for shopware 6.6.x.x and 6.7.x.x
* improved 'consent'->'default' for userscentrics and cookiebot
3.5.29 6.6.0.0 - 6.7.2.2
* compiled for Shopware 6.6.x.x and 6.7.x.x
* bug fix for Meta tracking and CookieFirst consent banner
3.5.28 6.6.0.0 - 6.7.2.2
* compiled for Shopware 6.6.x.x and 6.7.x.x
* added version flag for deprecated call of getCrossSellings in product page
3.5.27 6.6.0.0 - 6.7.2.2
* compiled for Shopware 6.6
* quickfix for customer_life_value
3.5.26 6.6.0.0 - 6.7.2.0
* compiled for shopware 6.6.x.x and 6.7.x.x
* improved compatibility for ccm19 with server side tag manager
2.7.16 6.5.0.0 - 6.5.8.19
* compiled for Shopware 6.5.x.x
* fixed issue with the Quickview reporting the categories shifted by one level (`item_category2` missing, the deeper levels moved up) and `item_variant` with a trailing space; it reports the same categories and variant as the product detail page now (G4SW6-131)
* fixed issue with the product listing after filtering, sorting or pagination reporting the categories shifted by one level and `item_variant` with a trailing space in `view_item_list` (G4SW6-131)
* fixed issue with `item_list_name` in category listings still containing the SEO title of the page instead of the category name on Shopware 6.7; the category name is read from the category of the page, the page title is never used as list name (G4SW6-133)
* fixed issue with `select_item` from the search suggest sending `price` as a string and always as gross price; it is a number now and follows `taxConfiguration` (net/gross) and the advanced prices, the same as in the listing and in `view_item`; `item_variant` no longer has a trailing space (G4SW6-140)
* fixed issue with the cart discount (promotions, e.g. a customer group discount) being distributed to the items in `purchase` only; `view_cart`, `begin_checkout`, `add_shipping_info` and `add_payment_info` now report the price after the discount, `items[].discount` and the promotion as item `coupon`, so the sum of `price × quantity` equals `value` in all checkout events (G4SW6-122)
* added the parameter `search_type` to the `search` event: `suggest` for the search suggest, `results` for the search results page; GTM setups can filter on `search_type = results` to count submitted searches only (G4SW6-124)
* fixed issue with the search suggest sending a `search` event for every partial term and repeating the same term; the event is sent after 1 second without typing and only once per term and page view (G4SW6-124)
* fixed issue with `item_variant` being empty in the checkout events and `purchase` when the product was not stored in the browser (e.g. a cart restored after login on another device); the variant is loaded with the product on the cart, confirm and finish pages now (G4SW6-130)
* fixed issue with `remove_from_cart` on the cart page `/checkout/cart` missing `item_variant` and reporting `item_list_name: "checkout"`; it reports the same item data as the offcanvas cart, including the list the product was added from (G4SW6-130)
* fixed issue with the placeholders `product` and `checkout` being sent as `item_list_id` / `item_list_name`; they are omitted in all events, real lists (categories, search results, wishlist) are kept (G4SW6-130)
* fixed issue with delivery promotions (e.g. a shipping discount code) being sent as an additional item without `item_id` in `view_cart`, `begin_checkout`, `add_shipping_info`, `add_payment_info` and `purchase` in all channels (GA4, Google Ads, Meta, Microsoft Ads, Pinterest, TikTok, OpenAI); promotion lines are never reported as items, a delivery promotion only reduces `shipping` (G4SW6-141)
* fixed issue with `view_item` and `view_item_list` reporting the cheapest tier of the advanced (rule based) prices instead of the price of the reported quantity; `items[].price` is now the unit price that belongs to `items[].quantity`, selected like the cart does it (G4SW6-135)
* fixed issue with `select_item` and `add_to_wishlist` reporting the cheapest tier; they report the price of one piece
* fixed issue with quantities above the last price tier not using the last (open ended) tier in the data layer
* fixed issue with the initial listing and the AJAX rendered listing (filter, pagination) reporting different prices for the same product; the cheapest tier stays available as information in `extra.cheapestAdvancedPrice`
* fixed issue with `view_item` reporting quantity 1 although the product has a minimum purchase quantity; the option `Use minimum purchase quantity in view_item` (default: on) reports `quantity = minPurchase` and `value = price × quantity` on the product detail page and in the QuickView (G4SW6-126)
* fixed issue with `item_category` containing the navigation category of the sales channel; the first level below it is `item_category` now (G4SW6-132)
* fixed issue with the category fallback using categories of other category trees (e.g. of another sales channel); only categories below the navigation category of the current sales channel are used, a main category outside of that tree is ignored and products without a category in the tree get no `item_category`
* fixed issue with `coupon` of `begin_checkout` and `purchase` containing the name of the promotion instead of the redeemed coupon code; the code is reported now, automatic promotions without a code keep their name (G4SW6-115)
* fixed issue with `coupon` being missing for promotions with the "shipping" scope; their codes are read from the cart promotions
* fixed issue with the AJAX rendered listing (filter, pagination) reporting the price of the field "General" instead of the advanced prices of the context (DISCO-335989)
* fixed issue with the AJAX rendered listing reporting the net price although `taxConfiguration` is gross, and with the QuickView always reporting the net price
* fixed issue with all orders being attributed to `Direct / Direct` when the landing page with UTM parameters is delivered from a cache (Shopware HTTP cache, Varnish, CDN): the origin was detected on the server only, so only the visitor that caused the cache miss was attributed
* added the client side capture of the UTM and click parameters (first party cookie `disco_ga4_traffic_origin`), which the server uses at checkout when it never saw the parameters itself; the detection logic is shared, the capture contains no personal data and its lifetime follows the storage duration of the plugin data
* added the configuration `Capture tracking parameters in the browser` (UTM Parameter Tracking), enabled by default
* fixed issue with `Direct / Direct` being stored on the first request and blocking every later origin of the same session; the placeholder is now replaced as soon as a real source is detected (e.g. an ad click after a direct visit)
* fixed issue with a new external referrer not overwriting a previously stored origin of the same session
* fixed issue with Rakuten Advertising parameters (`ranMID`, `ranEAID`, `ranSiteID`) never being recognised, because the query parameters are normalised to lower case
* fixed issue with the HTTP cache being bypassed for UTM requests although the traffic source was already stored in the session; the bypass is skipped in that case
* fixed issue with the HTTP cache being bypassed while the sales channel is not resolved yet
* fixed issue with the HTTP cache being bypassed although the UTM parameter tracking is disabled
* fixed issue with the session being started before the UTM parameter tracking setting was checked, which made the response uncacheable even with the tracking switched off
* added the configuration `Bypass HTTP cache for UTM requests` (UTM Parameter Tracking), so shops that are affected by load peaks caused by automated link scanners can serve UTM URLs from the HTTP cache again
* fixed issue with order level discounts (promotions, vouchers) not being part of the item prices of the purchase event, as required by Google Analytics 4 (`price` = price after the item discount, `value` = sum of `price * quantity`); the distribution uses Shopware's promotion `composition` payload, third party vouchers are distributed proportionally to the line totals
* fixed issue with a separate order discount being subtracted from the purchase value; the top level `discount` of the purchase event is Google Ads data only now
* fixed issue with item prices of carts with several tax rates not adding up to the right `value` in the purchase event (each item is converted with its own tax rate)
* fixed issue with `items[].index` having gaps in the purchase event; it is now `0, 1, 2, ...`
* fixed issue with the placeholder item lists `product` and `checkout` being sent as `item_list_id` / `item_list_name`
* fixed issue with the data layer being cleared several pushes before the purchase event; it is cleared directly before the event now, so no empty values can be read by Google or the other channels
* fixed issue with `customer_type` / `new_customer` of a guest's first order being `returning`; guests are logged out before the finish page is rendered, so the order history is read from the order instead of the local storage
* EasyCoupon line items and delivery discounts are not distributed to the items
* fixed issue with select_item was sent without ecommerce.currency
* fixed issue with select_item, add_to_wishlist, view_cart, begin_checkout, add_shipping_info, add_payment_info and add_to_cart (cart page) still sending the GA4 ecommerce object when GA4 is disabled
* fixed issue with search suggest: a backslash or apostrophe in the search term or product name broke the script or showed as ' in item_name; values are now JSON-encoded for the JavaScript context
* fixed issue with search suggest: parentId was always empty and quantity was missing (Microsoft Ads value was NaN)
* fixed issue with search term, category, sales channel, shipping and payment method names not being encoded for the JavaScript context
* fixed issue with search suggest: clicking a link without a price (e.g. category or search term links) threw a TypeError; prices with currency symbols or local separators (CHF 18.–, 1'234.50, 18,00 €) are now parsed, and price is omitted instead of NaN
* fixed issue with payment and shipping method changes throwing a TypeError on custom markup (e.g. Saferpay stored cards); the name now falls back to the label text, and add_payment_info / add_shipping_info are still sent
* fixed issue with remove_from_cart not being sent when the cart line item has no .line-item-row class (e.g. Shogun-based themes); falls back to .line-item and reads the quantity from the hidden line item data
* fixed issue with view_cart being sent after every offcanvas cart reload (quantity change, remove); it is now sent once per opening of the offcanvas cart
* fixed issue with item_list_name in category listings using the page (SEO) title instead of the category name; the page title is now only a fallback
* fixed issue with Consent Mode granting ad_storage, ad_user_data and ad_personalization when only Analytics was accepted; analytics and ads consent are now separate, every update sends granted or denied explicitly, and a withdrawn consent is passed on without reload
* fixed issue with Microsoft UET consent: default is now denied and every consent change sends an update with granted or denied
* fixed issue with purchase not being sent over HTTP, where crypto.subtle is not available; purchase is now sent without the hashed fields
* fixed issue with add_to_cart / remove_from_cart throwing a TypeError when no item data was available, e.g. on quantity changes on the cart page
* fixed issue with taxConfiguration = netto (gross prices in the shop): value did not match the sum of price × quantity, and add_to_cart reported a lower value for larger quantities; the net item price is now derived from the net line total and GA4 item prices keep up to 6 decimals
* fixed issue with Ads value being 1 or more cents off when calculated from a rounded net price: gross Ads values now use the gross price directly and net Ads values use the net line total
2.7.9 6.5.0.0 - 6.5.8.19
* compiled for Shopware 6.5.x.x
* fixed issue with discount calculation was depending on items order
* fixed issue with tax on shipping was inconsistent
* fixed issue with net / brutto price was inconsistent through checkout events (add_to_cart and begin_checkout not the same)
* fixed issue with TrafficOriginCacheSubscriber: Cache bypass (private/no-store) even for external referrers without UTM, e.g., organic Google search
* fixed issue with taxConfiguration = gross: GA4 value included shipping;
* fixed issue with Ads values were too low when a shopping cart discount was applied
* fixed issue with TrafficOriginCacheSubscriber reads utmTracking without a sales channel ID, while FrontendSubscriber reads it with one—behavior varies by sales channel
* fixed issue with HTTP cache obscures the source (UTM / click IDs)
* fixed issue with UTM Tracking: Return Visits from Payment Providers (Wallee, HeyLight) Can Override Campaign Source
* sendPurchaseAdditionalData: added Migration for Existing Installations and Recommendations for GTM Tags with "additional"
* fixed issue where Product assignment was missing in the fallback template (ga4Product in disco_hidden_line_items_information)
* improvement : Standardize the meaning of "data-tax" and "data-shipping" in the checkout and header templates
2.7.8 6.5.0.0 - 6.5.8.19
* compiled for Shopware 6.5.x.x
* new consent banner WebCAre
* fix: utm parameter, now bypassing cache and ignoring /_esi/ requests
* fix: add_payment add_shipping not being triggered for a second order in the same session.
* fix: rounding for larger qty
* Added more channels for utm parameters : ChatGPT Ads, Hubspot Ads, ShareASale, Rakuten Advertising
* performance tweak for add_to_cart (400 ms reduction)
* fix: 0 in phone number were removed in certain cases.
* fix: order version in custom value
* fix: brutto price with shipping was including extra taxes (shipping price was already included in total tax, it is now separated).
* fix: brutto total value was wrong for several tax rate included in order
* fix: nested line items for Bill of Materials (Stücklisten) and Bundle Plugins (like Pickware)
* added new configuration for client data in additional array
* fix: client data in additional array is no present only if consent is active and if configuration sendPurchaseAdditionalData is set to active
* fix: utm_campaign lost in some cases -> utm_source and utm_medium not empty -> keep both and preserve utm_campaign if present
* fix: php error in some cases in subscriber
* fix: fix currency not being the proper isoCode for some countries (like Poland)
* fix: select_item missing when using Plugin QuickView
* fix: currency missing in ecommerce level in view_item_list event
2.7.7 6.5.0.0 - 6.5.8.19
* compiled for Shopware 6.5.x.x
* added idealo_de in utm source check ( in case utm_medium is empty but utm_source is idealo_de)
* add extra fallback in utm source parameters when at least one of utm_source utm_medium is not empty but not recognised by our plugin.
* ATTENTION : updated the utm source logic so that we return first utm_source and utm_medium if both are not empty.
* replaced condition on discount for compatibility with easy coupon plugin
* fixed generate_lead not working since the introduction of ChatGPT-Ads
* added hashed userId as sha256_user_id (user_id is still present and not hashed)
* fixed negative value in purchase for discount value larger than items total value
2.7.6 6.5.0.0 - 6.5.8.19
* compiled for Shopware 6.5.x.x
* fixed compatibility issue with Swag Custom Products plugin decorating the sales channel repository.
2.7.5 6.5.0.0 - 6.5.8.19
* compiled for shopware 6.5.x.x
* fixed custom search plugin for special entities, like Blog or Manufacturer, not working or creating PHP errors after last version 1.7.3
* improved data quality of products (brand and category) in checkout pages. Now using Subscriber instead of storage. Storage kept as fallback.
* added ChatGPT Ads datalayer and events
* added unique event_id on each event
* fixed discount logic for easy-coupon plugin
2.7.4 6.5.0.0 - 6.5.8.19
* compiled for Shopware 6.5.x.x
* fixed login event being triggered on everypage after last version 1.7.3
* fixed purchase event being triggered on page refresh after last version 1.7.3
* fixed add_payment_info event being triggered twice in the checkout journey after last version 1.7.3
* fixed add_shipping_info event being triggered twice in the checkout journey after last version 1.7.3
* fixed coupon code not being saved propery in local storage after last version 1.7.3
* removed some console logs still present after last version 1.7.3
* fixed logic for coupon for listprice (Streichpreis), giving discrepencies for net price after last version 1.7.3
2.7.3 6.5.0.0 - 6.5.8.19
* compiled for Showpare 6.5.x.x
* improved compatibility with other plugins when exist cms-pages with empty cms elements.
* improved advances prices : prices per any rles (sales channel etc) and graduated prices.
* improved checkout prices logic, prices were missing in some cases.
* correct JS error on removing promotion from Cart.
* added option to supress locastorage entries with TTL.
2.7.2 6.5.0.0 - 6.5.8.19
* Compiled for Shopware 6.5.x.x
* Correction for event "remove_from_cart" when Meta is active
* Added some extra checks in FrontendSubscriber for empty Cross Selling elements
2.7.1 6.5.0.0 - 6.5.8.19
* Compiled for Shopware 6.5.x.x
* Improved compatibility with Variants loaded via QuickView (Shopware Evolve CMS-elements)
2.7.0 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* added null check on cross selling logic to prevent Fatal error: Call to a member function getCrossSellings() on null
* Added compatibility with QuickView (Shopware Evolve CMS-elements):
- Enhanced QuickView integration to trigger view_item event instead of select_item when QuickView is active for this product.
- Ensured the add_to_cart is triggered on the QuickView Modal view
* fixed a bug with null category breadcrumb data (in rares cases warning was triggered : Warning: Trying to access array offset on null in GA4TwigExtensions)
* fixed bug in value, included in purchase event for Meta
* added option to hide price for guest users (B2B option)
* added some links in the backend for documentation and review
2.6.14 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* improved backend speed - subscriber logic now loads only in frontend
* added for fallbacks for empty checkout items like custom elements from other plugins.
* added compatibility for Discount and Coupon plugins.
2.6.12 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* integration of Didomi Consent Banner
2.6.11 6.5.0.0 - 6.5.8.18
* compile for Shopware 6.5.x.x
* new subscriber logic for improved compatibility and performance. This new logic will enhance compatibility with plugin extending Context or Page objects.
* script for ga4product Object is now JSON loaded, hence reducing DOM object number
* add google_business_vertical: 'retail' on ecommerce.items level for all ga4 events as per the new ga4 documentation
* added customer_type (new / returning) on ecommerce level for purchase ga4 event as per the new ga4 documentation.
* enhanced UserCentrics V2 compatibility for scripts including auto blocking
2.6.10 6.5.0.0 - 6.5.8.18
* compiled for Showare 6.5.x.x
* added fallbacks for shipping cost missing in purchase event for custom checkouts.
2.6.9 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* added new custom event to trigger consent update for Advanced Consent Mode
* ga4_event label for all events added for fallback when using consent tools not compatible with our Plugin. this added for all ga4 events
* improved logic for affiliateCode and campaignCode
* improved unit price logic for custom product plugins.
2.6.8 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* analytics_storage, ad_storage, ad_personalization ad_user_data can now be granted for ga4 if google ads is disabled
* improved uuid check for custom function to be compatible with Pseudo-Elements in Listing-Collections
* added a delay for purchase event to make it is loaded after add_payment and add_shipping event in server side tag manager configurations
* added utm parameters tracking for Agents and Shopping Assistants
2.6.7 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* defer tag manager script loading for client side tag manager
* defer tag manager script loading for server side tag manager
* added value in most pinterest events
* added new variables: language, country, landipage (true is first page visited in session)
* corrected viewsearch results event for meta ads
* google ads items correction in purchase event
* corrected missing categories in view_item_list event for pagination (nth page of pagination)
* corrected search suggestion subscriber (for some cases it prohibited closing the search suggestions modal)
2.6.6 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* added value for meta ads add_to_cart event
* corrected content items array for initiatecheckout event (meta ads)
* bugfix for internationl phone number format
* improved customer_lifetime_value logic with storage
* added optional value and currency for meta events (optional in the documentation but it is actually required, now it is there)
2.6.5 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* fix for begin_checkout event using Paypal express checkout
* fix for cookies for Shopware 6.7.4.0 when using Standard Shopware Cookie-Banner
2.6.4 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* fix for empty CMS-elements FrontendSubscriber
2.6.3 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* fix for cross-selling entity request in CMS-pages
* added customer group in the additional array on purchase event for allowing filtering by customer group in Google Analytics. located in addition.customer_group
2.6.2 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* fix for cookie logic for Google Ads and Tiktok
2.6.1 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* added trim on title for some shops importing Product with non ASCII characters and including tabs or new line.
2.6.0 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* introduced new cookie logic for shopware 6.7.3.0
* adding net-gross pricing option for google analytics. We recommend to use net price as the documentation says. https://m-om.link/WVOSYC
* PLEASE make sure by saving that the new setting is the one you want. Gross is like the previous versions of plugin. Net is the new method and the one recommaned by GA4.
* quickfix for shopware 6.4 on product page bug introduced in 1.5.28. this issue only affected shopware version 6.4.x.x
* improved new_customer value logic (introducing customer_type as in new documentation of google Ads)
* renamed customer_type to account_type because of google Ads
2.5.30 6.5.0.0 - 6.5.8.18
* compiled for shopware 6.5.x.x
* improved 'consent'->'default' for userscentrics and cookiebot
2.5.29 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* bug fix for Meta tracking and CookieFirst consent banner
2.5.28 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5.x.x
* added version flag for deprecated call of getCrossSellings in product page
2.5.27 6.5.0.0 - 6.5.8.18
* compiled for Shopware 6.5
* quickfix for customer_life_value
2.5.26 6.5.0.0 - 6.5.8.18
* compiled for shopware 6.5.x.x
* improved compatibility for ccm19 with server side tag manager
1.7.16 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* fixed issue with the Quickview reporting the categories shifted by one level (`item_category2` missing, the deeper levels moved up) and `item_variant` with a trailing space; it reports the same categories and variant as the product detail page now (G4SW6-131)
* fixed issue with the product listing after filtering, sorting or pagination reporting the categories shifted by one level and `item_variant` with a trailing space in `view_item_list` (G4SW6-131)
* fixed issue with `item_list_name` in category listings still containing the SEO title of the page instead of the category name on Shopware 6.7; the category name is read from the category of the page, the page title is never used as list name (G4SW6-133)
* fixed issue with `select_item` from the search suggest sending `price` as a string and always as gross price; it is a number now and follows `taxConfiguration` (net/gross) and the advanced prices, the same as in the listing and in `view_item`; `item_variant` no longer has a trailing space (G4SW6-140)
* fixed issue with the cart discount (promotions, e.g. a customer group discount) being distributed to the items in `purchase` only; `view_cart`, `begin_checkout`, `add_shipping_info` and `add_payment_info` now report the price after the discount, `items[].discount` and the promotion as item `coupon`, so the sum of `price × quantity` equals `value` in all checkout events (G4SW6-122)
* added the parameter `search_type` to the `search` event: `suggest` for the search suggest, `results` for the search results page; GTM setups can filter on `search_type = results` to count submitted searches only (G4SW6-124)
* fixed issue with the search suggest sending a `search` event for every partial term and repeating the same term; the event is sent after 1 second without typing and only once per term and page view (G4SW6-124)
* fixed issue with `item_variant` being empty in the checkout events and `purchase` when the product was not stored in the browser (e.g. a cart restored after login on another device); the variant is loaded with the product on the cart, confirm and finish pages now (G4SW6-130)
* fixed issue with `remove_from_cart` on the cart page `/checkout/cart` missing `item_variant` and reporting `item_list_name: "checkout"`; it reports the same item data as the offcanvas cart, including the list the product was added from (G4SW6-130)
* fixed issue with the placeholders `product` and `checkout` being sent as `item_list_id` / `item_list_name`; they are omitted in all events, real lists (categories, search results, wishlist) are kept (G4SW6-130)
* fixed issue with delivery promotions (e.g. a shipping discount code) being sent as an additional item without `item_id` in `view_cart`, `begin_checkout`, `add_shipping_info`, `add_payment_info` and `purchase` in all channels (GA4, Google Ads, Meta, Microsoft Ads, Pinterest, TikTok, OpenAI); promotion lines are never reported as items, a delivery promotion only reduces `shipping` (G4SW6-141)
* fixed issue with `view_item` and `view_item_list` reporting the cheapest tier of the advanced (rule based) prices instead of the price of the reported quantity; `items[].price` is now the unit price that belongs to `items[].quantity`, selected like the cart does it (G4SW6-135)
* fixed issue with `select_item` and `add_to_wishlist` reporting the cheapest tier; they report the price of one piece
* fixed issue with quantities above the last price tier not using the last (open ended) tier in the data layer
* fixed issue with the initial listing and the AJAX rendered listing (filter, pagination) reporting different prices for the same product; the cheapest tier stays available as information in `extra.cheapestAdvancedPrice`
* fixed issue with `view_item` reporting quantity 1 although the product has a minimum purchase quantity; the option `Use minimum purchase quantity in view_item` (default: on) reports `quantity = minPurchase` and `value = price × quantity` on the product detail page and in the QuickView (G4SW6-126)
* fixed issue with `item_category` containing the navigation category of the sales channel; the first level below it is `item_category` now (G4SW6-132)
* fixed issue with the category fallback using categories of other category trees (e.g. of another sales channel); only categories below the navigation category of the current sales channel are used, a main category outside of that tree is ignored and products without a category in the tree get no `item_category`
* fixed issue with `coupon` of `begin_checkout` and `purchase` containing the name of the promotion instead of the redeemed coupon code; the code is reported now, automatic promotions without a code keep their name (G4SW6-115)
* fixed issue with `coupon` being missing for promotions with the "shipping" scope; their codes are read from the cart promotions
* fixed issue with the AJAX rendered listing (filter, pagination) reporting the price of the field "General" instead of the advanced prices of the context (DISCO-335989)
* fixed issue with the AJAX rendered listing reporting the net price although `taxConfiguration` is gross, and with the QuickView always reporting the net price
* fixed issue with all orders being attributed to `Direct / Direct` when the landing page with UTM parameters is delivered from a cache (Shopware HTTP cache, Varnish, CDN): the origin was detected on the server only, so only the visitor that caused the cache miss was attributed
* added the client side capture of the UTM and click parameters (first party cookie `disco_ga4_traffic_origin`), which the server uses at checkout when it never saw the parameters itself; the detection logic is shared, the capture contains no personal data and its lifetime follows the storage duration of the plugin data
* added the configuration `Capture tracking parameters in the browser` (UTM Parameter Tracking), enabled by default
* fixed issue with `Direct / Direct` being stored on the first request and blocking every later origin of the same session; the placeholder is now replaced as soon as a real source is detected (e.g. an ad click after a direct visit)
* fixed issue with a new external referrer not overwriting a previously stored origin of the same session
* fixed issue with Rakuten Advertising parameters (`ranMID`, `ranEAID`, `ranSiteID`) never being recognised, because the query parameters are normalised to lower case
* fixed issue with the HTTP cache being bypassed for UTM requests although the traffic source was already stored in the session; the bypass is skipped in that case
* fixed issue with the HTTP cache being bypassed while the sales channel is not resolved yet
* fixed issue with the HTTP cache being bypassed although the UTM parameter tracking is disabled
* fixed issue with the session being started before the UTM parameter tracking setting was checked, which made the response uncacheable even with the tracking switched off
* added the configuration `Bypass HTTP cache for UTM requests` (UTM Parameter Tracking), so shops that are affected by load peaks caused by automated link scanners can serve UTM URLs from the HTTP cache again
* fixed issue with order level discounts (promotions, vouchers) not being part of the item prices of the purchase event, as required by Google Analytics 4 (`price` = price after the item discount, `value` = sum of `price * quantity`); the distribution uses Shopware's promotion `composition` payload, third party vouchers are distributed proportionally to the line totals
* fixed issue with a separate order discount being subtracted from the purchase value; the top level `discount` of the purchase event is Google Ads data only now
* fixed issue with item prices of carts with several tax rates not adding up to the right `value` in the purchase event (each item is converted with its own tax rate)
* fixed issue with `items[].index` having gaps in the purchase event; it is now `0, 1, 2, ...`
* fixed issue with the placeholder item lists `product` and `checkout` being sent as `item_list_id` / `item_list_name`
* fixed issue with the data layer being cleared several pushes before the purchase event; it is cleared directly before the event now, so no empty values can be read by Google or the other channels
* fixed issue with `customer_type` / `new_customer` of a guest's first order being `returning`; guests are logged out before the finish page is rendered, so the order history is read from the order instead of the local storage
* EasyCoupon line items and delivery discounts are not distributed to the items
* fixed issue with select_item was sent without ecommerce.currency
* fixed issue with select_item, add_to_wishlist, view_cart, begin_checkout, add_shipping_info, add_payment_info and add_to_cart (cart page) still sending the GA4 ecommerce object when GA4 is disabled
* fixed issue with search suggest: a backslash or apostrophe in the search term or product name broke the script or showed as ' in item_name; values are now JSON-encoded for the JavaScript context
* fixed issue with search suggest: parentId was always empty and quantity was missing (Microsoft Ads value was NaN)
* fixed issue with search term, category, sales channel, shipping and payment method names not being encoded for the JavaScript context
* fixed issue with search suggest: clicking a link without a price (e.g. category or search term links) threw a TypeError; prices with currency symbols or local separators (CHF 18.–, 1'234.50, 18,00 €) are now parsed, and price is omitted instead of NaN
* fixed issue with payment and shipping method changes throwing a TypeError on custom markup (e.g. Saferpay stored cards); the name now falls back to the label text, and add_payment_info / add_shipping_info are still sent
* fixed issue with remove_from_cart not being sent when the cart line item has no .line-item-row class (e.g. Shogun-based themes); falls back to .line-item and reads the quantity from the hidden line item data
* fixed issue with view_cart being sent after every offcanvas cart reload (quantity change, remove); it is now sent once per opening of the offcanvas cart
* fixed issue with item_list_name in category listings using the page (SEO) title instead of the category name; the page title is now only a fallback
* fixed issue with Consent Mode granting ad_storage, ad_user_data and ad_personalization when only Analytics was accepted; analytics and ads consent are now separate, every update sends granted or denied explicitly, and a withdrawn consent is passed on without reload
* fixed issue with Microsoft UET consent: default is now denied and every consent change sends an update with granted or denied
* fixed issue with purchase not being sent over HTTP, where crypto.subtle is not available; purchase is now sent without the hashed fields
* fixed issue with add_to_cart / remove_from_cart throwing a TypeError when no item data was available, e.g. on quantity changes on the cart page
* fixed issue with taxConfiguration = netto (gross prices in the shop): value did not match the sum of price × quantity, and add_to_cart reported a lower value for larger quantities; the net item price is now derived from the net line total and GA4 item prices keep up to 6 decimals
* fixed issue with Ads value being 1 or more cents off when calculated from a rounded net price: gross Ads values now use the gross price directly and net Ads values use the net line total
1.7.9 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* fixed issue with discount calculation was depending on items order
* fixed issue with tax on shipping was inconsistent
* fixed issue with net / brutto price was inconsistent through checkout events (add_to_cart and begin_checkout not the same)
* fixed issue with TrafficOriginCacheSubscriber: Cache bypass (private/no-store) even for external referrers without UTM, e.g., organic Google search
* fixed issue with taxConfiguration = gross: GA4 value included shipping;
* fixed issue with Ads values were too low when a shopping cart discount was applied
* fixed issue with TrafficOriginCacheSubscriber reads utmTracking without a sales channel ID, while FrontendSubscriber reads it with one—behavior varies by sales channel
* fixed issue with HTTP cache obscures the source (UTM / click IDs)
* fixed issue with UTM Tracking: Return Visits from Payment Providers (Wallee, HeyLight) Can Override Campaign Source
* sendPurchaseAdditionalData: added Migration for Existing Installations and Recommendations for GTM Tags with "additional"
* fixed issue where Product assignment was missing in the fallback template (ga4Product in disco_hidden_line_items_information)
* improvement : Standardize the meaning of "data-tax" and "data-shipping" in the checkout and header templates
1.7.8 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* new consent banner WebCAre
* fix: utm parameter, now bypassing cache and ignoring /_esi/ requests
* fix: add_payment add_shipping not being triggered for a second order in the same session.
* fix: rounding for larger qty
* Added more channels for utm parameters : ChatGPT Ads, Hubspot Ads, ShareASale, Rakuten Advertising
* performance tweak for add_to_cart (400 ms reduction)
* fix: 0 in phone number were removed in certain cases.
* fix: order version in custom value
* fix: brutto price with shipping was including extra taxes (shipping price was already included in total tax, it is now separated).
* fix: brutto total value was wrong for several tax rate included in order
* fix: nested line items for Bill of Materials (Stücklisten) and Bundle Plugins (like Pickware)
* added new configuration for client data in additional array
* fix: client data in additional array is no present only if consent is active and if configuration sendPurchaseAdditionalData is set to active
* fix: utm_campaign lost in some cases -> utm_source and utm_medium not empty -> keep both and preserve utm_campaign if present
* fix: php error in some cases in subscriber
* fix: fix currency not being the proper isoCode for some countries (like Poland)
* fix: select_item missing when using Plugin QuickView
* fix: currency missing in ecommerce level in view_item_list event
1.7.7 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* added idealo_de in utm source check ( in case utm_medium is empty but utm_source is idealo_de)
* add extra fallback in utm source parameters when at least one of utm_source utm_medium is not empty but not recognised by our plugin.
* ATTENTION : updated the utm source logic so that we return first utm_source and utm_medium if both are not empty.
* replaced condition on discount for compatibility with easy coupon plugin
* fixed generate_lead not working since the introduction of ChatGPT-Ads
* added hashed userId as sha256_user_id (user_id is still present and not hashed)
* fixed negative value in purchase for discount value larger than items total value
1.7.6 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* fixed compatibility issue with Swag Custom Products plugin decorating the sales channel repository.
1.7.5 6.4.0.0 - 6.4.20.2
* compiled for shopware 6.4.x.x
* fixed custom search plugin for special entities, like Blog or Manufacturer, not working or creating PHP errors after last version 1.7.3
* improved data quality of products (brand and category) in checkout pages. Now using Subscriber instead of storage. Storage kept as fallback.
* added ChatGPT Ads datalayer and events
* added unique event_id on each event
* fixed discount logic for easy-coupon plugin
1.7.4 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* fixed login event being triggered on everypage after last version 1.7.3
* fixed purchase event being triggered on page refresh after last version 1.7.3
* fixed add_payment_info event being triggered twice in the checkout journey after last version 1.7.3
* fixed add_shipping_info event being triggered twice in the checkout journey after last version 1.7.3
* fixed coupon code not being saved propery in local storage after last version 1.7.3
* removed some console logs still present after last version 1.7.3
* fixed logic for coupon for listprice (Streichpreis), giving discrepencies for net price after last version 1.7.3
1.7.3 6.4.0.0 - 6.4.20.2
* compiled for Showpare 6.4.x.x
* improved compatibility with other plugins when exist cms-pages with empty cms elements.
* improved advances prices : prices per any rles (sales channel etc) and graduated prices.
* improved checkout prices logic, prices were missing in some cases.
* correct JS error on removing promotion from Cart.
* added option to supress locastorage entries with TTL.
1.7.2 6.4.0.0 - 6.4.20.2
* Compiled for Shopware 6.4.x.x
* Correction for event "remove_from_cart" when Meta is active
* Added some extra checks in FrontendSubscriber for empty Cross Selling elements
1.7.1 6.4.0.0 - 6.4.20.2
* Compiled for Shopware 6.4.x.x
* Improved compatibility with Variants loaded via QuickView (Shopware Evolve CMS-elements)
1.7.0 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* added null check on cross selling logic to prevent Fatal error: Call to a member function getCrossSellings() on null
* Added compatibility with QuickView (Shopware Evolve CMS-elements):
- Enhanced QuickView integration to trigger view_item event instead of select_item when QuickView is active for this product.
- Ensured the add_to_cart is triggered on the QuickView Modal view
* fixed a bug with null category breadcrumb data (in rares cases warning was triggered : Warning: Trying to access array offset on null in GA4TwigExtensions)
* fixed bug in value, included in purchase event for Meta
* added option to hide price for guest users (B2B option)
* added some links in the backend for documentation and review
1.6.14 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* improved backend speed - subscriber logic now loads only in frontend
* added for fallbacks for empty checkout items like custom elements from other plugins.
* added compatibility for Discount and Coupon plugins.
1.6.12 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* integration of Didomi Consent Banner
1.6.11 6.4.0.0 - 6.4.20.2
* compile for Shopware 6.4.x.x
* new subscriber logic for improved compatibility and performance. This new logic will enhance compatibility with plugin extending Context or Page objects.
* script for ga4product Object is now JSON loaded, hence reducing DOM object number
* add google_business_vertical: 'retail' on ecommerce.items level for all ga4 events as per the new ga4 documentation
* added customer_type (new / returning) on ecommerce level for purchase ga4 event as per the new ga4 documentation.
* enhanced UserCentrics V2 compatibility for scripts including auto blocking
1.6.10 6.4.0.0 - 6.4.20.2
* compiled for Showare 6.4.x.x
* added fallbacks for shipping cost missing in purchase event for custom checkouts.
1.6.9 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* added new custom event to trigger consent update for Advanced Consent Mode
* ga4_event label for all events added for fallback when using consent tools not compatible with our Plugin. this added for all ga4 events
* improved logic for affiliateCode and campaignCode
* improved unit price logic for custom product plugins.
1.6.8 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* analytics_storage, ad_storage, ad_personalization ad_user_data can now be granted for ga4 if google ads is disabled
* improved uuid check for custom function to be compatible with Pseudo-Elements in Listing-Collections
* added a delay for purchase event to make it is loaded after add_payment and add_shipping event in server side tag manager configurations
* added utm parameters tracking for Agents and Shopping Assistants
1.6.7 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* defer tag manager script loading for client side tag manager
* defer tag manager script loading for server side tag manager
* added value in most pinterest events
* added new variables: language, country, landipage (true is first page visited in session)
* corrected viewsearch results event for meta ads
* google ads items correction in purchase event
* corrected missing categories in view_item_list event for pagination (nth page of pagination)
* corrected search suggestion subscriber (for some cases it prohibited closing the search suggestions modal)
1.6.6 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* added value for meta ads add_to_cart event
* corrected content items array for initiatecheckout event (meta ads)
* bugfix for internationl phone number format
* improved customer_lifetime_value logic with storage
* added optional value and currency for meta events (optional in the documentation but it is actually required, now it is there)
1.6.5 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* fix for begin_checkout event using Paypal express checkout
* fix for cookies for Shopware 6.7.4.0 when using Standard Shopware Cookie-Banner
1.6.4 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* fix for empty CMS-elements FrontendSubscriber
1.6.3 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* fix for cross-selling entity request in CMS-pages
* added customer group in the additional array on purchase event for allowing filtering by customer group in Google Analytics. located in addition.customer_group
1.6.2 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* fix for cookie logic for Google Ads and Tiktok
1.6.1 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* added trim on title for some shops importing Product with non ASCII characters and including tabs or new line.
1.6.0 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* introduced new cookie logic for shopware 6.7.3.0
* adding net-gross pricing option for google analytics. We recommend to use net price as the documentation says. https://m-om.link/WVOSYC
* PLEASE make sure by saving that the new setting is the one you want. Gross is like the previous versions of plugin. Net is the new method and the one recommaned by GA4.
* quickfix for shopware 6.4 on product page bug introduced in 1.5.28. this issue only affected shopware version 6.4.x.x
* improved new_customer value logic (introducing customer_type as in new documentation of google Ads)
* renamed customer_type to account_type because of google Ads
1.5.30 6.4.0.0 - 6.4.20.2
* compiled for shopware 6.5.x.x
* improved 'consent'->'default' for userscentrics and cookiebot
1.5.29 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* bug fix for Meta tracking and CookieFirst consent banner
1.5.28 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4.x.x
* added version flag for deprecated call of getCrossSellings in product page
1.5.27 6.4.0.0 - 6.4.20.2
* compiled for Shopware 6.4
* quickfix for customer_life_value