Website Specialist
Site Launch Gate
SOP: Site Launch Tracking Gate
Section titled “SOP: Site Launch Tracking Gate”Last Updated: 2026-04-21 Version: 1.0 Tier: Pre-Launch Quality Gate (MANDATORY)
Purpose
Section titled “Purpose”No Tekton-built client site ships to the client until every item in this checklist is green. This SOP exists because broken tracking on a launched site is invisible — the client sees the site work, they never complain, and then three months later we realize we’ve lost 90 days of attribution data with no way to reconstruct it.
This gate catches tracking failures while they’re still cheap to fix.
When to Use:
- Before the “ready to ship” handoff to CSM for any new client site
- Before any major site rebuild or platform migration
- After adding a new form, lead magnet, or conversion point to an existing site
Owner: Website Specialist (runs the checks), SEO Specialist (signs off), CSM (does not ship until sign-off received) Timeline: 30 minutes to run through. Zero launches without this complete.
Status = GREEN or site does not ship.
A single YELLOW or RED item blocks launch. No exceptions for “we’ll fix it later” — tracking that isn’t working at launch rarely gets fixed after launch.
The 10-Item Gate
Section titled “The 10-Item Gate”Run through these in order. Stop and fix anything that isn’t green before moving on.
1. GSC verified
Section titled “1. GSC verified”- Site property appears in Google Search Console under
nick@tektongrowth.com - Property shows as Verified (not pending)
- Tekton service account (
seo-brain@core-depth-472801-t2.iam.gserviceaccount.com) is an Owner on the property
How to verify: GSC → pick property → Settings → Users and permissions. Service account email should be listed with Owner role.
2. Sitemap submitted
Section titled “2. Sitemap submitted”-
sitemap.xml(orsitemap-index.xmlfor Astro) submitted via Search Console API - Shows 0 warnings, 0 errors in GSC Sitemaps view
- Submitted via
submit_to_gsc.py, not via GSC UI (leaves an audit trail)
How to verify:
python3 /Users/nick/Projects/scripts/submit_to_gsc.py <domain> --site-url https://<domain>/ --listOutput must show the sitemap with 0/0 warnings/errors.
3. GA4 property exists
Section titled “3. GA4 property exists”- Created under Tekton Growth account (
accounts/326886214) - Displays
<Client Name>with a Web data stream for the production URL - Measurement ID captured in site config (Astro:
site-config.json → tracking.ga4Id; static HTML: direct reference in tracking JS) - Entered into
clients.json → ga4PropertyIdandga4MeasurementId
4. gtag is firing on production
Section titled “4. gtag is firing on production”- Visit the live production URL in an incognito window
- Open DevTools → Network → filter
collect - Reload the page
- Confirm a POST to
https://www.google-analytics.com/g/collect?...&tid=G-XXXXXXXX&...&en=page_viewreturns 204
If nothing fires: the gtag script didn’t load (ad-blocker check first — disable and retry; if still dead, config is broken).
5. Attribution capture is installed
Section titled “5. Attribution capture is installed”- Open DevTools console on the live site
- Type
window.bctGetAttribution() - Should return
{utm_source, utm_medium, utm_campaign, ..., landing_page, referrer, submission_page}— may be empty strings on first visit, but the object must exist
If bctGetAttribution is undefined: the tracking JS file isn’t loaded on every page, or it’s loaded from the wrong path.
6. bctTrackLead helper is available
Section titled “6. bctTrackLead helper is available”- DevTools console on the live site
- Type
typeof window.bctTrackLead - Should return
"function"
If undefined: the tracking JS is missing the bctTrackLead helper. Copy it from the BCT reference.
7. Every form fires generate_lead on submit
Section titled “7. Every form fires generate_lead on submit”- Identify every form on the site (newsletter, contact, lead magnet, waitlist, tool submit)
- For each form, submit with a test email
- In GA4 Realtime, confirm a
generate_leadevent appears within 30 seconds - Check the event params include
form_name,source_channel, and any UTM values
If missing for any form: grep the repo for the form’s submit handler, verify it calls bctTrackLead('<form_name>') on the success branch. Redeploy.
8. Server-side MP is firing
Section titled “8. Server-side MP is firing”- For every API endpoint that creates a lead (typically
/functions/api/subscribe.js,/functions/api/contact.ts), confirm it hassendGa4Eventwired - CF Pages env vars
GA4_MEASUREMENT_ID+GA4_MP_SECRETare set on Production - Submit a test form while blocking trackers in the browser (use Privacy Badger or uBlock)
- GA4 Realtime should still show a
generate_leadevent withsource_channel=server
If no server event: env vars missing in CF Pages, OR the MP secret is invalid, OR the API endpoint doesn’t call sendGa4Event. Check CF Pages → Settings → Environment variables first.
9. generate_lead is a Key Event
Section titled “9. generate_lead is a Key Event”- GA4 Admin → Events
-
generate_leadrow shows the “Mark as key event” toggle ON (green)
If not toggled: flip it now. This is what makes the event count as a conversion in reports.
10. GSC ↔ GA4 Product Link
Section titled “10. GSC ↔ GA4 Product Link”- GA4 Admin → Product links → Search Console links
- Shows an active link to the GSC property for this site
- GA4 → Reports → Acquisition → Search Console traffic — section exists (data takes 24-48h to populate, but the report must exist)
If not linked: GA4 Admin → Product links → Search Console links → Link → pick the property. No API for this — must be done in UI.
Failure Escalation
Section titled “Failure Escalation”If you hit a blocker on any item and cannot resolve within 30 minutes, escalate to:
- Tracking stack issues (GSC, GA4, MP secret, CF Pages env vars): SEO Specialist, then Nick if unresolved
- Form handler code changes: Website Specialist (yourself) — fix, redeploy, rerun gate
- CF Pages access / env var issues: Nick directly (he owns the CF account)
Do not ship a site with any item in the YELLOW/RED state. If the client is pressuring for launch, launch the site WITHOUT announcing it, keep tracking fixes in progress, and inform CSM that the site is live but not client-facing yet.
Sign-Off
Section titled “Sign-Off”When all 10 items are green:
- Screenshot GA4 Realtime showing both
source_channel=clientANDsource_channel=serverforgenerate_leadafter a test submission - Screenshot GSC Sitemaps page showing “0 warnings, 0 errors”
- Post both to the client’s launch task in TaskTracker with the comment: “Launch tracking gate: GREEN. OK to ship.”
- CSM does not announce the site publicly until this comment is present
Version Control
Section titled “Version Control”- v1.0 (2026-04-21): Initial SOP. 10-item pre-launch gate derived from the
/gsc-verifyskill post-onboarding checklist.