Non-Server-Side Tagging Architecture | Bright Side Plumbing | March 23, 2026
GTM-M3L9374G-R9K15PMWPRAW-17179856077| GTM Container | GTM-M3L9374 | LIVE |
| GA4 Property | G-R9K15PMWPR (298578347) | LIVE |
| Google Ads (Active) | AW-17179856077 (726-955-5791) | LIVE |
| MCC Account | 844-909-2450 | LIVE |
| AW-404985988 | Old Ads account | DEACTIVATED |
| AW-242993149 | Site Kit remnant | DEACTIVATED |
| Facebook Pixel | Removed Jul 2025 | REMOVED |
| Hotjar | Removed Nov 2024 | REMOVED |
| HubSpot Analytics | Removed Oct 2025 | REMOVED |
go.servicetitan.com -- different domain = blocked by CORS| What | How | Status |
|---|---|---|
| Iframe load (page with iframe viewed) | GTM page view trigger on parent page | WORKING |
| "Book Now" button click (opens iframe) | GTM click trigger on button element | WORKING |
| Booking completed | ST webhook / API callback to Nexus | VIA API |
| GCLID passed to ST | Nexus GCLID bridge (cookie to webhook to ST custom field) | WORKING |
| Form submission on OUR forms | GTM form submit trigger | WORKING |
window.parent.postMessage() from inside their iframe to send events to our page. ST does NOT currently support this. Would need to request from ST.nexus_gclid_bridge.py on port 8503.| Conversion Action | Type | Count | Status |
|---|---|---|---|
| Offline Job Completion | UPLOAD_CLICKS | MANY_PER_CLICK | PRIMARY |
| Click-to-Call | WEBSITE_CALL | ONE_PER_CLICK | PRIMARY |
| Website Contact Form (pick ONE) | WEBPAGE | ONE_PER_CLICK | PRIMARY |
| Book appointment | WEBPAGE | ONE_PER_CLICK | PRIMARY |
| Lead form - Submit | LEAD_FORM_SUBMIT | ONE_PER_CLICK | PRIMARY |
| Calls from ads (ONE_PER_CLICK only) | AD_CALL | ONE_PER_CLICK | PRIMARY |
| Problem | Actions | Fix |
|---|---|---|
| Calls from ads x2 ENABLED | ONE_PER + MANY_PER both PRIMARY | Remove MANY_PER version |
| Clicks to call x2 | Both GOOGLE_HOSTED, both PRIMARY | Remove one |
| Website Contact Form x2 | Both WEBPAGE, both PRIMARY | Remove one |
| GA4 events doubled | 9 events have ENABLED + HIDDEN copies | Delete HIDDEN copies |
| ST Job Completed vs Offline Job | Possible duplicate upload pipelines | Clarify which is active |
| Conversion Action | Why It Is Junk |
|---|---|
| Contact (Page load /contact) | Page load is not a lead. Inflates numbers. |
| Local actions - Menu views | Plumber does not have a menu. |
| Local actions - Website visits | MANY_PER_CLICK page view. Not a conversion. |
| YouTube follow-on views | Not a lead. |
| Store visits | BSP does not track store visits. |
| Smart campaign ad clicks to call | Redundant with "Calls from ads." |
| Action | Reason |
|---|---|
| zzz. Book Now - Housecall Button Click | HCP removed. BSP uses ServiceTitan. |
| zzz. Call From Pop-Up | Already REMOVED status. |
| Form Submission (UA Goal) | Universal Analytics sunset 2023. |
| Phone Call - Click to Call (UA Goal) | Universal Analytics sunset 2023. |
| Header Call Button | REMOVED. |
| 12 total REMOVED actions | Cleanup clutter. |
rocket_delay_js_exclusions filter)data-cfasync="false" on GCLID capture snippet| ID | Name | Purpose | Status |
|---|---|---|---|
| #9 | ST Web Scheduler Widget | ServiceTitan booking iframe on 21 pages | ACTIVE |
| #10 | ST Widget CSS | Styling for ST booking widget | ACTIVE |
| #22 | GTM + Ads Tag | GTM-M3L9374 + AW-17179856077 global tag | ACTIVE |
| #26 | Blog Template CSS | Blog archive styling | ACTIVE |
| #35 | Blog Archive | Blog listing page | ACTIVE |
| #37 | Blog Archive Filters | Category filters for blog | ACTIVE |
| #39 | GCLID Capture | Captures ?gclid= from URL into cookie + hidden fields | ACTIVE |
| #49 | WP Rocket Exclusion | Excludes GCLID script from WP Rocket delay | ACTIVE |
| EC4L Status | DEPLOYED (Mar 16-17) |
| What it captures | Hashed email/phone from OUR contact forms |
| What it CANNOT capture | Data inside ST iframe (cross-origin blocked) |
| Offline conversions uploaded | 39 jobs / $54K+ (as of Mar 17) |
| Upload script | nexus_offline_conversions.py on VM |
DEACTIVATED
Cookie consent banner was blocking ALL script execution until user clicked accept. Most mobile users never clicked. GA4, Google Ads, and Meta Pixel all silent.
Fix: Plugin deactivated. BSP is US-only, GDPR consent not legally required.
DELETED + PAUSED
CHEQ Essentials WP plugin (installed by old agency Jun 2025) was inactive but cached ghost code. GTM Tags 35 (ClickCease, installed Mar 2025), 37, 40 (CHEQ Essentials) were active in GTM, potentially blocking conversion events.
Fix: Plugin deleted. GTM tags 35/37/40 paused in Version 45.
DEACTIVATED
Our own Code Snippet "Nexus Bot Traffic Filter for GA4" was setting window['ga-disable-G-R9K15PMWPR'] = true for detected bots. The navigator.plugins.length === 0 check was catching mobile browsers as bots.
Fix: Snippet deactivated. Need to rewrite with less aggressive bot detection.
FIXED VIA SNIPPET #52
Google Site Kit was loading its own GA4 tag (G-R9K15PMWPR) PLUS consent mode defaults that set analytics_storage: "denied". This conflicted with GTM's GA4 Configuration Tag (Tag 9). Two GA4 instances fighting for the same property.
Fix: Code Snippet #52 disables Site Kit's GA4 output. GTM is now the sole GA4 handler.
| Tag | Name | Status | Notes |
|---|---|---|---|
| 5 | Google Ads Conversion Linker | ACTIVE | Required for conversion tracking |
| 9 | GA4 Configuration Tag | ACTIVE | G-R9K15PMWPR, fires on all pages |
| 29 | GA4 Contact Us Form Submit | ACTIVE | Fires on Thank You page view |
| 30 | GA4 Call Button Click | ACTIVE | Fires on tel: link clicks |
| 35 | Click Cease | PAUSED | Old agency, Mar 2025. Blocking conversions. |
| 37 | Cheq Essentials Tag | PAUSED | Old agency, Jun 2025. Ghost code. |
| 40 | Cheq Essentials JS Disabled | PAUSED | Old agency, Jun 2025. |
| 43 | Nexus GCLID + UTM Capture | ACTIVE | Captures click IDs for offline conversions |
| 44 | GA4 generate_lead | ACTIVE | Unified conversion tag, fires on calls + forms |
| 45 | Google Ads Conversion Tracking | ACTIVE | AW-17179856077 |
| 46 | Google Tag for ads | ACTIVE | Global site tag |
| 48 | Website Contact Form Tag | ACTIVE | AW-17179856077, element visibility trigger |
| 49 | Enhanced Conversions PostMessage | ACTIVE | Listens for ST iframe data |
| 50 | Meta Pixel - BSP | ACTIVE | Pixel 3167212453476317, reinstalled Mar 24 |
| Action | Type | Status | Biddable |
|---|---|---|---|
| Click-to-Call | WEBSITE_CALL | ENABLED | PRIMARY |
| Calls from ads | AD_CALL | ENABLED | PRIMARY |
| Submit lead form | WEBPAGE_CODELESS | ENABLED | PRIMARY |
| Website Contact Form | WEBPAGE | ENABLED | PRIMARY |
| ST Job Completed (API) | UPLOAD_CLICKS | ENABLED | PRIMARY (changed Mar 24) |
| Website Contact Form (old) | WEBPAGE | ENABLED | SECONDARY (demoted Mar 24, duplicate) |
| Map Directions | GOOGLE_HOSTED | ENABLED | SECONDARY (demoted, not a real lead) |
Ticket 2-6744000040441 (Dhina): Enhanced Conversions for Leads. Confirmed postMessage bridge approach works for ST iframe. PII must be captured via GTM tags. Tag 49 is the bridge.
Ticket 2-5436000040393 (Nikhil): Tag Implementation consultation. Response expected Mar 25. In consultation with internal team.
Updated March 24, 2026 10:30 PM CT | Trust Engine Verified | GTM Version 45