Google Tag Manager Template
The Sealmetrics GTM Template allows you to install and configure Sealmetrics tracking on your website directly from Google Tag Manager, without writing any code. Track pageviews, conversions, and microconversions with full attribution — all while maintaining GDPR compliance.
Features
- No-code installation — Configure everything through GTM's visual interface
- Three event types — Pageviews, microconversions, and conversions
- Custom properties — Attach additional data to any event
- Cookieless tracking — GDPR-compliant analytics without consent banners
- Automatic SPA support — The tracker detects History API navigation automatically
If you need to pass a content_grouping (or any other value) from dataLayer variables into the initial pageview, or you fire conversions before the script finishes loading, see the Advanced GTM Integration guide. It covers the ?auto=0 manual mode and the buffer stub.
Recommended Trigger: Initialization
For the pageview tag, configure the Initialization trigger (event ID gtm.init) instead of the default All Pages / Page View trigger. This is the single most important configuration choice when installing Sealmetrics via GTM.
Why this matters
The Sealmetrics tracker is under 1 KB, cookieless, and does not block rendering. Because of that, the best place to load it is as early as possible in the page lifecycle, so it can capture users who bounce in under a second.
GTM's event hierarchy fires in this order during page load:
1. gtm.init ← Initialization (earliest)
2. gtm.js ← Page View / All Pages
3. gtm.dom ← DOM Ready
4. gtm.load ← Window Loaded (latest)
The default Page View trigger is tied to gtm.js, which runs after the DOM starts parsing. On most sites the gap between gtm.init and gtm.js is a few milliseconds and the difference is invisible. But in three common scenarios, Page View loses hits:
| Scenario | Why Page View arrives too late |
|---|---|
| Single-Page Applications (Next.js, React Router, Vue Router, Nuxt) | The first Page View depends on when the framework marks the route as ready. In some setups, gtm.js fires after the client-side render, not the initial HTML. |
| Sites with heavy synchronous JS | Blocking scripts in <head> delay everything after them, including gtm.js. |
| Users who bounce in under 1 second | If the visitor leaves before gtm.js runs, the hit never reaches Sealmetrics. Initialization fires almost immediately when the GTM container loads. |
Race condition at a glance
Time →
GTM container loads
│
├─ gtm.init ────► [Sealmetrics fires here] ✅ Hit captured
│
│ (DOM starts parsing)
│ (synchronous scripts may block here)
│
├─ gtm.js ────► [Default Page View fires here]
│ If the user already left: ❌ Hit lost
│
├─ gtm.dom
└─ gtm.load
For traffic from paid ads, social, or push notifications — where sub-second bounce rates can hit 5–15% — moving the tag from Page View to Initialization recovers that lost segment.
About SPAs
The Sealmetrics tracker auto-detects SPA navigation via history.pushState, replaceState, and popstate. With the Initialization trigger, the tracker loads once and handles every subsequent route change inside your app — you do not need to add an "All Pages" or "History Change" trigger for pageviews. Adding one would cause duplicate hits on the initial load.
The only exception is if your setup removes and re-injects the GTM container between routes (rare). In that case, add a History Change trigger pointing to the same tag.
Installation Options
You have two ways to install the Sealmetrics template:
Option 1: Community Template Gallery (Recommended)
The Sealmetrics template has been submitted to Google's Community Template Gallery and is currently pending review. Once approved, you'll be able to install it directly from within GTM.
Once approved, to install from the Gallery:
- In Google Tag Manager, go to Templates in the left sidebar
- Click Search Gallery in the Tag Templates section
- Search for "Sealmetrics"
- Click on the template and then Add to workspace
- Confirm by clicking Add
Option 2: Manual Import (Available Now)
You can import the template manually right now:
-
Download the template file:
Download template.tplOr clone the repository:
git clone https://github.com/sealmetrics/gtm-template.git -
In Google Tag Manager, go to Templates in the left sidebar
-
In the Tag Templates section, click New
-
Click the three dots menu (⋮) in the top-right corner
-
Select Import
-
Choose the downloaded
template.tplfile -
Click Save to add the template to your workspace
Configuration
Once the template is installed, you can create tags using it.
Creating a New Tag
- Go to Tags in the left sidebar
- Click New
- Click on Tag Configuration
- Select Sealmetrics Tracking from the list
- Configure the tag settings (see below)
- Add a Trigger:
- For the pageview tag, use Initialization — All Pages (event
gtm.init). See Recommended Trigger: Initialization above for the rationale. - For conversions and microconversions, use the relevant Custom Event or Form/Click trigger.
- For the pageview tag, use Initialization — All Pages (event
- (Optional but recommended for the pageview tag) Open Advanced Settings → Consent Settings and select No additional consent required. Sealmetrics is cookieless and consentless by design, so a CMP should not block it.
- Save the tag
Tag Settings
Event Type
Choose what type of event to track:
| Event Type | Use Case | Example |
|---|---|---|
| Pageview | Track page loads | Every page visit |
| Microconversion | Track intermediate actions | Add to cart, form start, video play |
| Conversion | Track completed goals | Purchase, lead form submit, signup |
Site ID (Required)
Your Sealmetrics Site ID. Find it in your Sealmetrics dashboard under Settings.
- Log in to Sealmetrics
- Go to Settings → Sites
- Click on your site
- Your Site ID is displayed in the General tab
Pixel URL
The base URL of the Sealmetrics pixel service. Default: https://t.sealmetrics.com.
Only change this if you are using a custom pixel domain. Most users should leave the default value.
Event Label (Microconversions & Conversions)
A descriptive name for the event. Use clear, consistent naming:
purchase— For completed ordersadd_to_cart— For add-to-cart clickslead_form_submit— For lead generationnewsletter_signup— For email subscriptionscheckout_step_1,checkout_step_2— For funnel steps
Conversion Value (Conversions only)
The monetary value of the conversion. For e-commerce, this is typically the order total.
You can use a GTM variable to dynamically pass the value:
- Create a Data Layer Variable for your order total
- Reference it like
{{Order Total}}
Content Grouping (Pageviews only)
Optional. Group pages by category for better analytics:
blog— Blog postsproduct— Product pagescategory— Category listingscheckout— Checkout flow pageslanding— Landing pages
Custom Properties
Add key-value pairs to attach additional data to events:
| Property Name | Property Value | Use Case |
|---|---|---|
product-id | SKU12345 | Track which product was purchased |
product-name | Blue Widget | Human-readable product name |
payment-method | credit_card | Payment analytics |
coupon-code | SAVE20 | Track promo code usage |
Use kebab-case for property names (e.g., product-id, not productId).
Complete Setup Examples
Example 1: Basic Pageview Tracking
Track all page loads on your website:
Tag Configuration:
- Event Type: Pageview
- Site ID: Your account ID
- Content Grouping: (optional) Use a variable like
{{Page Type}}
Trigger: Initialization — All Pages (gtm.init)
Consent Settings: No additional consent required
The tracker automatically handles SPA (Single Page Application) navigation. You only need one pageview tag — the tracker detects URL changes via the History API and tracks subsequent route changes automatically. Do not add an "All Pages" / Page View trigger alongside Initialization — it would double-count the initial hit.
Example 2: E-commerce Purchase Tracking
Track completed purchases with order value:
Tag Configuration:
- Event Type: Conversion
- Site ID: Your account ID
- Event Label:
purchase - Conversion Value:
{{Order Total}}(Data Layer variable) - Custom Properties:
payment-method→{{Payment Method}}
Trigger: Custom Event — purchase or Thank You Page view
Example 3: Add to Cart Microconversion
Track when users add products to their cart:
Tag Configuration:
- Event Type: Microconversion
- Site ID: Your account ID
- Event Label:
add_to_cart - Custom Properties:
product-id→{{Product ID}}product-name→{{Product Name}}
Trigger: Custom Event — add_to_cart click
Example 4: Lead Form Submission
Track contact form submissions:
Tag Configuration:
- Event Type: Conversion
- Site ID: Your account ID
- Event Label:
lead_form_submit
Trigger: Form Submission on contact page
Using Data Layer Variables
For dynamic values (order totals, product IDs, etc.), push data to the GTM Data Layer and create variables.
Push Data to Data Layer
Add this code when an event occurs (e.g., on your thank-you page):
<script>
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'purchase',
orderTotal: 149.99,
paymentMethod: 'credit_card'
});
</script>
Create Data Layer Variables in GTM
- Go to Variables → New
- Choose Data Layer Variable
- Set Data Layer Variable Name to
orderTotal - Name it
Order Totaland save - Repeat for other values (
paymentMethod, etc.)
Use Variables in Your Tag
Reference variables in your tag configuration:
- Conversion Value:
{{Order Total}} - Custom Properties:
payment-method→{{Payment Method}}
Testing Your Setup
Preview Mode
- Click Preview in GTM
- Navigate your website
- Verify tags fire on the correct pages/events
- Check that values are passed correctly
Debug in Sealmetrics
- Log in to Sealmetrics
- Go to your account dashboard
- Check Real-time data to see incoming events
- Verify pageviews and conversions appear correctly
Browser Developer Tools
- Open Developer Tools (F12)
- Go to the Network tab
- Filter by
sealmetrics - Verify that
t.jsloads and event requests are sent with correct parameters
Troubleshooting
Sealmetrics reports fewer hits than my server logs or GA4
This is almost always caused by the pageview tag being assigned to the Page View / All Pages trigger instead of Initialization. In SPAs, sites with heavy synchronous JS, or traffic with high sub-second bounce rates (paid ads, social), Page View fires too late and the user is already gone.
Fix:
- Open the Sealmetrics pageview tag in GTM
- Remove the "All Pages" / Page View trigger
- Add the Initialization trigger (event
gtm.init) — listed under built-in triggers as "Initialization — All Pages" - Verify in Preview mode that the tag now appears in the Tags Fired column under the
Initializationevent, not underPage View - Publish the container
See Recommended Trigger: Initialization for the full rationale.
A consent banner (Cookiebot, OneTrust, etc.) blocks the tag
Sealmetrics is cookieless and consentless by design, so a CMP should not block it. If yours does:
- Open the tag → Advanced Settings → Consent Settings
- Select No additional consent required
- Save and republish
Tag not firing
- Check your Trigger configuration — the pageview tag should be on Initialization, not Page View
- Verify the trigger conditions match the page/event
- Use GTM Preview mode to debug
Values not passing correctly
- Verify Data Layer variables are configured correctly
- Check that data is pushed before the tag fires
- Test variable values in Preview mode
If you push values to the Data Layer after the GTM snippet, those values are not available at gtm.init. For the pageview tag, prefer Constant Variables (static values set in GTM) over Data Layer Variables. If you must pass dynamic data on the first hit, push it to the Data Layer in a <script> block placed above the GTM container snippet in your HTML.
No data in Sealmetrics
- Verify your Site ID is correct
- Check that tags are firing (use Preview mode)
- Wait a few minutes — data may take time to appear
- Ensure your website domain is registered in Sealmetrics
Resources
- GitHub Repository: github.com/sealmetrics/gtm-template
- Direct Download: template.tpl
- Google Tag Manager: tagmanager.google.com
- Sealmetrics Dashboard: my.sealmetrics.com
Support
Need help with the GTM template?
- GitHub Issues: Report bugs or request features
- Email: support@sealmetrics.com
- Documentation: Full Sealmetrics docs