Implementation
Holding the tag is the easy half.
A consent gate stops scripts from running before a patient agrees. That part is a one-line install. The part nobody warns a practice about is what happens next: Google Ads and GA4 go quiet, the numbers drop, and the practice concludes the consent banner broke its marketing. It did not. The signal that tells Google a visitor declined — as opposed to never existing — was never wired. This is a one-time engagement that wires it and proves it on your live site.
One-time engagement · no retainer · last reviewed 27 July 2026
- Signals
- 4Consent Mode v2 parameters Google reads on every page. All four have to be present, including the two added in 2024.
- Platforms
- 39Ad, analytics and CRM platforms a consent gate holds or governs on a practice website.
- Container
- 1Tag manager, holding every tag. Tags left hardcoded in the theme cannot be governed by anything.
- Engagement
- 0Ongoing hours. It is scoped, delivered, verified and handed over, then it ends.
01 — THE TRADE NOBODY PRICES IN
Silence and refusal look identical to an ad platform
When a tag is blocked, nothing is sent. Google's systems see an absence. An absence is indistinguishable from a visitor who never arrived, so the conversion is not modelled, not attributed, and not fed back into bidding. Multiply that across the share of patients who decline, and a practice watches its cost per consultation climb for reasons that have nothing to do with its ads.
Consent Mode v2 exists to close exactly that gap. Instead of sending nothing, the page sends a cookieless ping that says: a real person was here, and they said no. Google can model from that. It cannot model from silence.
Gating tags without wiring the signal does not protect the practice. It protects the practice and quietly bills it for the privilege in lost attribution.
This is not hypothetical, and it is not rare. Before we built anything else we built a scanner to answer one narrow question about medical practice websites: what actually leaves the browser before the patient has agreed to anything? Two of the first real sites we pointed it at were a flagship hair restoration practice and our own sister company. Both came back the same.
rhrli.com
Fired before any consent interaction
6 trackers, 7 cookies, no consent platform detected. A second scan of our own sister company's website returned the same 0 out of 100. Neither result was a surprise to anyone technical and neither had ever been written down. That is the entire point of starting with evidence rather than a proposal.
Method: a headless browser loads the domain cold and records every request that leaves before a visitor touches anything. The score is the scanner's own, not a regulator's, and it is an observation about network behaviour rather than a legal finding. You can run the identical scan on your own domain in about fifteen seconds.
02 — WHAT ACTUALLY GETS SENT
Four parameters, three states, and no ambiguity between them
Consent Mode is not a setting you switch on. It is a pair of instructions the
page issues: a default before anything loads, and an update
the moment a patient decides. Two of these four parameters —
ad_user_data and ad_personalization — were added in 2024 and are the
two most commonly missing from an otherwise working setup, because a container configured
before that date passes validation while silently omitting them.
| Parameter | Page load, before choice | Analytics granted | Analytics + marketing |
|---|---|---|---|
| analytics_storageMeasurement cookies — GA4 sessions and events | denied | granted | granted |
| ad_storageAdvertising cookies — click identifiers and conversion joins | denied | denied | granted |
| ad_user_dataWhether user data may be sent to Google for advertising | denied | denied | granted |
| ad_personalizationWhether the visitor may be used for remarketing audiences | denied | denied | granted |
This is the exact mapping the Consential widget ships with: the analytics category controls one parameter, the marketing category controls three. A patient who accepts measurement but refuses advertising gets precisely that, rather than the all-or-nothing choice most banners actually implement behind a two-category label.
03 — THE PART THAT TAKES THE TIME
On a real practice site the tags are never all in one place
Every guide to this assumes a clean container. Practice websites are not clean containers. They are five years of accumulated decisions by three different agencies, a theme developer, and whoever installed the chat widget. Before a single signal can be wired, every tag has to be found and moved somewhere it can be governed. This inventory, not the code, is where the engagement's hours actually go.
Governable today
Tags inside the tag manager
Anything already firing through a container can be put behind a consent trigger without touching the theme. This is the best case, and on most sites it is a minority of what is actually running.
Ungovernable until moved
Hardcoded in the theme header
A gtag.js snippet pasted directly into header.php or a theme
options box runs before any container loads and ignores consent entirely. It has to be
removed and rebuilt as a managed tag. This is the single most common finding.
Needs its own handling
Injected by a plugin
SEO, chat, booking and review plugins add their own scripts after the page renders, where a server-side rewrite cannot catch them. Each one needs to be identified and either configured, gated at the source, or replaced.
Crosses an origin boundary
Third-party forms and call tracking
Embedded booking forms and dynamic number insertion live in another origin or rewrite the page after load. They are the pieces most likely to break attribution silently, and the pieces a generic implementation skips. Handling them is included here.
04 — WHAT IT LOOKS LIKE WHEN IT IS RIGHT
Two instructions, in the right order, before anything else runs
The default has to be issued before the first tag has a chance to execute. If it arrives a fraction later, the tag has already run unconsented and the default is decorative. This is the code, and the ordering is the whole trick.
// 1. DEFAULT — issued first, on every page, for every visitor.
// Nothing below this line is allowed to run before it.
gtag('consent', 'default', {
ad_storage: 'denied',
analytics_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied',
wait_for_update: 500
});
// 2. UPDATE — issued the instant the patient decides, not on the
// next page view. Here: measurement accepted, advertising declined.
gtag('consent', 'update', {
analytics_storage: 'granted',
ad_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied'
});
Then it gets checked, on the live site, in a real browser. Not in a preview mode, and not by reading the container's configuration screen back to itself.
- Network, not settings
- Every request on first load is recorded before and after the change, so "no tracker fired" is an observation, not a claim.
- All four parameters
- The live payload is read back to confirm the two 2024 parameters are present, not assumed from the container version.
- A real conversion
- One consented test conversion is pushed end to end and located in the ad platform, so attribution is proven rather than expected.
05 — WHAT THE ENGAGEMENT IS
Six things, delivered once, then handed over
-
A full tag inventory of the live site
Every script, pixel and cookie observed on a cold load, mapped to where it comes from: container, theme, plugin, or third-party embed. You keep this document whether or not anything else proceeds.
-
Hardcoded tags relocated into the container
Anything running outside a manageable surface is rebuilt as a managed tag, because a tag that cannot be triggered conditionally cannot be governed by consent at all.
-
Consent Mode v2 default and update wired
All four parameters, issued in the correct order, with
wait_for_updatetuned so the banner has time to resolve without delaying the page for a visitor who has already decided on a previous visit. -
Categories mapped to the practice's actual stack
Which tags belong to measurement and which to advertising is a decision with real consequences for both reporting and exposure. It is made explicitly, written down, and reviewed with you rather than defaulted.
-
Forms, booking embeds and call tracking handled
The cross-origin pieces that generic implementations skip: third-party form iframes and dynamic number insertion, checked so consent state and attribution survive the boundary in both directions.
-
Verification evidence and a handover document
Before and after network captures, the live consent payload, one proven test conversion, and a written record of every decision made. Written so the next person is not dependent on us, which is the point.
06 — WHAT IT COSTS
One fee, paid once, scoped before anyone commits
One-time implementation
$750 – $1,500depending on container complexity
The range is real, not a negotiating posture. A single clean container with a handful of tags sits at the bottom of it. A site with two legacy containers, hardcoded analytics, a third-party booking embed and call tracking sits at the top. Which one you have is established before a price is quoted, from a scan of your live site rather than a questionnaire.
- Moves it down
- One container, tags already inside it, no third-party form embed, single domain.
- Moves it up
- Hardcoded analytics in the theme, multiple containers, call tracking, several locations.
- Not charged
- The initial scan and scoping. If the container turns out to be clean, we say so.
Consential subscriptions are billed separately and are not required for this work — the implementation stands alone and leaves you with a container you own. Subscription pricing is on the pricing page.
07 — WHAT THIS IS NOT
Four things this engagement will not do for you
-
It is not ongoing account managementIt is delivered once and it ends. If tags are added later they will need governing, and we would rather you know that now than discover it in month four.
-
It does not promise a conversion volumeModelling recovers signal that gating would otherwise lose. It does not manufacture conversions, and nobody can tell you in advance what share of your visitors will decline.
-
It is not an analytics rebuildBroken goals, missing events and a mis-configured property are real problems and separate ones. We will name them in the inventory; fixing them is not in this scope.
-
It is not legal adviceConsential is not a law firm. This engagement changes what your website technically does and documents it. Whether that satisfies a given obligation is a question for your counsel.
Scope it from evidence, not from a questionnaire.
The scan that prices this engagement is the same one anyone can run for free. It names every request that leaves your site before a patient is asked, and it takes about fifteen seconds. If it comes back clean, you have saved yourself a call. If it comes back the way the two above did, you will know exactly what you are buying before anyone quotes you.
Related: how the consent gate works, privacy notice management, and the platforms a gate governs.