🧩 BRICKS AI HYBRID PATH · LIVE APR 20 2026

This playbook is built under the 3-tool workflow: Figma for the 20% that carries the brand (hero + MOAT sections), Bricks AI Studio for the 80% that repeats (grids, rows, accordions, chip bars), Claude/Nexus to orchestrate briefs.

🚫 OFF-LIMITS
Audrey does NOT design a header or footer in Figma. Global Bricks components already ship on every page.
📐 NAMING
NN_type_descriptor · lowercase + underscores · number matches the § in the Section-by-Section spec · starts at 01, no 00_header.
🧩 PER-SECTION MODE
One frame at a time. Audrey names the frame → asks Claude: “prompt for [page] section NN” → tuned Bricks AI prompt returned → paste in Bricks AI → approve → ship.
📦 WHOLE-PAGE MODE
Full bundle. All frames named → asks Claude: “whole [page] prompt pack” → document with every section prompt. Figma-flagged sections marked “drop your Figma export, do not regenerate.”
Every prompt enforces: No header/footer generation · Brand tokens (#1D1760 navy, #30C5FF blue, #FFEA00 yellow, Inter) · Stephanie format (Problem → Impact → Solution → Data → Need) · LocalBusiness + page-type schema · Mobile-first (44px taps, 16px body min) · No em dashes in client copy.
→ Full 3-tool workflow diagram + 5 wiring steps

🔎 Landing Page / Service Page Optimization Playbook

Bright Side Plumbing | callbrightside.com | March 2026

⚠️ Core Insight: Bright Side does NOT have separate landing pages.
The existing service pages on callbrightside.com ARE the landing pages.
Every optimization in this playbook applies directly to those service pages.

📚 Table of Contents

✅ 1. Service Page Audit Checklist

Run this checklist against every service page before and after optimization. Each item has a pass/fail status showing the current state of callbrightside.com as of March 2026.

📄 H1 Tag Audit

CheckRequirementStatus
Unique H1Every service page must have exactly one H1 tagVERIFY
Keyword in H1Primary keyword appears naturally in the H1VERIFY
H1 lengthBetween 30 and 65 characters for optimal displayVERIFY
No duplicate H1sNo two pages share the same H1 textFAIL
City + ServiceFormat: "[Service] in Overland Park, KS" or "[City] [Service]"VERIFY

📍 NAP Consistency (Name, Address, Phone)

KNOWN ISSUE: ADDRESS INCONSISTENCY

Problem: Two different addresses appear across the site and business listings:

AddressStatusAction
12022 Blue Valley Pkwy, Overland Park, KSCORRECTUse this everywhere
12022 Blue Valley PkwyWRONGFind and remove/replace on every page, footer, schema, listing

🔧 Fix Steps

  1. Search entire WordPress database for "8110 Carter" using WP-CLI: wp search-replace '12022 Blue Valley Pkwy' '12022 Blue Valley Pkwy' --dry-run
  2. Check Oxygen Builder global components (header, footer) in Oxygen > Templates
  3. Check all JSON-LD schema blocks for the old address
  4. Verify Google Business Profile, Bing Places, Apple Maps, Yelp, BBB all match
  5. Check Google Ads ad copy and extensions for the old address

📬 CTA Requirements Per Page

PlacementCTA TypeTarget
Above the foldPrimary CTA button (click-to-call on mobile, form on desktop)Within 600px viewport height
After problem descriptionInline CTA with urgency languageAfter first 2-3 paragraphs
After social proof sectionCTA with review count reinforcementBelow testimonial block
After FAQ sectionCTA with "Still have questions?" framingBottom of FAQ accordion
Page bottomFull-width CTA banner with phone + formFinal element before footer
Sticky mobile barFixed bottom bar with click-to-callNOT IMPLEMENTED

⭐ Social Proof Requirements

⚠️ Known Issue: The generation claim inconsistency. Some pages and copy say "fourth generation" when Kalen Barker is a fifth-generation master plumber. Search all content and Oxygen templates for "fourth generation" and correct to "fifth-generation."

⚡ Page Speed Requirements

< 2.5s
LCP Target
< 100ms
FID Target
< 0.1
CLS Target

Current site has known LCP issues due to hero image loaded via CSS background with JavaScript injection. See Section 9 for full speed fixes.

🧩 Schema Requirements Per Page

Schema TypeRequired OnCurrent Status
LocalBusinessEvery page (via site-wide template)NEEDS AUDIT
ServiceEvery service pageNEEDS AUDIT
FAQPage/faqs/ page + any page with FAQ accordionMISSING on /faqs/
AggregateRatingEvery service pageNEEDS AUDIT
ReviewPages with testimonialsNEEDS AUDIT
BreadcrumbListEvery interior pageNEEDS AUDIT

🚨 2. Sewer Repair Page Deep Optimization

REVENUE PAGE #1

Sewer repair is the highest-revenue service page. Every 1% conversion improvement here has an outsized impact on revenue. This page deserves the most aggressive optimization.

🎯 Target Keywords

KeywordIntentPriority
sewer repair Overland ParkHigh commercialCRITICAL
sewer repair Kansas CityHigh commercialCRITICAL
sewer line repair near meHigh commercial + localCRITICAL
sewer repair cost Overland ParkCommercial + informationalHIGH
broken sewer pipe repairHigh commercialHIGH
trenchless sewer repair Overland ParkHigh commercialHIGH
sewer camera inspectionCommercialMEDIUM
signs of sewer line damageInformational (top of funnel)MEDIUM

📄 Recommended Page Structure

  1. Hero Section (above the fold)
    • H1: "Sewer Repair in Overland Park, KS" or "Expert Sewer Line Repair in Overland Park"
    • Subhead: "Fifth-generation master plumber. 4.9 stars from 394+ reviews. Same-day sewer diagnostics."
    • Primary CTA: "Call Now for a Free Sewer Inspection" / phone number
    • Trust bar: stars + review count + BBB A+ + "Licensed & Insured"
  2. Problem Agitation (immediately after hero)
    • Headline: "Signs Your Sewer Line Needs Repair"
    • Bullet list with symptoms homeowners recognize: slow drains, sewage odors, wet spots in yard, gurgling sounds
    • Urgency message: "Sewer problems get worse fast. A small crack today becomes a full collapse tomorrow."
    • Inline CTA after this section
  3. Services Breakdown
    • Trenchless sewer repair (pipe lining/CIPP)
    • Traditional sewer repair
    • Sewer camera inspection
    • Emergency sewer repair
    • Each with icon, 2-3 sentence description, and individual CTA
  4. Process Section
    • "How Bright Side Handles Sewer Repair" in 4 steps
    • Step 1: Free camera inspection / Step 2: Honest diagnosis / Step 3: Upfront pricing / Step 4: Expert repair
  5. Social Proof Block
    • 2-3 sewer-specific testimonials with customer names
    • Before/after photo gallery of actual sewer repair jobs
    • Video testimonial if available
  6. Pricing Transparency
    • "Sewer Repair Cost in Overland Park" section (captures cost keywords)
    • Price ranges (not exact prices): "Most sewer repairs range from $X to $Y depending on..."
    • Financing options callout
  7. FAQ Accordion
    • 8-12 questions targeting long-tail keywords
    • Must have FAQPage schema markup
  8. Service Area Map
    • Overland Park, Olathe, Lenexa, Shawnee, Leawood, Prairie Village
  9. Final CTA Banner
    • "Ready to Fix Your Sewer? Call Bright Side Now." + phone + form link

📝 Copy Recommendations

Hero Headline Options (test via A/B)

Urgency Language (use in mid-page CTA)

Differentiator Copy

🚧 3. Sewer Replacement Page Deep Optimization

Sewer replacement is the highest-ticket service. Average job value is significantly higher than sewer repair. The page must convey expertise, transparency, and reduce fear about the scope of work.

🎯 Target Keywords

KeywordIntentPriority
sewer replacement Overland ParkHigh commercialCRITICAL
sewer line replacement costCommercial + informationalCRITICAL
sewer replacement Kansas CityHigh commercialHIGH
trenchless sewer replacementHigh commercialHIGH
sewer pipe replacement near meHigh commercial + localHIGH
how long does sewer replacement takeInformationalMEDIUM
sewer replacement vs repairInformational / comparisonMEDIUM

📄 Recommended Page Structure

  1. Hero Section
    • H1: "Sewer Replacement in Overland Park, KS"
    • Subhead: "Full sewer line replacement by a fifth-generation master plumber. Transparent pricing. Minimal disruption."
    • CTA: "Get a Free Sewer Assessment" + phone
    • Trust bar identical to sewer repair page
  2. "When Repair Isn't Enough" Section
    • Comparison table: Repair vs. Replacement (when each is appropriate)
    • Signs you need full replacement: repeated backups, orangeburg pipe, bellied pipe, tree root infiltration
    • This positions Bright Side as honest advisors who won't replace when repair would suffice
  3. Methods Section
    • Trenchless sewer replacement (pipe bursting) with benefits
    • Traditional excavation replacement when trenchless is not possible
    • Clear explanation of what each method involves, timeline, yard impact
  4. Process / Timeline
    • "What to Expect During Sewer Replacement"
    • Day-by-day or step-by-step visual timeline
    • Reduces anxiety about the project scope
  5. Cost Transparency Section
    • "Sewer Replacement Cost in Overland Park"
    • Factors that affect price: pipe length, depth, method, access, permits
    • Financing options prominently displayed
    • This section captures high-value cost keywords
  6. Before/After Gallery
    • Photo slider showing actual Bright Side sewer replacement jobs
    • Include yard restoration photos (show the yard looks good after)
  7. Testimonials (sewer replacement-specific)
  8. FAQ Accordion (10+ questions with FAQPage schema)
  9. Service Area + Final CTA
🎧 The Fresh Framework (Service Over Sales)
Source: Chris Fresh, The Plumbing Sales Coach, Episode #336 "How To Sell In Service Plumbing" (Nov 2025)
Apple Podcasts | Spotify Top 10% Most Shared
Core Framework: Relationship → Diagnose → Value Stack

1. Relationship: Win at the door. Build trust before talking solutions. First impressions set the tone for everything.
2. Diagnose: Diagnose beyond the obvious. Explain WHY the problem happened, not just WHAT broke. Think doctor, not mechanic.
3. Value Stack: Present three intelligent options every time. Let the customer choose. Never push.

🔧
Option 1: Repair
Cost-effective. Addresses the immediate issue. Best when damage is localized.
🏗
Option 2: Trenchless
Minimal disruption. Saves landscaping. Mid-range investment with warranty.
🏠
Option 3: Full Replacement
Comprehensive solution + value-adds (shutoffs, softeners). Long-term investment with financing.
Key Principle: Shift the customer from "spending money" to "saving money." Early diagnosis saves $5,000 to $10,000. A small repair today prevents a $15,000 replacement tomorrow.

Revenue Impact: Strategic bundling (repair + shutoff valve + water softener) increases average ticket 30-40% without any pressure. The customer feels educated and empowered, not sold.

📝 Key Messaging Angles

🔥 4. Water Heater Page Optimization

KNOWN ISSUE: KEYWORD CANNIBALIZATION

Problem: Three URLs are competing for water heater keywords, splitting authority and confusing Google about which page to rank.

🔧 Fix Strategy

URL PatternRecommended Action
Main water heater service pageKEEP as the canonical page. Consolidate all ranking signals here.
Secondary water heater page301 REDIRECT to main page. Transfer all internal links.
Third water heater page301 REDIRECT to main page. Transfer all internal links.

📋 Cannibalization Fix Steps

  1. Identify the page with the most backlinks and highest current rankings (use Ahrefs or Search Console)
  2. Designate that page as the canonical water heater page
  3. Merge the best content from all three pages into the canonical page
  4. Set up 301 redirects from the other two pages to the canonical page
  5. Update all internal links site-wide to point to the canonical page
  6. Update XML sitemap
  7. Resubmit sitemap in Google Search Console
  8. Monitor Search Console for 2-4 weeks to confirm consolidation

🎯 Target Keywords (Consolidated Page)

KeywordIntentPriority
water heater repair Overland ParkHigh commercialCRITICAL
water heater replacement Overland ParkHigh commercialCRITICAL
water heater installation near meHigh commercial + localHIGH
tankless water heater Overland ParkHigh commercialHIGH
water heater leakingEmergency / commercialHIGH
hot water heater costCommercial + informationalHIGH
water heater not workingEmergency / informationalMEDIUM
tankless vs tank water heaterInformational / comparisonMEDIUM

📄 Recommended Page Structure

  1. Hero Section
    • H1: "Water Heater Repair & Replacement in Overland Park, KS"
    • Subhead: "No hot water? We can fix or replace your water heater today. Fifth-generation master plumber. 4.9 stars."
    • Emergency callout: "Same-Day Water Heater Service Available"
  2. Problem Identification
    • "Signs Your Water Heater Needs Attention": no hot water, lukewarm water, strange noises, rusty water, leaking, age 10+ years
  3. Services Grid
    • Water heater repair | Water heater replacement | Tankless water heater installation | Emergency water heater service
    • Each as a card with icon, short description, and CTA
  4. Tank vs. Tankless Comparison
    • Comparison table: cost, lifespan, energy efficiency, space, hot water capacity
    • This captures valuable comparison keywords and builds trust via education
  5. Cost Section
    • "Water Heater Replacement Cost in Overland Park"
    • Price ranges by type (standard tank, tankless, hybrid)
    • Financing options
  6. Brand Expertise
    • List brands serviced: Rheem, AO Smith, Bradford White, Navien, Rinnai, etc.
  7. Social Proof + FAQ + Final CTA

🎯 5. Above-the-Fold Formula

Users form an opinion about a page in under 3 seconds. The above-the-fold content must immediately communicate: what you do, why you are trustworthy, and what the user should do next.

🎨 Hero Section Blueprint

[HERO IMAGE / VIDEO BACKGROUND]

[Service] in Overland Park, KS

Fifth-generation master plumber. 4.9 stars from 384+ homeowners. Same-day service available.

Call (913) XXX-XXXX Schedule Online
⭐ 4.9 Stars 💬 384+ Reviews 🏅 BBB A+ Rated 🛡️ Licensed & Insured 💰 Financing Available

📝 Headline Formulas

FormulaExampleBest For
[Service] in [City], [State]"Sewer Repair in Overland Park, KS"SEO-focused, primary service pages
[Benefit] + [Service] by [Credential]"Expert Sewer Repair by a Fifth-Gen Master Plumber"Trust-focused, high-ticket services
[Problem]? [Solution]."Broken Sewer Line? We Fix It Today."Emergency/urgent services
[Differentiator] + [Service] in [City]"Trenchless Sewer Repair in Overland Park"Specific method/approach pages
[Social Proof] + [Service]"Overland Park's Top-Rated Sewer Repair | 384+ 5-Star Reviews"Competitive differentiation

📜 Subheadline Rules

Strong Subheadline Examples

💪 Trust Bar Components

The trust bar sits directly below the hero CTA buttons. It must be visible without scrolling on both desktop and mobile.

⭐ 4.9
Star Rating (Google)
384+
Verified Reviews
A+
BBB Rating

Additional trust bar elements: "5th-Gen Master Plumber" | "Licensed & Insured" | "Financing Available" | "Locally Owned"

📲 6. CTA Optimization

📱 Sticky Mobile CTA Implementation

NOT CURRENTLY IMPLEMENTED

With 60%+ mobile traffic and no sticky CTA, Bright Side is losing calls every day. This is one of the highest-impact, lowest-effort fixes available.

Oxygen Builder Implementation

/* Add to Oxygen > Stylesheets > Global CSS */
.sticky-mobile-cta {
  display: none;
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 9999;
  background: linear-gradient(135deg, #1a6bc4, #0d4f8b);
  padding: 12px 20px;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.3);
  text-align: center;
}

.sticky-mobile-cta a {
  display:flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  color: #fff;
  font-size: 1.2rem;
  font-weight: 700;
  text-decoration: none;
}

.sticky-mobile-cta .pulse-dot {
  width: 10px;
  height: 10px;
  background: #4ade80;
  border-radius: 50%;
  animation: pulse 1.5s infinite;
}

@keyframes pulse {
  0%, 100% { transform: scale(1);opacity: 1; }
  50% { transform: scale(1.5); opacity: 0.7; }
}

@media (max-width: 767px) {
  .sticky-mobile-cta { display: block; }
  body { padding-bottom: 60px; }
}

/* Hide sticky CTA when user scrolls to footer to avoid overlap */
.sticky-mobile-cta.hidden { display: none !important; }

HTML (add via Oxygen Code Block in base template)

<div class="sticky-mobile-cta" id="stickyCTA">
  <a href="tel:+19135551234">
    <span class="pulse-dot"></span>
    <span>📞 Call Bright Side Now</span>
  </a>
</div>

<script>
// Hide sticky CTA when footer is visible
const footer = document.querySelector('footer');
const stickyCTA = document.getElementById('stickyCTA');
if (footer && stickyCTA) {
  const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
      stickyCTA.classList.toggle('hidden', entry.isIntersecting);
    });
  }, { threshold: 0.1 });
  observer.observe(footer);
}
</script>

📍 Click-to-Call Placement Strategy

LocationPhone FormatNotes
Header (desktop)Visible number, non-linkedUsers on desktop rarely click-to-call
Header (mobile)Click-to-call linkUse tel: link, track with GA4 event
Hero CTA buttonClick-to-call linkPrimary conversion point
Mid-page inline CTAClick-to-call link on mobile, visible number on desktopAfter problem/agitation section
Sticky mobile barClick-to-call linkAlways visible on mobile
FooterClick-to-call linkLast resort CTA

Tracking Implementation

// GA4 phone click tracking (add via GTM or inline)
document.querySelectorAll('a[href^="tel:"]').forEach(link => {
  link.addEventListener('click', () => {
    gtag('event', 'phone_click', {
      event_category: 'engagement',
      event_label: link.href,
      page_location: window.location.pathname
    });
  });
});

🔥 Form Positioning Heatmap Zones

Based on industry heatmap data for home services pages, these are the optimal form placements:

ZonePositionConversion Impact
Zone A (highest)Right sidebar, aligned with hero section (desktop) / Below hero CTA (mobile)HIGHEST
Zone BAfter social proof section, full-widthHIGH
Zone CAfter FAQ sectionMEDIUM
Zone DPage bottom, above footerMEDIUM

Key insight: Do NOT bury the form below the fold. On desktop, use a sticky sidebar form that scrolls with the user. On mobile, place the primary CTA (phone call) above form, but have a "Schedule Online" option that scrolls to the form.

📋 7. Multi-Step Form Implementation

CURRENT FORM HAS 86% LOWER CONVERSION

The current single-step contact form is costing conversions. Industry data shows multi-step forms convert up to 86% better than single-step forms for home services. The psychology: micro-commitments build momentum and reduce perceived effort.

📋 Exact Multi-Step Flow

1
Step 1: Service Type (lowest friction)
"What do you need help with?"
Visual icon buttons (not dropdowns): Sewer Repair | Sewer Replacement | Water Heater | Drain Cleaning | Other Plumbing
One click. No typing. Feels easy.
2
Step 2: Urgency Level (builds commitment)
"How soon do you need service?"
Icon buttons: Emergency (Today) | This Week | Just Getting Quotes | Not Sure
Still no typing. Two clicks in and they feel invested.
3
Step 3: Contact Info (they are now committed)
"Almost done! Where should we reach you?"
Fields: Name (required) | Phone (required) | Email (optional) | Preferred Contact Method (Call/Text)
Progress bar shows "Step 3 of 3". They finish because they started.
Confirmation Screen: "Thanks, [Name]! A Bright Side team member will contact you within [timeframe based on urgency]. For immediate help, call us at (913) XXX-XXXX."

🔧 Implementation in Oxygen Builder

Two recommended approaches:

Option A: WPForms Multi-Step (Recommended)

  1. Install WPForms (if not already installed) or use existing form plugin
  2. Create a new multi-step form with Page Break fields between steps
  3. Style the form to match Bright Side branding using WPForms custom CSS
  4. Add the form to Oxygen templates via shortcode or WPForms block
  5. Set up conditional notifications: Emergency submissions trigger immediate alert

Option B: Custom HTML/JS Form

<!-- Multi-step form structure -->
<div class="bsp-multistep-form" id="bspForm">
  <div class="form-progress">
    <div class="progress-bar" id="progressBar" style="width:33%"></div>
  </div>

  <!-- Step 1 -->
  <div class="form-step active" data-step="1">
    <h3>What do you need help with?</h3>
    <div class="service-buttons">
      <button class="service-btn" data-value="sewer-repair">
        🚧 Sewer Repair
      </button>
      <button class="service-btn" data-value="sewer-replacement">
        🚦 Sewer Replacement
      </button>
      <button class="service-btn" data-value="water-heater">
        🔥 Water Heater
      </button>
      <button class="service-btn" data-value="drain-cleaning">
        🚿 Drain Cleaning
      </button>
      <button class="service-btn" data-value="other">
        🔧 Other Plumbing
      </button>
    </div>
  </div>

  <!-- Step 2 -->
  <div class="form-step" data-step="2">
    <h3>How soon do you need service?</h3>
    <div class="urgency-buttons">
      <button class="urgency-btn" data-value="emergency">
        🚨 Emergency (Today)
      </button>
      <button class="urgency-btn" data-value="this-week">
        📅 This Week
      </button>
      <button class="urgency-btn" data-value="quotes">
        📈 Getting Quotes
      </button>
      <button class="urgency-btn" data-value="not-sure">
        🤔 Not Sure
      </button>
    </div>
  </div>

  <!-- Step 3 -->
  <div class="form-step" data-step="3">
    <h3>Almost done! Where should we reach you?</h3>
    <input type="text" name="name" placeholder="Your Name" required>
    <input type="tel" name="phone" placeholder="Phone Number" required>
    <input type="email" name="email" placeholder="Email (optional)">
    <div class="contact-pref">
      <label><input type="radio" name="contact" value="call"> Call Me</label>
      <label><input type="radio" name="contact" value="text"> Text Me</label>
    </div>
    <button type="submit" class="submit-btn">Get My Free Quote</button>
  </div>
</div>

Key Implementation Notes

⭐ 8. Social Proof Integration

🏆 Review Widget Implementation

⭐⭐⭐⭐⭐

4.9 out of 5 Stars

Based on 384+ verified reviews

Google | BBB | Yelp

Placement Rules

Widget Options

OptionProsCons
Google Reviews widgetAuto-updates, pulls real reviewsExternal script, potential speed hit
Google Places Reviews APIAlways current, Google trustAPI setup required, rate limits
Static HTML widget (manual update)Zero speed impact, full design controlMust update manually when count changes
WP plugin (e.g., Site Reviews)Easy to manageAnother plugin, potential conflicts

Recommendation: Use a static HTML widget for speed, update the review count monthly. The 4.9 rating and 384+ count are the key numbers. Exact reviews can be displayed as manually curated testimonials.

📷 Before/After Photo Galleries

Pages That Need Before/After Galleries

Implementation

🎥 Video Testimonial Placement

Optimal Video Placement

Lazy-Load YouTube Embed (Speed-Safe)

<!-- Lite YouTube embed - loads iframe only on click -->
<div class="lite-youtube" data-id="VIDEO_ID_HERE"
     style="background:url(https://i.ytimg.com/vi/VIDEO_ID_HERE/hqdefault.jpg) center/cover;
            aspect-ratio:16/9;max-width:640px;cursor:pointer;border-radius:10px;position:relative">
  <div style="position:absolute;inset:0;display:flex;align-items:center;justify-content:center">
    <svg width="68" height="48" viewBox="0 0 68 48">
      <path d="M66.52 7.74c-.78-2.93-2.49-5.41-5.42-6.19C55.79.13 34 0 34 0S12.21.13 6.9 1.55C3.97 2.33 2.27 4.81 1.48 7.74.06 13.05 0 24 0 24s.06 10.95 1.48 16.26c.78 2.93 2.49 5.41 5.42 6.19C12.21 47.87 34 48 34 48s21.79-.13 27.1-1.55c2.93-.78 4.64-3.26 5.42-6.19C67.94 34.95 68 24 68 24s-.06-10.95-1.48-16.26z" fill="red"/>
      <path d="M45 24L27 14v20" fill="white"/>
    </svg>
  </div>
</div>
<script>
document.querySelectorAll('.lite-youtube').forEach(el => {
  el.addEventListener('click', () => {
    const iframe = document.createElement('iframe');
    iframe.src = 'https://www.youtube.com/embed/' + el.dataset.id + '?autoplay=1';
    iframe.allow = 'autoplay;encrypted-media';
    iframe.allowFullscreen = true;
    iframe.style.cssText = 'width:100%;aspect-ratio:16/9;border:0;border-radius:10px';
    el.replaceWith(iframe);
  });
});
</script>

⚡ 9. Page Speed Optimization

Page speed is a direct ranking factor AND a conversion factor. Every 1-second delay in load time reduces conversions by ~7%. Bright Side has several known speed issues that are actively hurting both rankings and leads.

🚨 Critical Issue: Hero Image LCP Problem

HURTING LCP SCORE

Problem: The hero image is loaded via CSS background-image with JavaScript injection. This is one of the worst patterns for Largest Contentful Paint (LCP) because:

  1. Browser cannot discover the image during HTML parsing (it is hidden in CSS/JS)
  2. JS must download, parse, and execute before image request even begins
  3. CSS background images cannot use <link rel="preload"> effectively
  4. No native lazy-loading or priority hints available

🔧 Fix: Switch to Standard <img> Tag

<!-- BEFORE (bad): CSS background with JS injection -->
<div class="hero-section" style="background-image: url('...')">...</div>

<!-- AFTER (good): Standard img tag with fetchpriority -->
<div class="hero-section">
  <img
    src="hero-image-1200.webp"
    srcset="hero-image-640.webp 640w,
            hero-image-960.webp 960w,
            hero-image-1200.webp 1200w,
            hero-image-1920.webp 1920w"
    sizes="100vw"
    alt="Bright Side Plumbing team in Overland Park KS"
    width="1920" height="800"
    fetchpriority="high"
    decoding="async"
    style="width:100%;height:100%;object-fit:cover;position:absolute;inset:0"
  >
  <!-- Overlay and content on top -->
  <div class="hero-content" style="position:relative;z-index:2">...</div>
</div>

Additional LCP Optimizations

<!-- Add to <head> for hero image preload -->
<link rel="preload" as="image" href="hero-image-1200.webp"
      imagesrcset="hero-image-640.webp 640w, hero-image-960.webp 960w,
                   hero-image-1200.webp 1200w, hero-image-1920.webp 1920w"
      imagesizes="100vw"
      fetchpriority="high">

In Oxygen Builder: Edit the hero section, remove the background image CSS property, and add an Image element inside the section with the attributes above. Use Oxygen's "Custom Attributes" panel to add fetchpriority="high".

🚨 Critical Issue: 8+ Render-Blocking CSS Files

BLOCKING FIRST PAINT

Problem: Oxygen Builder generates multiple CSS files that all load in the <head> as render-blocking resources. Until all CSS files are downloaded and parsed, the browser shows a white screen.

🔧 Fix Steps

  1. Audit CSS files: Open Chrome DevTools > Network > filter by CSS. List every CSS file and its size.
  2. Inline critical CSS:
    • Use a tool like Critical or Critters to extract above-the-fold CSS
    • Inline that critical CSS in a <style> tag in the <head>
    • Load remaining CSS asynchronously
  3. Combine CSS files: WP Rocket has a "Combine CSS" option. Enable it at WP Rocket > File Optimization > CSS Files > Combine CSS files
  4. Async load non-critical CSS:
    <!-- Load non-critical CSS without blocking render -->
    <link rel="preload" href="oxygen-styles.css" as="style"
          onload="this.onload=null;this.rel='stylesheet'">
    <noscript><link rel="stylesheet" href="oxygen-styles.css"></noscript>
  5. Remove unused CSS: Oxygen Builder includes CSS for elements not used on every page. Use WP Rocket's "Remove Unused CSS" feature or PurgeCSS.

🚀 WP Rocket Configuration

SettingRecommended ValueNotes
Cache > Enable caching for mobileONCritical for 60%+ mobile traffic
Cache > Separate cache for mobileONRequired if mobile layout differs
File Optimization > Minify CSSONReduces CSS file sizes
File Optimization > Combine CSSONReduces HTTP requests
File Optimization > Optimize CSS deliveryON (Remove Unused CSS)Biggest speed win for Oxygen sites
File Optimization > Minify JSONReduces JS file sizes
File Optimization > Delay JS executionONDefers non-essential JS
Media > LazyLoad imagesONExcept hero image (exclude via class)
Media > LazyLoad iframes/videosONCritical for YouTube embeds
Media > Add missing dimensionsONPrevents CLS
Media > WebP CompatibilityONServe WebP if available
Preload > Preload linksONPreloads pages on hover
Preload > Prefetch DNSAdd: fonts.googleapis.com, www.googletagmanager.comReduces DNS lookup time
CDNEnable if using LiteSpeed CDN or CloudflareCheck if LiteSpeed handles this

WP Rocket Exclusions (Important for Oxygen)

⚡ LiteSpeed Cache Configuration

Since the server runs LiteSpeed, there is potential overlap with WP Rocket. Decide on one primary caching solution to avoid conflicts.

Option A: WP Rocket Only (Recommended)

Option B: LiteSpeed Cache Only

Do not run both WP Rocket and LiteSpeed Cache simultaneously for page caching. This causes double-caching issues, stale content, and debugging nightmares.

🧩 10. Schema Markup

Schema markup helps Google understand the business, services, reviews, and FAQs. It enables rich results (star ratings, FAQ dropdowns, business info) in search results, which increases click-through rates.

🏢 LocalBusiness Schema (Site-Wide)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "name": "Bright Side Plumbing",
  "image": "https://callbrightside.com/wp-content/uploads/bright-side-logo.png",
  "url": "https://callbrightside.com",
  "telephone": "+1-913-XXX-XXXX",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "12022 Blue Valley Pkwy",
    "addressLocality": "Overland Park",
    "addressRegion": "KS",
    "postalCode": "66204",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 38.8814,
    "longitude": -94.6689
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
      "opens": "07:00",
      "closes": "18:00"
    }
  ],
  "priceRange": "$$",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.9",
    "reviewCount": "384",
    "bestRating": "5",
    "worstRating": "1"
  },
  "sameAs": [
    "https://www.facebook.com/callbrightside",
    "https://www.google.com/maps?cid=GOOGLE_CID_HERE",
    "https://www.bbb.org/us/ks/overland-park/profile/plumber/bright-side-plumbing-0644-XXXXXXX"
  ],
  "areaServed": [
    {"@type": "City", "name": "Overland Park"},
    {"@type": "City", "name": "Olathe"},
    {"@type": "City", "name": "Lenexa"},
    {"@type": "City", "name": "Shawnee"},
    {"@type": "City", "name": "Leawood"},
    {"@type": "City", "name": "Prairie Village"},
    {"@type": "City", "name": "Kansas City"}
  ]
}
</script>

Placement: Add to Oxygen Builder > Settings > Global Settings > Custom Code > Header, or via a code block in the site-wide template. This schema goes on every page.

🛠 Service Schema (Per Service Page)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Service",
  "name": "Sewer Repair",
  "description": "Professional sewer repair services in Overland Park, KS. Camera inspection, trenchless repair, and emergency sewer service by a fifth-generation master plumber.",
  "provider": {
    "@type": "Plumber",
    "name": "Bright Side Plumbing",
    "url": "https://callbrightside.com"
  },
  "areaServed": {
    "@type": "City",
    "name": "Overland Park",
    "addressRegion": "KS"
  },
  "serviceType": "Sewer Repair",
  "offers": {
    "@type": "Offer",
    "availability": "https://schema.org/InStock",
    "priceSpecification": {
      "@type": "PriceSpecification",
      "priceCurrency": "USD"
    }
  }
}
</script>

Create a version of this for each service page, changing name, description, and serviceType accordingly.

❓ FAQPage Schema

MISSING ON /FAQS/ PAGE
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "How much does sewer repair cost in Overland Park?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Sewer repair costs in Overland Park typically range from $X to $Y depending on the type of repair, pipe depth, and accessibility. Bright Side Plumbing offers free camera inspections and upfront pricing before any work begins."
      }
    },
    {
      "@type": "Question",
      "name": "How do I know if my sewer line needs repair?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Common signs include slow drains throughout the home, sewage odors, gurgling sounds from drains, wet spots in the yard, and sewage backups. If you notice any of these signs, call Bright Side for a free sewer camera inspection."
      }
    },
    {
      "@type": "Question",
      "name": "Do you offer trenchless sewer repair?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. Bright Side Plumbing offers trenchless sewer repair methods including pipe lining (CIPP) that can fix your sewer line without digging up your yard. Our fifth-generation master plumber will recommend the best method for your situation."
      }
    }
  ]
}
</script>

Action items:

  1. Add FAQPage schema to the /faqs/ page immediately (this is a quick win for rich results)
  2. Add FAQPage schema to every service page that has an FAQ accordion
  3. Ensure the schema text matches the visible page text exactly (Google penalizes mismatches)

⭐ Review / AggregateRating Schema

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "name": "Bright Side Plumbing",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.9",
    "reviewCount": "384",
    "bestRating": "5",
    "worstRating": "1"
  },
  "review": [
    {
      "@type": "Review",
      "author": {
        "@type": "Person",
        "name": "Customer Name"
      },
      "datePublished": "2026-01-15",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "5",
        "bestRating": "5"
      },
      "reviewBody": "Bright Side was amazing. Kalen came out the same day and fixed our sewer line. Honest, fair pricing, and outstanding work."
    }
  ]
}
</script>

Note: The AggregateRating is already included in the LocalBusiness schema above. Only add individual Review schemas on pages that display those specific reviews visibly on the page. Google requires the review content to be visible, not hidden.

🔬 11. Microsoft Clarity Setup

Microsoft Clarity is a free heatmap and session recording tool. It shows exactly where users click, how far they scroll, and where they rage-click or abandon. This is essential for data-driven optimization of the service pages.

📋 Step-by-Step Install via Google Tag Manager

1
Create Clarity Account
Go to clarity.microsoft.com
Sign in with a Microsoft account. Create a new project named "Bright Side Plumbing". Enter callbrightside.com as the website URL.
2
Get the Clarity Tracking Code
In Clarity project settings, go to Setup > Install tracking code. Copy the JavaScript snippet. It will look like:
<script type="text/javascript">
(function(c,l,a,r,i,t,y){
  c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
  t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
  y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
})(window,document,"clarity","script","YOUR_PROJECT_ID");
</script>
3
Install via GTM (Recommended)
  1. Open Google Tag Manager for the Bright Side container
  2. Create a new Tag: Tag Type = "Custom HTML"
  3. Paste the Clarity script into the HTML field
  4. Trigger: "All Pages" (Page View)
  5. Name the tag "Microsoft Clarity"
  6. Save and Publish the GTM container
4
Verify Installation
  1. Visit callbrightside.com in an incognito window
  2. Open Chrome DevTools > Network > search for "clarity"
  3. You should see requests to clarity.ms
  4. Wait 30 minutes, then check the Clarity dashboard for incoming data
5
Alternative: Install via WP Plugin
If GTM is not available, install the official "Microsoft Clarity" WordPress plugin. Activate it, connect to the Clarity project, and it will inject the script automatically.

📊 Dashboard Configuration

Create These Custom Filters

Filter NameConfigurationPurpose
Service Pages OnlyURL contains: /services/ OR specific service page URLsFocus analysis on conversion pages
Mobile SessionsDevice: MobileAnalyze 60%+ of traffic separately
High-Intent PagesURL contains: sewer-repair, sewer-replacement, water-heaterFocus on revenue pages
Rage ClicksSmart Events: Rage Click = trueFind UX frustration points
Quick BacksSmart Events: Quick Back = trueFind pages that don't meet user expectations

Key Metrics to Monitor Weekly

🔥 Session Recordings: What to Look For

BehaviorWhat It MeansFix
User scrolls past CTA without clickingCTA not compelling or not visible enoughRedesign CTA, increase contrast, add urgency
User rage-clicks phone numberPhone number is not a clickable linkMake all phone numbers tel: links
User scrolls to bottom and leavesDidn't find what they needed OR no final CTAAdd strong CTA above footer
User fills form partially then abandonsForm too long or confusingImplement multi-step form (Section 7)
User clicks navigation repeatedlyNavigation labels unclearSimplify nav labels, add service-specific links

📉 12. A/B Testing Protocol

🎯 What to Test First (Priority Order)

#TestExpected ImpactEffort
1Multi-step form vs. single-step formVERY HIGHMEDIUM
2Sticky mobile CTA vs. no sticky CTAVERY HIGHLOW
3Hero headline variations (3 versions)HIGHLOW
4CTA button text ("Call Now" vs. "Get Free Quote" vs. "Schedule Service")HIGHLOW
5Social proof in hero (with stars vs. without)MEDIUMLOW
6Form placement (sidebar vs. below hero vs. inline)MEDIUMMEDIUM
7Trust bar elements (which badges convert best)MEDIUMLOW
8Before/after photos vs. no photosMEDIUMMEDIUM

📊 Sample Size and Statistical Significance

Quick Sample Size Calculator

Current Conversion RateMinimum Detectable EffectVisitors Needed Per VariantAt ~100 visits/day
3%50% lift (3% to 4.5%)~1,030~21 days
3%30% lift (3% to 3.9%)~2,900~58 days
5%30% lift (5% to 6.5%)~1,700~34 days
5%20% lift (5% to 6%)~3,800~76 days

All calculations assume 95% confidence level and 80% power. Use Evan Miller's calculator for exact numbers based on current traffic.

Rules for Statistical Significance

  1. Never call a test early. Run for at least 2 full weeks regardless of early results.
  2. 95% confidence minimum. Do not act on results below 95% statistical significance.
  3. Full business cycles. Tests must run across weekdays AND weekends (plumbing searches differ by day).
  4. One test at a time per page. Overlapping tests contaminate results.
  5. Document everything. Log: test name, start date, end date, variants, sample sizes, conversion rates, confidence level, winner, action taken.

🔧 A/B Testing with Oxygen Builder

Method 1: Google Optimize Replacement (free)

Since Google Optimize has been sunset, use one of these free/low-cost alternatives:

Method 2: Oxygen Conditions (Simple)

  1. In Oxygen, create two versions of the element you want to test (e.g., two hero sections)
  2. Use Oxygen's Conditions feature to show variant A to 50% and variant B to 50%
  3. Set the condition based on a cookie value assigned randomly via a small JS snippet
  4. Track conversions per variant in GA4 using custom events

Cookie-Based Split Test Script

// Place in Oxygen > Settings > Global > Scripts > Header
(function() {
  var variant = document.cookie.match(/bsp_test=([AB])/);
  if (!variant) {
    variant = Math.random() < 0.5 ? 'A' : 'B';
    document.cookie = 'bsp_test=' + variant + ';path=/;max-age=2592000';
  } else {
    variant = variant[1];
  }
  document.documentElement.setAttribute('data-variant', variant);
  // Fire GA4 event
  if (typeof gtag === 'function') {
    gtag('event', 'ab_test_variant', { variant: variant });
  }
})();
/* In Oxygen CSS, show/hide based on variant */
[data-variant="A"] .hero-variant-b { display: none !important; }
[data-variant="B"] .hero-variant-a { display: none !important; }

📱 13. Mobile Optimization

Over 60% of Bright Side's traffic comes from mobile devices. A homeowner with a sewer backup at 9pm is searching on their phone. Every mobile UX failure is a lost customer calling a competitor instead.

📲 Tap Target Requirements

ElementMinimum SizeSpacingCurrent Status
CTA buttons48px x 48px minimum (Google recommendation)8px between adjacent targetsAUDIT
Phone number linksFull-width on mobile, 48px height minimumIsolated (no adjacent links)AUDIT
Navigation menu items48px height per item8px between itemsAUDIT
Form fields48px height, 16px font-size minimum12px between fieldsAUDIT
FAQ accordion toggles48px tap zoneClear separation between questionsAUDIT

📄 Viewport Configuration

<!-- Must be in <head> - verify this exists and is correct -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">

Common Viewport Issues on Oxygen Sites

Fix: Global Mobile Overrides in Oxygen

/* Add to Oxygen > Stylesheets > Global */
@media (max-width: 767px) {
  /* Prevent horizontal overflow */
  body { overflow-x: hidden; }

  /* Make all images responsive */
  img { max-width: 100%; height: auto; }

  /* Ensure tables scroll */
  table { display: block; overflow-x: auto;}

  /* Minimum font size to prevent zoom on input focus */
  input, select, textarea { font-size: 16px !important; }

  /* Full-width CTAs on mobile */
  .cta-button { width: 100%; text-align: center; padding: 16px; }
}

🔞 Font Size Guidelines

ElementDesktopMobileNotes
H136-42px28-32pxMust be readable without zooming
H228-32px22-26pxSection headers
Body text16-18px16px minimumNever below 16px on mobile
CTA button text16-18px16-18px boldMust be legible at a glance
Form labels14-16px16px16px prevents iOS zoom on focus
Footer text14px14pxAcceptable to go smaller in footer

Critical: iOS Safari will auto-zoom the page when a user taps an input field with font-size below 16px. This is jarring and confusing. Set all form inputs to 16px minimum on mobile.

👍 Thumb Zone Layout

Users hold their phone with one hand. The "thumb zone" is the area easily reachable by the thumb. On a standard phone:

Mobile Layout Stack Order (top to bottom)

  1. Header: Logo (left) + Hamburger menu (right) + Phone icon (right)
  2. Hero: H1 + Subhead + Primary CTA button (full-width, large tap target)
  3. Trust bar: Horizontal scroll or compact grid of trust badges
  4. Content sections: Stacked vertically, one column
  5. Form: Full-width, multi-step, large fields
  6. Sticky bottom bar: Click-to-call, always visible (thumb zone sweet spot)

Elements That Must Change on Mobile

🛡️ 14. Trust Signals

Home services is a trust-dependent industry. Homeowners are letting a stranger into their home to do expensive work they cannot evaluate. Every trust signal reduces friction and increases conversion.

🏆 Primary Trust Signals

A+
BBB Rating

Display the BBB badge on every page. Link to the BBB profile.

5th Gen
Master Plumber

Kalen Barker is a fifth-generation master plumber. This is a massive differentiator.

KS Licensed
Licensed & Insured

Display license number. "Fully licensed and insured" on every page.

Guaranteed
Satisfaction Guarantee

If BSP offers a satisfaction guarantee, display it prominently.

💰 Financing Options

High-ticket services (sewer replacement, water heater installation) create price shock. Financing options reduce sticker shock and increase conversion on expensive services.

How to Display Financing

Copy Examples (No Em Dashes)

👤 Kalen Barker Bio Section

Every high-value service page should have a brief Kalen Barker bio. Homeowners want to know WHO is coming to their home. A named, credentialed person is far more trustworthy than a faceless company.

Recommended Bio Block

[Photo]

Meet Kalen Barker

Fifth-generation master plumber. Kansas licensed. A+ rated with the BBB. Kalen brings decades of family plumbing expertise to every job. When Bright Side shows up, Kalen is personally involved in your project from diagnosis to completion.

⭐ 4.9 stars from 394+ reviews

Placement: After the process/how-it-works section on each service page. Always include a real photo of Kalen (professional headshot or on-the-job photo).

📋 Trust Signal Checklist by Page

SignalHomepageService PagesContact PageAbout Page
4.9 stars / 394+ reviews
BBB A+ badge
Fifth-generation reference
Licensed & insured
Kalen bio block
Financing available✅ (high-ticket)
Guarantee / warranty
Service area

📈 15. Conversion Rate Benchmarks

You cannot optimize what you do not measure. These benchmarks give Bright Side a target to aim for and a way to evaluate whether optimizations are working.

📊 Industry Benchmarks: Plumbing / Home Services

MetricPoorAverageGoodExcellent
Overall website conversion rate< 1%1-3%3-5%8%+
Service page conversion rate< 2%2-4%4-7%10%+
Mobile conversion rate< 1%1-2%2-4%5%+
Form completion rate< 10%10-20%20-40%40%+
Click-to-call rate (mobile)< 2%2-4%4-7%8%+
Bounce rate (service pages)> 70%50-70%35-50%< 35%
Avg. time on page< 30s30-60s1-2 min2+ min

Sources: WordStream, Unbounce Conversion Benchmark Report, HubSpot, Ruler Analytics (home services vertical)

🎯 Targets by Page Type

PageCurrent (Est.)Target (6 mo)Stretch (12 mo)Key Lever
Sewer Repair~2-3%5%8%Multi-step form + sticky CTA + hero optimization
Sewer Replacement~1-2%4%6%Fear reduction copy + financing prominence + CTA frequency
Water Heater~2-3%5%8%Fix cannibalization + emergency CTA + same-day messaging
Drain Cleaning~3-4%6%9%Lower-anxiety service, optimize for speed and ease
Homepage~1-2%3%5%Route users to service pages faster + clear CTAs
Contact Page~10-15%20%30%Multi-step form + reduce fields + add phone option

📉 How to Track Conversions

Define These as GA4 Conversions

Event NameTriggerWeight
phone_clickClick on any tel: linkPrimary conversion
form_submitContact form submission (thank you page or form event)Primary conversion
form_step_1Multi-step form: Step 1 completedMicro conversion
form_step_2Multi-step form: Step 2 completedMicro conversion
chat_startedLive chat initiated (if applicable)Secondary conversion
scroll_50User scrolls 50% of pageEngagement signal
scroll_90User scrolls 90% of pageEngagement signal

Monthly Reporting Cadence

  1. Weekly: Check Clarity heatmaps and watch 5-10 session recordings on revenue pages
  2. Bi-weekly: Review GA4 conversion rates by page, device, and source
  3. Monthly: Full conversion report comparing against benchmarks. Identify pages underperforming targets. Prioritize next optimization.
  4. Quarterly: Review A/B test results, update benchmarks, set new targets

🚀 Quick Win Roadmap

Ranked by estimated impact and effort. Do these in order:

#ActionImpactEffortTimeline
1Fix NAP inconsistency (12022 Blue Valley Pkwy everywhere)CRITICALLOWWeek 1
2Fix "fourth generation" to "fifth-generation" site-wideHIGHLOWWeek 1
3Add sticky mobile CTA (click-to-call)CRITICALLOWWeek 1
4Add FAQPage schema to /faqs/ pageHIGHLOWWeek 1
5Fix hero image: switch from CSS background to <img> tag with preloadCRITICALMEDIUMWeek 2
6Install Microsoft Clarity via GTMHIGHLOWWeek 2
7Configure WP Rocket: Remove Unused CSS, Delay JSHIGHMEDIUMWeek 2
8301 redirect duplicate water heater pagesHIGHLOWWeek 2
9Implement multi-step form on sewer repair page (test)CRITICALMEDIUMWeeks 3-4
10Optimize sewer repair page (full rebuild per Section 2)CRITICALHIGHWeeks 3-5
11Add LocalBusiness + Service schema to all service pagesHIGHMEDIUMWeeks 3-4
12Optimize sewer replacement page per Section 3HIGHHIGHWeeks 5-6
13Optimize water heater page per Section 4HIGHHIGHWeeks 6-7
14Revive blog (dead since Nov 2023)MEDIUMMEDIUMOngoing
15Begin A/B testing on sewer repair pageHIGHMEDIUMWeek 8+

🚨 Known Issues Summary

IssueStatusFix Location
NAP inconsistency: 12022 Blue Valley Pkwy appears (should be 12022 Blue Valley Pkwy)OPENSection 1
Generation claim: "fourth generation" appears (should be "fifth-generation")OPENSection 1
No FAQPage schema on /faqs/ pageOPENSection 10
Water heater keyword cannibalization (3 URLs competing)OPENSection 4
Hero image via CSS background + JS injection (hurts LCP)OPENSection 9
8+ render-blocking CSS files from Oxygen BuilderOPENSection 9
No sticky mobile CTAOPENSection 6
Single-step contact form (86% lower conversion than multi-step)OPENSection 7
Blog dead since November 2023OPENSection 15 Roadmap

Bright Side Plumbing | Landing Page Optimization Playbook

Prepared by Dove Web Consulting | March 2026

callbrightside.com | 12022 Blue Valley Pkwy, Overland Park, KS

Keyword Intelligence: Page Mapping & Traffic Data

40,847 keywords analyzed. Updated April 2, 2026.

Top 10 Transactional Keywords Without Landing Pages

These keywords have high purchase intent but no dedicated page to capture them. Each represents a landing page that should be built.

KeywordClusterMonthly VolumeIntentPriority
sewer line replacement costSewer12,100TransactionalP1
emergency plumber near meEmergency33,100TransactionalP1
tankless water heater installationWater Heater18,100TransactionalP1
drain cleaning service near meDrain14,800TransactionalP1
sewer camera inspection costSewer8,100TransactionalP1
water heater replacement costWater Heater22,200TransactionalP2
clogged main sewer lineSewer6,600TransactionalP2
24 hour plumberEmergency27,100TransactionalP2
hydro jetting sewer lineSewer4,400TransactionalP2
gas water heater installationWater Heater9,900TransactionalP2

Keyword Arsenal Summary

40,847
Total Keywords
6,483
Transactional
12,077
Commercial
18.6M
Monthly Volume

GA4 Traffic Snapshot (Yesterday)

144
Total Sessions
21
Paid Search
12
Organic Search
111
Direct / Other

Organic search represents only 8.3% of traffic. With 40,847 keywords available and blog inactive since November 2023, landing pages with proper keyword targeting will capture dramatically more organic traffic. Every new optimized page adds a net to the funnel.

Geo-Targeting Intelligence

Customer Intelligence Dashboard contains neighborhood-level data for hyper-local landing page targeting. Use this data to create geo-specific pages (e.g., "sewer repair in Leawood" or "emergency plumber Olathe").

Open Customer Intelligence Dashboard