Connect Google Analytics to your GoodSender blog
Report your blog's traffic into a Google Analytics 4 property you own: a new property when the blog is a site of its own, or the property your main site already uses when the blog lives on one of its subdomains. One field in the dashboard, no code on your side.
Updated
How it works
Open your workspace, go to Configuration in the Blog section, and paste one id into the Google Analytics or Tag Manager ID field: either a GA4 measurement ID (G-XXXXXXXXXX) or a Google Tag Manager container ID (GTM-XXXXXXX). GoodSender then adds Google's own tag snippet, exactly as Google documents it, to every public page of your blog: the home page, the archive, tag pages and every post.
- Every public address is tagged. Your custom domain and your GoodSender address (
yourname.gsnd.io) both carry the same tag, so the property sees all of your readers wherever they arrived. - Only your live blog. Drafts, signed preview links and the design preview in the dashboard never load the tag, so your own editing never shows up as traffic.
- Only your tag. GoodSender places no tracking of its own on your blog and cannot read your property. The dashboard's own Analytics page reports email opens, clicks and list growth; page views live in Google Analytics alone.
- One id. The field takes a GA4 measurement ID or a Tag Manager container ID. If you run Tag Manager, paste the container and put the GA4 tag inside it (see below).
Standalone blog: its own property
Use this when the blog is a site on its own: it has its own domain (myblog.com), or it runs on your GoodSender address, and you want its numbers kept apart from anything else you measure.
- In Google Analytics, open Admin, choose Create → Property, name it after the blog and set its time zone and currency. If you have no Analytics account yet, Google creates one for you first.
- Under Data collection and modification → Data streams, choose Add stream → Web. Enter the blog's address exactly as readers reach it (the custom domain, or your GoodSender address) and a stream name. Leave Enhanced measurement on: it records page views, scrolls, outbound clicks and file downloads with no further setup.
- Open the new stream and copy the Measurement ID from Stream details. It starts with
G-. Skip Google's “Install your Google tag” instructions: GoodSender installs it for you. - In your GoodSender workspace, open Configuration, paste the id into Google Analytics or Tag Manager ID and save.
Custom domain and GoodSender address together
Both addresses report into the same property under their own hostnames. To tell them apart in a report, add Hostname as a secondary dimension. Readers normally find you through the address you share, so one of the two carries almost all of the traffic.
Blog on a subdomain: your existing property
Use this when your main site (example.com) already has a GA4 property and the blog runs on one of its subdomains (blog.example.com, connected as the blog's custom domain). You want one property, one set of users, and a reader who comes from your home page to a post counted as one session, not two.
Do not create a second property or a second web stream for the blog. That is the mistake that splits sessions in half: each stream sets its own cookie, and the same reader becomes two users.
- Find the measurement ID your main site already uses: Admin → Data streams, open the web stream for
example.com, and copy its Measurement ID. If the main site is tagged through Google Tag Manager rather than a direct GA4 tag, use the Tag Manager path instead and paste the container ID. - Paste that same id into Configuration → Google Analytics or Tag Manager ID in GoodSender and save.
- That is the whole setup. A web data stream collects from every hostname that uses its id: the URL you typed when the stream was created is a label, not a filter. And Google's tag sets its
_gacookie on the root domain by default (cookie_domain: auto), so every subdomain shares it. A reader moving fromexample.comtoblog.example.comstays one user in one session. - Do not set up cross-domain measurement. It exists for different domains (
example.comandexample-shop.com); subdomains need none of it.
Reading the blog's numbers inside the shared property
- In Reports → Engagement → Pages and screens, add Hostname as a secondary dimension, or build a comparison where Hostname begins with
blog.to see the blog on its own across every report. - If
example.comever shows up as a referral source for the blog (or the blog for the main site), add your root domain under Admin → Data streams → your stream → Configure tag settings → Show all → List unwanted referrals. Google usually handles this on its own; this is the fix if it does not.
Using Google Tag Manager instead
Paste a container ID (GTM-XXXXXXX) and GoodSender adds the Tag Manager snippet instead of a direct GA4 tag, including the <noscript> fallback Google asks for. Your whole tag plan then runs on the blog: Google Analytics, Consent Mode, and anything else the container holds.
- In Tag Manager, open the container (or create one for the blog) and copy its Container ID from the top bar.
- Add a Google tag with your GA4 measurement ID, firing on the Initialization – All Pages trigger, then Submit and publish the container. An unpublished container loads but sends nothing.
- Paste the container ID into Configuration in GoodSender and save. Do not also paste the GA4 id anywhere: the field holds one id, and the GA4 tag now lives inside the container.
Tag Manager's Preview mode works on the live blog like on any site: open it from the container, enter your blog's address, and the debugger shows which tags fired on each page.
Check that it works
- Save the id, then wait a minute. Published pages are cached briefly, so the tag appears on the next fresh render.
- Open your live blog in a private window (your ad blocker, if you use one, blocks Google's tag like any other) and click into a post.
- In Google Analytics, open Reports → Realtime. Your visit appears within seconds, with the blog's hostname and page path.
- To check without Analytics, view the page source of any post and search for
googletagmanager.com: the tag sits at the end of<head>.
Realtime is immediate; the standard reports take 24 to 48 hours to fill in. Preview links and the dashboard never appear, by design.
<!-- what GoodSender renders for a GA4 measurement ID -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>Consent and privacy
The tag runs exactly as Google documents it. GoodSender adds no consent banner and makes no decision about your readers' jurisdiction, so cookie consent, Google's Consent Mode and any regional rules are yours to configure. The usual route is a Tag Manager container with a consent management platform that gates the GA4 tag. Mention the analytics in your blog's privacy notice as you would on any site.
Troubleshooting
- The id will not save
- Only two shapes are accepted:
G-followed by letters and digits, orGTM-followed by letters and digits. Copy the Measurement ID, not the numeric Stream ID or Property ID, and not a Universal AnalyticsUA-id, which Google no longer processes. Case does not matter; GoodSender stores the id in upper case. - Realtime stays empty
- Confirm the blog is live (the Domain page shows HTTPS connected, or your GoodSender address opens), wait a minute for the cache, and try a private window without extensions. Then check the id against the stream you meant: a stream from another property reports there, not here.
- Sessions split between the main site and the blog
- Both must load the same measurement ID (or the same container). A second stream or property for the blog is the usual cause; remove it and paste the main site's id instead. Then list your root domain under unwanted referrals, as above.
- Google Analytics and the dashboard disagree
- They count different things. The dashboard's Analytics page is about email: opens, clicks and subscriber growth. Google Analytics is about the web: page views, sessions and sources. Neither is a check on the other.
- Nothing changes after removing the id
- Clear the field and save; pages drop the tag on their next fresh render, within a minute. Data already collected stays in your property.
Next: get the blog into Google and Bing and submit its sitemap. If the blog runs on a GoodSender address, the connected tag is also how you prove ownership to Search Console.