Website script changelog
This page records changes to the Grona website script: the snippet you install, the main.js runtime, consent handling, single-page app support, tracking and goals, and platform integrations. Entries are newest first and dated by when the change reached production. Your workspace’s main.js is rebuilt for you, so most changes need no action; entries that do say so. For dashboard and product updates, see the Grona product changelog.
26 October 2026
Section titled “26 October 2026”New Wait for consent mode
Each workspace now has a consent mode. With Wait for consent selected, the script stores nothing and sends nothing until the visitor’s consent tool says yes to analytics, and it reads the answer from Google Consent Mode, OneTrust, Cookiebot and Shopify’s customer privacy API. The default is unchanged, so choose the mode in your workspace settings if you need it; see Consent and storage and Consent platforms.
Fixed grona() calls made before the script loads are sent
Calls to grona('track', ...) queued through the stub before main.js finished loading were dropped. The runtime now replays them once it starts, so goal code above the Grona snippet, or on a page where the script loads late, is counted.
Fixed Conversions on pages without a campaign are recorded
A grona('track', ...) call on a page where no campaign runs, such as an order confirmation page, used to be dropped. It is now recorded and credited to the campaign versions the visitor saw in the 30 days before it.
New Orders and bookings count once
When a conversion’s data carries order_id, order_code, order_number or booking_id, Grona counts the goal once per code, so a reloaded confirmation page does not count the order again. See Track conversions and custom events.
Improved Click and form goal snippets catch every matching element
Generated click and form-submit goal snippets now count every element the selector names, including elements your page adds after it loads. A snippet already on your site keeps the old behaviour, so copy the goal’s snippet from the dashboard again to pick this up.
New Built-in listeners for supported booking and commerce platforms
For goals on supported booking and commerce platforms, the script now counts bookings, cart additions and orders itself, so there is no goal snippet to paste. It needs only the Grona snippet at the top of <head>.
New Cart totals for cart-based campaigns and goals
Where a campaign shows a cart amount or a goal measures a cart threshold, the script reads the cart total from what the browser already has: a view_cart or begin_checkout event in dataLayer (ecommerce.value), the cart announced by a supported store platform, a Shopify store’s own /cart.js (requested only after a cart change, never on page load), or the amount shown on the page. The total is held in memory only.
Improved Ad-click ids no longer break URL matching
Campaign URL matching now ignores ad-click ids such as gclid, fbclid and msclkid as well as UTM tags, so a visitor arriving from an ad matches an exact-address campaign. See Target pages with URL rules for the full list.
New Audience rules run in the browser
Campaigns can now show different variations by location, device, language, traffic source, time and earlier visits, and the script checks these rules on the page. The extra storage keys appear only on workspaces whose rules use visit history; see Target audiences.
Improved Changes find their element more reliably
A change can now find its element by attributes such as an id, a test id or a link’s address, or by its text, before falling back to the element’s position in the page. Changes survive more layout differences between pages.
Fixed A failed rebuild keeps your live script
If Grona cannot read your campaigns while rebuilding main.js, the last working script now stays live. Previously the rebuild could publish a script with no campaigns.
Changed Install the snippet at the top of <head>
The dashboard’s install instructions now say to paste the snippet at the top of <head>, above every other script, and not through Google Tag Manager, which loads Grona too late to prevent flicker. If your snippet sits lower, move it; see Install the Grona script.
14 October 2026
Section titled “14 October 2026”Changed Variation changes load from the CDN
The script now downloads the changes for the visitor’s variation as a file from cdn.grona.ai instead of asking the API. If your site sends a Content Security Policy, allow https://cdn.grona.ai in connect-src as well as script-src, or visitors silently see the original page and are not counted. See Content Security Policy.
New Single-page app support
On sites that change pages without a reload, the script now detects route changes, undoes the previous page’s changes, re-runs campaigns for the new address and records a page view for each route. Before this, only the first page was handled. See Single-page applications for what is and is not covered.
Changed Tracking is sent in batches
Page views, clicks, scroll, time on page and conversions now go to api.grona.ai/track/events in batches, instead of separate page view and conversion requests. Look for that request when you check tracking in the network panel; see Debug in the browser.
Fixed Clicks and end-of-visit data are recorded
Visitors who see the original page in a test now have their clicks recorded, and clicks on elements rendered after the page loads count too. The data sent when a visitor leaves is now sent with sendBeacon when the tab is hidden or closed, so it arrives more reliably, including on mobile browsers.
12 October 2026
Section titled “12 October 2026”Fixed Shopify app install no longer dead-ends
Reloading the page during the Shopify app install no longer fails, and a missing or expired install link now offers to reconnect your store instead of showing an error. See Shopify.
30 September 2026
Section titled “30 September 2026”Changed No outside geolocation request
The visitor’s location now comes from the response that delivers the Grona script, so the script no longer calls api.country.is. If you allowed that host in your Content Security Policy for Grona, you can remove it.