Install Novra Tracking, connect your first platform and make sure it respects your cookie banner. Written for people who are not developers, and based on the Novra Tracking 1.0.0 source and settings screens.
● All 12 guides are on this page — jump in from the contents
NOVRA TRACKING DOCUMENTATION · VERSION 1.0.0
Tracking, explained. Documented end to end.
GUIDE 01
Start here
Install the plugin, activate your license and connect your first platform. Nothing is sent anywhere until you do.
1. Check what you need
Novra Tracking 1.0.0 needs WordPress 6.4 or later and PHP 8.0 or later. You can see both under Tools → Site Health → Info. A shop plugin is optional: WooCommerce 8.0+, FluentCart 1.6+ or SureCart 4.9+ are supported. For every platform you want to feed (Google Analytics, Meta, TikTok and so on) you need your own account there. The plugin does not create ad accounts for you.
2. Install and activate
Download the plugin ZIP from your account on novracode.com. In WordPress, open Plugins → Add New Plugin → Upload Plugin, choose the ZIP, click Install Now and then Activate. A new Novra Tracking entry appears in the admin menu with three pages: Dashboard, Settings and License.
3. Activate your license
Open Novra Tracking → License, paste your key and click Activate license. The license is only needed for updates. Tracking works without it. Guide 02 has the details.
4. Connect your first platform
Open Novra Tracking → Settings, pick a platform on the left, switch it on and paste its ID. Every platform stays off until you enter its ID. Guide 03 walks through it.
5. Set up consent
Choose a consent mode and check that your cookie banner is detected. The default is Basic: before a visitor agrees, nothing is loaded and nothing is sent. Guide 04 explains the options.
6. Check the dashboard
Novra Tracking → Dashboard shows a tracking score from 0 to 100 and a list of recommendations for everything that is not set up yet. When you have a shop, run a test purchase (guide 08) to confirm the server connections without counting a real sale.
One key per website. It brings plugin updates and nothing else.
Where to enter the key
Novra Tracking → License. You find your license key and your websites in your account on novracode.com. Paste the key and click Activate license. The plugin shows the status, the plan and how many websites the plan allows.
What the license does
With an active license, updates appear on the normal WordPress Plugins and Updates screens, and View details shows the changelog. Without a license, tracking runs completely as you set it up. No update check goes to the store and no update is offered. The license never switches features on or off: every plan has the same features and only the number of websites differs (1, 5, 25 or unlimited).
Moving the license to another website
Click Deactivate license on the old website. This frees the activation. Then paste the same key under Novra Tracking → License on the new website. If the store cannot be reached when you deactivate, the key stays saved. In that case Remove saved key forgets it locally, but it does not release the activation in your account. Release it from your account if you need to.
If activation fails
The messages say what is wrong: a key that belongs to another product, an unknown key, an expired key, or "activation limit reached", which means the key is already used on as many websites as the plan allows. Deactivate it on a website you no longer use, or choose a bigger plan. Your settings are kept in every case.
Pick a platform, switch it on, paste its ID. Most platforms need nothing else.
How the settings are organized
Open Novra Tracking → Settings. The navigation on the left has four groups. Store holds Shop & Events. Platforms holds every platform in sub-groups (Analytics, Search & Shopping, Social, Retargeting & Native, More Channels, Email). Privacy holds Consent. System holds Advanced and Tools.
Switch the platform on and paste the ID
Open the platform, switch it on and paste the ID from your account there. It is called something different on every platform: a measurement ID for Google Analytics 4 (starts with G-), a conversion ID for Google Ads (starts with AW-) plus a conversion label, a pixel ID for Meta and TikTok, a tag ID for Microsoft Ads. Most fields also accept the whole snippet the platform gives you. Save, and the platform shows as ready on the dashboard.
Browser tracking is the first step
With an ID, the platform's own script runs in your visitors' browsers (after consent) and reports page views, product views, carts, checkouts, purchases and sign-ups. That is the part every platform has. The browser-only list in guide 05 shows which platforms stop here.
Server tracking is an extra step
For platforms that offer it, you can also let your website report paid orders directly from your server. For this you add the platform's access token (for Google Analytics 4, an API secret from Admin → Data streams) and switch on the server option, usually called "Send purchases from the server". Tokens are stored encrypted and never appear in the page, the settings export or the system report. Server tracking needs a shop.
Use only what you need
Each platform is independent. You can run only Meta, only Klaviyo or any mix. Google's tag only loads when Google Analytics 4 or Google Ads is switched on. Switch on a platform when you actually advertise there. You can add more as you grow.
The plugin reads your visitors' yes or no from your cookie banner. It does not replace the banner.
The three consent modes
Basic (the default, recommended in the EU): no tag loads before the visitor agrees. Advanced: Google tags load with everything denied and send only anonymous signals, using Google Consent Mode v2, until the visitor agrees. Meta, TikTok and Microsoft Ads still wait for marketing consent in this mode. Off: no consent handling at all. Use Off only if no consent is needed for your visitors.
Which cookie banners it understands
It reads the choice from Complianz, Cookiebot, CookieYes, Borlabs Cookie, OneTrust, GDPR Cookie Compliance, Cookie Notice, Usercentrics, iubenda, Termly, every banner that implements the WP Consent API (for example Real Cookie Banner) and every banner that sets Google Consent Mode itself. IAB TCF is supported for certified consent platforms. A custom banner can call novraTracking.consent( { statistics: true, marketing: true } ).
What happens before the visitor decides
In Basic mode nothing is sent. Events that happen before the decision are kept on the page and sent once the visitor agrees. A withdrawn consent stops the platforms and removes their cookies where the site can remove them.
Server copies respect consent too
When a purchase is reported from your server, the plugin uses the consent that was recorded at the checkout. A visitor who did not agree to marketing does not have their order sent to the marketing platforms.
Regions
In Advanced mode you can limit consent handling to the countries where you need it. Visitors from other countries start with tracking allowed.
Is my banner detected?
The Consent section shows the detected banner. In Basic mode the dashboard also warns you when your customers' browsers found no consent source at checkout, because then no tag would ever load. While Novra Tracking sets Google Consent Mode, the Consent Mode output of Complianz, Cookiebot and Beautiful Cookie Consent is switched off, so there is one set of defaults. Their own settings stay unchanged, and the dashboard warns when another script sets its own defaults.
A browser pixel reports what the visitor's browser sees. Server tracking is your website reporting a paid order itself. Here is what each of the 20 platforms gets.
What the two terms mean
A pixel (or tag) is a small script on your pages that tells an ad platform what a visitor did. Ad blockers, closed tabs and strict browsers can stop it. Server tracking means your website also sends each paid order directly to the platform. Meta, TikTok and others call this a Conversions API. The browser and the server copy share one event ID, so the platform counts the sale once. Server tracking needs a shop and, in most cases, an access token from the platform.
Browser and server: 11 platforms
Meta, TikTok, Microsoft Ads, Pinterest, LinkedIn, Reddit, Snapchat, X, ChatGPT Ads, Spotify Ads and Nextdoor. Each runs its pixel in the browser and can additionally send paid orders from your server. Server copies are sent once per paid order, a few minutes after payment, and only with the marketing consent recorded at the checkout. Each needs its platform's access token or key and the "Send purchases from the server" switch.
Google Analytics 4: browser and server
The Google tag reports page views and every shop step. From the server, purchases the browser could not report are sent through the Measurement Protocol, 30 minutes after payment, and only when the browser did not confirm its own hit. Full and partial refunds, cancellations and subscription renewals go from the server too. You need an API secret from your GA4 data stream.
Google Ads: browser, recovery and refund feed
Purchase conversions run in the browser, with optional Enhanced Conversions, dynamic remarketing and cart data. Google Ads has no server copy of the purchase. Instead, a purchase whose thank-you page never loaded is reported once on the visitor's next page view, and refunds go into a correction feed that Google Ads fetches from a secret address on your site.
Klaviyo: browser metrics, server orders
klaviyo.js reports product views, carts and checkout steps after marketing consent. Paid orders go from your server to the Klaviyo Events API with a private key, and full refunds and cancellations follow. Novra Tracking never adds anyone to a list or subscribes them. It works with WooCommerce and FluentCart.
Taboola and Outbrain: pixel plus ad-click postback
Both run their pixel in the browser. Optionally, purchases of visitors who came from one of their ads are also sent from your server with the ad's click ID. No token is needed and no personal data is sent. Taboola gets every such purchase. Outbrain gets only the purchases the browser missed.
Browser only: 4 platforms
Microsoft Clarity (heatmaps and session recordings), Criteo, AdRoll and GroundTruth run in the browser only. Nothing is sent to them from your server. Clarity loads only after statistics consent and hides customer details in recordings by default.
All 20 at a glance
Google Analytics 4, Google Ads, Meta, TikTok, Microsoft Ads, Microsoft Clarity, Pinterest, LinkedIn, Reddit, Snapchat, X, ChatGPT Ads, Spotify Ads, Nextdoor, Klaviyo, Taboola, Outbrain, Criteo, AdRoll and GroundTruth. Every platform has its own section in Settings and works on its own.
It recognizes WooCommerce, FluentCart and SureCart on its own. Without a shop, it still tracks the basics.
WooCommerce
Classic cart and checkout as well as the block cart and block checkout. Product views, lists, cart, checkout steps, purchases, refunds and cancellations. High-Performance Order Storage (HPOS) is supported, and so are custom thank-you pages of funnel plugins such as CartFlows or FunnelKit as long as their address carries the order key. Subscription renewals from WooCommerce Subscriptions are reported as renewals, never as new purchases.
FluentCart
Product pages, product lists, cart, checkout (including the checkout modal and instant checkout links) and the receipt page. Unpaid orders, for example an open bank transfer, are reported once they are paid. Renewals are supported.
SureCart
Product pages, product lists, cart changes, checkout steps and the purchase. Payments, refunds and cancellations reach the server platforms through a webhook that the plugin registers in your SureCart account with one click. Open orders are also looked up every 15 minutes. Test-mode orders are left out unless you switch on "Send test orders as purchases".
Landing pages
Pages that sell with buy buttons, pricing tables or instant checkout links (block editor, shortcodes, Bricks) report the product view like a product page. This applies to WooCommerce and FluentCart.
No shop
Page views, searches, sign-ups and logins are tracked. Optionally (off by default) you can add clicks on phone and email links and how far visitors scroll. The server-side features are hidden without a shop.
Other shop plugins
Other shop systems, such as Easy Digital Downloads, are not supported. On such a site Novra Tracking behaves like a site without a shop.
Google Tag Manager
Every event is also pushed to window.dataLayer in the Google Analytics 4 e-commerce format, so you can build tags in Google Tag Manager on top of it. You do not need Tag Manager to use Novra Tracking. This option is on by default and can be switched off.
Tracking and page caching are built to work side by side.
Cart, checkout and thank-you pages stay out of the page cache
These pages are marked as not cacheable, so every visitor gets a fresh page and a purchase is reported correctly.
Other plugins' JavaScript delay leaves the tracking scripts alone
The tracking scripts are excluded from delayed, deferred, combined and minified JavaScript in Novra Cache, WP Rocket, LiteSpeed Cache, FlyingPress, SiteGround Optimizer, Perfmatters, Autoptimize and WP-Optimize, each through its own filter. The consent defaults therefore run first, and a purchase never waits for a click.
Saving settings clears page caches
When you save changed settings, the page caches of Novra Cache, WP Rocket, LiteSpeed Cache, SiteGround Optimizer, W3 Total Cache, WP Super Cache and FlyingPress are emptied, so visitors get the new tracking right away. With another page cache, the settings page reminds you to empty it. If you use a CDN such as Cloudflare, purge it too.
Load tracking on first interaction
This optional setting (Settings → Advanced → Performance, off by default) starts the tracking scripts after the first scroll, tap, click or key press. Speed tests never interact, so they see no tracking script. The catch: a visitor who leaves without touching the page is not counted. You can add a time limit of 5, 10 or 20 seconds so those visits count too. Cart, checkout and thank-you pages always start right away.
Does tracking slow the site down?
Each platform you switch on loads its own script, which adds some weight, as it does with any tracking. Platforms that are off load nothing, and your own admin visits, bots and speed-test tools load no tags at all. No page view causes a request from your server. If you care about speed scores, switch on only the platforms you use and consider the first-interaction setting.
Check that everything is connected without counting a real sale, and ask for help without sharing a secret.
Test as a visitor, not as an admin
Administrators and shop managers are excluded from tracking by default, so you will see nothing while you are logged in. Test in a private browser window, or change the excluded roles under Settings → Advanced → Who is tracked.
Watch the events in the browser
Add ?nvtr_debug=1 to any address of your site and every event is logged in the browser console of that tab. Add ?nvtr_debug=0 to end it. This works without debug mode.
Debug mode
Under Settings → Advanced → Testing and logs, Debug mode logs every event in the browser console and marks Google Analytics hits for DebugView. Server-side Google hits then go to Google's validation endpoint, which records nothing. Turn debug mode off when you are done testing. The dashboard reminds you while it is on.
Run a test purchase
Under Settings → Tools, the test purchase runs only while debug mode is on, for administrators and shop managers. It sends a purchase of 1.00 marked as a test (transaction ID starting with NVTR-TEST-) to Google's validation endpoint. That endpoint checks your measurement ID, API secret and event but records nothing. While a Meta or TikTok test event code is set, the same test goes to that platform and shows up only under Test events in its Events Manager. For Microsoft Ads it sends a connection test, because Microsoft has no test mode. Nothing is sent to Google Ads, and no order or statistic changes.
The system report
Under Settings → Tools, the system report collects versions, active plugins, settings, platform status, background jobs and the last errors in one block, ready to paste into a support request. Access tokens, API secrets and keys are never included. Secret fields are listed as set, never shown.
Export and import settings
Tools also exports your settings as a file, for example to move from staging to live. The export leaves out all secrets. An import is checked first, shows which settings it would change and applies them only after you confirm. It never sets tokens, so you enter those again on the new site.
Protections that run automatically, so your reports show real visitors and real sales.
Your own visits are left out
Administrators and shop managers load no tags at all. You can change the excluded roles. Visitors can opt out themselves with the [novra_tracking_optout] shortcode: while the opt-out cookie is set, nothing is tracked in that browser.
Bots and speed tests are left out
Cache warmers, speed tests (Lighthouse, PageSpeed Insights, GTmetrix, WebPageTest, Pingdom), Google's URL inspection and automated browsers load no tags and send no events.
Every sale counts once
The purchase is marked on the order when the thank-you page reports it, and the browser remembers the order ID. Reloading the page, going back to it or opening it on another device does not report it again. When the browser and the server both report a purchase, they share one event ID, so the platform keeps one.
Refunds fix the numbers
Full and partial refunds and cancellations go to Google Analytics 4 as refund events. Google Ads gets a correction feed. Klaviyo gets full refunds and cancellations. Meta has no refund event, so a cancellation before the server copy goes out stops it.
Double Google tags are found
The dashboard checks your home page for Google tags that do not come from Novra Tracking (another gtag.js, a Google Tag Manager container, your own ID loaded twice) and names plugins that add their own. An optional setting disables Google tags added by other plugins.
Accuracy by payment method
The dashboard shows, per payment method, how many paid orders of the last 30 days reached the thank-you page, were sent from the server, were recovered later or were not sent. A method below 90 % is flagged. Payment methods that send buyers to another site, such as PayPal-style redirects, are marked with a hint, because the buyer may never come back to your thank-you page. With the optional GA4 Data API (a Google Cloud service account with read access) the dashboard also shows which orders really arrived in Google Analytics.
Tracking is never 100 % complete. These are the places where it is not, and why.
Nothing is counted without consent
In Basic mode, nothing is sent before the visitor agrees, and server copies follow the consent recorded at the checkout. So it does not count every visit, and it should not. Your shop will always show more orders than a consent-based ad report.
Server copies have time windows
For Meta, TikTok, Microsoft Ads, LinkedIn, Reddit, X and ChatGPT Ads, the server copy is sent only for orders that are paid within 47 hours of being placed. These platforms cannot pair the browser and server copies after that. A bank transfer that arrives on day three is counted by the browser tag only, if at all.
Pinterest is stricter
The Pinterest server copy goes out only for purchases less than 55 minutes old. Pinterest pairs the two copies only within about an hour and would count a later copy twice. Orders paid later are counted by the Pinterest tag alone.
Snapchat allows more
Snapchat pairs copies by event ID and by order number, so its server copy can also be sent for orders paid later, up to Snapchat's own limit of 7 days after the purchase.
X Conversion API is new
The X token path is new at X and has so far been tested against a simulated server only, not against X itself. If X refuses it, the X pixel keeps working in full. Treat the X server copy as experimental.
Four platforms have no server copy
Microsoft Clarity, Criteo, AdRoll and GroundTruth are browser only.
Some platforms need a switch on their side
Microsoft turns the Conversions API on per account. LinkedIn deduplicates only if you enter both purchase conversions, one for the Insight Tag and one for the Conversions API. SureCart needs its webhook registered (one click).
The first-interaction setting skips some visits
If you use "Load tracking on first interaction", visitors who leave without scrolling, tapping or clicking are not counted, unless you add a time limit.
Your shop and your ad account will still differ
Ad platforms only count sales they connect to their own ads, and each uses its own attribution window. Consent choices, ad blockers and payment redirects remove more. Novra Tracking closes the technical gaps, but the two numbers measure different things. See the FAQ for more.
It reads your banner's decision. You still need a banner, and you need to link it to your privacy policy. Whether your setup meets the privacy law of your country is a question for your own legal advisor.
It does not create ad accounts or campaigns
You create the accounts at Google, Meta and the others and the campaigns in them. Novra Tracking reports what happens on your site. It does not promise a better return on ad spend.
It does not count every visit
See the limits above: consent, time windows and platform rules decide what arrives.
It does not add anyone to a Klaviyo list
Klaviyo receives events about orders and browsing. Nobody is subscribed to anything.
It does not support every shop
Server-side tracking works with WooCommerce, FluentCart and SureCart. Klaviyo works with WooCommerce and FluentCart only. Other shop plugins are not supported.
It does not replace Google Analytics reports
It feeds the platforms. You still read your results in their own reports.
Find which layer is missing before you change more settings.
I see no hits while I am logged in
That is expected. Administrators and shop managers are excluded by default. Test in a private window, or change the excluded roles. In the browser console, ?nvtr_debug=1 shows which events fire.
Nothing is sent although my cookie banner is active
In Basic mode, tags load only after the visitor allows "statistics" (Google Analytics) or "marketing" (Google Ads, Meta, TikTok, Microsoft Ads and the other ad platforms). Meta, TikTok and Microsoft Ads wait for "marketing" in Advanced mode too. Check that your banner reports these categories and that the Consent section shows your banner as detected.
A platform shows no data after I saved the ID
Check the ID for typos and that the platform is switched on. Empty your page cache and CDN, because an old cached page still carries the old setup. Platforms need a little time to show new data. Use the platform's own test tool, such as Meta's Test events with a test event code.
Server-side purchases are not arriving
Check that the token is entered and the server option is on. Then check the paid-within window in guide 10. Under Settings → Advanced, the server log lists failed hits. Optionally it logs the HTTP requests too, which switches itself off after 24 hours. The dashboard warns when background jobs stop running. They run through Action Scheduler where available, otherwise through WP-Cron.
My thank-you page is custom
Custom thank-you pages of funnel plugins work as long as their address carries the order key. The dashboard checks where your order confirmation leads.
Google tags appear twice
The dashboard conflict check names the source. Remove the other tag, or switch on "Disable Google tags added by other plugins".
My numbers do not match my ad account
See "Limits you should know" and the FAQ. The accuracy table on the dashboard shows where sales are lost per payment method.
Still stuck?
Copy the system report from Settings → Tools and send it with your question through the contact page. It contains no tokens, so it is safe to share. Never send a full license key.
The product page, the changelog, the roadmap and the FAQ — what Novra Tracking does, what changed, what comes next and the questions we hear most often.
Tell us which version you are running, the affected page and the steps that reproduce it. Add the system report from Settings → Tools, which contains no tokens. We will take it from there.