Connect Google Analytics 4PRO
Step-by-step guide to connecting Google Analytics 4 (GA4) to SEObolt Pro. Connecting GA4 authorizes SEObolt to read your property's traffic and engagement data (sessions, users, page views, engagement time) via read-only OAuth, and unlocks SEObolt's built-in gtag.js tracker install with duplicate-tracker detection. This guide covers the OAuth flow, the expected "Google hasn't verified this app" warning screen, GA4 property picker guidance, and the optional gtag.js tracker install.
What Google Analytics 4 Gives You in SEObolt
Google Analytics 4 is Google's replacement for Universal Analytics, tracking on-site visitor behavior: sessions, users, page views, engagement time, traffic sources, and per-URL performance. GA4 is near-realtime for engagement metrics; its acquisition and attribution reports typically settle within ~24 hours.
Search Console covers pre-click (what people searched for, what showed up in results, whether they clicked). GA4 covers post-click (what they did once they landed on your site). Connecting GA4 to SEObolt does two things: it authorizes SEObolt to read your property's data via a read-only Google API scope, and it unlocks the built-in GA4 Tracking Code installer so you don't need a separate plugin or Google Tag Manager container to run gtag.js on your site.
In the current release, connecting GA4 does three things: (1) it lights up the Avg Time on Page stat card on the SEObolt widget on your WordPress main Dashboard (`/wp-admin`), pulled live from GA4's averageSessionDuration with a 30-days-vs-previous-30 change indicator, (2) it unlocks the built-in gtag.js tracker install described below (with automatic duplicate-tracker detection), and (3) it authorizes SEObolt to fetch your property's full report data via the proxy for whatever renders it next. A dedicated in-admin traffic dashboard (sessions / users / pageviews / top pages / sources / device / country breakdowns) is on our roadmap — the proxy already fetches all of it, we just haven't shipped the surface. When it lands, the OAuth connection you set up here is what will drive it.
A Google account with access to at least one GA4 property (a data stream for your site), and SEObolt Pro (any tier) active on this WordPress install. If you don't have a GA4 property yet, set one up at analytics.google.com first. SEObolt can also install the GA4 tracking snippet (gtag.js) on your site directly, see the Optional: Install the GA4 Tracking Code section below.
Connect via OAuth
SEObolt uses standard Google OAuth so your Google credentials never touch WordPress. Google issues a read-only access token scoped to Google Analytics that authorizes SEObolt to fetch your report data on your behalf.
Open Connections
In your WordPress admin, go to SEObolt → Settings → Connections. The tab shows two large cards: Google Search Console (top) and Google Analytics 4 (below). Each has its own Connect with Google button.
Click "Connect with Google" on the Google Analytics 4 card
The button opens Google's OAuth flow in the same tab. Google first asks you to pick which account you want to sign in with; pick the account that owns (or has editor/analyst access to) the GA4 property for this site.
Google may show a brief "You're signing back in to Royal Plugins" confirmation screen instead of the full permission grant, since it remembers your previous consent. Click Continue to complete the sign-in.
Expect the "Google hasn't verified this app" screen
This is normal. Because the SEObolt OAuth app is registered under Royal Plugins and is pending Google's formal app-review process, Google shows a warning before the consent screen. To proceed: click Advanced at the bottom-left (Google's default is the blue Back to Safety button), then click the Go to Royal Plugins- (unsafe) link that appears below.
Google labels every unverified OAuth app the same way, regardless of who published it. The verification process is a Google-side review, not a security seal. Your Google credentials never leave Google during OAuth; SEObolt only receives a scoped access token when you approve the consent screen. If you'd rather see this warning removed, so would we; the review process is on Google's timeline.
Confirm sign-in to Royal Plugins
Google shows a "Sign in to Royal Plugins-" confirmation screen listing the basic profile info Royal Plugins will receive (your name and email address). This is Google's identity-only grant, separate from the actual Google Analytics scope which is the next screen. Click Continue.
Approve the Google Analytics scope
Google shows the "Royal Plugins- wants access to your Google Account" screen with the exact permission SEObolt is requesting: See and download your Google Analytics data. This is read-only; no write access is granted, so SEObolt cannot modify your GA4 configuration, create/delete properties, or change your data streams. A yellow reminder banner at the top notes the app hasn't been verified by Google (same reason as Step 3). Click Continue.
Pick your GA4 property
Google redirects you back to SEObolt → Settings → Connections. The Google Analytics 4 card immediately shows a green Connected status with your Google email, and a yellow Select a Property panel appears with a dropdown ("-- Select a property --") listing every GA4 property on your Google account. Pick the one that tracks this WordPress site and click Select. See Select Your GA4 Property below for guidance if your account has many properties.
Confirm the connected state
Once a property is selected, the yellow picker panel disappears and the Google Analytics 4 card settles into its final connected state: green Connected heading with a checkmark, your Google email, the selected GA4 property name below, and a single Disconnect button for later revocation. If you don't reach this state after approval, either your browser blocked the redirect (rare) or a firewall stripped the callback URL; retry from Step 1.
Select Your GA4 Property
If your Google account has multiple GA4 properties, SEObolt shows a property picker right after connection. Pick the property whose data stream is installed on this WordPress site. This step is silent but critical: GA4 returns data for the property you pick regardless of whether it matches your site, so picking the wrong one shows real numbers that just don't belong to this site.
GA4 account, property, and data stream
GA4 uses a three-level hierarchy that trips up first-time users:
| Level | Example | What it is |
|---|---|---|
| Account | "Acme Inc" | Top-level container in Google Analytics. Usually one per organization, with multiple properties underneath. |
| Property | "Acme Marketing Site" | A single tracked entity, typically one website or app. This is what SEObolt's picker lists. |
| Data stream | Web stream: acme.com |
The concrete tracker for one site (web or app). A property can have multiple streams, but SEObolt reads at the property level. |
SEObolt's picker lists properties, not streams. Pick the property whose web stream is the site running SEObolt. Property names typically look like the site's name or URL. If you can't tell them apart, open analytics.google.com in another tab and check which property shows live traffic for this site.
Open Google Analytics on analytics.google.com in another tab, look at which property has live real-time traffic for this site, then pick that same one in SEObolt. If you pick the wrong property, disconnect from the Connections tab and reconnect to run the picker again.
Verify the Connection
The connection is complete when the Google Analytics 4 card on SEObolt → Settings → Connections shows a green Connected badge with your Google email and the selected property name. If you're seeing that, the OAuth handshake, property selection, and read-side access token are all working correctly.
Confirm the green Connected badge
The card should show a green checkmark, "Connected", your Google email in parentheses, and the property you selected. If the card still reads Not connected after the OAuth flow, see Troubleshooting below.
(Optional) Enable the GA4 Tracking Code
The GA4 Tracking Code card directly below the connection card lets SEObolt output the gtag.js snippet on your frontend so you don't need a separate analytics plugin. See Optional: Install the GA4 Tracking Code below for setup.
Once your tracker is running, GA4 publishes engagement metrics (page views, sessions in progress) in near-realtime, so activity from the last hour is usually visible on analytics.google.com. Acquisition and attribution reports (which channel or campaign the traffic came from) typically settle within about 24 hours. If you just installed the tracker on a low-traffic site, give it a full day before assuming something's wrong.
Optional: Install the GA4 Tracking Code
Connecting GA4 via OAuth only reads data from Google; it doesn't install the tracker on your site. For GA4 to have data to report on, the gtag.js tracking snippet needs to be running on every page of your site (usually installed via Google Tag Manager, a separate WordPress analytics plugin, or your theme's script settings).
SEObolt Pro can install the snippet directly, so you don't need a separate plugin. The GA4 Tracking Code card sits directly below the Google Analytics 4 connection card on the Connections tab.
Find your Measurement ID
Open analytics.google.com, go to Admin → Data Streams, click your web stream, and copy the Measurement ID. It always starts with G- followed by 10 alphanumeric characters (format: G-XXXXXXXXXX).
Paste it into the GA4 Tracking Code card
Back in SEObolt → Settings → Connections, paste the Measurement ID into the Measurement ID field on the GA4 Tracking Code card. Check the Enable Tracking box (labeled "Output the gtag.js tracking snippet on all frontend pages") and click Save.
(Recommended) Exclude admin visits
The Exclude Admins checkbox (labeled "Do not track logged-in administrators", on by default) prevents your own logged-in visits from inflating the GA4 traffic numbers. Keep this on unless you specifically want to track admin behavior.
If SEObolt detects another gtag.js already loaded on your site (from a separate Google Analytics plugin, theme, or Tag Manager container), the card shows a yellow Duplicate GA4 detected! warning. Enabling SEObolt's tracker on top of an existing one causes double-counting. Fix: disable the other source first, then re-enable SEObolt's tracker.
Skip the SEObolt tracker install. GTM already loads GA4 via its own container, and adding SEObolt's gtag on top would double-count every event. Leave the GA4 Tracking Code toggle off and let GTM handle it.
Troubleshooting
Most connection issues fall into one of four categories. If your data isn't populating after connection, the dedicated guide at Analytics not populating covers the full diagnostic tree. Quick hits here:
OAuth flow completes but Connections still shows Not connected
Your browser likely blocked the callback redirect from Google back to your WordPress admin. Common culprits: strict tracking-protection settings, an ad-blocker rewriting the callback URL, or a proxy stripping OAuth state parameters. Retry from a different browser (or an incognito window with the ad-blocker off), or temporarily whitelist your admin URL in your browser's tracking-protection settings.
Property picker shows no properties
The Google account you approved doesn't have access to any GA4 properties. Confirm at analytics.google.com that at least one GA4 property is listed for your account. If you have properties but they don't appear in SEObolt's picker, disconnect and reconnect; occasionally Google's property list needs a fresh OAuth pull.
Property connected but no traffic reaching GA4
Most common cause: the GA4 property you selected doesn't actually have gtag.js running on this site, so there's no data for Google to record in the first place. Verify by opening analytics.google.com, going to the same property, and checking Realtime. If you see traffic there, your tracker is working; if not, install the tracker (see Optional: Install the GA4 Tracking Code above). The full diagnostic tree lives at Analytics not populating.
"Insufficient permissions" error during OAuth
The Google account you signed in with doesn't have any GA4 access. Either sign in with a different account that owns/manages a property, or ask a GA4 property owner to grant your account at least Viewer role at Analytics → Admin → Property access management.
Duplicate GA4 tracker warning
SEObolt detected another gtag script already running on your site. See the warning in the GA4 Tracking Code section above; the fix is to disable one of the two sources so you don't double-count events.
Disconnecting or Reconnecting
To disconnect Google Analytics 4 from SEObolt, go to SEObolt → Settings → Connections and click the Disconnect button on the Google Analytics 4 card. This revokes SEObolt's access to your GA4 data, wipes any cached responses, and drops the property selection. Your GA4 account itself is untouched; SEObolt just loses its read access. Disconnecting the read-side connection does not stop the tracker if you enabled SEObolt's GA4 Tracking Code; toggle that off separately if you want to stop tracking too.
To reconnect, click Connect with Google again on the GA4 card and follow the same OAuth flow from the top of this guide. You can reconnect with the same Google account or a different one; SEObolt will re-run the property picker either way.
To switch which GA4 property SEObolt reads from, disconnect and reconnect. The property picker runs again on reconnect, and you can pick a different property (or a different Google account entirely) without touching your GSC connection.
Privacy and Data Handling
Connection is managed via Google's standard OAuth flow. SEObolt receives only the read-only Google Analytics scope you approve on the consent screen, and uses that access solely to fetch your own report data. No telemetry, no analytics forwarding, no third-party sharing.
Any GA4 report data fetched on your behalf is short-cached to keep repeat views fast, and cleared when you disconnect the property. If you're operating under GDPR or a similar regime and using SEObolt's GA4 Tracking Code, the same cookie-consent obligations apply as with any GA4 install; SEObolt itself doesn't add a separate data flow beyond the standard gtag.js behavior.