Blog
SignalHost for WordPress: server-side Google Tag Manager and WooCommerce events from one plugin
Published · 7 min read
The SignalHost plugin puts server-side Google Tag Manager on a WordPress site without pasted code. It adds the tracking to every page, sends WooCommerce, form and sign-up events in the shape your container expects, switches over by itself when your own tracking domain goes live, and warns you about anything that would count twice. This guide follows the order you meet it: installing, connecting, checking, and fixing what does not work.
Before you start
- WordPress 6.6 or later on PHP 7.4 or later, and an administrator account.
- A site address that starts with https://, which connecting needs. Other sites can still use the plugin with a pasted snippet, described below.
- A SignalHost account. The free plan is enough to try it: 10,000 requests a month and one container. You can create the account while connecting.
- WooCommerce, if you want shop events. Form and sign-up events work without it.
1. Install the plugin
In WordPress, go to Plugins → Add New, search for SignalHost, then install and activate SignalHost – Server-Side Tag Hosting for Google Tag Manager. It adds a SignalHost entry to your admin menu, and contacts no outside service until you connect the site.
2. Connect the site to a container
Open SignalHost in the menu and press Connect with SignalHost, or Create a free account if you are new. Your browser goes to signalhost.io and comes back when you are done.
There, Connect a website lists what the plugin will be able to do — add your tracking code to every page, keep it up to date and read the container's status — and what it cannot: use your Google account, your ad platform tokens or your billing. Then it asks which container the site should use. A container is your own tagging server: a Tag Manager web container and server container, built in your own Google account, so they stay yours.
Pick one and press Connect, or choose New container for your site and press Create container for the short wizard, which offers to connect the site before the build finishes; the plugin adds the code the moment the container is ready. Back in WordPress, a notice says the site is connected.
3. Check that it works
The Status tab is a checklist that turns green from top to bottom: Connected to SignalHost, Tracking code on your site, SignalHost served the code to a visitor, and Data arriving. The second step comes from the plugin fetching your home page as a logged-out visitor would; Check again repeats it.
Open your site in a browser, add a product to the cart, send a form. The third step turns green within a minute of the first visit, and Data arriving then counts the last 7 days' page views. Log events in the browser console, under Advanced, shows each event as it leaves the page, and from the Growth plan up the container page on signalhost.io lists them under Live event monitoring.
What the plugin adds to your site
The Google Tag Manager loader, in the head of every page, pointed at your own tagging address instead of googletagmanager.com, placed after your cookie banner and excluded from the "delay JavaScript" features of common performance plugins. On top of the page views your container sends, the plugin pushes these events, each with its own event_id, so Meta, TikTok and other platforms count a browser pixel event and its server twin once:
- WooCommerce: view_item_list, view_item, add_to_cart, remove_from_cart, view_cart, begin_checkout, add_shipping_info, add_payment_info and purchase, with the classic and the block-based cart and checkout. Each order is sent once, marked on the order itself, however often the thank-you page is opened.
- Forms: successful submissions from Contact Form 7, WPForms, Gravity Forms, Elementor Pro forms and Fluent Forms, as a lead (generate_lead), contact, booking (schedule), application (submit_application) or subscription (subscribe), chosen per form.
- Sign-ups: sign_up when a visitor creates an account, on the registration page, in My Account or at checkout.
Each kind is a switch under What is tracked. Cart, checkout, form and sign-up events come from the visitor's own session, never from the page's HTML, so a page cache cannot hand one visitor's event to the next.
Send customer details for better ad matching is off until you switch it on. Then email, phone and address go with conversions only when the visitor allowed advertising cookies, hashed before they reach the ad platforms. Consent follows your cookie banner through Google Consent Mode; if your banner does not set it, choose Set “denied until consent” here under Consent & privacy.
If you already use GTM4WP or another Google tag
The plugin reads your home page and checks your other plugins, and lists anything that would count twice under Double-counting check: a SignalHost snippet you pasted earlier, Google's own Tag Manager snippet or Google tag for the same property, Site Kit, MonsterInsights, ExactMetrics or Google Analytics for WooCommerce.
GTM4WP gets one-click fixes. Turn off GTM4WP’s container code stops it loading the same container straight from Google while its data layer keeps working; Turn off GTM4WP’s shop tracking leaves shop events to SignalHost. Undo reverses either.
Your own tracking domain
Your container starts on an address under signalhost.io. On a paid plan, Set up your own domain on the container page walks you through a subdomain of your own site, such as metrics.yoursite.com, with one DNS record. Browsers treat it as first-party, so its cookies count as your own and ad clicks stay credited. When it goes live, the plugin switches your site to it at its next check-in, usually within the hour, and clears your page caches. There is nothing to replace by hand.
Adding SignalHost by hand
You can also run SignalHost on WordPress without the plugin. On signalhost.io, open your container, find the snippet in the Install on your site card and press Copy. Paste it into the head of every page, as high as you can but after your cookie banner's script: a header plugin such as WPCode (its Header box) works, or your theme's header.php. If the site already loads Google Tag Manager or a Google tag for the same Analytics property, replace that snippet rather than adding a second. Then press I have done this.
That puts your Tag Manager container on every page, with page views and whatever your site pushes to the data layer itself. It loses everything the plugin adds: the WooCommerce, form and sign-up events, the once-per-order purchase and both checks. When your own domain goes live, you replace the snippet yourself.
For a site that cannot connect, such as one without https://, there is a middle way: in the plugin, choose I already have a snippet from SignalHost, paste the code and press Use this snippet. The events still flow, but the plugin cannot switch to your own domain or show whether data arrives.
Managing and disconnecting
Disconnect on the Status tab asks once, then removes the tracking code from every page right away. Your container and its data stay, and Connect with SignalHost brings the site back at any time. Settings › Connected sites on signalhost.io lists the site too; Disconnect there takes the code off at the plugin's next check-in, usually within the hour.
Deleting the plugin disconnects the site and removes everything the plugin stored. On a staging copy, the plugin notices the changed address and pauses tracking, so test traffic stays out of your live data.
When something does not work
- There is no Connect button: the site address does not start with https://. Use I already have a snippet from SignalHost instead.
- Connecting stops with a message about a firewall: a security plugin or the server blocks requests to signalhost.io. Allow them and press Connect again.
- The code was not found on your home page: a theme without wp_head(), a page cache or an optimisation plugin is removing it. Press Clear page caches under Advanced, then Check again.
- The code is on your home page twice, or an older copy is there: remove the snippet you pasted into your theme or a header plugin earlier.
- The home page could not be opened from this server: password protection, maintenance mode or a firewall is in the way. Open the site in a browser to check it there.
- Your own visits are missing: Do not track administrators is on. Visit the site signed out.
- Anything else: write to hello@signalhost.io with your site's address.
Trademarks
SignalHost is an independent product of Algorithmo GmbH and is not affiliated with or endorsed by the WordPress Foundation, WooCommerce, Google, Meta or TikTok. Google Analytics, Google Ads and Google Tag Manager are trademarks of Google LLC; Meta is a trademark of Meta Platforms, Inc.; TikTok is a trademark of ByteDance Ltd.; WordPress is a trademark of the WordPress Foundation. WooCommerce and the other plugin names mentioned here are trademarks of their respective owners.

