Description
Analytics Head is a deliberately simple WordPress plugin for Google Analytics. No dashboards, no Google account connection, no feature creep — just the tracking code, placed exactly where you want it.
Why use this plugin?
- Lightweight — a handful of options, minimal overhead, no external dependencies
- Easy — paste your GA4 Measurement ID (G-XXXXXXXXXX) and you are done
- Head placement by default — required for Google Search Console verification via Analytics
- Flexible — footer placement, role-based hiding, Consent Mode v2, optional Google Ads IDs
- Developer-friendly — filters and actions to customize output without forking the plugin
Unlike heavyweight analytics suites, this plugin does one job well: inject the standard gtag.js snippet into your site.
Features
- Google tag / GA4 Measurement ID support (GT-…, G-XXXXXXXXXX)
- Additional tracking IDs for separate destinations (e.g. Google Ads AW-)
- Legacy UA- ID acceptance (with admin notice to migrate)
- Code in
<head>by default (optional footer placement) - Tracking never injected in wp-admin
- Hide tracking for administrators on the front end
- Hide tracking per user role
- Google Consent Mode v2 defaults (for GDPR / cookie plugins)
- Keep settings on uninstall (optional)
- Developer hooks and filters
External services
This plugin connects to Google Analytics (via Google Tag Manager / gtag.js) to provide website analytics.
- When: on public front-end page views only (never in the WordPress admin area), unless tracking is hidden for the current visitor by plugin settings
- What is sent: standard Google Analytics measurement data (for example page URL, referrer, browser/device information, and IP-derived location), processed by Google
- Who receives it: Google LLC / Google Analytics
- Terms of Service: https://marketingplatform.google.com/about/analytics/terms/us/
- Privacy Policy: https://policies.google.com/privacy
You are responsible for informing visitors (for example in your privacy policy) and, where required, obtaining consent. Suggested privacy policy text is also offered under Settings Privacy when the plugin is active.
Requirements
- WordPress 6.3 or later (compatible with WordPress 7+)
- PHP 7.4 or later
Examples
Filter tracking IDs
add_filter( 'pp_google_analytics_head_tracking_ids', function( $ids ) {
// Add a separate destination only — not a second ID for the same Google tag.
$ids[] = 'AW-123456789';
return $ids;
} );
Change Consent Mode defaults (PHP)
add_filter( 'pp_google_analytics_head_consent_defaults', function( $defaults ) {
$defaults['wait_for_update'] = 2000;
$defaults['region'] = [ 'PL', 'DE', 'US-CA' ];
return $defaults;
} );
Grant consent after the user accepts cookies (JavaScript)
Call this from your consent plugin callback or custom banner “Accept” handler. Update all four types that this plugin sets to denied by default:
gtag('consent', 'update', {
analytics_storage: 'granted',
ad_storage: 'granted',
ad_user_data: 'granted',
ad_personalization: 'granted'
});
If you only want basic analytics (not ads), grant analytics and keep ads denied:
gtag('consent', 'update', {
analytics_storage: 'granted',
ad_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied'
});
Modify the inline gtag config
add_filter( 'pp_google_analytics_head_inline_script', function( $script, $ids ) {
$script .= "gtag('event','page_view');";
return $script;
}, 10, 2 );
Installation
- Upload the
analytics-headdirectory to/wp-content/plugins/ - Activate the plugin through the Plugins menu in WordPress
- Go to Settings Analytics Head
- Enter your GA4 Measurement ID (G-XXXXXXXXXX)
- Save — tracking starts immediately
FAQ
-
How do I get a Measurement ID?
-
Sign in to Google Analytics, create a GA4 property for your site, and copy the Measurement ID (format
G-XXXXXXXXXX) or Google tag ID (GT-…) from Admin Data Streams. Use only one ID per Google tag — do not enter both the GT- and G- IDs that belong to the same tag. -
Why place the code in the head section?
-
Google Search Console can verify site ownership via your Analytics tag, but only when the tag is in the
<head>. You can move it to the footer anytime in plugin settings. -
Do I need to connect my Google account?
-
No. This plugin only inserts the tracking snippet — no OAuth, no API keys, no Google login.
-
How does Consent Mode work?
-
Enable Consent Mode v2 under Privacy in the plugin settings. Before gtag.js loads, this plugin sets:
analytics_storagedeniedad_storagedeniedad_user_datadeniedad_personalizationdeniedwait_for_update500 ms
The tracking script still loads (that is how Consent Mode works). Until consent is granted, Google receives only limited, cookieless signals.
When the visitor accepts cookies, your GDPR / cookie banner plugin (or custom JavaScript) should call
gtag('consent', 'update', …)and grant the same four storage types (see Examples). Granting onlyanalytics_storageandad_storagewould leave ad user data / personalization permanently denied.Most modern consent plugins that support Google Consent Mode already do this for you. Enable Consent Mode here, then enable Google Consent Mode / Analytics support in your consent plugin.
-
Does this block the Analytics script until consent?
-
No. Consent Mode is not a hard block. The script is always injected; consent defaults start as denied and are updated later. If you need to delay or remove the script until opt-in, use a consent plugin that hard-blocks tags, or filter
pp_google_analytics_head_tracking_idsto return an empty list until consent is given. -
Which GDPR plugins work with this?
-
Any plugin that can run
gtag('consent', 'update', …)after the user accepts — for example Complianz, CookieYes, Borlabs Cookie, Cookiebot (when Google Consent Mode is enabled in that plugin). There is no proprietary bridge to a single vendor; we stay lightweight and use the standard Google API. -
What if I know PHP?
-
Available hooks and filters (see the Examples section for code):
pp_google_analytics_head_before— action, before scripts are enqueuedpp_google_analytics_head_after— action, after scripts are enqueuedpp_google_analytics_head_inline_script— filter, modify the inline gtag config script ($script,$ids)pp_google_analytics_head_tracking_ids— filter, modify the list of Measurement / Ads IDs ($ids,$options)pp_google_analytics_head_consent_defaults— filter, modify Consent Mode defaults (analytics_storage,ad_storage,ad_user_data,ad_personalization,wait_for_update, optionalregionusing ISO 3166-2 region codes)pp_google_analytics_head_roles— filter, modify roles available in visibility settings
Note: The old
pp_google_analytics_head_outputHTML filter was removed in 1.7.0 (it was incompatible withwp_enqueue_script). Usepp_google_analytics_head_inline_scriptorpp_google_analytics_head_tracking_idsinstead. -
Is it free?
-
Yes, GPLv2 or later. Donations are welcome but never required.
Reviews
Contributors & Developers
“Analytics Head” is open source software. The following people have contributed to this plugin.
Contributors“Analytics Head” has been translated into 1 locale. Thank you to the translators for their contributions.
Translate “Analytics Head” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.7.0
- Release date: 2026-07-28
- Renamed display name to Analytics Head (WordPress.org naming guidelines)
- Google tag / GA4 ID support (GT-, G-) and Google Ads IDs (AW-)
- WordPress 6.3+ and PHP 7.4+ requirement; async script strategy; tested with WordPress 7+
- Translations via WordPress Polyglots (removed bundled language files)
- Output via wp_enqueue_script with real async strategy (inline gtag queued as before)
- Tracking IDs resolved once during wp_enqueue_scripts (late filters / conditional tags work)
- Consent Mode v2 defaults for GDPR / cookie plugin integration (including optional region)
- No wp-admin tracking; role-based front-end visibility via wp_roles()
- Optional keep settings on uninstall (batched multisite cleanup)
- External service documentation and privacy policy helper text
- Invalid IDs no longer wipe previously saved values; filter validation hardened
1.6.7
- Release date: 2018-11-21
- Set compatibility tag

