✎ Awaiting Dakota's review and the GHL webhook URL.
Pages are built and QA'd but nothing goes live until the GHL_WEBHOOK_URL constant in each page is set to the real Pryor GHL inbound webhook. Until then the form runs in demo mode: full UX works, lead logged to browser console only.
⚠ Open decisions blocking launch:
- GHL inbound webhook URL from Dakota — paste into
GHL_WEBHOOK_URL constant at bottom of each page
- Subdomain decision — publish at
go.pryorfamilydentistry.com or offers.pryorfamilydentistry.com. Requires DNS access to the pryorfamilydentistry.com zone.
- GTM container ID + GA4 measurement ID from Dakota
- Google Ads account access for conversion tag on thank-you.html
- Practice review + approval of copy, offer terms, disclaimers
Landing pages and keyword mapping
| # | Page | Campaign / ad group targets | Offer code | Priority |
| 1 | vip-plan.html | dental membership plan, no insurance dentist, dental savings plan + Lebanon TN / Wilson County | VIP-STANDARD-29 | Launch first |
Offers used
| Code | Contents | Price anchor |
VIP-STANDARD-29 | Membership plan (VIP / in-house savings) (vip-plan) | $29/mo |
Conversion paths on every page
| Path | Destination | Attribution |
| Multi-step eligibility form (primary) | 6-step wizard on every page (anchor #lead-form), submits to GoHighLevel via inbound webhook, redirects to thank-you.html | Full UTMs and click IDs (utm_*, gclid, gbraid, wbraid, fbclid, msclkid) captured first-touch and persisted in localStorage for 90 days |
| Call (mobile sticky bar) | tel:+16154447999 — swap for CallRail dynamic number at launch | Pending CallRail |
Tracking & measurement, to implement
| Item | Detail | Status |
| Google Tag Manager | Install container in <head> of all pages. Manage GA4, Ads, CallRail through GTM. | Needed |
| Google Analytics 4 | Property + measurement ID via GTM. Events: page_view, form_start, form_step (per wizard step), generate_lead on thank-you.html, click_to_call. | Needed |
| Google Ads conversions | Primary conversion = generate_lead on thank-you.html. Enable Enhanced Conversions (form supplies name, email, phone). | Needed |
| CallRail | Dynamic number swap + call conversion import to Google Ads. Deploy via GTM. | Needed |
| Consent + privacy | Confirm whether Google Consent Mode v2 is required. TCPA disclosure already on every form. | Confirm |
Hosting & DNS
| Item | Detail | Status |
| Hosting | Cloudflare Pages project sga-pryor-paid-media. Must be served over HTTPS (GHL webhook + Google Fonts require a real origin). | Live at https://sga-pryor-paid-media.pages.dev |
| Custom domain | Recommend go.pryorfamilydentistry.com or offers.pryorfamilydentistry.com. Keeps paid traffic isolated from main site analytics and SEO. | Decide |
| DNS CNAME + TLS | Add CNAME for chosen subdomain pointing at Pages deployment, validate TLS issuance. | Needed |
| Redirects and noindex | All pages ship noindex, nofollow. | Done |
Lead capture form and CRM wiring
Every page carries the same multi-step form: 6 qualification questions → name / email / mobile + TCPA consent → POST to GHL webhook → redirect to thank-you with UTMs on the URL.
| Item | Detail |
| CRM destination | GoHighLevel inbound webhook. Paste URL into GHL_WEBHOOK_URL at bottom of each page. Until set, form runs in demo mode. |
| Payload fields | first_name, last_name, email, phone, insurance_situation, last_dental_visit, coverage_for, budget_priority, urgency, notes, service, offer_code, consent, consent_text, consent_timestamp, submitted_at, source |
| Attribution fields | utm_source, utm_medium, utm_campaign, utm_term, utm_content, gclid, gbraid, wbraid, fbclid, msclkid, landing_url, page_url, referrer — captured first-touch and persisted in localStorage for 90 days |
| Consent | Disclosure above submit button; consent + timestamp stored on every lead for TCPA records |
| Thank-you page | thank-you.html sets expectations. Fire Google Ads conversion + GA4 generate_lead event here. |
Brand
Palette pixel-sampled from pryorfamilydentistry.com's live homepage: primary #002d96, ink #0C4890, gold #B4A52D, cream #FBF3E1. Font: Montserrat. Logo from locations/pryor/.
Note: The locations/pryor/BRAND.md files in the DAM specify a different palette (see BRAND (7).md). Those files disagree with each other and with the live site — we sourced from the live site instead. Worth having that DAM file corrected separately.
Launch checklist
| Item | Status |
| Landing pages built (1 pages) | Done |
| Multi-step lead form + UTM/click-ID capture on all pages | Done |
| Practice brand palette derived from live homepage | Done |
| Custom fields + tags provisioned in GHL sub-account | Done |
| Practice logo uploaded to GHL Media Library | Done |
| GoHighLevel inbound webhook URL | Blocked |
| Google Tag Manager container | Needed |
| GA4 property + measurement ID | Needed |
| Google Ads conversion tracking + Enhanced Conversions | Needed |
| CallRail dynamic number swap | Needed |
| Custom subdomain + DNS CNAME + TLS | Needed |
| Practice review + approval | Needed |