Custom
How to set up server-side tagging for a custom cms webshop
Setting up server-side tagging for Custom
This article walks you through the full setup of server-side tagging on a Custom store: generating your Google Tag Manager templates, importing them, filling in your IDs, testing them, and finally removing the old tracking connections that custom cms made for you.
Before you start
This article picks up where Getting Started leaves off. Make sure all of the steps in the Setup AdPage container article have been followed. Which means that:
Step 1: Generate your templates in the Template Library
You do not have to build your tags, triggers and variables by hand. AdPage's Template Library generates a complete, tested Google Tag Manager setup for custom cms for you.
Select the marketing platforms you want to send data to, for example Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads or Pinterest Ads.
Select the Consent Management Platform you use on your custom webshop.
Generate the templates. You get two JSON files: one for your GTM web container and one for your GTM server container.
Download both files and keep them handy.

Step 2: Import the web container template
Open your GTM web container.
Go to Admin and click Import Container.
Select the web JSON file you downloaded.
Choose a workspace.
If you have unpublished changes in your default workspace, we recommend importing into a new workspace so your import stays separate from any other work in progress.
Choose the import option:
Merge and rename conflicting tags, triggers and variables for a container that already contains a setup. Nothing existing gets removed.
Overwrite only for a brand new, empty container.
Check the preview of the changes that GTM shows you, then click Confirm.

Step 3: Import the server container template
Repeat the same steps in your GTM server container with the server JSON file.
Open your GTM server container.
Go to Admin and click Import Container.
Select the server JSON file.
Import into a new workspace and choose Merge and rename conflicting tags, triggers and variables.
Check the preview and click Confirm.
Go to Clients and check if an extra GA4 client has been set up. If so, delete the imported GA4 client.

Step 4: Fill in the constant variables
Both templates are built around constant variables. All IDs, tokens and settings live in one place, so you never have to open individual tags to change something.
In your GTM web container, go to Variables.
Open every constant variable, which you can recognize by the "@" in the name. Fill in the correct value per variable. See the table below to know what ID or Token you have to fill in.
Save each variable.
In your GTM server container, go to Variables.
Open every constant variable, which you can recognize by the "@" in the name. Fill in the correct value per variable. See the table below to know what ID or Token you have to fill in.
Save each variable.
Depending on the platforms you selected, you will typically fill in:
Web
Server Container URL
The tagging domain from your CNAME record, for example: https://tagging.domain.com
Web
GA4 Measurement ID
Your GA4 property's Measurement ID:
G-XXXXXXXXXX
Web
Your LinkedIn Partner ID, found in the Signals Manager of your LinkedIn Ads Account
Web
Cookiebot Domain Group ID
The Domain Group ID from your Cookiebot account
Server
GA4 Measurement ID
Your GA4 property's Measurement ID:
G-XXXXXXXXXX
Server
Create new purchase, add_to_cart, and begin_checkout conversions in Google Ads. Once set up, you can find their Conversion Labels.
Server
The Advertiser ID from your Ad Account. This ID usually starts with 549.
Server
The API Token found in your Conversions API settings of your Pinterest Business Account.
Server
The API Token which you can generate in your LinkedIn Campaign Manager in the Sources.
Server
Create new purchase, add_to_cart, and begin_checkout conversions in LinkedIn Ads. Once set up, you can find their Conversion IDs in the URL of the conversion.
Step 5: Test in preview mode
You have just imported container templates with complete tracking for GA4 and the marketing platforms you selected. That means everything you need is now present in your GTM containers, and anything that was already there for the same purpose is a duplicate.
Disable your old tags first
Go through the tags in your web container and pause or delete every tag that measures something your new setup now handles. In practice this is your old GA4 configuration tag, all GA4 event tags for e-commerce steps such as add_to_cart and purchase, your Meta Pixel tags, your Google Ads remarketing tags, and any custom HTML tags that send data to a platform directly.
If you are not sure whether you will need an old tag later, pause it instead of deleting it. You can always remove it in a later version once the new setup has proven itself. Old triggers and variables can stay, they do nothing on their own.
Skip this and preview mode will show two of everything, and after publishing your conversions will be counted twice.
Test both containers
Open the Preview mode in your GTM web container and fill in the URL of your webshop.
Open the Preview mode in your GTM server container as well, so you can follow the same hits arriving server-side.
Walk through the complete customer journey and check that each step fires once, with the right e-commerce parameters:
page_viewview_item_listview_itemadd_to_cartview_cartremove_from_cartbegin_checkoutadd_shipping_infoadd_payment_infopurchase
For every event, check in the server container that the GA4 event request arrives and that your platform tags fire and return a successful response.
Step 6: Clean up, deploy and publish
Everything up to this point has run on your staging environment. Going live means the custom cms deploy and the GTM publish need to happen in the right order, and there is one clean-up round to do first.
Remove tracking scripts that are now handled server-side
Every platform you have moved to your server container should no longer be loaded directly in your Custom frontend. If you set up Meta Ads through server-side tagging, the Meta Pixel base code in your theme has to go. The same applies to a hardcoded gtag.js snippet for GA4 or Google Ads, a TikTok pixel, a Pinterest tag, or any other pixel that is now fired from the server container. If your theme contains a GTM snippet that was placed there manually, remove it as well, because the AdPage module loads the connection to the GTM web container itself.
Go through this list with your developer before anything is pushed, so the removals and the module land in production in the same release.
Deploy to production
Ask your custom cms developer to push the module and the theme changes to production. Wait until the deploy is confirmed and you can see the changes in scripts and dataLayer on your live site.
Publish both GTM containers
Test again in the preview modes on the live site. If everything still works as intended, you can publish your web and server container. Use a version name and description you will recognise later, for example "AdPage server-side tagging", so you can roll back to the previous version if something turns out to be wrong.
After publishing, run a test purchase on your live site and check in the AdPage interface and your GA4 realtime report whether the events arrive and the conversions are registered once. Any connection that custom cms still maintains directly with an advertising platform will send the same event a second time, which leads to duplicated conversions and inflated revenue in your reports.
Need help?
Still seeing missing events, duplicated conversions or unassigned traffic after following these steps? Reach out to our support team and we will take a look with you.
Last updated
Was this helpful?

