Skip to content

Website Specialist

Site Launch Gate

Needs review — This SOP contains our content but has not been verified by Nick. Treat as a working draft until marked Live.

Last Updated: 2026-04-21 Version: 1.0 Tier: Pre-Launch Quality Gate (MANDATORY)


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.


Run through these in order. Stop and fix anything that isn’t green before moving on.

  • 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.

  • sitemap.xml (or sitemap-index.xml for 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:

Terminal window
python3 /Users/nick/Projects/scripts/submit_to_gsc.py <domain> --site-url https://<domain>/ --list

Output must show the sitemap with 0/0 warnings/errors.

  • 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 → ga4PropertyId and ga4MeasurementId
  • 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_view returns 204

If nothing fires: the gtag script didn’t load (ad-blocker check first — disable and retry; if still dead, config is broken).

  • 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.

  • 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_lead event 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.

  • For every API endpoint that creates a lead (typically /functions/api/subscribe.js, /functions/api/contact.ts), confirm it has sendGa4Event wired
  • CF Pages env vars GA4_MEASUREMENT_ID + GA4_MP_SECRET are 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_lead event with source_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.

  • GA4 Admin → Events
  • generate_lead row 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.

  • 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.


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.


When all 10 items are green:

  1. Screenshot GA4 Realtime showing both source_channel=client AND source_channel=server for generate_lead after a test submission
  2. Screenshot GSC Sitemaps page showing “0 warnings, 0 errors”
  3. Post both to the client’s launch task in TaskTracker with the comment: “Launch tracking gate: GREEN. OK to ship.”
  4. CSM does not announce the site publicly until this comment is present

  • v1.0 (2026-04-21): Initial SOP. 10-item pre-launch gate derived from the /gsc-verify skill post-onboarding checklist.