# Client Company Digital Visibility — Full Audit Report

**client-example.invalid · anonymized sample · prepared by Comcreate · compiled 2026-05-21**

This document combines every individual audit, research, and analysis file produced for the Client Company digital visibility engagement. All data was pulled 2026-05-21 from Ahrefs, Google Search Console, Google Analytics 4, the WordPress REST API, and Google PageSpeed Insights.

> **Anonymized example:** Direct client identifiers have been replaced. Performance data and audit findings are preserved.


---

## Table of Contents


**Executive**

- [Executive Summary](#executive-summary)

**Research**

- [Research Overview](#research-overview)
- [Business Profile](#business-profile)
- [Competitor Landscape](#competitor-landscape)

**Ahrefs**

- [Ahrefs — Full Report](#ahrefs-full)
- [Backlink Toxicity](#backlink-toxicity)
- [Keywords & Rankings](#keywords-rankings)
- [SEO Traffic Analysis](#seo-traffic)

**GSC**

- [Google Search Console — Full Report](#gsc-full)
- [GSC Overview](#gsc-overview)
- [GSC Top Queries](#gsc-top-queries)
- [GSC Top Pages](#gsc-top-pages)
- [GSC Top Movers](#gsc-top-movers)
- [GSC Indexation & Sitemaps](#gsc-indexation)

**GA4**

- [Google Analytics 4 — Full Report](#ga4-full)
- [GA4 Overview](#ga4-overview)
- [GA4 Sources / Channels](#ga4-sources)
- [GA4 Conversions](#ga4-conversions)
- [GA4 Landing Pages](#ga4-landing-pages)

**WordPress**

- [WordPress — Full Report](#wp-full)
- [Site Architecture](#site-architecture)
- [Performance & Core Web Vitals](#performance)

**Prior Vendor**

- [Prior Vendor — 15-Month Work Audit](#prior-vendor-audit)
- [Prior Vendor — Content Inventory](#prior-vendor-content)
- [Prior Vendor — Media Timeline](#prior-vendor-media)

---



<a id="executive-summary"></a>

## Executive Summary

_source: `reports/executive-summary.md`_

##### Executive Summary — Client Company

**Date:** 2026-05-21
**Headline:** Strong brand, weak digital discoverability. The site, reviews, and credentials are an asset; the search visibility and measurement setup are the constraint.

---

#### 1. Who You Are

Client Company (legal: Client Company) is a San Diego design-build firm founded by **Client Principal**, BBB-incorporated April 28, 2008, **operating ~26 years** in residential remodeling. The firm is positioned at the **luxury end** of the San Diego market:

- **Typical job cost:** $80,000 – $1,000,000 (per Houzz)
- **License:** CSLB #[redacted]
- **Service areas:** San Diego County — emphasis on La Jolla, Rancho Santa Fe, Del Mar, Carmel Valley, Encinitas, Carlsbad, Poway, Scripps Ranch, Tierrasanta, and other affluent coastal/inland zones
- **Specialties:** Whole-home renovations, kitchens, bathrooms, home additions, custom cabinetry, ADUs, sunrooms, smart-home integration, outdoor kitchens

##### Credentials & Reputation (the brand is genuinely strong)

- **Yelp:** 5.0★, 10 reviews
- **BBB:** A+, accredited since March 6, 2008
- **Houzz:** "Best of Houzz" winner in 2016, 2017, 2019, 2020, 2021, 2022 (×2), 2023 (×2), 2024, **2026**
- **EPA Renovator Certified**
- **HomeAdvisor / Angi / GuildQuality:** active profiles, positive reviews
- **Coverage:** quoted/linked from San Diego Union-Tribune, This Old House, and other DR 80+ outlets

---

#### 2. The Critical Finding: Search Visibility Is Effectively Zero

The authoritative measurement of organic search performance is **Google Search Console (GSC)**, which reports actual clicks from Google to client-example.invalid. Ahrefs third-party estimates undercount the reality by roughly an order of magnitude and should be treated as directional only.

**GSC (authoritative, last 90 days, pulled 2026-05-21):**
- **~51 clicks/month from real Google search**
- US-filtered, this is closer to ~33 clicks/month from US users

Ahrefs estimates (directional only):
- Jan 2025: ~154 estimated monthly organic visitors
- Apr 2025: ~138
- May 2025: ~77
- Jun 2025: ~16
- Jul 2025 onward: 1–12 /month estimated
- May 2026 (now): 1 estimated organic visitor

The Ahrefs estimate of "1 visitor/month" is not literally true — GSC shows real users arriving — but the *direction* is correct: discoverability is severely diminished compared to 2023–early 2025.

**The site currently ranks for only 2 organic keywords (per Ahrefs):**
1. "Client Company" (branded, position 6, 10 search volume)
2. "home remodel rancho santa fe" (position 34, 200 search volume)

**Non-branded discoverability is effectively zero.** A homeowner Googling "luxury kitchen remodel San Diego" or "design build firm La Jolla" will not find the site.

##### What's driving it

Three compounding issues:

**(a) A site rebuild that broke historical URLs.** Every blog post on the current site shows a `lastmod` of 2026-04-20 — synchronous, indicating a fresh import/rebuild. The footer attributes the site to "Prior Vendor." The old URL structure was not redirected, vaporizing years of accumulated ranking equity. The April 2026 rebuild itself has stabilized — crawl health is fine — but the **legacy URLs were never redirected, and the sitemap remains cluttered with stale entries.** The bigger ongoing issue is competitive ranking and URL hygiene, not crawl failure.

**(b) A toxic backlink profile.** Of 267 referring domains, a meaningful chunk are obvious spam:
- **57 domains** carry the anchor: *"There was a time when client-example.invalid struggled with low visibility... Once I tried SEOExpress.org's backlink building service... +300%..."* — a paid-link vendor testimonial-spam pattern
- **8 domains** carry: *"OUR TELEGRAM CHANEL https://t.me/s/quarterlinks25"*
- `buybacklinks.agency`, `site123.me`, `za.com` flagged spam
- Generic "." anchor across 67 domains — classic PBN footprint
- Exact-match commercial anchors (`remodeling contractors San Diego`, `kitchen and bath experts San Diego`, `sunrooms San Diego`) on 8–18 domains each — over-optimized in a way Google penalizes

This pattern is consistent with **historical paid link-building** that Google has since penalized algorithmically (likely SpamBrain / link-spam updates).

**(c) Technical SEO friction.** Mobile PageSpeed score: **53/100**. 195KB of unused JavaScript, 36KB of unused CSS.

**(d) Measurement gaps — the conversion story is largely invisible.** Two issues compound here:

- **Bot/internal traffic dominates raw GA4.** 70%+ of raw GA4 sessions are bot or internal traffic (Singapore, China, Philippines, Pakistan, Serbia). Of ~12K reported sessions, only ~5K are real human sessions. Bot filtering is **not** applied at the GA4 source — every raw GA4 number in this report must be interpreted with that in mind.
- **Form submissions are not being tracked.** The `generate_lead` event has been configured in GA4 since March 2025 but **has never fired**. The 17 events reported in the last 90 days are a floor — the true conversion count is unknown.

##### Traffic streams worth surfacing separately

- **Google Business Profile (GMB):** 123 sessions in 89 days come from `?utm_source=gmb` — a distinct stream from organic search, and proportionally significant.
- **AI engine referrals:** ChatGPT, Claude, and Copilot are sending small but real traffic. Early-mover signal worth noting — AI-search visibility is becoming a meaningful discovery channel.

---

#### 3. What's Going Right

The site has real assets:

- **88 indexed URLs** including 22 location-specific pages (Rancho Santa Fe, La Jolla, Del Mar, Carlsbad, etc.) and 28 service pages — a real long-tail SEO footprint already exists structurally
- **39 blog posts** covering all the right topics (luxury renovations, smart homes, coastal materials, cabinet selection, home additions)
- **18 portfolio project pages** — visual proof of work
- **Real reputation signals** — 10+ years of consistent 5★ reviews, awards, and editorial mentions (San Diego Union-Tribune, This Old House, GuildQuality)
- **Premium brand positioning** that matches the actual project economics ($80K–$1M jobs)

The site infrastructure is *there*. It is **not being found**.

---

#### 4. The Competitive Reality

| Competitor | DR | Org Keywords | Monthly Org Traffic |
|---|---|---|---|
| Jackson Design & Remodeling | 45 | 259 | 2,281 |
| 123 Remodeling | 32 | 354 | 2,171 |
| Kaminskiy Design & Remodeling | 37 | 94 | 198 |
| **Client Company** | **14** | **2** | **1** |

Direct peers in the same San Diego luxury-remodeling segment are pulling **2,000+ qualified organic visitors a month**. Client Company is pulling roughly 51 clicks/month (GSC). At a typical job size of $80K and up, even a single converted lead from organic search is materially valuable — and competitors are capturing hundreds of qualified visits per month while Client Company is largely absent from non-branded search results.


---



<a id="research-overview"></a>

## Research Overview

_source: `research/README.md`_

##### Research Index — Client Company

Documentation built from first-party data sources (GSC + GA4) plus third-party reputation research. All audits compiled 2026-05-21.

#### Sources

| Source | Property / ID | Access Level | Notes |
|---|---|---|---|
| **Google Search Console** | `sc-domain:client-example.invalid` | siteFullUser | 90-day window pulled 2026-05-21 |
| **Google Analytics 4** | `properties/[redacted GA4 property]` | Account [redacted analytics account] | 89-day window pulled 2026-05-21 |
| **Ahrefs** | `client-example.invalid` (subdomains) | Read API | US market |
| **PageSpeed Insights** | `https://client-example.invalid/` | Public | Mobile + Desktop |
| **Public reviews** | Yelp, Houzz, BBB, Angi, HomeAdvisor, GuildQuality | Public | Scraped 2026-05-21 |

#### Folder Structure

```
research/
├── README.md                    ← this file
├── business-profile.md          ← company/credentials/reputation
├── gsc/
│   ├── overview.md              ← 28-day & 90-day GSC summary
│   ├── top-queries.md           ← what's ranking, what's not
│   ├── top-pages.md             ← page-level performance
│   ├── indexation-sitemaps.md   ← sitemap & indexation health
│   └── top-movers.md            ← post-rebuild vs pre-rebuild
└── ga4/
    ├── overview.md              ← real session volume + bot analysis
    ├── sources.md               ← channel/source/medium breakdown
    ├── landing-pages.md         ← top entry points
    └── conversions.md           ← event tracking + measurement gaps
```

#### Data Reconciliation: Ahrefs vs GSC vs GA4

The three measurement systems each told a different story. The reconciled picture:

| Question | Ahrefs Said | GSC Said | GA4 Said | Reconciled Answer |
|---|---|---|---|---|
| Monthly organic traffic? | 1 visit | ~51 clicks | 204 sessions / 89d (≈ 68/mo) | **GSC is authoritative: ~51 clicks/month from real Google search, US-filtered ≈ 33/month** |
| Site recently collapsed? | Yes (99% drop) | No (impressions growing in last 28d) | No data spike on April rebuild day | **The Ahrefs "collapse" reflects mid-2025; the April 2026 rebuild stabilized crawl health. The remaining issue is competitive ranking and URL hygiene, not crawl failure.** |
| Most popular pages? | /about-us, /rancho-santa-fe | Homepage (66 clicks), GMB-tagged homepage (42 clicks), /about-us (5) | Homepage (952 sessions), /services (54) | **Homepage = ~75% of clicks and ~44% of sessions** |
| What drives conversions? | (no data) | Branded queries | Google organic + GMB | **Branded search + GMB. Non-branded organic is broken.** |
| How big is the toxic-backlink problem? | Big | (no manual actions observed via API) | (n/a) | **Real but not actively penalizing — the site indexes and ranks; cleanup is hygiene, not emergency** |

#### Key Findings

The first-party data materially changes the diagnosis vs. what third-party tools alone would suggest:

1. **Authoritative organic traffic is ~51 clicks/month from real Google search (GSC)** — not "1 visitor/month" as Ahrefs suggests. GSC is the authoritative source; Ahrefs estimates undercount by roughly an order of magnitude.
2. **Bot traffic dominates raw GA4** — 70%+ of GA4 raw sessions are bot/internal traffic (Singapore, China, Philippines, Pakistan, Serbia). Real human session count is ~5K of the 12K reported. Bot filtering is **not** applied at the GA4 source. All raw GA4 numbers in this report must be interpreted with this in mind.
3. **Measurement gaps — conversions are not being tracked.** The `generate_lead` event has been configured in GA4 since March 2025 but **has never fired**. Form submissions are not tracked. Reported events (17 in 90 days) are a floor — true conversion count is unknown.
4. **GMB is a distinct traffic stream** — 123 sessions in 89 days come from `?utm_source=gmb`, separate from organic search.
5. **AI engine referrals are real** — ChatGPT, Claude, and Copilot are sending small but real traffic. Early-mover signal for AI-search visibility.
6. **The April 2026 rebuild stabilized the site** — crawl health is fine. The bigger ongoing issue is competitive ranking and URL hygiene (legacy URLs not redirected, sitemap clutter), not crawl failure.
7. **Legacy URL duplicates remain** — `/about` vs `/about-us`, `/san-diego-ca` vs `/service-areas/...`, etc.
8. **Sitemap clutter** — 5 sitemaps registered, most stale.
9. **"Ranks but doesn't get clicks" queries are high-leverage** — e.g. `bathroom remodel san diego` (187 impressions, position 50).

#### Quality Notes / Caveats

- **Bot filtering is not applied at the GA4 source** — all raw GA4 numbers must be interpreted with this in mind.
- **Form-submit tracking is broken** — true conversion count is unknown; reported events (17 in 90 days) are a floor only.
- **Ahrefs traffic estimates undercount** by roughly an order of magnitude vs GSC actuals — Ahrefs numbers should be treated as directional only.
- **The 90-day window misses long-tail signal** — pulling 16-month GSC history (Jan 2025 → May 2026) would map the full collapse-and-recover arc.


---



<a id="business-profile"></a>

## Business Profile

_source: `research/business-profile.md`_

##### Business Profile — Client Company

**Compiled:** 2026-05-21
**Sources:** Site content, BBB, Houzz, Yelp, Angi, GuildQuality, HomeAdvisor, ZoomInfo, LinkedIn

---

#### Company Identity

| Field | Value |
|---|---|
| Legal Name | Client Company |
| Trade Name | Client Company |
| Founder / President | **Client Principal** |
| Founded | 1999 (claimed 26+ years) / Incorporated 2008-04-28 |
| Type | California Corporation |
| Address | [redacted street address], San Diego, CA |
| Phone | [redacted phone] |
| Email | client-contact@example.invalid |
| CSLB License | #[redacted] |
| Website | https://client-example.invalid |
| Website Developer | Prior Vendor (per footer) |

---

#### Positioning

**"San Diego's Premier Residential Remodeling Firm"** — luxury / high-end residential design-build, targeting affluent homeowners in coastal and inland San Diego County.

##### Value proposition (per site)
- 26+ years experience
- Full-service design-build (architecture + interior design + permitting + construction under one roof)
- Dedicated project manager per client
- Founder-led
- "Thoughtful, high-quality spaces that reflect your style"
- 8–20 week typical project timeline

##### Typical project economics
Per Houzz profile: **$80,000 – $1,000,000** project size. This places Client Company firmly in **luxury / high-end residential** territory — well above contractor-grade work, on par with custom-home / boutique design-build firms.

---

#### Services Offered

##### Core
- Whole-Home Renovations
- Kitchen Remodeling
- Bathroom Remodeling
- Home Additions
- Custom Cabinetry

##### Per Houzz (more comprehensive list)
- Accessory Dwelling Units (ADUs)
- Deck Building & Design
- Garage Building
- Green Building
- Guesthouse Design & Construction
- Home Extensions
- Home Restoration
- Kitchen Design (separate from build)
- Outdoor Kitchens (construction + design)
- Pool House Design & Construction
- Porch Design & Construction
- Project Management
- General Contracting
- Custom Cabinets (incl. custom kitchen cabinets)

##### Specialty (from site service pages)
- Smart home integration
- Home automation
- Solar integration
- Wine cellars
- Sunrooms (multiple sub-services: builders, installation, materials)
- Home security systems
- Outdoor living spaces

---

#### Service Areas (22 location pages)

**Coastal/North County (premium markets)**
- La Jolla, Del Mar, Carmel Valley, Torrey Pines, Carlsbad, Encinitas, Cardiff, Solana Beach, Oceanside, Fairbanks Ranch

**Inland affluent**
- Rancho Santa Fe, Rancho Bernardo, Rancho Peñasquitos, Scripps Ranch, Tierrasanta, Poway

**Other**
- Mission Valley, Point Loma (per Houzz), and several others

---

#### Reputation & Reviews

##### Yelp
- **5.0 ★** rating
- 10 reviews
- 396 photos uploaded
- Yelp URL: [redacted Yelp profile URL]

##### Houzz
- **5.0 / 5** overall
- 69 followers
- **1,000+ Ideabook saves** (significant — indicates strong portfolio appeal)
- Multiple project showcases (Tierrasanta whole-house, Scripps Ranch master bath, Scripps Ranch home transformation, others)
- **Best of Houzz Awards:** 2016, 2017, 2019, 2020, 2021, 2022 (×2), 2023 (×2), 2024, **2026** = 11 award years
- "Recommended on Houzz" status

##### BBB
- **A+ rating**
- Accredited since 2008-03-06
- Profile URL: [redacted BBB profile URL]

##### Other Platforms
- **HomeAdvisor:** active profile with reviews
- **Angi (formerly Angie's List):** active profile, positive reviews
- **GuildQuality:** verified profile (industry trust signal)
- **BuildZoom:** active contractor profile
- **ProvenExpert:** active reviews aggregator
- **LinkedIn:** company page

##### Review Themes (from search-scraped feedback)
- Client Principal's personal responsiveness ("always returned phone calls/texts")
- On-time daily presence of crews
- Projects completed within timeline and budget
- "Surpassed expectations"
- "Professional, responsive, and went above and beyond"
- Design quality ("Client Principal's design ideas were excellent")

##### Editorial Coverage / Backlinks From
- San Diego Union-Tribune (DR 86)
- This Old House (DR 86)
- (Plus various trade and remodeling industry publications via existing backlinks)

---

#### Credentials & Certifications

- **EPA Renovator Certified** (lead-safe certified)
- **BBB A+ Accredited** (since 2008)
- **CSLB License #[redacted]** (active California contractor)
- **11× Best of Houzz** winner
- **GuildQuality verified**

---

#### Social Media Presence

| Platform | URL |
|---|---|
| Facebook | facebook.com/[redacted] |
| Instagram | instagram.com/[redacted] |
| YouTube | youtube.com/@[redacted] |
| Pinterest | pinterest.com/[redacted] |

Pinterest in particular is **under-leveraged for a luxury remodeling firm** — that platform drives more remodeling-discovery traffic than any other social channel. Houzz (essentially Pinterest for home design) is already a strong channel for Client Company.

---

#### What This Tells Us

Client Company is a **legitimate, credentialed, well-reviewed luxury design-build firm** with 26 years of operation, A+ BBB, 5-star reviews, and a decade of consecutive Best of Houzz awards. The brand is not the problem.

The disconnect between this strong real-world reputation and the **near-zero non-branded organic search visibility** is where the opportunity sits. The site isn't invisible because the firm is unworthy — it is invisible because of **fixable technical and link-equity problems** layered on top of a **migration where legacy URLs were not redirected**.

For a firm doing $80K–$1M projects, the math of even a single additional qualified organic lead per month is material at this price point.


---



<a id="competitor-landscape"></a>

## Competitor Landscape

_source: `competitors/landscape.md`_

##### Competitive Landscape — Client Company

**Data source:** Ahrefs Site Explorer + manual research, 2026-05-21
**Market:** San Diego luxury residential design-build

---

#### Real Competitor Set

Note: Ahrefs' algorithmic competitor list for client-example.invalid returns mostly directories (BBB, MapQuest, Yelp, LinkedIn) because the site currently ranks for so few keywords that real competitive overlap can't be measured. The list below is based on manual market research of San Diego luxury design-build firms.

| Competitor | DR | Org Keywords | Top-3 KWs | Monthly Org Traffic | Traffic Value |
|---|---|---|---|---|---|
| **Jackson Design & Remodeling** | 45 | 259 | — | 2,281 | $15,149/mo |
| **123 Remodeling** | 32 | 354 | 125 | 2,171 | $5,669/mo |
| Kaminskiy Design & Remodeling | 37 | 94 | 55 | 198 | $218/mo |
| **Client Company** | **14** | **2** | **0** | **1** | **$4/mo** |
| Eco Home Builders | (not pulled) | — | — | — | — |
| Smith Brothers | (not pulled, since 1978) | — | — | — | — |
| CairnsCraft Design & Remodel | (not pulled, since 1990) | — | — | — | — |
| K-CO Construction | (not pulled, since 1995) | — | — | — | — |
| Lumina Builders | (not pulled) | — | — | — | — |

##### Key benchmark: 123 Remodeling
- DR 32, 354 keywords, **125 in top 3**, 2,171 monthly organic visitors
- This is the *traffic ceiling* in this category — proves the market opportunity exists

##### Key benchmark: Jackson Design & Remodeling
- DR 45, 259 keywords, 2,281 monthly organic visitors
- $15K/month estimated traffic value
- Founded 1989 (similar tenure to Client Company)
- This is the *brand ceiling* — Client Company's reputational assets are comparable

##### Key benchmark: Kaminskiy
- DR 37, 94 keywords, 55 in top 3, 198 monthly organic visitors
- Smaller traffic but **higher quality** (most keywords ranked top-3)
- A realistic 6-month target profile

---

#### The Gap Math

| Metric | Client Company Now | Kaminskiy | Jackson D&R | 123 Remodeling |
|---|---|---|---|---|
| Domain Rating | 14 | 37 (+23) | 45 (+31) | 32 (+18) |
| Organic Keywords | 2 | 94 (47×) | 259 (130×) | 354 (177×) |
| Top-3 Keywords | 0 | 55 | — | 125 |
| Monthly Traffic | 1 | 198 (198×) | 2,281 (2,281×) | 2,171 (2,171×) |
| Traffic Value (est.) | $4 | $218 | $15,149 | $5,669 |

The gap is large. In non-branded organic search, Client Company is not currently competitive with the firms ranked above it in this market.

---

#### Competitor Strengths (What They're Doing Right)

##### Jackson Design & Remodeling
- Strong brand recognition built over decades
- Heavy investment in showroom + design center
- Robust portfolio + blog content
- Quality backlink profile (DR 45 indicates real editorial coverage)

##### 123 Remodeling
- Highest keyword count of the set — clearly invested in programmatic/long-tail SEO
- 125 top-3 rankings = ruthlessly executed local + service-area targeting
- Lower DR but more keywords = working harder on on-page than off-page

##### Kaminskiy
- High top-3 ratio (55 of 94 = 58%) — high quality over quantity
- Focused content strategy
- Strong design-build positioning

---

#### Where Client Company Beats Them (or Can)

##### 1. Brand & Awards
Client Company has **11× Best of Houzz** vs none of the others showing as prominently. This is a major differentiator that's *not currently being marketed on the site* or used in title tags / schema / structured data.

##### 2. Project Tier
$80K–$1M typical job size is **higher-end** than most directory listings of competitors. The natural positioning is against the *top* tier (Jackson, custom-home builders) — not the middle tier (Kaminskiy, 123 Remodeling).

##### 3. Service Breadth
22 location pages + 28 service pages is broader than most competitors. This is **dormant inventory** ready to rank with the right authority + on-page work.

##### 4. Specialty Services
ADUs, wine cellars, smart homes, solar integration — many competitors don't have dedicated pages for these. Lower-competition, higher-margin niches.

##### 5. Coastal-Specific Expertise
The "coastal living finishes" content angle is genuinely valuable for La Jolla / Del Mar / Encinitas / Carlsbad markets and competitors aren't owning it.

---

#### Competitive SEO Strategy Notes

##### Don't compete head-on for "kitchen remodel san diego" yet
- KD 35, dominated by directories + the entrenched DR 45 firm
- Wait for DR recovery to 25+ before going after that head term
- Focus instead on `kitchen remodel [neighborhood]` (×22 neighborhoods)

##### Own the specialty niches first
- "ADU builder [neighborhood]"
- "wine cellar contractor san diego"
- "smart home renovation san diego"
- These have lower KD and are commercial-intent

##### Win on Houzz traffic (already winning, just convert it)
- 1,000+ Ideabook saves = active Houzz pipeline
- Optimize Houzz profile → website conversion
- Embed Houzz reviews + badges on key pages

##### Win on local pack / GBP
- The `is_local: true` flag on Rancho Santa Fe keyword confirms the 3-pack is competitive territory
- GBP optimization + review velocity could capture local-pack share before site-wide organic recovers

##### Use editorial credentials defensively
- Best of Houzz 2026, 2024, 2023, 2022, 2021, 2020, 2019, 2017, 2016 — surface these on every key landing page with schema
- "26 years in business" + CSLB license — trust signals work for $80K+ purchase decisions


---



<a id="ahrefs-full"></a>

## Ahrefs — Full Report

_source: `reports/full/01-ahrefs.md`_

##### Full Ahrefs Report — client-example.invalid

**Pulled:** 2026-05-21
**Source:** Ahrefs Site Explorer API v3 (US market, subdomains mode)

> **Important note on Ahrefs traffic estimates throughout this report:** Ahrefs traffic numbers for this domain undercount real performance by roughly an order of magnitude versus Google Search Console actuals. **Per GSC (authoritative), real organic clicks are ~51/month — 870 over the trailing 16 months**, not the "1 visitor/month" Ahrefs reports. Treat Ahrefs traffic figures as **directional only**. Ahrefs data on **Domain Rating, referring domains, backlinks, and anchor profile is reliable** and is the primary source for those sections.

---

#### 1. Domain Authority — Current State

| Metric | Value |
|---|---|
| Domain Rating | **14** (recovered from 4.5 in January 2026) |
| Ahrefs Rank | 12,393,472 |
| Live backlinks | 1,808 |
| All-time backlinks | 36,818 |
| Live referring domains | 267 (+108 added in May 2026 alone) |
| All-time referring domains | 1,273 |

---

#### 2. Domain Rating — 29-Month History

The DR history reveals an **algorithmic shock in late 2025**:

| Date | DR | Event |
|---|---|---|
| Jan 2024 | 13.0 | Baseline |
| Feb–Aug 2024 | 13–14 | Stable |
| Sep 2024 | 13.0 | Stable |
| Oct 2024–Aug 2025 | 13–14 | Stable for nearly 11 months |
| **Sep 2025** | **10.0** | 🔴 Dropped 30% |
| **Oct 2025** | **6.0** | 🔴 Halved |
| **Nov 2025** | **4.9** | 🔴 Lowest point |
| **Dec 2025** | **4.6** | 🔴 Bottom |
| **Jan 2026** | **4.5** | 🔴 Floor |
| Feb 2026 | 10.0 | 🟡 Partial recovery |
| Mar 2026 | 10.0 | 🟡 Holding |
| Apr 2026 | 12.0 | 🟡 Returning |
| May 2026 | 14.0 | 🟢 Back to baseline |

**Translation:** Between September 2025 and January 2026, Google effectively stripped a significant portion of the link equity from the site — likely due to algorithmic devaluation of toxic links (the SEOExpress.org / Telegram-channel / PBN clusters). DR bottomed at **4.5 in January 2026** and has now recovered to **14 as of May 2026** — back to the pre-crash baseline.

---

#### 3. Referring Domains — 29-Month History

| Date | Ref Domains | Δ |
|---|---|---|
| Jan 2024 | 178 | — |
| Mar 2024 | 184 | +6 |
| Jun 2024 | 190 | +6 |
| Sep 2024 | 201 | +11 |
| Dec 2024 | 187 | −14 |
| Mar 2025 | 202 | +15 |
| Jun 2025 | 200 | −2 |
| Sep 2025 | 203 | +3 |
| Dec 2025 | 217 | +14 |
| Jan 2026 | 214 | −3 |
| Feb 2026 | 202 | −12 |
| **Mar 2026** | **172** | **−30** (Google purged) |
| Apr 2026 | 180 | +8 |
| **May 2026** | **288** | **+108** (massive spam injection) |

**The May 2026 spike from 180 → 288 referring domains in 30 days is statistically extraordinary** and indicates either:
- An active negative SEO attack
- A new round of paid-vendor link buying that hasn't been algorithmically devalued yet
- Aggregator/scraper sites copying content with backlinks

Cross-referenced with the spam-flagged domains in the backlink data: `notion.site` (May 6), `web.app` (May 1), `factmags.com` (May 12), `rankyour.website` (May 8), `rank-top.click` (May 8) — all newly seen in May 2026 and flagged as spam. **This is an active spam injection event.**

---

#### 4. Organic Traffic — 29-Month History (US)

| Period | Traffic | Notes |
|---|---|---|
| Jan 2024 | 154 | Pre-peak |
| Feb 2024 | 145 | |
| Mar 2024 | 104 | |
| Apr 2024 | 65 | |
| May 2024 | 74 | |
| Jun 2024 | 52 | |
| Jul 2024 | 112 | |
| Aug 2024 | 98 | |
| Sep 2024 | 138 | + 129 paid (ad campaign) |
| Oct 2024 | 77 | + 234 paid (ad surge) |
| Nov 2024 | 16 | + 22 paid (campaign collapsed) |
| Dec 2024 | 3 | Floor |
| Jan 2025 | 9 | |
| Feb 2025 | 6 | |
| Mar 2025 | 5 | |
| Apr 2025 | 12 | |
| May 2025 | 8 | |
| Jun 2025 | 6 | |
| Jul 2025 | 3 | |
| Aug 2025 | 4 | |
| Sep 2025 | 4 | |
| Oct 2025 | 2 | |
| Nov 2025 | 2 | |
| Dec 2025 | 2 | |
| Jan 2026 | 1 | Bottom |
| Feb 2026 | 2 | |
| Mar 2026 | 2 | |
| Apr 2026 | 1 | |
| May 2026 | 1 | Current |

**The Ahrefs-estimated crash registered in November 2024** — traffic in the Ahrefs model went from 138 → 77 → 16 → 3 in three months.

**Important context:** Per GSC, real organic clicks are **~51/month currently** and **870 over the trailing 16 months** — substantially higher than the "1/month" Ahrefs shows. The *shape* of the Ahrefs curve (sharp drop in late 2024, sustained suppression since) is consistent with the algorithmic story, but the *absolute numbers* materially understate reality. GSC is authoritative for actual organic clicks; Ahrefs is authoritative for the link/DR profile.

---

#### 5. Full Referring Domains — Top 100 by DR

##### Tier 1 — High-Quality (DR 80+) — Keep These
| Domain | DR | Type | First Seen |
|---|---|---|---|
| blogspot.com | 95 | 🟡 386 dofollow (auto-blog spam pattern, but legit domain) | 2018-01 |
| amazonaws.com | 95 | ✅ AWS-hosted content | 2020-06 |
| yahoo.com | 94 | ✅ News mention | 2016-10 |
| bbb.org | 93 | ✅ BBB accreditation | 2015-01 |
| notion.site | 92 | 🔴 Spam (new May 2026) | 2026-05-06 |
| us.com | 92 | 🟡 Aggregator | 2020-02 |
| web.app | 91 | 🔴 Spam (new May 2026) | 2026-05-01 |
| provenexpert.com | 91 | ✅ Reviews aggregator | 2022-05 |
| homeadvisor.com | 91 | ✅ Directory | 2016-04 |
| luma.com | 91 | 🔴 Spam injection (new Apr 2026) | 2026-04-02 |
| appspot.com | 90 | 🟡 Google App Engine content | 2017-07 |
| angi.com | 90 | ✅ Directory | 2022-08 |
| za.com | 90 | 🔴 **Flagged spam** | 2024-07 |
| yellowpages.com | 89 | ✅ Citation | 2014-07 |
| thisoldhouse.com | 86 | ✅ **Editorial** | 2024-01 |
| coocan.jp | 86 | 🟡 Japanese aggregator | 2015-10 |
| sandiegouniontribune.com | 86 | ✅ **Editorial** | 2023-06 |
| superpages.com | 84 | ✅ Citation | 2021-01 |
| chamberofcommerce.com | 84 | ✅ Trust signal | 2019-06 |
| site123.me | 83 | 🟡 Free-host pattern | 2023-06 |
| vocal.media | 82 | 🟡 User content platform | 2023-05 |
| topratedlocal.com | 82 | 🟡 Over-optimized | 2019-01 |
| aha.io | 81 | 🟡 Aggregator | 2022-09 |
| elephantjournal.com | 79 | 🟡 User-submitted | 2015-01 |
| dexknows.com | 78 | ✅ Citation | 2019-06 |
| achrnews.com | 78 | ✅ Trade publication | 2025-01 |
| **buybacklinks.agency** | **77** | 🔴 **Confirmed paid-link vendor** | 2026-04-05 |
| 2findlocal.com | 76 | ✅ Local directory | 2019-10 |
| the-dots.com | 76 | 🟡 Profile site | 2023-11 |
| guildquality.com | 75 | ✅ Industry trust | 2017-09 |

##### Tier 2 — Mid-Quality (DR 60–80) — Mixed
30+ additional domains in this range, of which ~10 are flagged spam:
- **viesearch.com** — DR 73, 490 dofollow links, **flagged spam**
- **linkcentre.com** — DR 73, 11 links, **flagged spam**
- **rankyour.website** — DR 73, new May 2026, **flagged spam**
- **seoexpress.org** — DR 73 (the testimonial-spam vendor itself)
- **rank-top.click** — DR 72, **flagged spam**
- **best-seo-domains.com** — DR 60, **flagged spam**
- **socialsocial.social** — DR 64, **flagged spam**
- **factmags.com** — DR 73, new May 2026, **flagged spam**
- **backlinker.shop** — DR 65, **flagged spam**
- **ispionage.com** — DR 67, **flagged spam**
- **weboworld.com** — DR 59, **flagged spam**

##### Tier 3 — Citation / Directory Cluster
Real local SEO citations include: gte.net (27 links), neustarlocaleze.biz (5,650 links — massive), cityof.com (768 links), stoneworld.com (24 links), etc. These are normal local SEO infrastructure.

---

#### 6. Toxic Link Footprint — Full Disavow Recommendation

Based on a strict reading of the data, the disavow target list should include:

| Category | Domain Count | Approx Links |
|---|---|---|
| Confirmed spam (flagged `is_spam: true`) | 22 domains | ~600 links |
| SEOExpress.org testimonial cluster | 57 domains | 57 links |
| Telegram-channel injection pattern | 8 domains | 8 links |
| Newly-seen recent spam (Apr–May 2026 cluster) | ~15 domains | ~20 links |
| Generic/empty-anchor PBN footprint | 73 domains | 464 links |
| Single-character `.` anchor PBN | 67 domains | 288 links |
| Over-optimized exact-match commercial anchors (low-DR sources) | ~30 domains | ~100 links |

**Total disavow candidates: ~150 domains** (with overlap across categories — roughly 55% of the current 267-domain referring set).

After disavow + 90-day reconsideration, expected DR recovery: 14 → 22–30 organically as Google reweights the remaining legitimate links.

---

#### 7. Anchor Text Distribution (Top 25)

| Anchor | Ref Domains | Pattern |
|---|---|---|
| https://client-example.invalid | 197 | ✅ Natural URL |
| client-example.invalid | 182 | ✅ Natural URL |
| (empty anchor) | 73 | 🔴 PBN footprint |
| . | 67 | 🔴 PBN footprint |
| "There was a time when client-example.invalid…SEOExpress.org…" | 57 | 🔴 Paid vendor testimonial |
| https://client-example.invalid/ | 43 | ✅ Natural URL |
| Client Company | 39 | ✅ Branded |
| Website | 26 | ✅ Natural |
| Visit Website | 23 | ✅ Natural |
| custom home additions San Diego | 21 | 🔴 Exact-match |
| remodeling contractors San Diego | 18 | 🔴 Exact-match |
| sunrooms San Diego | 15 | 🔴 Exact-match |
| remodeling contractor San Diego | 12 | 🔴 Exact-match |
| interior painting in San Diego | 11 | 🔴 Exact-match (off-service) |
| kitchen and bath experts San Diego | 9 | 🔴 Exact-match |
| home remodeling in San Diego | 9 | 🔴 Exact-match |
| remodeling contractor in San Diego | 8 | 🔴 Exact-match |
| room additions San Diego | 8 | 🔴 Exact-match |
| OUR TELEGRAM CHANEL ... | 8 | 🔴 Spam injection |
| General Contractor San Diego Ca Client Company | 7 | ✅ Branded |

##### Anchor profile health
- Natural URL/branded: **57%** — healthy
- Generic/empty/PBN: **25%** — toxic (140 domains, 752 links combined: 73 empty-anchor + 67 single-character `.`)
- Exact-match commercial: **15%** — toxic (industry safe range: <5%)
- SEOExpress testimonial cluster: **57 domains** carrying identical paid-vendor anchor text
- Spam injection: **3%** — toxic (8-domain Telegram cluster + assorted)

---

#### 8. Paid Search History

Ahrefs detected paid spend across a window roughly Sep–Nov 2024:

| Month | Paid Traffic | Est. Paid Spend |
|---|---|---|
| Sep 2024 | 129 | $425/mo |
| Oct 2024 | 234 | $653/mo |
| Nov 2024 | 22 | $4.82/mo (campaign paused) |

And brief small spend in 2025: ~$1/mo for several months suggesting test campaigns.

Cross-referenced with GA4 paid search channel: **the real paid campaigns ran much longer** (Mar 2025: 166 sessions, Jul–Oct 2025: 60–216 sessions/mo, Nov 2025: 58 sessions). Ahrefs missed most of the campaigns. **GA4 is the authoritative source for paid data.**

---

#### 9. Pages by Backlinks (Top 30)

The site has **zero pages** in any "high-traffic" Ahrefs bucket beyond pos-1. Only 1 page (the homepage) earns >0 traffic in their bucket model. This reflects the catastrophic ranking position the site is in.

Page-by-traffic distribution:
- **0-100 traffic:** 1 page
- **100-1k traffic:** 0 pages
- **1k-5k traffic:** 0 pages
- **5k+ traffic:** 0 pages

A healthy site at Client Company's brand level should have 10–20 pages in the 100-1k bucket.

---

#### 10. Competitive Benchmark (US, May 2026 — per Ahrefs)

| Domain | DR | Org KWs | Top-3 KWs | Ahrefs Org Traffic |
|---|---|---|---|---|
| Jackson Design & Remodeling | 45 | 259 | — | 2,281/mo |
| 123 Remodeling | 32 | 354 | 125 | 2,171/mo |
| Kaminskiy Design & Remodeling | 37 | 94 | 55 | 198/mo |
| **client-example.invalid** | **14** | **2** | **0** | **1/mo** (Ahrefs — see GSC caveat) |

> Per GSC, real organic clicks are ~51/month (870 over the trailing 16 months) — not 1/month. The DR and keyword-count gaps versus competitors are real and directionally accurate; the absolute traffic gap is narrower than Ahrefs implies but still substantial.

---

#### 11. Summary

**Where client-example.invalid stands per Ahrefs data:**
- Substantial DR deficit vs all three competitors (DR 14 vs DR 32–45)
- Substantial keyword-count and ranking deficit (2 keywords vs 94–354)
- An algorithmic shock that erased link equity from Sep 2025–Jan 2026 (DR dropped from 14 to 4.5, now recovered to 14)
- A currently active spam injection event (May 2026: +108 referring domains in 30 days, many flagged spam)
- A backlink profile where ~150 domains (roughly 55% of the live referring set) are disavow candidates
- An anchor text profile that's ~18% toxic by share (industry safe: <5%)

The site is recoverable. Comparable luxury-remodeling firms in San Diego achieve DR 30–45 with consistent editorial work and clean link profiles. The site already has the editorial footprint (SDUT, This Old House, BBB, Houzz) that should carry it once toxic links are disavowed and on-page recovery work is completed.


---



<a id="backlink-toxicity"></a>

## Backlink Toxicity

_source: `audit/backlinks-toxicity.md`_

##### Backlink Profile & Toxicity Audit — Client Company

**Data source:** Ahrefs Site Explorer, pulled 2026-05-21

---

#### Headline Numbers

| Metric | Value |
|---|---|
| Live backlinks | **1,808** |
| All-time backlinks | 36,818 |
| Live referring domains | **267** (+108 added in May 2026 alone — active spam injection event) |
| All-time referring domains | 1,273 |
| Domain Rating | **14** (recovered from 4.5 in January 2026) |

A profile of 267 referring domains should support a DR much higher than 14. DR sitting at 14 indicates Google is **discounting most of these links** — a classic toxic-profile signature. The recent +108-domain jump in May 2026 is consistent with an active negative-SEO / spam injection event rather than legitimate link growth.

---

#### Critical Finding 1: Paid-Link Vendor Spam Cohort

**57 referring domains** all carry an identical or near-identical anchor text:

> *"There was a time when client-example.invalid struggled with low visibility and fewer than 100 visitors a month. Once I tried SEOExpress.org's backlink building service, everything changed within weeks! My organic traffic increased by an astounding +300% and I've secured five first-page rankings since then. Honestly, it's nice feeling seen on Google again—give SEOExpress.org a try if you're ready for ..."*

This is a **paid-link vendor testimonial-spam network**. SEOExpress.org placed Client Company-branded testimonials across 57 sites as part of their own promo, using the client-example.invalid URL as social proof. Whether or not this site authorized the placement, the pattern is **flagged by Google's link-spam systems** because:
- Identical anchor text across 57 unrelated domains
- The anchor text itself is promotional copy unrelated to actual services
- The source domains (top DR 35) are network-style properties

**Action required:** These 57 domains should be **disavowed**. Authorization is not the operative question — Google is discounting the profile either way.

---

#### Critical Finding 2: Telegram Spam Channel Cohort

**8 referring domains** carry the anchor:

> *"OUR TELEGRAM CHANEL https://t.me/s/quarterlinks25"*

(`CHANEL` misspelled — characteristic of low-effort link networks.)

This is a **link-injection / hacked-content footprint**. Domains pushing crypto/Telegram spam links alongside legitimate sites' URLs. Confirmed toxic; **disavow immediately**.

---

#### Critical Finding 3: Confirmed Paid-Link Vendor Domains

Direct hits in the referring domain set:

| Domain | DR | First Seen | Status |
|---|---|---|---|
| `buybacklinks.agency` | 78 | 2026-04-05 | 🚨 Confirmed paid-link vendor |
| `za.com` | 90 | 2024-07-05 | 🚨 Flagged spam by Ahrefs |
| `topratedlocal.com` | 82 | 2019-01-10 | 🟡 26 dofollow links — over-optimized |

---

#### Critical Finding 4: Over-Optimized Exact-Match Anchors

| Anchor Text | Referring Domains | Pattern |
|---|---|---|
| `custom home additions San Diego` | 21 | 🚨 Exact-match commercial |
| `remodeling contractors San Diego` | 18 | 🚨 Exact-match commercial |
| `sunrooms San Diego` | 15 | 🚨 Exact-match commercial |
| `remodeling contractor San Diego` | 12 | 🚨 Exact-match commercial |
| `interior painting in San Diego` | 11 | 🚨 Exact-match commercial |
| `kitchen and bath experts San Diego` | 9 | 🚨 Exact-match commercial |
| `home remodeling in San Diego` | 9 | 🚨 Exact-match commercial |
| `remodeling contractor in San Diego` | 8 | 🚨 Exact-match commercial |
| `room additions San Diego` | 8 | 🚨 Exact-match commercial |

A natural backlink profile has **~5–10% exact-match commercial anchors at most**. This profile shows **9+ exact-match clusters totaling 100+ links** — a textbook Penguin/SpamBrain trigger.

Notably, the "interior painting" anchor (11 domains) targets a service the site does not prominently offer, suggesting an undifferentiated, vendor-driven link campaign that did not match real service offerings.

---

#### Critical Finding 5: Generic/Empty Anchor Footprint

- **73 domains** link with empty anchor (`""`) — 464 links total
- **67 domains** link with anchor `.` — 288 links total

This is a **classic PBN footprint** — automated link placements where the anchor was either a single character or omitted. **140 domains in the profile carry this footprint, accounting for 752 links.**

---

#### The Legitimate Portion

Not everything is bad. Quality referring domains:

| Domain | DR | Why It Matters |
|---|---|---|
| `bbb.org` | 93 | Real accreditation profile |
| `homeadvisor.com` | 91 | Lead-gen directory |
| `angi.com` | 90 | Lead-gen directory |
| `yellowpages.com` | 89 | Legacy citation |
| `thisoldhouse.com` | 86 | **Editorial mention — gold** |
| `sandiegouniontribune.com` | 86 | **Editorial — local gold** |
| `chamberofcommerce.com` | 84 | Local trust signal |
| `guildquality.com` | 75 | Industry trust signal |
| `provenexpert.com` | 91 | Reviews aggregator |
| `houzz.com` (implied via Best of Houzz) | 92 | Industry authority |

These 10 alone, plus the ProvenExpert / Houzz / yellow page citations, would justify a DR of 25–30 on their own. The toxic load is what dragged the profile to its January 2026 low of 4.5; it has since recovered to 14, but the toxic anchors and PBN footprint remain in place and continue to suppress rankings.

---

#### Disavow Strategy

**Recommended action:** Build and submit a Google Disavow file targeting roughly **150 domains** in the following cohorts:

1. **57 domains — SEOExpress.org testimonial cohort** (filter Ahrefs by that anchor text)
2. **8 domains — Telegram-channel cohort**
3. **22 domains — confirmed spam** (`is_spam: true`, includes `buybacklinks.agency`, `za.com`, etc.)
4. **73 domains — empty-anchor PBN footprint** (case-by-case review; majority disavow)
5. **67 domains — single-character `.` anchor PBN footprint**
6. Any exact-match commercial anchor sources with DR < 25 and no editorial/local justification

Estimated total disavow list: **~150 domains** (with overlap, ~55% of current referring domain count).

**Expected outcome:** Post-disavow, DR should rise organically as Google re-weights the remaining legitimate links. Combined with on-page recovery and new editorial links, **DR in the 25–30 range within 6 months is realistic** given the existing editorial footprint (SDUT, This Old House, BBB, Houzz).

---

#### Anchor Profile (Top 25)

| Anchor | Ref Domains | Dofollow Links | Top DR | Note |
|---|---|---|---|---|
| `https://client-example.invalid` | 197 | 379 | 73 | ✅ Natural URL anchor |
| `client-example.invalid` | 182 | 3,310 | 94 | ✅ Natural URL anchor |
| *(empty)* | 73 | 464 | 95 | 🚨 PBN footprint |
| `.` | 67 | 288 | 16 | 🚨 PBN footprint |
| *SEOExpress.org testimonial* | 57 | 0 | 35 | 🚨 Paid vendor spam |
| `https://client-example.invalid/` | 43 | 1,435 | 73 | ✅ Natural |
| `Client Company` | 39 | 579 | 81 | ✅ Branded |
| `Website` | 26 | 869 | 93 | ✅ Generic-natural |
| `Visit Website` | 23 | 44 | 95 | ✅ Generic-natural |
| `custom home additions San Diego` | 21 | 810 | 58 | 🚨 Exact-match |
| `remodeling contractors San Diego` | 18 | 596 | 78 | 🚨 Exact-match |
| `http://www.client-example.invalid` | 15 | 22 | 93 | ✅ Natural |
| `http://client-example.invalid` | 15 | 28 | 90 | ✅ Natural |
| `sunrooms San Diego` | 15 | 632 | 7 | 🚨 Exact-match + low DR |
| `remodeling contractor San Diego` | 12 | 1,078 | 24 | 🚨 Exact-match |
| `www.client-example.invalid` | 11 | 89 | 90 | ✅ Natural |
| `interior painting in San Diego` | 11 | 273 | 69 | 🚨 Exact-match (off-service) |
| `http://www.client-example.invalid/` | 10 | 18 | 73 | ✅ Natural |
| `kitchen and bath experts San Diego` | 9 | 1,246 | 29 | 🚨 Exact-match |
| `home remodeling in San Diego` | 9 | 122 | 95 | 🚨 Exact-match (high DR source) |
| `remodeling contractor in San Diego` | 8 | 64 | 95 | 🚨 Exact-match |
| `room additions San Diego` | 8 | 50 | 28 | 🚨 Exact-match |
| `OUR TELEGRAM CHANEL ...` | 8 | 0 | 20 | 🚨 Spam injection |
| `General Contractor San Diego Ca Client Company` | 7 | 15 | 91 | ✅ Branded-commercial |

##### Anchor profile health summary
- **Natural URL/branded:** ~55% — healthy
- **Generic/empty/PBN:** ~25% — toxic
- **Exact-match commercial:** ~15% — toxic (should be <5%)
- **Spam injection:** ~3% — toxic
- **Branded text:** ~7% — healthy but underweight


---



<a id="keywords-rankings"></a>

## Keywords & Rankings

_source: `audit/keywords-rankings.md`_

##### Keyword Rankings & Recovery Targets — Client Company

**Data source:** Ahrefs Site Explorer (US), pulled 2026-05-21

---

#### Current Ranking State

Per Ahrefs, the site currently ranks for **only 2 organic keywords in the US**:

| Keyword | Volume | Position | KD | Best URL | Notes |
|---|---|---|---|---|---|
| `Client Company` | 10 | 6 | 7 | /about-us/ | Branded only |
| `home remodel rancho santa fe` | 200 | 34 | 0 | /rancho-santa-fe/ | Page 4, easy to win |

- **0 keywords in positions 1–3**
- **0 keywords in positions 4–10**
- **1 keyword in positions 11–30** (the branded one)
- **1 keyword in positions 31–50** (Rancho Santa Fe)

> **Caveat:** Ahrefs traffic/keyword visibility for this domain materially undercounts reality. Google Search Console (authoritative) shows **~51 organic clicks/month** and **870 clicks over the trailing 16 months** — meaning real ranking impressions exist across more queries than Ahrefs surfaces. The two keywords above are Ahrefs-detected only; GSC will show a longer tail.

Even accounting for that, for a site with 50 commercial-intent pages (28 service + 22 location), measurable ranking visibility is **far below where it should be**. A healthy local design-build firm baseline: 150–400 ranking keywords with meaningful top-10 presence.

---

#### Recovery Target Set — Tier 1 (Quick Wins)

These keywords have existing pages, low difficulty, and high commercial intent. Recovery should start here.

##### Service-Area Keywords (existing /location/ pages)

| Keyword | Est. Volume | KD | Page That Should Rank |
|---|---|---|---|
| home remodel rancho santa fe | 200 | 0 | /rancho-santa-fe/ (already pos 34) |
| home remodeling la jolla | ~150 | 5 | /la-jolla/ |
| kitchen remodel del mar | ~80 | 5 | /del-mar/ |
| home remodeling carlsbad | ~110 | 8 | /carlsbad/ |
| bathroom remodel encinitas | ~70 | 5 | /encinitas/ |
| home remodel poway | ~60 | 3 | /poway/ |
| home remodel scripps ranch | ~50 | 2 | /scripps-ranch/ |
| home remodeling carmel valley | ~50 | 3 | /carmel-valley/ |
| home remodeling solana beach | ~30 | 2 | /solana-beach/ |
| home remodeling cardiff | ~30 | 2 | /cardiff/ |

**22 location pages × avg ~50 vol × position 5 capture rate** = realistic 200–500 monthly organic visitors from location pages alone, once recovered.

##### Service Keywords (existing /services/ pages)

| Keyword | Est. Volume | KD | Page |
|---|---|---|---|
| kitchen remodeling san diego | 720 | 35 | /services/kitchen-remodeling/ |
| bathroom remodeling san diego | 590 | 32 | /services/bathroom-remodeling/ |
| whole home renovation san diego | 110 | 20 | /whole-home-renovations/ |
| home additions san diego | 480 | 28 | /services/home-additions/ |
| design build firm san diego | 200 | 25 | / |
| custom cabinetry san diego | 90 | 18 | /services/ |
| ADU builders san diego | 320 | 30 | (none — opportunity) |

---

#### Recovery Target Set — Tier 2 (Mid-Term)

Higher difficulty, but justified by the brand's actual project quality.

| Keyword | Volume | KD | Strategy |
|---|---|---|---|
| luxury home remodel san diego | 90 | 30 | Existing blog content |
| best remodeling contractor san diego | 170 | 40 | Trust signals + reviews schema |
| san diego design build | 140 | 35 | Homepage authority |
| custom home builder san diego | 880 | 50 | Aspirational — long-term |
| coastal home remodel | 60 | 25 | Existing blog post |
| smart home installation san diego | 110 | 28 | Existing blog post |

---

#### Keyword Gap vs. Competitors (per Ahrefs)

| Competitor | DR | Keywords | Ahrefs Org Traffic | Gap |
|---|---|---|---|---|
| Jackson Design & Remodeling | 45 | 259 | 2,281/mo | 257 keywords ahead |
| 123 Remodeling | 32 | 354 | 2,171/mo | 352 keywords ahead |
| Kaminskiy Design & Remodeling | 37 | 94 | 198/mo | 92 keywords ahead |
| **client-example.invalid** | **14** | **2** | **1/mo (Ahrefs)** | — |

> Per GSC, the site's real organic clicks are ~51/month, not the 1/month Ahrefs estimates. Competitor numbers above are from Ahrefs and likely also understate slightly, but the DR and keyword-count gaps are real and directionally accurate.

A reasonable 12-month target: **150 ranking keywords with 30+ in top-10 positions**, putting the site between Kaminskiy and Jackson tiers.

---

#### Local SEO Opportunities

Per Ahrefs, `home remodel rancho santa fe` is flagged `is_local: true` — meaning the **3-pack / Local Pack** is in play. GBP (Google Business Profile) optimization status is not visible from this audit (requires GBP-side access) but is a major lever:

- GBP-driven traffic for local-pack queries can match or exceed organic-page traffic
- The existing reviews flywheel (10 Yelp reviews + ProvenExpert + Houzz reviews) provides social proof
- Geo-tagged project photos from the 18 portfolio pages can populate GBP

**Recommendation:** A full GBP audit + optimization should run in parallel with on-page recovery.

---

#### Featured Snippet / SERP Feature Opportunities

The blog covers strong informational queries that could earn featured snippets:

- "how to pick the right finishes for coastal living" → "what finishes work best in coastal homes" snippet
- "guide to smart home systems san diego" → snippet for "what is a smart home system"
- "guide to solar integration remodels" → snippet for "can you add solar to a home remodel"
- "best sunroom materials southern california" → snippet for "what's the best material for a sunroom"

These are not currently captured because the blog content reads templated / AI-generated and lacks the citation density and original POV that snippets favor. **Editorial uplift on the existing 39 posts** (versus writing more) is the higher-ROI move.


---



<a id="seo-traffic"></a>

## SEO Traffic Analysis

_source: `audit/seo-traffic-analysis.md`_

##### SEO & Traffic Analysis — Client Company

**Data source:** Ahrefs Site Explorer (US market, subdomains mode), pulled 2026-05-21

---

#### Current Organic Snapshot

| Metric | Value |
|---|---|
| Domain Rating | **14** (recovered from 4.5 in January 2026) |
| Ahrefs Rank | 12,393,472 |
| Total Organic Keywords (US, Ahrefs) | **2** |
| Top-3 Ranked Keywords | 0 |
| Ahrefs Estimated Monthly Organic Traffic | **1 visitor** (directional only — see GSC note below) |
| **GSC actual monthly organic clicks** | **~51/month (870 over trailing 16 months)** |
| Ahrefs Estimated Organic Traffic Value | $4.03/mo |
| Paid Keywords (Google Ads, live) | 0 |
| Paid Traffic | 0 |

> **Important note on traffic numbers:** Ahrefs traffic estimates for this domain undercount real performance by roughly an order of magnitude versus Google Search Console actuals. Per GSC (authoritative), the site is receiving **~51 organic clicks/month** and has logged **870 clicks over the trailing 16 months** — not the "1 visitor/month" Ahrefs reports. Throughout this report, Ahrefs traffic estimates should be read as **directional only**. Ahrefs data on backlinks, Domain Rating, anchor profile, and referring domains remains reliable and is used as-is.

While not invisible, the site is significantly underperforming what its brand, page count, and link profile should support.

---

#### The Traffic Collapse Timeline

Monthly organic traffic (Ahrefs estimate, US market, last 41 months — see GSC caveat above; treat shape of the curve as more reliable than absolute values):

| Period | Org Traffic | Notes |
|---|---|---|
| Jan 2023 | ~137 | Pre-collapse baseline |
| 2023 trough (mid-year) | 49–106 | Some volatility |
| Late 2023 | 87–110 | Steady recovery |
| Q1 2024 | 125–154 | **Peak performance** |
| Mar–Apr 2024 | 145, 104 | Holding |
| May–Jun 2024 | 65, 74 | Soft |
| Jul 2024 | 52 | Continued softening |
| Aug–Sep 2024 | 112, 98 | Brief recovery |
| **Oct 2024** | **138** (paid: 129) | Peak — also peak ad spend |
| Nov 2024 | 77 (paid: 234) | Heavy paid push, organic dropping |
| **Dec 2024** | **16** (paid: 22) | **COLLAPSE BEGINS** |
| Jan 2025 | 3 | Sustained crash |
| Q1 2025 | 3–9 | Bottom |
| Q2–Q4 2025 | 3–12 | Floor |
| Jan–May 2026 | 1–2 | **Current floor** |

##### Diagnosis

The crash between Nov 2024 and Dec 2024 is **sharp, sustained, and never recovered** — classic signature of an **algorithmic penalty** (likely tied to Google's late-2024 link-spam updates and SpamBrain) compounded by a **site migration** in April 2026 that broke URL equity.

Two compounding causes, not one.

---

#### Current Ranking Keywords (All 2 of Them)

| Keyword | Position | Volume | KD | URL | Intent |
|---|---|---|---|---|---|
| `Client Company` | 6 | 10 | 7 | /about-us/ | Branded, low value |
| `home remodel rancho santa fe` | 34 | 200 | 0 | /rancho-santa-fe/ | Commercial, page 4 |

**Zero non-branded keywords in the top 30.** This means the existing service pages (kitchen remodeling, bathroom remodeling, whole-home) and the 22 location pages are not ranking for **any** of their target queries.

---

#### Top Pages by Traffic

| URL | Traffic | Keywords | Top Keyword | Position | Ref Domains |
|---|---|---|---|---|---|
| /about-us/ | 1 | 1 | "Client Company" | 6 | 2 |
| /rancho-santa-fe/ | 0 | 1 | "home remodel rancho santa fe" | 34 | 0 |

Only **two pages** are generating any measurable organic exposure. The remaining 86 URLs are effectively dormant in search.

---

#### What Used to Rank (Implied)

At peak (Q1 2024 — 154 monthly organic visitors per Ahrefs estimate, $540/mo estimated traffic value), the site was almost certainly ranking for:

- Local commercial: `kitchen remodel san diego`, `bathroom remodel la jolla`, `home addition contractors san diego`
- Hyper-local: variations across 22 service-area pages
- Branded long-tail: design-build queries

That asset is recoverable — the pages still exist, the brand exists, and competitors sit at DR 32–45. The barriers are the spam-link load and the migration damage, both of which are addressable.

---

#### Site-Level SEO Hygiene

Pulled from `https://client-example.invalid/robots.txt` and sitemap index:

**Robots.txt:** Standard WordPress + Yoast setup. Blocks `/wp-admin/`, allows AJAX. No critical issues.

**Sitemap index:** `https://client-example.invalid/sitemap_index.xml` ✅
- Posts sitemap (lastmod 2026-04-25) — 39 URLs
- Pages sitemap (lastmod 2026-05-04) — 49 URLs
- Categories sitemap (lastmod 2026-04-25)

**Total indexable URLs:** ~88 (consistent with manual count from sitemap)

**Last-modified pattern:** Almost every URL shows lastmod between **2026-04-17 and 2026-05-04** — confirming a full site rebuild/migration completed in late April 2026. This single fact explains a huge portion of the current invisibility — Google has not yet re-crawled, re-indexed, and re-evaluated the new URL structure, and any equity not preserved via 301 redirects is being burned.

---

#### Recovery Priorities

1. **GSC verification** to confirm crawl/index status and pull manual action / security issue data
2. **301 redirect audit** — almost certainly the highest-leverage single fix
3. **Disavow file submission** targeting the ~150 toxic domains identified (57 SEOExpress testimonial cluster, 73 empty-anchor PBN, 8 Telegram cluster, 22 confirmed-spam, plus single-character anchor footprint)
4. **On-page refresh** of the 50 commercial pages (28 services + 22 locations)
5. **Re-indexation push** via GSC URL Inspection on top 30 priority pages


---



<a id="gsc-full"></a>

## Google Search Console — Full Report

_source: `reports/full/02-gsc.md`_

##### Google Search Console — Organic Search Performance

**Property:** sc-domain:client-example.invalid
**Access level:** siteFullUser
**Window covered:** 2025-01-21 → 2026-05-19 (16 months — the maximum GSC allows)
**Pulled:** 2026-05-21

> **Note on data source:** Google Search Console is the authoritative source for organic search performance on client-example.invalid. Third-party tools like Ahrefs estimate traffic from sampled SERP crawls and undercount real performance — often by an order of magnitude. Where this report cites traffic, impression, or click figures, the numbers come directly from GSC. The 16-month window is critical: a 90-day snapshot misses the long-tail signal that only becomes visible across a full year-plus.

> **Coverage caveat:** GSC reflects only what Google has served. Searches on Bing, DuckDuckGo, and other engines are not included in this dataset.

---

#### 1. 16-Month Top-Line Performance

| Metric | 16-Month Total | Daily Avg |
|---|---|---|
| **Clicks** | **870** | ~1.8/day (~54/month) |
| **Impressions** | **41,000** | ~85/day |
| **Avg. CTR** | **2.11%** | Below the 3–4% benchmark for this category |
| **Avg. Position** | **49.6** | Page 5 |
| **Unique ranking queries** | 300+ | |
| **Unique pages with impressions** | 200+ | |

Across the past 16 months, Google has shown client-example.invalid in search results **~41,000 times** and earned **870 clicks** — averaging about 54 clicks per month, with the trailing average closer to 51. The bottleneck is position: at an average of 49.6 (page 5), the site is being surfaced but not at depths where searchers click.

Branded queries (those containing "Client Company") account for roughly **66% of all clicks** — the brand name does the heavy lifting. Non-branded discovery searches (e.g., "bathroom remodel san diego") drive only a small fraction of traffic today.

---

#### 2. 28-Day Trend — Post-Rebuild Stabilization

| Metric | Current (Apr 22 – May 19) | Previous (Mar 25 – Apr 21) | Δ |
|---|---|---|---|
| Clicks | 51 | 49 | +4% |
| Impressions | 4,086 | 3,120 | +31% |
| CTR | 1.25% | 1.57% | −20% |
| Position | 50.07 | 41.52 | −20% (worse) |

The April 2026 rebuild **expanded indexation** — Google is showing the site to more searchers (+31% impressions). Clicks held flat-to-positive (+4%). The rebuild stabilized the site rather than collapsing it; impressions are growing, not crashing.

The trade-off: more URLs are now ranking somewhere, but the average position drifted deeper (50 vs 41) because many of those new impressions come from deep-page rankings. The story is not "the site is broken" — it's "the site is competing for more queries but at ranks too deep to convert."

---

#### 3. Branded vs Non-Branded Split (16 months)

##### Branded Queries

| Query | Clicks | Imp. | CTR | Pos. |
|---|---|---|---|---|
| Client Company | 204 | 676 | 30.2% | 2.2 |
| Client Company | 30 | 296 | 10.1% | 4.2 |
| Client Company | 28 | 347 | 8.1% | 8.5 |
| Client Company design | 23 | 157 | 14.7% | 2.9 |
| Client Company home | 2 | 3 | 66.7% | 1.7 |
| Client Company construction | 1 | 11 | 9.1% | 11.5 |

**Branded total:** 288 clicks (~33% of all clicks via the named queries above; ~66% when all "Client Company"-containing variants are counted). Brand defense is in good shape.

##### Non-Branded Clicks (only 23 total in 16 months)

| Query | Clicks | Imp. | Pos. |
|---|---|---|---|
| general contractor in san diego | 2 | 2 | 81 |
| kitchen remodeling in san diego | 2 | 60 | 77 |
| remodeling contractors in san diego | 2 | 7 | 62 |
| kitchen design san diego | 1 | 618 | 71 |
| kitchen designer san diego | 1 | 323 | 86 |
| kitchen designers | 1 | 1 | 17 |
| kitchen remodel san diego | 1 | 354 | 73 |
| kitchen remodelers san diego | 1 | 247 | 64 |
| kitchen renovation san diego | 1 | 389 | 54 |
| remodeling companies in san diego | 1 | 14 | 74 |
| remodeling specialists | 1 | 11 | 4 |
| design and build near me | 1 | 1 | 1 |
| custom home gym builders | 1 | 1 | 4 |

Twenty-three non-branded clicks across 16 months works out to roughly 1.4 per month. The site is effectively invisible for the non-branded discovery searches that drive new-customer pipeline.

---

#### 4. High-Leverage Recovery Targets — Ranks But Doesn't Get Clicks

These are queries where Google is already showing the site enough impressions to matter, but the ranking is too deep to convert. Each represents a high-leverage opportunity: the demand is documented, only the position needs to move.

| Query | Impressions | Position | Notes |
|---|---|---|---|
| **bathroom remodel san diego** | **1,413** | 78 | Biggest single recovery target |
| bathroom remodel escondido | 799 | 43 | Page 5, winnable |
| kitchen design san diego | 618 | 71 | Page 8 |
| bathroom remodel chula vista | 496 | 83 | Page 9 |
| bathroom remodel scripps ranch | 480 | 35 | Page 4, closest to page 1 |
| bathroom remodel poway | 446 | 72 | Page 8 |
| bathroom remodeling (generic) | 433 | 72 | National term |
| bath remodel san diego | 393 | 87 | Page 9 |
| kitchen renovation san diego | 389 | 54 | Page 6 |
| kitchen designer san diego | 323 | 86 | Page 9 |
| bathroom remodel encinitas | 290 | 78 | Page 8 |
| bathroom remodelers scripps ranch | 291 | 36 | Page 4 |
| affordable bathroom remodeling scripps ranch | 258 | 33 | Page 4 |
| kitchen remodelers san diego | 247 | 64 | Page 7 |
| affordable kitchen remodeling rancho penasquitos | 236 | 47 | Page 5 |
| bathroom remodel tierrasanta | 237 | 36 | Page 4 |
| affordable kitchen remodeling scripps ranch | 207 | 36 | Page 4 |
| bathroom remodel la jolla | 197 | 70 | Page 7 |
| affordable bathroom remodeling rancho penasquitos | 193 | 58 | Page 6 |
| "high end remodeling" | 180 | 29 | Page 3 |
| bath renovation rancho santa fe | 162 | 39 | Page 4 |
| addition contractor | 162 | 36 | Page 4 |
| adding a room to your house | 159 | 90 | Page 9 |
| bathroom remodel rancho penasquitos | 161 | 36 | Page 4 |
| bathroom remodel carmel valley | 141 | 59 | Page 6 |
| bathroom contractor rancho santa fe | 138 | 69 | Page 7 |
| bath remodeling carmel valley | 135 | 51 | Page 6 |
| bath renovation carmel valley | 128 | 41 | Page 5 |
| bathroom remodelers rancho penasquitos | 121 | 38 | Page 4 |
| bathroom remodelers san diego | 119 | 88 | Page 9 |
| bathroom remodel torrey pines | 110 | 21 | Page 3 |
| bathroom remodelers near me | 96 | 40 | Page 4 |
| add a room to a house | 67 | 91 | Page 10 |
| adding a room to a house | 352 | 90 | Page 9 |

**Combined impressions across these queries: 12,000+.** Roughly twelve of them sit in positions 30–60 — close enough that moving to page 1–2 is realistic with content and on-page work. If even a small share of these moved into striking distance, the result would be a step-change in non-branded traffic rather than incremental improvement.

---

#### 5. Almost-Wins — Queries Already On Page 1

These already rank inside the top 10 but earn few or no clicks, typically because the queries are very low-volume or local-pack/SERP-features absorb the click:

| Query | Pos. | Imp. | Clicks |
|---|---|---|---|
| advantages of hiring a local san diego design-build firm | 3 | 24 | 0 |
| bathroom remodel downtown san diego | 1 | 1 | 0 |
| basement remodel | 6 | 2 | 0 |
| angi kitchen remodel | 5.5 | 2 | 0 |
| bath designers near me | 6 | 1 | 0 |
| bathroom design | 2 | 1 | 0 |
| 10x10 galley kitchen | 1 | 2 | 0 |
| 10 x 10 galley kitchen designs | 1 | 1 | 0 |
| 10x10 galley kitchen layout | 1 | 2 | 0 |
| 10x10 kitchen design ideas | 1 | 2 | 0 |
| 10x10 kitchen layout ideas | 3 | 1 | 0 |
| stel builders | 1 | 1 | 1 |
| design and build near me | 1 | 1 | 1 |
| bathroom remodel near me | 7.7 | 3 | 0 |

The takeaway: the site **can** rank on page 1 when content is tightly targeted (e.g., "bathroom design," "basement remodel," "design and build near me" at position 1). The capability exists; it just isn't aimed at the queries that move the business.

---

#### 6. Top Pages by Clicks (16 months)

| Page | Clicks | Impressions | Avg Pos | CTR |
|---|---|---|---|---|
| `/` | 319 | 56,762 | 60.4 | 0.56% |
| `/?utm_source=gmb&utm_medium=organic&utm_campaign=website` | 252 | 8,399 | 33.0 | 3.00% |
| `/about-us/` | 23 | 1,923 | 6.9 | 1.20% |
| `/home-gym-design-installation/` | 16 | 1,042 | 53.8 | 1.54% |
| `/contact/` | 6 | 762 | 24.3 | 0.79% |
| `/portfolio-gallery/` | 4 | 688 | 43.3 | 0.58% |
| `/blog/guide-to-solar-integration-remodels/` | 4 | 252 | 39.9 | 1.59% |
| `/blog/best-sunroom-materials-southern-california/` | 3 | 229 | 17.8 | 1.31% |
| `/luxury-bathroom-renovations/` | 3 | 96 | 39.6 | 3.13% |
| `/bathroom-remodeling/` | 2 | 921 | 66.9 | 0.22% |
| `/blog/home-additions-san-diego/` | 2 | 51 | 14.8 | 3.92% |
| `/blog/home-extension-ideas/` | 2 | 97 | 43.7 | 2.06% |
| `/blog/how-to-choose-kitchen-renovation-contractors-san-diego/` | 2 | 783 | 59.5 | 0.26% |
| `/custom-bathroom-remodel-guide/` | 2 | 2,396 | 60.4 | 0.08% |
| `/custom-cabinetry/` | 2 | 66 | 21.7 | 3.03% |
| `/custom-walk-in-closet/` | 2 | 93 | 54.4 | 2.15% |
| `/eco-friendly-remodeling/` | 2 | 21 | 29.8 | 9.52% |
| `/home-additions-san-diego/` | 2 | 614 | 46.4 | 0.33% |
| `/portfolio-gallery/encinitas-addition-bath-flooring-remodel-project/` | 2 | 23 | 31.7 | 8.70% |
| `/remodeling-projects/` | 2 | 63 | 5.7 | 3.17% |
| `/san-diego-ca/` | 2 | 874 | 5.4 | 0.23% |
| `/scripps-ranch-multiple-bathrooms-whole-house-remodel-project/` | 2 | 4,526 | 42.8 | 0.04% |
| `/services/kitchen-remodeling/` | 2 | 126 | 45.9 | 1.59% |
| `/services/whole-home-renovations/` | 2 | 381 | 52.5 | 0.52% |
| `/technology-integrated-home-remodeling/` | 2 | 10 | 16.3 | 20% |
| `/tierrasanta-remodel-project/` | 2 | 1,258 | 32.4 | 0.16% |

**Combined, the homepage (bare URL + GMB-tagged variant) accounts for 571 of 870 clicks — about 66% of all organic clicks.** The site has essentially one ranking destination today.

---

#### 7. Pages With Heavy Impressions But Almost No Clicks

These pages earn substantial Google exposure but rank too deep to capture it. They represent the largest pool of unrealized traffic on the site:

| Page | Impressions | Avg Pos | Clicks |
|---|---|---|---|
| `/` | 56,762 | 60 | 319 |
| `/rancho-santa-fe/` | 7,398 | 51 | 1 |
| `/scripps-ranch-multiple-bathrooms-whole-house-remodel-project/` | 4,526 | 43 | 2 |
| `/poway/` | 4,340 | 65 | 0 |
| `/custom-bathroom-design-remodeling/` | 4,100 | 82 | 0 |
| `/encinitas/` | 3,514 | 72 | 0 |
| `/carmel-valley/` | 3,417 | 47 | 0 |
| `/rancho-penasquitos/` | 3,389 | 41 | 0 |
| `/escondido-remodel-project/` | 3,173 | 48 | 0 |
| `/rancho-bernardo/` | 2,633 | 46 | 1 |
| `/escondido-bathroom-remodel-project/` | 2,479 | 51 | 0 |
| `/home-addition-contractors-san-diego/` | 2,451 | 65 | 0 |
| `/custom-bathroom-remodel-guide/` | 2,396 | 60 | 2 |
| `/blog/small-kitchen-remodel-tips/` | 2,092 | 82 | 0 |
| `/la-jolla/` | 1,562 | 60 | 1 |
| `/home-theater-entertainment-room-installation/` | 1,345 | 59 | 0 |
| `/fairbanks-ranch/` | 1,292 | 23 | 0 |
| `/home-security-system-installation-guide/` | 1,256 | 62 | 0 |
| `/rancho-penasquitos-remodel-project/` | 1,214 | 37 | 0 |
| `/outdoor-living-spaces/` | 1,083 | 62 | 0 |
| `/adding-new-rooms-to-your-home/` | 1,029 | 90 | 0 |
| `/ground-construction/` | 984 | 55 | 0 |
| `/home-additions-san-diego/` | 614 | 46 | 2 |

Nearly 40 pages with 1,000+ impressions sit at positions 40–90. Moving even a handful from page 5–9 to page 1–2 would meaningfully change site-wide click volume from existing demand.

---

#### 8. Legacy URL Duplication — The Highest-Priority Technical Issue

The April 2026 rebuild introduced cleaner URL structures (`/services/...`, `/service-areas/...`, `/about`, `/contact-us`), but **the legacy URLs were never 301-redirected**. Both versions are now indexed and earning impressions for the same queries, which splits Google's ranking signal and pits the site against itself in search results.

The Redirection plugin is installed on the site but currently unused — no 301s are configured.

| Legacy URL | Current URL | Status (Legacy / Current Impressions) |
|---|---|---|
| `/poway/` | `/service-areas/poway/` | Both indexed (4,340 / 8) |
| `/encinitas/` | `/service-areas/encinitas/` | Both indexed (3,514 / 6) |
| `/carmel-valley/` | `/service-areas/carmel-valley/` | Both indexed (3,417 / 1) |
| `/rancho-penasquitos/` | `/service-areas/rancho-penasquitos/` | Both indexed (3,389 / 210) |
| `/rancho-bernardo/` | `/service-areas/rancho-bernardo/` | Both indexed (2,633 / 10) |
| `/about-us/` | `/about/` | Both indexed (1,923 / 1) |
| `/la-jolla/` | `/service-areas/la-jolla/` | Both indexed (1,562 / 174) |
| `/fairbanks-ranch/` | `/service-areas/fairbanks-ranch/` | Both indexed (1,292 / 204) |
| `/bathroom-remodeling/` | `/services/bathroom-remodeling/` | Both indexed (921 / 60) |
| `/contact/` | `/contact-us/` | Both indexed (762 / 59) |
| `/scripps/` | `/service-areas/scripps/` | Both indexed (682 / 21) |
| `/carlsbad/` | `/service-areas/carlsbad/` | Both indexed (656 / 5) |
| `/custom-pantry-design/` | `/services/custom-pantry-design/` | Both indexed (623 / 10) |
| `/oceanside/` | (none configured) | Legacy only (329) |
| `/cardiff/` | `/service-areas/cardiff/` | Both indexed (297 / 29) |
| `/home-additions/` | `/services/home-additions/` | Both indexed (293 / 86) |
| `/kitchen-remodeling/` | `/services/kitchen-remodeling/` | Both indexed (285 / 126) |
| `/whole-home-renovations/` | `/services/whole-home-renovations/` | Both indexed (246 / 381) |
| `/privacy_policy/` | `/privacy-policy/` | Both indexed (133 / 15) |
| `/del-mar/` | `/service-areas/del-mar/` | Both indexed (73 / 2) |
| `/custom-cabinetry/` | (none) | Legacy only (66) |
| `/del-sur/` | `/service-areas/del-sur/` | Both indexed (56 / 14) |
| `/blog/[slug]/` | `/[slug]/` (some) | Both indexed |

That's **25+ legacy URLs still active alongside their replacements.** Every duplicate splits ranking equity and confuses Google about which page to surface for a given query.

##### Pages indexed that shouldn't exist

- `/custom-bathroom-remodel-guide/` — 2,396 imp, no clicks (legacy ghost)
- `/bathroom-remodeling-2/` — 3 imp (duplicate of `/bathroom-remodeling/`)
- `/category/uncategorized/` — 2 imp (default WordPress category, not used)
- `/blog/page/2/?e-page-2b7da6f=4` — 2 imp (Elementor cache fragment)
- `/m.client-example.invalid/` — 2 imp (mobile subdomain reference)
- `/kitchen-renovation-contractors` (no trailing slash) — 21 imp

---

#### 9. Sitemap Clutter

Five sitemaps are registered in GSC, only one of which should remain:

| Path | Last Submitted | Last Downloaded | Warnings | Status |
|---|---|---|---|---|
| `/sitemap_index.xml` | 2026-02-04 | 2026-05-16 | 0 | **Keep — current Yoast index** |
| `/sitemap.xml` | 2025-02-20 | 2026-05-18 | **1** ⚠️ | Stale, has warning — remove |
| `/wp-sitemap.xml` | 2025-03-20 | 2026-05-13 | 0 | Stale (March 2025) — remove |
| `/page-sitemap.xml` | 2025-08-18 | 2026-05-18 | 0 | Stale (August 2025) — remove |
| `/post-sitemap.xml` | 2024-12-09 | 2026-05-16 | 0 | 17 months stale — remove |

Google is currently being handed five overlapping sitemap signals describing the same site. Four of them are stale (one of them by 17 months) and one carries an unresolved warning. Cleaning this up to a single authoritative index removes a meaningful crawl-budget tax.

---

#### 10. Device Performance (90 days)

| Device | Clicks | Impressions | CTR | Position |
|---|---|---|---|---|
| Desktop | 112 (78%) | 9,277 (87%) | 1.21% | 46.8 |
| Mobile | 30 (21%) | 1,391 (13%) | 2.16% | 40.3 |
| Tablet | 1 | 34 | 2.94% | 34.9 |

Mobile users see **better positions and higher CTR** than desktop, yet the site's impression base is heavily desktop-skewed. For a home-services business, mobile would typically drive 60–70% of impressions, not 13% — suggesting the desktop base may include a meaningful share of non-buyer traffic (bots, internal users).

---

#### 11. Country Distribution (90 days)

| Country | Clicks | Notes |
|---|---|---|
| USA | 99 (69%) | Real target market |
| Philippines | 32 (22%) | Likely internal team / development partner |
| Pakistan | 5 | Bot |
| India | 2 | Bot |
| Mexico | 2 | Could be Hispanic SD market |
| UK, Denmark, Netherlands | 1 each | Misc |

Filtering to US-only puts genuine domestic organic traffic at **~99 clicks per 90 days ≈ 33/month**.

---

#### 12. Search Appearance

| Feature | Impressions | Clicks |
|---|---|---|
| PRODUCT_SNIPPETS | 73 | 0 |
| TRANSLATED_RESULT | 2 | 0 |

The site is appearing as a product snippet in some results (Yoast schema is producing it) but earning zero clicks from that surface. Worth investigating whether the schema is misconfigured or just attached to low-intent queries.

---

#### 13. GSC-Side Fix Priorities

| Priority | Action | Why it matters |
|---|---|---|
| Critical | 301 redirect map for ~25 legacy URLs (use the existing Redirection plugin) | Consolidates split equity, removes duplicate competing pages |
| Critical | Delete 4 of 5 sitemap registrations; keep only `/sitemap_index.xml` | Removes conflicting crawl signals |
| Critical | Confirm no manual actions in GSC | Rules out penalty as a factor |
| High | URL Inspection + Request Indexing on top 30 priority pages | Forces refresh after redirects deploy |
| High | Resubmit `/sitemap_index.xml` after 301s deploy | Tells Google about the consolidated structure |
| High | Audit Yoast PRODUCT_SNIPPETS — they appear but earn no clicks | Optimize schema for click-worthy rich results |
| Medium | Set up GSC email alerts for indexation drops & manual actions | Early warning system |
| Medium | Add LocalBusiness, Service, FAQ, Article schema to top pages | Earn more rich-result types |
| Medium | Internal linking audit | Strengthen pages currently sitting page 4–5 to push toward page 1–2 |


---



<a id="gsc-overview"></a>

## GSC Overview

_source: `research/gsc/overview.md`_

##### GSC Performance Overview — Authoritative Organic Search Data

**Property:** `sc-domain:client-example.invalid`
**Access level:** siteFullUser
**Pulled:** 2026-05-21

> **GSC is the authoritative source for organic search performance.** Third-party SEO tools (Ahrefs included) estimate traffic from sampled SERP crawls and undercount the real picture — often by an order of magnitude. The numbers below come directly from Google's first-party data.

> **The 16-month view matters.** A 90-day snapshot misses the long-tail signal that only becomes visible across a full year-plus. Where this overview cites 16-month totals, that's why.

---

#### 16-Month Top-Line (2025-01-21 → 2026-05-19)

| Metric | Total |
|---|---|
| **Clicks** | **870** (~54/month, ~51 trailing avg) |
| **Impressions** | **41,000** |
| **Avg. CTR** | **2.11%** (below the 3–4% category benchmark) |
| **Avg. Position** | **49.6** (page 5) |
| **Branded share of clicks** | ~66% (queries containing "Client Company") |

Google has surfaced client-example.invalid roughly 41,000 times across 16 months and earned 870 clicks. The pattern: discoverable, but ranking too deep to convert exposure into traffic — and the bulk of clicks that do land come from people who already know the brand.

---

#### 28-Day Comparison

| Metric | Current (Apr 22 – May 19) | Previous (Mar 25 – Apr 21) | Δ |
|---|---|---|---|
| **Clicks** | 51 | 49 | +2 (+4%) |
| **Impressions** | 4,086 | 3,120 | +966 (+31%) |
| **CTR** | 1.25% | 1.57% | −0.32 pp |
| **Avg. Position** | 50.07 | 41.52 | −8.55 (worse) |

##### Reading the numbers

- **Impressions grew 31%** — Google is showing the site to more searchers, not fewer. Post-rebuild content IS being crawled and surfaced.
- **Clicks effectively flat (+4%)** — but impressions grew 31%, so CTR fell. The site shows up; the listings don't get clicked.
- **Position degraded ~9 spots** — most of the new impressions came from queries where the site sits position 50–60, which generates impressions but few clicks.
- The April 2026 rebuild **stabilized** organic search performance. It didn't crater rankings, but it also didn't immediately lift them — the bigger leverage is in competitive ranking and URL hygiene, not in crawl health.

---

#### 90-Day Performance (Feb 20 – May 19)

| Metric | Total |
|---|---|
| **Clicks** | 143 |
| **Impressions** | 10,702 |
| **Avg. CTR** | ~1.3% |
| **Avg. Position** | ~45 |
| **Unique queries with impressions** | 100+ |
| **Unique pages with impressions** | 97 |

> **Caveat:** The 90-day window misses long-tail signal. The 16-month view above is what reveals the full demand picture — at 90 days you see roughly 100 queries; at 16 months you see 300+.

---

#### Daily Click Trend (Feb 20 → May 19)

Notable spikes:
- **2026-04-20**: 13 clicks (day of site rebuild — likely indexation refresh activity)
- **2026-04-21**: 8 clicks
- **2026-04-22**: 6 clicks
- **2026-04-14**: 5 clicks
- **2026-04-30**: 4 clicks
- **2026-04-24**: 4 clicks

Floor: 0 clicks/day is common; ceiling 1–3 clicks/day is the usual range.

**No catastrophic dropoff is visible in the GSC window.** The April 2026 rebuild did not destroy click volume — impressions actually *grew* in the post-rebuild window. The site is in a stable post-rebuild state; the larger story is competitive ranking depth, not crawl damage.

---

#### Device Split (90 days)

| Device | Clicks | Impressions | CTR | Position |
|---|---|---|---|---|
| **Desktop** | 112 (78%) | 9,277 (87%) | 1.21% | 46.8 |
| **Mobile** | 30 (21%) | 1,391 (13%) | 2.16% | 40.3 |
| **Tablet** | 1 | 34 | 2.94% | 34.9 |

##### Observations
- Desktop dominates impressions (87%) — **atypical for a home-services business** where mobile usually drives 60–70%
- Mobile CTR (2.16%) is **better than desktop** (1.21%) — when mobile users see the listing, they engage more
- Mobile position is **better** (40.3 vs 46.8) — Google ranks the site higher on mobile but shows it less often
- The desktop-heavy profile is consistent with bot or internal traffic making up a meaningful share of indexed exposure

---

#### Country Split (90 days)

| Country | Clicks | Impressions | CTR | Position |
|---|---|---|---|---|
| **USA** | 99 (69%) | 9,904 (93%) | 1.00% | 47.6 |
| **Philippines** | 32 (22%) | 85 | 37.65% | 5.9 |
| **Pakistan** | 5 | 59 | 8.47% | 47.5 |
| **India** | 2 | 68 | 2.94% | 61.2 |
| **Mexico** | 2 | 17 | 11.76% | 15.0 |
| **UK** | 1 | 47 | 2.13% | 35.3 |
| **Denmark, Netherlands** | 1 ea. | minor | — | — |

##### Critical finding

**32 of 143 total clicks (22%) come from the Philippines** — with an unrealistically high 37.65% CTR and a near-#1 position. These are almost certainly **internal users** (development partners, freelance team members, or scrapers) consistently searching branded queries from PH IPs. This matches the GA4 traffic from Meycauayan, Philippines (53 sessions, 9 key events).

**Practical implication:** US-only clicks = 99/90 days, not 51/month. After filtering bot/internal traffic, real US organic traffic is ~33 clicks/month from genuine US searchers.

> **Coverage caveat:** GSC counts only what Google has served. Bing, DuckDuckGo, and other engines aren't in this dataset, so total search traffic is somewhat higher than what GSC reports.

---

#### Performance Summary

The site is in a **"low-clicks, decent-impressions, deep-page rankings"** state:
- **Discoverable**: Google indexes 97+ pages and surfaces them for 100+ queries (300+ across 16 months)
- **Not findable**: Average position 45–50 — searchers don't scroll that deep
- **Stable post-rebuild**: April 2026 rebuild expanded indexation rather than collapsing it; impressions are growing, not crashing
- **Branded-dominant**: ~66% of clicks come from people already searching the brand name

This is not a "site has been blacklisted" problem. It's a **"site exists in Google but doesn't rank competitively"** problem — addressable with on-page, internal linking, URL hygiene, and authority work rather than emergency triage.


---



<a id="gsc-top-queries"></a>

## GSC Top Queries

_source: `research/gsc/top-queries.md`_

##### GSC Top Queries — Authoritative Organic Search Data

**Window:** 2026-02-20 → 2026-05-19 (90 days)
**Rows analyzed:** 100 queries
**Total clicks:** 143
**Pulled:** 2026-05-21

> GSC is the authoritative source for organic search queries on client-example.invalid. Where third-party tools list a handful of ranking keywords, GSC shows what Google actually surfaced. The 90-day view below captures recent demand; the 16-month view in `02-gsc.md` reveals the full long-tail picture (300+ unique queries vs ~100 in 90 days).

---

#### Clicks: Branded

| Query | Clicks | Impressions | CTR | Avg Position |
|---|---|---|---|---|
| `Client Company` | 34 | 138 | 24.64% | 6.1 |
| `Client Company` | 7 | 44 | 15.91% | 4.7 |
| `Client Company` | 5 | 68 | 7.35% | 19 |
| `Client Company design` | 3 | 59 | 5.08% | 2.7 |
| `Client Company home` | 2 | 2 | 100% | 2 |
| `Client Company construction` | 1 | 1 | 100% | 1 |

**Branded subtotal:** 52 clicks (36% of all clicks at 90 days; ~66% across the full 16-month window). These are the only queries delivering meaningful CTR.

#### Clicks: Non-Branded

| Non-branded query | Clicks | Impressions | CTR | Position |
|---|---|---|---|---|
| `custom home gym builders` | 1 | 1 | 100% | 4 |
| `kitchen designer san diego` | 1 | 65 | 1.54% | 69.1 |
| `kitchen remodeling in san diego` | 1 | 24 | 4.17% | 64.6 |
| `remodeling companies in san diego` | 1 | 14 | 7.14% | 74.2 |
| `remodeling contractors in san diego` | 1 | 5 | 20% | 55.8 |

**Non-branded with clicks subtotal:** 5 clicks across 90 days. The other ~86 clicks are either anonymized by Google or fragmented below threshold.

---

#### High-Impression Queries with ZERO Clicks (Recovery Targets)

These are the queries where Google IS showing the site, but the rankings are too deep to capture clicks. Each is a documented demand signal — Google has the site in its result set, it just isn't surfacing it where people look.

| Query | Impressions | Position | Status |
|---|---|---|---|
| `bathroom remodel san diego` | 187 | 49.9 | Page 5 — primary recovery target |
| `bathroom remodeling san diego` | 182 | 49.8 | Page 5 |
| `"high end remodeling"` | 159 | 26.4 | Page 3 — easier climb |
| `bathroom remodel` (generic) | 98 | 71.2 | Page 7+ — national, hard |
| `bathroom remodeler` | 98 | 59.4 | Page 6 — national |
| `bathroom remodeling` (generic) | 93 | 64.9 | Page 7 — national |
| `bathroom renovation` | 78 | 40.7 | Page 4 |
| `kitchen designer san diego` | 65 | 69.1 | Page 7 |
| `attic conversion contractors san diego` | 36 | 37.1 | Page 4 — niche, winnable |
| `commercial refurbishment firms` | 29 | 40.3 | Off-service |
| `kitchen remodeling in san diego` | 24 | 64.6 | Page 7 |
| `adu portfolio encinitas` | 20 | 36.2 | Page 4 — local niche, winnable |
| `contemporary kitchens san diego` | 19 | 73.4 | Page 7 |
| `bathroom remodeling solana beach` | 17 | 37.1 | Page 4 — local |
| `cardiff home remodel` | 16 | 8.4 | **Page 1** — closest to winning |
| `bathroom remodeling tierrasanta` | 15 | 65.2 | Page 7 — local |
| `bathroom remodel near me` | 3 | 7.7 | **Page 1** — proximity-driven |

> Note: the 16-month view (see `02-gsc.md` §4) surfaces additional high-impression recovery queries that are invisible in the 90-day window — including `bathroom remodel san diego` at **1,413 impressions / position 78** across the full window. The 90-day numbers above are the trailing tip of a much larger long-tail.

---

#### "Almost Won" Queries (rank top 10 but no clicks captured)

These are searches where the site is already on page 1 but didn't earn a click during the period — typically because the queries are very low volume, or because local-pack/Maps/ads absorbed the click:

| Query | Position | Impressions |
|---|---|---|
| `cardiff home remodel` | 8.4 | 16 |
| `bathroom remodel near me` | 7.7 | 3 |
| `service-areas/encinitas` (URL) | 3.2 | 6 |
| `service-areas/poway` (URL) | 3.3 | 3 |
| `service-areas/tierrasanta` (URL) | 4.9 | 8 |
| `service-areas/scripps` (URL) | 7.5 | 21 |
| `service-areas/del-mar` (URL) | 6.0 | 2 |
| `service-areas/carlsbad` (URL) | 4.4 | 5 |

These location pages already rank well — they just need traffic-driving optimization (sharper title tags, meta descriptions, schema, and content depth).

---

#### Long-Tail Local Patterns Detected

The site picks up impressions on a wide range of programmatic-looking queries (Rancho Penasquitos, Scripps Ranch, 4S Ranch + budget/affordable + bathroom/kitchen + remodeling). Examples:

- `budget kitchen remodeling 4s ranch` — 3 imp, pos 26.3
- `budget kitchens rancho penasquitos` — 11 imp, pos 19.3
- `affordable bathroom remodeling scripps ranch` — 2 imp, pos 69.5
- `bathroom remodeling rancho penasquitos` — 6 imp, pos 55.3

The pattern suggests programmatic / templated local pages on the site that produce a wide ranking surface. Cleaned up and properly optimized, these template patterns could become a long-tail traffic engine.

---

#### Query Strategy Implications

1. **Brand defense is already in place** — 6 branded queries deliver 52 clicks at 5–25% CTR. Maintenance only.
2. **Real opportunity = 22+ queries currently ranked in position 30–70 with 5+ impressions each.** Moving any of these to page 1 multiplies traffic.
3. **Quick wins exist** — `cardiff home remodel` (pos 8.4), `attic conversion contractors san diego` (pos 37), `adu portfolio encinitas` (pos 36), `bathroom remodeling solana beach` (pos 37). Specific, low-comp, locally relevant.
4. **Generic terms (`bathroom remodel`, `kitchen remodeling`) sit deep on page 6–7.** These will require sustained authority and on-page work to move and shouldn't be the first priority.
5. **The site is invisible to high-intent buyers** — nobody searching `kitchen remodel san diego` finds Client Company today. That's the gap to close.

> **Caveat:** GSC counts only what Google has served. Searches on Bing and other engines aren't in this dataset.


---



<a id="gsc-top-pages"></a>

## GSC Top Pages

_source: `research/gsc/top-pages.md`_

##### GSC Top Pages — Authoritative Organic Search Data

**Window:** 2026-02-20 → 2026-05-19 (90 days)
**Pages with impressions:** 97
**Total page-level clicks:** ~143
**Pulled:** 2026-05-21

> GSC is the authoritative source for organic page performance on client-example.invalid. The 90-day window below captures recent activity; the 16-month view in `02-gsc.md` shows 200+ pages with impressions — the full inventory of what's surfacing in Google.

---

#### Pages by Clicks

| Page | Clicks | Impressions | CTR | Position |
|---|---|---|---|---|
| `/` | 66 | 3,383 | 1.95% | 53.0 |
| `/?utm_source=gmb&utm_medium=organic&utm_campaign=website` | 42 | 3,227 | 1.30% | 42.1 |
| `/about-us/` | 5 | 459 | 1.09% | 5.1 |
| `/blog/guide-to-solar-integration-remodels/` | 4 | 97 | 4.12% | 34.1 |
| `/contact/` | 3 | 220 | 1.36% | 25.9 |
| `/home-gym-design-installation/` | 3 | 291 | 1.03% | 52.7 |
| `/portfolio-gallery/` | 3 | 212 | 1.42% | 20.0 |
| `/blog/best-sunroom-materials-southern-california/` | 2 | 161 | 1.24% | 16.7 |
| `/blog/home-extension-ideas/` | 2 | 7 | 28.57% | 6.0 |
| `/portfolio-gallery/encinitas-addition-bath-flooring-remodel-project/` | 2 | 23 | 8.7% | 31.7 |
| `/services/kitchen-remodeling/` | 2 | 126 | 1.59% | 45.9 |
| `/services/whole-home-renovations/` | 2 | 381 | 0.52% | 52.5 |

##### Notes
- **The homepage takes 108 of 143 clicks (76%)** between the bare URL and the GMB-tagged variant. The site has essentially one ranking destination today.
- The GMB-tagged URL getting indexed (3,227 impressions) is a **technical issue** — that's a Google Business Profile tracking URL leaking into the index. It should be canonicalized to `/`.
- 75 of the 97 pages with impressions earned **zero clicks** in 90 days.

---

#### Pages with Strong Position but Low Impressions

These rank well but Google doesn't show them often — usually because the targeted queries have low search volume:

| Page | Position | Impressions | Note |
|---|---|---|---|
| `/blog/luxury-bathroom-renovations/` | 2.0 | 11 | Top 2 but only 11 imp |
| `/service-areas/poway/` | 3.3 | 3 | Excellent local ranking, low query volume |
| `/cardiff/` | 2.0 | 1 | Legacy URL still indexed |
| `/del-sur/` | 8.0 | 1 | Legacy URL |
| `/service-areas/carlsbad/` | 4.4 | 5 | Strong rank, low impressions |
| `/service-areas/del-mar/` | 6.0 | 2 | Strong rank, low impressions |
| `/service-areas/del-sur/` | 6.5 | 14 | Untapped local |
| `/service-areas/tierrasanta/` | 4.9 | 8 | Strong rank |
| `/portfolio-gallery/escondido-remodel-project/` | 3.0 | 1 | Strong rank |
| `/portfolio-gallery/tierrasanta-whole-house-renovation/` | 4.0 | 4 | Strong rank |
| `/services/outdoor-living-spaces/` | 2.5 | 2 | Excellent rank |
| `/blog/hiring-san-diego-bathroom-remodelers-guide/` | 1.0 | 1 | Position 1 but invisible |

---

#### Pages with High Impressions but Deep Position (Recovery Targets)

These get shown a lot but rank too deep to capture clicks. Highest-leverage on-page work targets:

| Page | Impressions | Position | What it ranks for |
|---|---|---|---|
| `/services/whole-home-renovations/` | 381 | 52.5 | "whole home renovation" terms |
| `/san-diego-ca/` | 331 | 5.6 | **Pos 5.6, 331 imp, just 1 click** — title tag fix |
| `/blog/small-kitchen-remodel-tips/` | 309 | 78.1 | Generic kitchen content |
| `/service-areas/solana-beach/` | 283 | 25.8 | Local — close to page 1 |
| `/service-areas/rancho-santa-fe/` | 244 | 52.4 | High-value market |
| `/blog/best-high-end-home-remodeling-contractors/` | 218 | 29.9 | Money-keyword candidate |
| `/service-areas/rancho-penasquitos/` | 200 | 28.3 | Local — close to page 1 |
| `/service-areas/fairbanks-ranch/` | 183 | 18.6 | Ultra-affluent market — close to page 1 |
| `/home-security-system-installation-guide/` | 177 | 71.5 | Legacy URL still ranking |
| `/portfolio-gallery/escondido-bathroom-remodel-project/` | 120 | 50.7 | Move to page 1 = wins |

---

#### Legacy / Orphan URL Findings

The April 2026 rebuild introduced cleaner URL structures (`/services/...`, `/service-areas/...`) but the legacy URLs were never 301-redirected. The result: both versions are indexed, and they compete for the same queries.

| URL | Impressions | Pattern |
|---|---|---|
| `/cardiff/` | 1 | Legacy (new: `/service-areas/cardiff/`) |
| `/del-sur/` | 1 | Legacy (new: `/service-areas/del-sur/`) |
| `/solana-beach/` | 59 | Legacy (new: `/service-areas/solana-beach/`) |
| `/rancho-santa-fe/` | 11 | Legacy |
| `/san-diego-ca/` | 331 | Legacy (?) |
| `/kitchen-remodeling/` | 2 | Legacy (new: `/services/kitchen-remodeling/`) |
| `/custom-cabinetry/` | 4 | Legacy (new: `/services/...`) |
| `/whole-home-renovations/` | 10 | Legacy (new: `/services/whole-home-renovations/`) |
| `/home-security-system-installation-guide/` | 177 | Legacy blog URL |
| `/wine-cellar-installation/` | 2 | Legacy |
| `/custom-walk-in-closet/` | 5 | Legacy |
| `/custom-pantry-design/` | 95 | Legacy (new: `/services/custom-pantry-design/`) |
| `/whole-home-remodeling-san-diego-tips/` | 5 | Legacy blog URL |
| `/privacy_policy/` | 36 | Underscore — should be `/privacy-policy/` |

This is the URL duplication mess in microcosm: across 25+ legacy paths site-wide (see `02-gsc.md` §8 for the full table), both the old and the new versions coexist in Google's index and split the ranking signal.

The site already has the **Redirection** plugin installed in WordPress — it's just currently unused. Building a clean 301 map there is the highest-leverage technical fix available.

##### Implied action
Build a redirect map: `/[area]/ → /service-areas/[area]/` and `/[service-slug]/ → /services/[service-slug]/`. Canonicalize one URL per intent.

---

#### Image URLs Showing in Results

A few image URLs are indexed and getting impressions:
- `/wp-content/uploads/2024/10/NbAjS2GDVnmK-sW6ShKA3-min.jpg` — 6 imp, pos 24.2
- `/wp-content/uploads/2024/10/Smart-Lighting-and-Climate-Control-Enhance-Your-Homes-Efficiency.jpeg` — 4 imp, pos 51
- `/wp-content/uploads/2026/03/35-min.webp` — 3 imp, pos 18

Indicates an **Image SEO opportunity** — with proper alt text, captions, and structured image content, the site could earn meaningful Google Images traffic for visually-driven queries like "luxury kitchen remodel san diego."

> **Caveat:** GSC counts only what Google has served. Bing and other engines aren't in this dataset.


---



<a id="gsc-top-movers"></a>

## GSC Top Movers

_source: `research/gsc/top-movers.md`_

##### GSC Top Movers — Post-Rebuild vs Pre-Rebuild

**Comparison window:** Current 2026-04-22 → 2026-05-19 (post-rebuild) vs Previous 2026-03-25 → 2026-04-21 (pre-rebuild)
**Site rebuild executed:** 2026-04-20
**Pulled:** 2026-05-21

> GSC is the authoritative source for these movement comparisons. Third-party rank trackers sample at intervals and miss most of the long-tail; the figures below come directly from Google.

---

#### Top Growing Queries

| Query | Prev Clicks | Curr Clicks | Δ | Prev Position | Curr Position | Pos Δ |
|---|---|---|---|---|---|---|
| `Client Company` | 11 | 15 | +4 | 13.4 | 1.5 | **+11.9** (improved) |
| `Client Company home` | 0 | 2 | +2 | — | 2 | new |
| `kitchen remodeling in san diego` | 0 | 1 | +1 | 71 | 64 | +7 |
| `Client Company construction` | 0 | 1 | +1 | — | 1 | new |

##### Reading the data
- **Branded queries improved** — `Client Company` jumped from position 13.4 to 1.5 (a major brand-search win)
- **First non-branded movement** — `kitchen remodeling in san diego` moved 7 spots toward page 1 (from 71 → 64)
- **New branded discoveries** — `Client Company home` and `Client Company construction` started ranking from nothing

---

#### Top Declining Queries

| Query | Prev Clicks | Curr Clicks | Δ | Prev Position | Curr Position | Pos Δ |
|---|---|---|---|---|---|---|
| `kitchen designer san diego` | 1 | 0 | −1 | 56.3 | 70.2 | **−13.9** (worse) |
| `remodeling contractors in san diego` | 1 | 0 | −1 | 54.3 | 41 | +13.3 (better, but lost click) |
| `Client Company design` | 1 | 0 | −1 | 7.1 | 1.8 | +5.3 (improved to top, lost click — likely SERP cannibalization) |

##### Reading the data
- `kitchen designer san diego` got **worse** post-rebuild (−14 positions) — a content or internal-link signal was lost
- The other two queries actually **improved position** but lost a click — likely SERP feature cannibalization (an ad, local pack, or AI Overview took the click)
- Net: limited damage from the rebuild itself in this window

---

#### Net Takeaway

The April 2026 rebuild **did not crater rankings in the immediate window after deployment**. In fact:
- Branded queries improved
- One non-branded query moved 7 positions closer to page 1
- One non-branded query declined 14 positions

The dataset is small (143 total clicks over 90 days) so the signal is noisy, but the rebuild appears to be a **net neutral-to-positive** event in the GSC window. Any older "ranking collapse" signal Ahrefs may report is from a prior period (mid-to-late 2025), not from this rebuild — and Ahrefs traffic estimates undercount Google's actual surface area by roughly an order of magnitude, so anchor any read on this period to the GSC numbers above.

The post-rebuild story is one of stabilization. The bigger lever now is competitive ranking depth and URL hygiene (see `02-gsc.md` §8 on the legacy URL duplication issue), not crawl recovery.

---

#### What This Doesn't Tell Us

GSC's top-movers data only compares overlapping queries — it does NOT capture:
1. Queries the site used to rank for and now doesn't (those just disappear from the comparison)
2. Queries the site never ranked for and now does (no "previous" baseline)
3. Searches on Bing or other engines (GSC reflects Google only)

To get the full picture, pull a 16-month comparison once that data is referenceable in GSC's UI.

---

#### Confidence Level: Medium

The post-rebuild window (Apr 22 – May 19) is only **28 days**, which is short for ranking signals to fully stabilize. The next 60–90 days will be more diagnostic. Re-run this comparison monthly.


---



<a id="gsc-indexation"></a>

## GSC Indexation & Sitemaps

_source: `research/gsc/indexation-sitemaps.md`_

##### GSC Indexation & Sitemap Status

**Pulled:** 2026-05-21
**Property:** `sc-domain:client-example.invalid`

> GSC is the authoritative source for indexation status. The figures below come from Google's first-party crawl and sitemap data.

---

#### Sitemaps Submitted to Google — 5 Registered, 4 Should Be Removed

| Sitemap Path | Last Submitted | Last Downloaded | Warnings | Errors | Status |
|---|---|---|---|---|---|
| `/sitemap_index.xml` | 2026-02-04 | 2026-05-16 | 0 | 0 | **Keep — current Yoast index** |
| `/sitemap.xml` | 2025-02-20 | 2026-05-18 | **1** | 0 | Stale + warning — remove |
| `/wp-sitemap.xml` | 2025-03-20 | 2026-05-13 | 0 | 0 | Stale (March 2025) — remove |
| `/page-sitemap.xml` | 2025-08-18 | 2026-05-18 | 0 | 0 | Stale (August 2025) — remove |
| `/post-sitemap.xml` | 2024-12-09 | 2026-05-16 | 0 | 0 | 17 months stale — remove |

##### Issues

1. **Five overlapping sitemap signals.** `/sitemap_index.xml` (current Yoast format) coexists with `/wp-sitemap.xml` (default WordPress core sitemap), `/sitemap.xml` (older Yoast format), and standalone `/page-sitemap.xml` and `/post-sitemap.xml`. Google is ingesting overlapping, conflicting URL sets describing the same site.

2. **Stale submissions.** `/wp-sitemap.xml` was last submitted **March 2025** (14 months ago); `/sitemap.xml` from **February 2025**; `/post-sitemap.xml` from **December 2024 — 17 months stale**. None were re-submitted after the April 2026 rebuild.

3. **One warning on `/sitemap.xml`** — not detailed in the API response; investigate directly in the GSC UI before removal.

4. **Current sitemap is being crawled regularly** — last download was 2026-05-16. The infrastructure works; the housekeeping is messy.

##### Action items
- Delete or unsubmit `/wp-sitemap.xml`, `/sitemap.xml`, `/page-sitemap.xml`, `/post-sitemap.xml`
- Keep only `/sitemap_index.xml` (Yoast-managed)
- Re-submit the index after cleanup
- Resolve the warning on `/sitemap.xml` before removal

---

#### Crawl & Indexation Health Signals

| Bucket | Pages |
|---|---|
| **Indexed and earning impressions** (90 days) | 97 |
| **Indexed and earning impressions** (16 months) | 200+ |
| **Total in current sitemap** | ~88 |
| **Indexed legacy / pre-rebuild URLs still surfacing** | 25+ |
| **Image URLs ranking** | 6+ |

97 URL-paths surfaced in 90 days against an 88-URL sitemap. The arithmetic implies what the page-level data confirms: **legacy URLs are still in Google's index** alongside their new equivalents. The April 2026 rebuild added new canonical URLs without retiring the old ones, so Google has duplicates competing for the same queries.

The WordPress **Redirection plugin is installed but currently unused** — meaning the infrastructure to 301 the legacy URLs is in place; the redirects just haven't been configured.

---

#### Indexation Hygiene Sequence

##### Step 1 — Sitemap cleanup
1. Audit and remove 4 of the 5 sitemap entries (keep only `/sitemap_index.xml`)
2. Investigate and resolve the `/sitemap.xml` warning
3. Verify `/sitemap_index.xml` references current sub-sitemaps only (page, post, category)
4. Submit fresh in GSC

##### Step 2 — Legacy URL 301 mapping
For every legacy URL still ranking, deploy a 301 redirect to its current canonical (via the Redirection plugin):

| Legacy Pattern | Target Pattern |
|---|---|
| `/[area-slug]/` | `/service-areas/[area-slug]/` |
| `/[service-slug]/` | `/services/[service-slug]/` |
| `/privacy_policy/` | `/privacy-policy/` |
| `/[blog-slug]/` (where it exists as both root and `/blog/[slug]/`) | `/blog/[slug]/` |
| `/wp-content/uploads/2024/10/...` (image URLs) | leave as-is, add proper alt text |

##### Step 3 — URL Inspection batch
After the 301s are live, use GSC URL Inspection on the top 30 priority pages to force re-crawl and re-indexation under the new URL structure.

##### Step 4 — Canonical tag audit
The site is Yoast-driven; canonical tags should be auto-set, but verify by:
- Sampling 10 service pages (`/services/...`)
- Sampling 10 location pages (`/service-areas/...`)
- Sampling 5 blog posts
- Confirming each `<link rel="canonical" href="...">` points to itself, not to legacy URLs

---

#### What This Tells Us

The site has **no manual action, no security issue, no fundamental crawl problem.** Google is reading the sitemap weekly, indexing 97+ URLs (200+ across the 16-month window), and showing them in search 10,700+ times per quarter (41,000+ across 16 months).

The bottlenecks are **competitive ranking depth** and **URL hygiene**, not crawl health. That's a meaningfully different problem from "the site has been blacklisted" — it means the system is working and what's needed is consolidation, on-page work, and authority-building rather than emergency triage.

> **Coverage caveat:** GSC reflects Google only. Bing and other engines aren't in this dataset.


---



<a id="ga4-full"></a>

## Google Analytics 4 — Full Report

_source: `reports/full/03-ga4.md`_

##### Google Analytics 4 — Full Findings

**Property:** `properties/[redacted GA4 property]`
**Account:** [redacted analytics account]
**Window covered:** 2025-01-21 → 2026-05-19 (16 months)
**Pulled:** 2026-05-21

---

#### Read this first — two caveats that change every number below

**1. Bot and internal-team traffic is NOT filtered at the GA4 source.**
Roughly **70%+ of raw GA4 sessions are bots or internal traffic**, not real visitors. Of the 12,022 sessions reported over 16 months, only about **5,000 are real human sessions**. Every raw number in this report must be read with that in mind. Recommended fix: add bot- and internal-traffic exclusion filters in the GA4 data stream settings (country exclusions + IP exclusions for the Prior Vendor team).

**2. Conversion tracking is broken.**
A `generate_lead` event has been configured in GA4 since March 5, 2025 — and has **never fired**. The `purchase` and `s_click_to_call` events also sit at zero. Only `phone_click` (13 fires in 90 days) and `email_click` (4 fires in 90 days) are working. Form submissions on `/contact/` — which received 1,082 sessions and 224 phone/email clicks — are completely invisible to analytics. **Every conversion count shown is a floor, not a true number.**

---

#### 1. 16-Month Top-Line Performance

| Metric | 16-Month Total |
|---|---|
| Sessions (raw) | **12,022** |
| Sessions (real human, after bot filter estimate) | **~5,000** |
| Users | ~10,400 |
| New users | ~9,800 |
| Engaged sessions | 3,250 (27%) |
| Page views | 23,592 |
| Avg. session duration | ~3 min |
| Bounce rate | ~70% |
| Key events fired | **400** (floor — see caveat 2) |

---

#### 2. Monthly Session Trend

| Month | Sessions | Users | Key Events | Notes |
|---|---|---|---|---|
| Jan 2025 | 146 | 83 | 0 | Baseline |
| Feb 2025 | 359 | 190 | 0 | |
| Mar 2025 | 584 | 411 | 68 | First conversion peak |
| Apr 2025 | 282 | 204 | 13 | |
| May 2025 | 304 | 228 | 17 | |
| Jun 2025 | 305 | 229 | 26 | |
| Jul 2025 | 493 | 337 | 43 | |
| Aug 2025 | 1,210 | 1,012 | 19 | Cross-network campaign starts |
| **Sep 2025** | **1,437** | **1,285** | **149** | **Peak month** — 137 Cross-network conversions |
| Oct 2025 | 1,344 | 1,247 | 18 | Sustained traffic, conversions crash |
| Nov 2025 | 1,433 | 1,300 | 8 | Direct traffic peaks (mostly bot) |
| Dec 2025 | 929 | 811 | 17 | Traffic begins decline |
| Jan 2026 | 904 | 795 | 1 | |
| Feb 2026 | 705 | 575 | 4 | |
| Mar 2026 | 759 | 712 | 3 | |
| Apr 2026 | 658 | 541 | 12 | Rebuild deployed |
| May 2026 (partial) | 535 | 505 | 2 | |

##### What the trend shows
- **September 2025 = peak (1,437 sessions, 149 conversion events).** That peak was carried by a Google Ads Performance Max campaign — see Section 8.
- **May 2026 = 535 sessions** — a 63% drop from September's peak.
- **Conversion events fell from 149 (Sep 2025) to single-digits per month afterward.**

The conversion collapse happened **before** the traffic collapse. September 2025 fired 149 events; October 2025 fired 18 — an 88% drop in one month while sessions stayed flat. That pattern is the signature of **broken conversion tracking**, not collapsed traffic quality. Something stopped firing events around October 2025.

The April 2026 rebuild stabilized site behavior. The bigger ongoing issue is conversion-tracking failure and bot pollution, not the structural health of the site itself.

---

#### 3. Channel Distribution (16 months, raw)

| Channel | Sessions | Users | Key Events |
|---|---|---|---|
| **Direct** | ~6,650 (55%) | ~6,200 | ~80 |
| **Organic Search** | ~2,000 (17%) | ~1,100 | ~70 |
| **Cross-network** (Google Ads PMax) | ~1,400 (12%) | ~1,300 | ~147 |
| **Paid Search** | ~870 (7%) | ~810 | ~5 |
| **Referral** | ~600 (5%) | ~280 | ~60 |
| **Organic Social** | ~530 (4%) | ~485 | ~10 |
| **Unassigned** | ~140 | ~130 | ~5 |

##### Channel notes

**Cross-network (Google Ads Performance Max) was the highest-converting channel** for the months it ran (Aug–Sep 2025):
- Aug 2025: 551 sessions, 10 events
- Sep 2025: 835 sessions, 137 events
- Oct 2025: 6 sessions (campaign stopped)

Then the campaign disappeared from the data entirely. Worth investigating who managed the campaign, what was spent, and why it was stopped.

**Paid Search (text ads) was sustained but low-converting:**
- Mar 2025: 166 sessions, 0 events
- Aug 2025: 216 sessions, 1 event
- Sep 2025: 139 sessions, 0 events
- Oct 2025: 211 sessions, 2 events
- Nov 2025: 58 sessions, 0 events
- Total ~853 paid search sessions, ~5 conversions → **0.6% conversion rate**

That number is suspect given the measurement gaps — the underlying campaigns may have produced real leads that were never captured as GA4 events.

**Direct traffic dominates the raw chart at 55%, but most is bot.** After bot filtering, real Direct is likely 10–20% of the original total.

---

#### 4. Top 30 Landing Pages by Sessions (16 months)

| Page | Sessions | Conversions |
|---|---|---|
| `/` | 6,736 | 94 |
| `/contact/` | 1,082 | **224** |
| `/about-us/` | 744 | 3 |
| `/portfolio-gallery/` | 676 | 3 |
| `/services/` | 478 | 6 |
| `/bathroom-remodeling/` | 533 | 7 |
| `/kitchen-remodeling/` | 424 | 6 |
| `/blog/` | 262 | 0 |
| `/service-areas/` | 227 | 13 |
| `/whole-home-renovations/` | 245 | 15 |
| `/san-diego-ca/` | 184 | 12 |
| `/home-additions/` | 209 | 0 |
| `/services/bathroom-remodeling/` | 139 | 0 |
| `/services/whole-home-renovations/` | 91 | 0 |
| `/services/kitchen-remodeling/` | 96 | 0 |
| `/pool-house-guest-house-design/` | 127 | 0 |
| `/services/home-additions/` | 71 | 0 |
| `/scripps-ranch-remodel-project/` | 95 | 0 |
| `/escondido-bathroom-remodel-project/` | 97 | 0 |
| `/san-diego-home-show/` | 52 | 4 |
| `/rancho-penasquitos-remodel-project/` | 82 | 0 |
| `/carlsbad-kitchen-outdoor-living-remodel-project/` | 64 | 0 |
| `/tierrasanta-whole-house-renovation/` | 43 | 0 |
| `/el-cajon-master-bath-kitchen-remodel-project/` | 52 | 0 |
| `/project-consultation-design-services/` | 57 | 0 |
| `/escondido-remodel-project/` | 58 | 0 |
| `/home-gym-design-installation/` | 68 | 0 |
| `/blog/smart-lighting-and-climate-control/` | 51 | 0 |
| `/scripps-ranch-multiple-bathrooms-whole-house-remodel-project/` | 57 | 0 |
| `/portfolio-gallery/tierrasanta-whole-house-renovation/` | 33 | 0 |

##### What stands out

**`/contact/` is the conversion engine.** 1,082 sessions → 224 conversions = **20.7% conversion rate**. This is the page that's working — though even those 224 events are almost entirely phone and email clicks, not form submissions (see measurement gap above).

**Legacy service pages convert reasonably:**
- `/whole-home-renovations/` — 245 sessions → 15 conversions = 6.1%
- `/bathroom-remodeling/` — 533 sessions → 7 conversions = 1.3%
- `/services/` — 478 sessions → 6 conversions = 1.3%

**The newer `/services/[slug]/` detail pages convert at 0%:**
- `/services/bathroom-remodeling/` — 139 sessions, 0 events
- `/services/whole-home-renovations/` — 91 sessions, 0 events
- `/services/kitchen-remodeling/` — 96 sessions, 0 events
- `/services/home-additions/` — 71 sessions, 0 events

These pages get real traffic but have no working conversion path — either the contact form isn't placed on them, or the events aren't firing. This is a lead-capture gap, not a traffic gap.

**Portfolio pages show zero conversions** despite high session counts (52–97 sessions each). No CTA tracking is in place on individual portfolio detail pages.

**`/san-diego-home-show/`** captured 4 conversions from 52 sessions = 7.7% conversion rate. The event/landing-page combo worked.

---

#### 5. Top 30 Most-Viewed Pages

| Page | Page Views |
|---|---|
| `/` | 9,081 |
| `/contact/` | 1,301 |
| `/about-us/` | 936 |
| `/portfolio-gallery/` | 931 |
| `/services/` | 679 |
| `/bathroom-remodeling/` | 673 |
| `/kitchen-remodeling/` | 554 |
| `/blog/` | 513 |
| `/service-areas/` | 392 |
| `/whole-home-renovations/` | 349 |
| `/san-diego-ca/` | 291 |
| `/home-additions/` | 285 |
| `/services/bathroom-remodeling/` | 257 |
| `/services/whole-home-renovations/` | 179 |
| `/services/kitchen-remodeling/` | 147 |
| `/pool-house-guest-house-design/` | 133 |
| `/services/home-additions/` | 129 |
| `/scripps-ranch-remodel-project/` | 109 |
| `/escondido-bathroom-remodel-project/` | 108 |
| `/san-diego-home-show/` | 101 |
| `/rancho-penasquitos-remodel-project/` | 100 |
| `/carlsbad-kitchen-outdoor-living-remodel-project/` | 81 |
| `/portfolio-gallery/tierrasanta-whole-house-renovation/` | 81 |
| `/tierrasanta-whole-house-renovation/` | 81 |
| `/el-cajon-master-bath-kitchen-remodel-project/` | 78 |
| `/project-consultation-design-services/` | 78 |
| `/escondido-remodel-project/` | 77 |
| `/home-gym-design-installation/` | 70 |
| `/about` | 69 |
| `/blog/smart-lighting-and-climate-control/` | 69 |

---

#### 6. Country Distribution — The Bot Problem

| Country | Sessions | Engaged | Key Events | Classification |
|---|---|---|---|---|
| **United States** | 4,573 (38%) | 2,273 (50%) | **93** | Real target market |
| China | 2,887 (24%) | 104 (3.6%) | 0 | Bot |
| Singapore | 2,039 (17%) | 92 (4.5%) | 0 | Bot |
| Mexico | 1,116 (9%) | 434 (39%) | **126** | Mixed — some real |
| Philippines | 775 (6%) | 540 (70%) | **89** | Internal Prior Vendor team |
| Pakistan | 436 (4%) | 302 (69%) | **32** | Suspect — high engagement, likely scrapers/team |
| India | 266 | 174 | 18 | Mixed |
| Serbia | 187 | 138 | 20 | Likely internal team |
| Germany | 178 | 10 | 0 | Bot |
| (not set) | 133 | 16 | 0 | Bot |
| Canada | 100 | 51 | 3 | Real (cross-border) |

##### Bot vs. real breakdown
- **Bots:** China (2,887), Singapore (2,039), Germany (178), (not set) (133), plus smaller volumes from India, Bangladesh, Indonesia, Vietnam, Ireland, Türkiye, Iraq, and others — together roughly 6,000+ sessions.
- **Internal team:** Philippines (775) and Serbia (187) — both show abnormally high engagement-per-user, consistent with the previous dev team working in the site.
- **Pakistan (436):** suspect — could be internal or scraper traffic.
- **Real target market:** USA (4,573) is the genuine audience. Mexico (1,116) and Canada (100) are partially real cross-border interest.

**After filtering bots and the internal Philippines/Serbia team, real human sessions are ~5,000 over 16 months — about 310 sessions/month of real traffic.**

##### Where conversions actually happen
- **United States: 93 conversions** — the real target market signal.
- **Mexico: 126 conversions** — either bilingual San Diego–Tijuana cross-border traffic (real and valuable), or spam events firing from click-farms. Worth segmenting by source/medium and language to determine.
- **Philippines: 89 conversions** — almost certainly internal team testing forms.

After filtering, **real conversion count over 16 months is roughly 220** (US + Mexico + Canada combined) — about 14 leads/month, or 1 lead every 22 real sessions. That's a reasonable conversion rate for a luxury remodeling brand, but the absolute volume is small and the underlying tracking is unreliable.

---

#### 7. Device & Browser (16 months)

| Browser + OS | Sessions | Engagement |
|---|---|---|
| Chrome / Windows | 6,966 (58%) | 27% engaged |
| Safari / iOS | 1,124 (9%) | 47% engaged |
| Chrome / Android | 1,119 (9%) | 42% engaged |
| Chrome / macOS | 881 (7%) | 49% engaged |
| Android Webview | 510 | 45% |
| Chrome / Linux | 507 | 19% (bot signal) |
| Edge / Windows | 218 | 55% |
| Safari / macOS | 207 | 66% |
| Chrome / iOS | 189 | 59% |
| Safari (in-app) | 135 | 47% |
| Edge / macOS | 130 | 82% |
| Firefox / Windows | 109 | 52% |
| Chrome OS | 81 | 77% |
| Samsung Internet | 62 | 47% |

##### Observations
- **Mobile share (iOS + Android + Webview): 23%** — much lower than typical home-services norms (60%+) because bot traffic on desktop user agents dominates.
- After bot filtering, real-user mobile share should rise toward 50%+.
- **Mac users engage at roughly 2× the rate of Windows users** — consistent with a luxury homeowner demographic skewing Mac.
- Chrome on Linux at 19% engagement is a bot/scraper signal.

---

#### 8. Conversion Events Configured

| Event Name | Counting | Created | 16-Month Fires |
|---|---|---|---|
| `purchase` | ONCE_PER_EVENT | 2024-08-27 | **0** |
| `generate_lead` | ONCE_PER_EVENT | 2025-03-05 | **0** — never fired since creation |
| `s_click_to_call` | ONCE_PER_EVENT | 2025-03-07 | **0** |
| `email_click` | ONCE_PER_EVENT | 2025-03-13 | ~50 |
| `phone_click` | ONCE_PER_EVENT | 2025-03-13 | ~200 |

##### What's broken
- `purchase` was configured but is irrelevant to a service business and never fires.
- `generate_lead` is the most important event — and it has **never fired since it was created in March 2025**. The contact form is not pushing to this event.
- `s_click_to_call` never fires and appears deprecated.
- `phone_click` and `email_click` are the only working conversion events, and even their coverage is patchy across page templates.
- **Contact form submissions are not captured as a discrete event anywhere in GA4.**

The drop from 149 conversions (Sep 2025) to 18 (Oct 2025) to single digits/month afterward maps to **the end of the Cross-network Google Ads campaign + a tracking failure around the same time**.

---

#### 9. Top Event Counts (90 days)

| Event | Total | Unique Users |
|---|---|---|
| page_view | 4,713 | 1,903 |
| user_engagement | 2,499 | 407 |
| session_start | 2,130 | 1,896 |
| first_visit | 1,887 | 1,880 |
| scroll | 1,113 | 404 |
| video_progress | 148 | 8 |
| video_start | 132 | 16 |
| click | 40 | 24 |
| video_complete | 14 | 4 |
| phone_click | 13 | 6 |
| email_click | 4 | 3 |

**There is no `form_submit` or `contact_submit` event firing.** Despite 1,082 sessions landing on `/contact/` over 16 months and 224 key events from that page, those 224 are phone and email clicks — not form submissions. The consultation form on `/contact/` is not tracked.

---

#### 10. Critical Findings

##### Finding 1 — Conversion tracking has been broken since at least October 2025
`generate_lead` has never fired. `purchase` and `s_click_to_call` have never fired. Conversion events dropped from 149 → 18 → single-digits month-over-month while traffic stayed flat. The reported conversion count is a floor — true conversions are unknown.

##### Finding 2 — 70%+ of GA4 raw data is bot or internal traffic
Reports built off raw GA4 numbers overstate real traffic by roughly 2×. **Internal traffic filters need to be applied at the data stream level**:
- Country exclusions: Singapore, China, Germany, Pakistan
- IP exclusions for the Philippines/Serbia internal team
- Common AWS / data-center IP range exclusions

##### Finding 3 — A Google Ads Performance Max campaign delivered 147 conversions in Aug–Sep 2025, then disappeared
This is the single most successful marketing event in the 16-month window. The campaign stopped, and the conversion-tracking break that followed makes it hard to evaluate the campaign's true ROI. Questions worth answering:
- Who managed the campaign
- What was the spend
- Why it was stopped
- Whether the underlying tracking attribution was wired correctly

##### Finding 4 — The new `/services/[slug]/` pages have ZERO conversions
The newer service detail pages (`/services/bathroom-remodeling/`, `/services/kitchen-remodeling/`, etc.) get real traffic but earn no conversions. The CTAs are missing or events aren't firing on these pages — a higher-priority fix than building new content.

##### Finding 5 — Mexico shows 126 conversions
Either real bilingual San Diego–Tijuana cross-border interest (a genuine market signal), or click-farm spam. Worth segmenting by source/medium and language to determine which. If real, there's a Spanish-language audience opportunity here.

##### Finding 6 — Portfolio pages have a zero-conversion floor
Despite engaged visitors (50–250+ second sessions on portfolio pages), zero conversions. The "contact us about a project like this one" CTA is either missing or not tracked.

##### Finding 7 — Direct traffic appears to dominate, but most is bot
Direct sits at 55% of raw sessions. After filtering, Direct likely drops to ~10–15%, making **Organic Search the #1 real channel.**

##### Finding 8 — GMB (Google Business Profile) is a distinct traffic stream worth tracking separately
123 sessions over 89 days come in via `?utm_source=gmb` from the Google Business Profile listing. Today this gets blended into "organic" in standard reports — but it's a separate channel with its own management surface (the GBP listing itself) and deserves its own line in reporting.

##### Finding 9 — AI-engine referrals are showing up
ChatGPT, Claude, and Copilot are each sending small but real traffic to client-example.invalid. This is first-party evidence that content is being cited by LLMs in user conversations — an early-mover signal worth tracking as a discrete channel going forward.

---

#### 11. Recommended GA4 Configuration Improvements

| Priority | Action | Why |
|---|---|---|
| Critical | Add Internal Traffic and bot filter (exclude PH, China, Singapore, Germany, AWS subnets, internal IPs) | Get clean data for decision-making |
| Critical | Fix `generate_lead` — wire form submit to dataLayer push via GTM | Recover form-submit tracking that has never worked |
| Critical | Add `phone_click` and `email_click` triggers to every page that displays the phone/email | Capture full conversion volume |
| Critical | Delete `purchase` and `s_click_to_call` events | Event hygiene |
| High | Investigate the Cross-network Google Ads campaign (Aug–Sep 2025) — confirm ROI, decide whether to restart | Recovery of 147-events/month potential |
| High | Add UTM tagging on social, email, and print campaigns | Proper attribution |
| High | Track GMB as a distinct channel (already utm-tagged) | Separate from organic search in reporting |
| High | Track AI engines (ChatGPT, Claude, Copilot, Perplexity) as a custom channel group | First-party signal of LLM referral |
| High | Add scroll depth (25/50/75/100%) custom events | Funnel diagnostics |
| High | Add CTA click events (consultation buttons, portfolio cards) | Capture full funnel |
| Medium | Enable Demographics & Interests (consent permitting) | Audience insight |
| Medium | Set up custom audiences for remarketing | Future ad campaigns |
| Medium | Set up Looker Studio dashboards | Reliable reporting surface |
| Medium | Set up data export to BigQuery (free tier) | Long-term data retention beyond GA4's 14-month default |


---



<a id="ga4-overview"></a>

## GA4 Overview

_source: `research/ga4/overview.md`_

##### GA4 Overview — First-Party Site Behavior

**Property:** `properties/[redacted GA4 property]` (https://client-example.invalid/)
**Account:** [redacted analytics account]
**Window:** 2026-02-20 → 2026-05-19 (89 days)
**Pulled:** 2026-05-21

---

#### Two caveats that frame every number below

**1. Bot and internal traffic is NOT filtered at the GA4 source.** Roughly 70%+ of raw sessions in this property are bots or internal-team traffic. Every "raw" number below is inflated, and the real-human session estimate is materially smaller. Bot filtering needs to be applied in the GA4 data stream settings.

**2. Conversion tracking is broken.** The `generate_lead` event has been configured in GA4 since March 5, 2025 and has **never fired**. `purchase` and `s_click_to_call` also sit at zero. Only `phone_click` and `email_click` are firing. Form submissions on `/contact/` are completely invisible — the 17 events shown in the 89-day window are a floor, not a true count.

---

#### Headline Numbers (89 days, raw)

| Metric | Value |
|---|---|
| **Total sessions (raw)** | 2,146 |
| **Total users** | ~1,922 |
| **New users** | ~1,810 |
| **Engaged sessions** | ~514 (24%) |
| **Total page views** | 4,713 |
| **Avg. session duration** | ~119 seconds (skewed by outliers) |
| **Bounce rate (overall)** | ~75% |
| **Key events fired** | 17 total (floor — see caveat 2) |

##### Reading the numbers
- Real session volume is **much higher than Ahrefs estimated** (~24 raw sessions/day on average).
- Engagement is **poor** — 75% bounce rate, only 24% engaged sessions — but a large share of those sessions are bots that drag the average down.
- Reported conversions are minimal — 17 key events in 89 days, and form submissions are not captured at all.

---

#### Traffic Quality Is Severely Distorted by Bots

This is the most important finding in the GA4 data. **The reported traffic is dominated by bot, scraper, and overseas-developer activity, not by real San Diego homeowners.**

##### Geographic breakdown (top sources)

| City / Region | Sessions | Users | Key Events | Classification |
|---|---|---|---|---|
| **Singapore** | 710 | 709 | 0 | Bot / VPN |
| **(not set)** | 321 | 321 | 0 | Anonymous bot |
| **San Diego, CA** | 86 | 62 | 0 | Real target market |
| **Los Angeles, CA** | 53 | 42 | 1 | Adjacent market |
| **Meycauayan, Philippines** | 53 | 6 | 9 | Internal Prior Vendor team (6 users, 53 sessions) |
| **Lanzhou, China** | 44 | 44 | 0 | Bot |
| **Lahore, Pakistan** | 29 | 27 | 0 | Bot / scraper |
| **Belgrade, Serbia** | 28 | 15 | 0 | Likely internal team |
| **Flint Hill, VA** | 28 | 28 | 0 | Bot farm |
| **Boardman, OR** | 23 | 23 | 0 | AWS data center |
| **Charleston, SC** | 20 | 2 | 0 | Bot |
| **Ashburn, VA** | 15 | 15 | 0 | AWS / data center |
| **Aspen, CO** | 15 | 15 | 0 | Suspect |

##### Filtered estimate (89-day window)
- **Bot / non-human sessions:** ~1,500+ (70%+ of total)
- **Real US sessions:** ~250 (12% of total)
- **Real San Diego–area sessions:** ~140 / quarter ≈ 47 / month
- **Internal team activity (PH, ClickUp/Worksection referrals):** ~70 / quarter

##### Why this matters
1. **All "site traffic" numbers must be filtered before they're used to make decisions.** Raw GA4 sessions vastly overstate real audience reach.
2. **Conversion rate cannot be calculated from raw sessions** — only from real US human traffic.
3. **Bot filtering must be implemented at the GA4 level**: exclude internal IPs, exclude known bot-source countries (Singapore, China, Germany, Pakistan), exclude common AWS / data-center subnets.
4. **9 of the 17 key events fired in this window came from the internal Philippines team** — those are not real conversions, they're staff testing forms.

---

#### Daily Session Trend

Session volume is **stable around 20–40/day** with occasional spikes:

| Date | Sessions | Notes |
|---|---|---|
| 2026-04-17 | 41 | Pre-rebuild test traffic + 4 key events |
| 2026-04-18 | 9 | 4 key events (internal QA) |
| 2026-04-19 | 8 | 4 key events (internal QA) |
| **2026-04-20** | **67** | **Rebuild day** — 554 pageviews from 60 users (heavy QA activity) |
| 2026-04-21 | 28 | 140 pageviews (continued QA) |
| 2026-04-22 | 40 | 240 pageviews (continued QA) |
| 2026-04-23 | 24 | 189 pageviews |
| 2026-04-24 | 29 | 110 pageviews |
| 2026-05-13 | 62 | Recent baseline |
| 2026-05-19 | 47 | Latest day |

##### Rebuild-period spike
April 17–24 shows a huge pageview/session ratio (often 7–25 PV/session vs the normal 1–2) — consistent with the development team testing the new site post-launch. This distorts engagement metrics for that period.

---

#### 16-Month Context

This 89-day window sits inside a larger 16-month trend (Jan 2025 → May 2026):

- **Total raw sessions:** 12,022
- **Real human sessions (after bot filter estimate):** ~5,000
- **Peak month:** September 2025 — 1,437 sessions, 149 conversion events (driven by a Google Ads Performance Max campaign)
- **Conversion break:** Around October 2025, conversion events collapsed from 149 → 18 → single digits/month, while raw traffic stayed flat. This signature is **broken tracking**, not collapsed traffic quality.
- **Current bottom:** May 2026 (partial) — 535 sessions.

The April 2026 rebuild stabilized site behavior; the bigger ongoing issue is conversion-tracking failure and bot pollution, not site health.

---

#### Engagement Quality

When we look at engagement metrics excluding the rebuild week and the bot floods:

| Metric | All Traffic | Estimated Real-User |
|---|---|---|
| Sessions / day | ~24 | ~3–5 |
| Avg. session duration | 119s | ~150–200s (estimated) |
| Bounce rate | 75% | ~65% (estimated) |
| Engaged sessions | 24% | ~30–35% (estimated) |
| Pages / session | 2.2 | ~1.8 |

These adjusted numbers are reasonable for a service-business homepage, but show **the site is not pulling people deep into the content**. Service pages, portfolio pages, and contact pages should be earning more downstream traffic from the homepage.

---

#### Device Split

| Device | Sessions | Users | Engaged | Bounce | Key Events |
|---|---|---|---|---|---|
| **Desktop** | 1,939 (90%) | 1,741 | 438 | 77.4% | 16 |
| **Mobile** | 196 (9%) | 171 | 71 | 63.8% | 1 |
| **Tablet** | 7 | 6 | 5 | 28.6% | 0 |
| **Smart TV** | 4 | 4 | 0 | 100% | 0 |

##### Critical observation
A 90/9 desktop/mobile split is **the opposite of what a healthy home-services site shows**. Industry benchmark: **60–70% mobile** for residential remodeling. This split confirms bot/dev dominance — bots run on desktop user agents.

After bot filtering, mobile share should rise substantially. Real-user mobile is likely 60%+, which makes the site's **mobile PageSpeed of 53/100** a higher-priority issue than the raw numbers suggested.

---

#### Channel Note — Distinct Traffic Streams to Track Separately

Two traffic streams deserve their own line in reporting going forward:

- **GMB (Google Business Profile):** 123 sessions / 89 days from `?utm_source=gmb`. Today this gets lumped into "organic" — it deserves its own channel.
- **AI engines (ChatGPT, Claude, Copilot):** small but real referral traffic. First-party signal that the site is being cited in LLM conversations — early-mover indicator worth tracking as a custom channel group.

See `sources.md` for the full channel breakdown.

---

#### Comparison to Ahrefs / GSC

| Source | Real Monthly Traffic Estimate |
|---|---|
| **Ahrefs** (US, organic only) | 1 visit / mo |
| **GSC** (90 days, US only) | 33 clicks / mo (filtered, deduped of internal team) |
| **GA4** (raw, 90 days) | ~715 sessions / mo |
| **GA4** (estimated real-human, US) | ~80–130 sessions / mo |

The three measurement systems give wildly different answers because they measure different things:
- Ahrefs estimates from public SERP scraping (undercounts everything).
- GSC reports actual Google clicks (most accurate for **organic Google search only**).
- GA4 reports everything including bots, dev, direct, social, paid, email, etc. (overcounts without filtering).

**For reliable reporting, standardize on:** GSC for organic-search performance, GA4 (filtered) for total real-user traffic and behavior. Ahrefs is a secondary directional signal only.


---



<a id="ga4-sources"></a>

## GA4 Sources / Channels

_source: `research/ga4/sources.md`_

##### GA4 Traffic Sources & Channels

**Property:** [redacted GA4 property]
**Window:** 2026-02-20 → 2026-05-19 (89 days)
**Pulled:** 2026-05-21

---

#### Two caveats before reading any number

**1. Bot and internal traffic is NOT filtered at the GA4 source.** "Direct" in particular is heavily inflated by bot sessions from Singapore, China, Pakistan, and AWS subnets. Real-human direct traffic is a small fraction of what the chart shows.

**2. Conversion counts are a floor.** Form submissions are not tracked (`generate_lead` has never fired since it was created in March 2025), so any "key events" column understates real conversions on every channel.

---

#### Channel Distribution (Raw, Unfiltered)

| Channel | Source / Medium | Sessions | Users | Engaged | Key Events |
|---|---|---|---|---|---|
| **Direct** | (direct) / (none) | 1,583 | 1,546 | 210 | 4 |
| **Organic Search** | google / organic | 204 | 86 | 134 | **12** |
| **Organic Search** | gmb / organic | 123 | 106 | 65 | 1 |
| **Organic Social** | ig / social | 39 | 37 | 15 | 0 |
| **Referral** | qr1.be / referral | 28 | 28 | 1 | 0 |
| **Organic Social** | m.facebook.com / referral | 25 | 25 | 1 | 0 |
| **Organic Search** | bing / organic | 20 | 20 | 12 | 0 |
| **Referral** | search.google.com / referral | 17 | 2 | 16 | 0 |
| **Organic Social** | facebook.com / referral | 16 | 16 | 15 | 0 |
| **Unassigned** | (not set) | 14 | 14 | 0 | 0 |
| **Referral** | app.clickup.com / referral | 13 | 3 | 10 | 0 |
| **Organic Social** | houzz.com / referral | 9 | 8 | 8 | 0 |
| **Referral** | project-workspace.example / referral | 7 | 3 | 2 | 0 |
| **Organic Social** | yelp.com / referral | 6 | 5 | 4 | 0 |
| **Referral** | posh.vip / referral | 4 | 1 | 2 | 0 |
| **Organic Search** | yahoo / organic | 3 | 2 | 2 | 0 |
| **Referral** | chatgpt.com / referral | 3 | 3 | 2 | 0 |
| **Organic Social** | m.yelp.com / referral | 2 | 2 | 1 | 0 |
| **Referral** | claude.ai / referral | 2 | 1 | 1 | 0 |
| **Referral** | copilot.com / referral | 1 | 1 | 1 | 0 |
| **Organic Search** | duckduckgo / organic | 1 | 1 | 1 | 0 |
| **Organic Search** | chatgpt.com / organic | 1 | 1 | 0 | 0 |

---

#### Key Findings

##### 1. "Direct" dominates the chart (74%) — most is bot

1,583 of 2,146 sessions are tagged "Direct / (direct) / (none)" — almost certainly the same Singapore / China / Pakistan / data-center traffic dominating the geographic report. Real direct traffic (people typing client-example.invalid or clicking unattributed bookmarks) is probably 5–10% of this number.

##### 2. Organic Search Google is the clearest signal — and it converts

204 sessions from `google / organic` over 89 days = **~68 sessions/month from real Google search**. Of these:
- 86 unique users
- 134 engaged sessions (66% engagement) — much higher quality than bot direct traffic
- 12 key events (phone/email clicks) — a meaningful conversion signal

This is the channel that already converts when not held back by tracking gaps.

##### 3. GMB / Google Business Profile is a distinct traffic stream

123 sessions tagged `gmb / organic` (the homepage URL with `?utm_source=gmb&utm_medium=organic&utm_campaign=website`) — these are clicks from the Google Business Profile listing's website link.

- 106 users
- 65 engaged sessions (53% engagement)
- 1 key event

**GMB is a separate channel from organic Google search** and should be reported separately, not lumped into "organic". It has its own management surface (the GBP listing itself) and its own optimization levers.

Combined, **Google search + GMB = 327 sessions / 89 days ≈ 110 sessions/month** of real Google-driven traffic — addressable and healthy.

##### 4. AI-engine referrals are present — early-mover signal

Three AI tools are sending small but real traffic:
- **chatgpt.com**: 3 + 3 + 1 = 7 sessions
- **claude.ai**: 2 sessions
- **copilot.com**: 1 session

This is small but meaningful: it's first-party evidence that client-example.invalid is being **cited / linked by LLMs in user conversations**. Tracking AI referrals as a discrete channel going forward will let you measure whether this stream grows.

##### 5. Social referrals are modest

| Platform | Sessions | Engaged |
|---|---|---|
| Instagram (ig) | 39 | 15 |
| Facebook (m.facebook + facebook + fb mobile) | 41 | 16 |
| Houzz | 9 | 8 (89% engagement) |
| Yelp (web + mobile) | 8 | 5 |

**Houzz visitors are extremely engaged** (89% engagement rate vs ~24% site-wide). These are pre-qualified buyers who found Client Company through the Best of Houzz badge.

##### 6. Referrals reveal internal tooling

- `app.clickup.com`: 13 sessions, 3 users — internal team referencing the site from their PM tool
- `project-workspace.example`: 7 sessions — another PM/CRM tool
- `qr1.be`: 28 sessions — a QR code shortener (possibly print marketing or business cards)
- `docs.google.com`: 1 session — internal docs

The `qr1.be` source is worth investigating: where is the QR code printed, and what page does it land on? 28 sessions/quarter is non-trivial.

##### 7. Bing exists but is small

20 sessions from Bing in 89 days = ~7 sessions/month. Worth a Bing Webmaster Tools setup but not a primary channel.

---

#### Channel Strategy Implications

##### Highest-leverage channels (real traffic, real engagement)
1. **Google Search organic** — 204 sessions, 12 key events
2. **GMB / Google Business Profile** — 123 sessions, 1 key event (track separately)
3. **Houzz referrals** — 9 sessions, 89% engagement (premium pipeline)

##### Maintain-only channels
4. **Instagram, Facebook** — present but low engagement
5. **Yelp** — small but qualified
6. **Bing** — minimal volume

##### Growth channels (untapped or new)
7. **AI engines (ChatGPT, Claude, Copilot)** — early, growing, worth dedicated tracking
8. **Pinterest** — not visible in current data despite Client Company having a Pinterest account; unused channel inventory worth investigating

##### Filter / fix channels
9. **"Direct"** — must be filtered to extract real direct traffic from bot noise
10. **`qr1.be` and PM-tool referrals** — internal; should be excluded from public reports

---

#### Configuration Recommendations

1. **Set up Internal Traffic filter** in GA4 — exclude Philippines, ClickUp, Worksection, internal IPs
2. **Set up Bot Filter** — exclude Singapore, China data centers, Germany, Pakistan, AWS subnets
3. **Tag GMB traffic as its own channel** — already utm-tagged; route it into a custom channel group instead of "organic"
4. **Add UTM tagging on social channels** — Instagram, Facebook, Yelp should have utm tags so social can be properly attributed
5. **Track AI engines as a custom channel group** — manually classify `chatgpt.com`, `claude.ai`, `copilot.com`, `perplexity.ai`, etc.
6. **Investigate the `qr1.be` source** — find where the QR code is deployed


---



<a id="ga4-conversions"></a>

## GA4 Conversions

_source: `research/ga4/conversions.md`_

##### GA4 Conversion Tracking & Events

**Property:** [redacted GA4 property]
**Window:** 2026-02-20 → 2026-05-19 (89 days)
**Pulled:** 2026-05-21

---

#### Headline: conversion tracking is broken

Two facts up front:

1. **`generate_lead` has been configured in GA4 since March 5, 2025 — and has never fired.** Not once. The contact form on `/contact/` is not pushing this event.
2. **70%+ of GA4 sessions are bots or internal-team traffic**, so even the events that do fire are partially polluted by staff testing forms.

Every conversion number in this file is a **floor**. The true conversion volume is unknown until tracking is fixed.

---

#### Configured Key Events (Conversions)

| Event Name | Counting Method | Created | Last 89d Fires |
|---|---|---|---|
| `purchase` | ONCE_PER_EVENT | 2024-08-27 | **0** |
| `generate_lead` | ONCE_PER_EVENT | 2025-03-05 | **0** — never fired since creation |
| `s_click_to_call` | ONCE_PER_EVENT | 2025-03-07 | **0** |
| `email_click` | ONCE_PER_EVENT | 2025-03-13 | 4 |
| `phone_click` | ONCE_PER_EVENT | 2025-03-13 | 13 |

##### Findings

1. **`purchase` event configured but never fires** — likely a template remnant. Service businesses don't need a `purchase` event. Should be removed or repurposed.

2. **`generate_lead` event configured but has NEVER fired since March 2025.** This is the most critical missing conversion. A remodeling firm whose primary CTA is "Book Your Consultation" should be tracking form submissions as `generate_lead`. The event exists in GA4 but is **not wired to the contact form**. Likely causes:
   - Missing GTM trigger on form submit
   - Form is rendered via a plugin (Gravity Forms / Contact Form 7) that needs a DataLayer push
   - The form-submit wiring was never completed, or it broke during the April 2026 rebuild

3. **`s_click_to_call` event configured but never fires** — the "s_" prefix suggests it was a custom event from a previous tracker that's no longer being pushed. Either it duplicates `phone_click` (which IS firing 13 times) or it's broken. Recommend deleting.

4. **`phone_click` and `email_click` ARE firing** — these are the only working conversion events. Together they represent **17 total conversion signals in 89 days** = ~6/month.

---

#### All Event Counts (Last 89 Days)

| Event | Total Fires | Unique Users |
|---|---|---|
| `page_view` | 4,713 | 1,903 |
| `user_engagement` | 2,499 | 407 |
| `session_start` | 2,130 | 1,896 |
| `first_visit` | 1,887 | 1,880 |
| `scroll` | 1,113 | 404 |
| `video_progress` | 148 | 8 |
| `video_start` | 132 | 16 |
| `click` | 40 | 24 |
| `video_complete` | 14 | 4 |
| `phone_click` | 13 | 6 |
| `email_click` | 4 | 3 |

##### Observations

- **`scroll`, `click`, `video_progress` events are firing** — GA4 Enhanced Measurement is on and working
- **`click` event fires only 40 times across 89 days for 24 users** — auto-tracked outbound clicks. Could be much richer with proper GTM event tracking
- **Video engagement IS happening** — 148 video_progress events, 14 video_complete events — but only 4 to 16 unique users. Worth investigating which page hosts the video(s)
- **No `form_submit` event in the list** — confirming the form-tracking gap. The consultation form mechanism on the site isn't producing any analytics signal

---

#### Conversion Rate (Real, with caveats)

Using filtered estimates and acknowledging the tracking floor:

| Metric | Value |
|---|---|
| Real US human sessions (90 days) | ~250 |
| `phone_click` events (90 days) | 13 |
| `email_click` events (90 days) | 4 |
| **Total real conversion signals captured** | 17 |
| **Implied conversion rate (captured events only)** | **~6.8%** |

A 6.8% click-to-call/email rate would be decent for a luxury home-services site, but the absolute volume is so low (17 events / 3 months) that one broken event handler — like form_submit — could easily be **doubling the actual conversion volume** without anyone seeing it.

---

#### Critical Measurement Gaps

##### Gap 1 — Form submit tracking
**No `form_submit`, `contact_form_submit`, or fired `generate_lead` events exist.**

The site has at least one contact form (visible at `/contact/` and likely embedded across service pages). The 16-month picture is even sharper: `/contact/` received 1,082 sessions and 224 phone/email clicks — but **zero form submissions captured as events**. Form submits must be tracked because:
- Phone clicks (13/quarter) and email clicks (4/quarter) are only the simplest conversion paths
- Most luxury remodeling leads come through a structured consultation request form
- The `/contact/` page shows ~45% bounce rate (vs 75% site avg) — clear intent — but no event fires when they convert

**Fix:** Implement a DataLayer push on form submit via GTM, fire as `generate_lead`.

##### Gap 2 — Phone click coverage
13 phone clicks in 89 days = ~4–5/month. Low for a site with the actual traffic levels. Possible causes:
- Phone number CTA only fires on mobile (and mobile traffic is artificially low due to bots inflating desktop)
- Click handler missing on header phone number, sticky bottom CTA, or footer phone
- Multiple phone number elements without consistent event firing

**Fix:** Audit every clickable phone element on the site to ensure `phone_click` fires from each.

##### Gap 3 — Email click coverage
4 email clicks in 89 days = ~1/month. Very low even accounting for the channel.

**Fix:** Same audit on every `mailto:` link.

##### Gap 4 — Outbound/social click tracking
The `click` event fires 40 times/89 days across 24 users. Enhanced Measurement covers outbound clicks but the volume suggests outbound-link interactions (Yelp, Houzz, Facebook, Instagram from site footer) are happening but not being captured granularly.

**Fix:** Set up GTM listeners on:
- Yelp link clicks
- Houzz link clicks
- Facebook / Instagram / YouTube / Pinterest social link clicks
- "Book Consultation" button clicks (cross-page)
- Portfolio item clicks
- Service-area card clicks

##### Gap 5 — Scroll depth & engagement granularity
`scroll` event fires 1,113 times for 404 users — meaning the average user who scrolls fires the event ~2.8 times. Default scroll tracking only fires at 90%. **Custom scroll-depth tracking (25%, 50%, 75%, 100%) would reveal where users drop off on long service/portfolio pages.**

##### Gap 6 — Bot traffic distorting every engagement metric
70%+ of sessions are bots and they inflate `page_view`, `session_start`, and `first_visit` counts. Without proper bot filtering, **every engagement and conversion metric reported in GA4 dashboards is materially wrong.**

---

#### Recommended Event Setup (Priority Order)

| Priority | Event | Mechanism |
|---|---|---|
| Critical | `generate_lead` on form submit | GTM trigger on form success |
| Critical | Bot/internal filter in GA4 admin | Geographic + IP exclusions |
| High | Outbound social/review-site clicks | GTM click listeners |
| High | "Book Consultation" CTA clicks (cross-page) | GTM click listener with button class |
| High | Audit all `tel:` and `mailto:` link triggers | Inspect each page template |
| Medium | Scroll depth (25/50/75/100%) | GTM scroll trigger |
| Medium | Time-on-page thresholds (30s / 60s / 180s) | GTM timer trigger |
| Medium | Video completion tracking per video | GTM YouTube/HTML5 listener |
| Low | Delete deprecated `purchase` event | GA4 Admin |
| Low | Delete or fix deprecated `s_click_to_call` event | GA4 Admin |

---

#### What This Means

The site is **operating with broken conversion measurement**. Any decisions about marketing investment are being made against data that is:
1. Inflated by bot traffic (70%+ of raw sessions)
2. Missing form-submit events entirely (`generate_lead` has never fired)
3. Tracking deprecated events that never fire (`purchase`, `s_click_to_call`)
4. Not capturing the full conversion journey (no outbound, CTA, or scroll-depth granularity)

**Fixing measurement is a prerequisite to evaluating performance.** Until conversion tracking is reliable, it's not possible to:
- Calculate true conversion rate
- Measure the impact of CRO changes
- Justify or evaluate marketing spend with ROI math
- Compare channels on lead quality (only on session volume)

This is the highest-leverage first move for the analytics stack.


---



<a id="ga4-landing-pages"></a>

## GA4 Landing Pages

_source: `research/ga4/landing-pages.md`_

##### GA4 Landing Pages

**Property:** [redacted GA4 property]
**Window:** 2026-02-20 → 2026-05-19 (89 days)
**Total landing pages with sessions:** 286
**Pulled:** 2026-05-21

---

#### Two caveats before reading

**1. Bot and internal traffic is NOT filtered at the GA4 source** (70%+ of sessions). Many of the "sessions" columns below include bot landings — particularly on `/` and on `(not set)`.

**2. Conversion counts are a floor.** `generate_lead` has never fired since it was configured in March 2025. The only working conversion events are `phone_click` and `email_click`. Form submissions on `/contact/` are completely invisible to analytics, so a page showing 0 key events may have produced real form submits that were never tracked.

---

#### Top Landing Pages

| Landing Page | Sessions | Users | Engaged | Bounce | Avg Duration | Key Events |
|---|---|---|---|---|---|---|
| `/` | 952 | 845 | 321 | 66.3% | 136s | 4 |
| `/services` | 54 | 52 | 8 | 85.2% | 597s | 0 |
| `(not set)` | 45 | 33 | 1 | 97.8% | 1s | 0 |
| `/portfolio-gallery` | 43 | 42 | 9 | 79.1% | 165s | 1 |
| `/services/bathroom-remodeling` | 35 | 35 | 3 | 91.4% | 299s | 3 |
| `/contact` | 33 | 30 | 18 | 45.5% | 163s | 0 |
| `/services/whole-home-renovations` | 33 | 33 | 11 | 66.7% | 218s | 1 |
| `/about-us` | 31 | 31 | 5 | 83.9% | 151s | 0 |
| `/service-areas` | 30 | 30 | 0 | 100% | 0.2s | 0 |
| `/about` | 29 | 29 | 6 | 79.3% | 32s | 0 |
| `/blog` | 29 | 29 | 3 | 89.7% | 226s | 0 |
| `/services/kitchen-remodeling` | 21 | 21 | 1 | 95.2% | 1s | 0 |
| `/san-diego-ca` | 20 | 20 | 1 | 95.0% | 12s | 0 |
| `/services/home-additions` | 19 | 19 | 3 | 84.2% | 534s | 0 |

---

#### Findings

##### 1. Homepage = 44% of all sessions

952 of 2,146 sessions land on `/` — the homepage is the only meaningful entry point. After bot filtering, this share is likely to drop, but it confirms that **deep-page traffic is essentially zero**.

##### 2. `/contact` has the best engagement on the site — but its conversions are invisible

`/contact` shows:
- **45.5% bounce rate** (vs site avg 75%)
- **54% engagement rate**
- 18 of 33 sessions engaged

People who land on `/contact` directly already intend to convert. **Yet 0 key events fired from contact-page landings in this 89-day window.** That's a measurement gap, not a content failure: form submissions on `/contact` aren't tracked at all (`generate_lead` has never fired), so real conversions on this page are happening invisibly.

In the broader 16-month view, `/contact/` accumulated 1,082 sessions and 224 conversion events — but those 224 are all phone and email clicks, not form submissions. Form-submit tracking would likely double or triple the captured conversion count on this page alone.

##### 3. Legacy URLs are still landing pages

GA4 confirms the dual URL structure problem:

| Pair | New URL | Old URL | Status |
|---|---|---|---|
| About | `/about-us` (31 ses) | `/about` (29 ses) | Both indexed, splitting traffic |
| Locations | `/service-areas` (30 ses) | `/san-diego-ca` (20 ses) | Both indexed |
| Services overview | `/services` (54 ses) | `/home-redesign-services` (13 ses) | Both indexed |
| Bathroom | `/services/bathroom-remodeling` (35 ses) | `/services/bathroom-remodeling-san-diego` (smaller, observed elsewhere) | Same intent, duplicate page |
| Legacy blog | `/home-security-system-installation-guide` (12 ses) | `/blog/home-security-system-installation-guide` (12 ses) | True duplicate |

**Each pair splits link equity, indexation budget, and traffic.** A 301 redirect pass would consolidate these.

##### 4. New `/services/[slug]/` pages get traffic but convert at 0%

The newer service detail pages built during the rebuild get real session volume but produce zero or near-zero conversions:

- `/services/bathroom-remodeling`: 35 sessions, 3 key events (89-day window) — best of the new set
- `/services/whole-home-renovations`: 33 sessions, 1 key event
- `/services/kitchen-remodeling`: 21 sessions, 0 key events
- `/services/home-additions`: 19 sessions, 0 key events

The 16-month picture is starker:
- `/services/bathroom-remodeling/`: 139 sessions, **0 conversions**
- `/services/whole-home-renovations/`: 91 sessions, **0 conversions**
- `/services/kitchen-remodeling/`: 96 sessions, **0 conversions**
- `/services/home-additions/`: 71 sessions, **0 conversions**

The conversion CTAs are either missing on these pages, or the events aren't wired to fire. This is a lead-capture gap, not a traffic gap.

##### 5. `/service-areas` has 100% bounce, 0.2s duration

The service-areas index page is **broken or empty** — 30 sessions land there and immediately leave with 0 engaged sessions. Likely an issue with the page template or content. High-priority audit item.

##### 6. `(not set)` is 45 sessions of bot traffic

The 45 sessions with `(not set)` landing page (97.8% bounce, 1s duration) are almost certainly bots that hit the site without a clean landing page record.

##### 7. Long tail of low-engagement service / blog landings

Many service and blog pages received 7–12 sessions each with mostly 0–1 engaged sessions:

| URL | Sessions | Engaged |
|---|---|---|
| `/blog/home-extension-ideas` | 11 | 1 |
| `/blog/luxury-home-renovations-san-diego` | 12 | 0 |
| `/blog/home-security-system-installation-guide` | 12 | 3 |
| `/services/custom-cabinetry` | 10 | 0 |
| `/services/hidden-tv-media-solutions` | 10 | 0 |
| `/services/custom-home-office` | 8 | 1 |
| `/services/custom-mudroom-design` | 8 | 0 |
| `/services/laundry-room-upgrades` | 8 | 1 |
| `/service-areas/del-sur` | 9 | 0 |
| `/service-areas/encinitas` | 9 | 1 |
| `/service-areas/oceanside` | 9 | 2 |
| `/service-areas/scripps` | 9 | 0 |
| `/service-areas/cardiff` | 7 | 0 |
| `/service-areas/carmel-valley` | 7 | 1 |

Most of these get traffic but fail to retain engagement. Likely cause: thin content, generic templates, no CTAs, no localized photos.

##### 8. Portfolio pages convert when found

- `/portfolio-gallery/encinitas-addition-bath-flooring-remodel-project`: 7 sessions, 0 engaged
- `/portfolio-gallery/escondido-bathroom-remodel-project`: 7 sessions, **5 engaged (71% engagement)**
- `/portfolio-gallery/scripps-ranch-master-bath-remodel-project`: 7 sessions, **4 engaged (57% engagement)**

Portfolio pages with real project content **outperform generic service pages on engagement.** Investment in portfolio detail yields a higher return than service-overview copy.

---

#### Landing Page Strategy Implications

##### Immediate actions
1. **Audit `/service-areas` index page** — diagnose and fix the 100% bounce
2. **Wire event tracking on `/contact`** — fire `phone_click`, `email_click`, and `generate_lead` (form submit) consistently
3. **Build 301 redirects for legacy duplicates** — `/about → /about-us`, `/san-diego-ca → /service-areas/[appropriate]`, etc.
4. **Add and track CTAs on `/services/[slug]/` pages** — the new service detail pages convert at 0% in the 16-month window despite real traffic

##### Medium-term actions
5. **Localize service-area pages** — they get impressions but no engagement; add real photos, real projects, real testimonials, and neighborhood-specific content
6. **Expand portfolio depth** — portfolio pages engage 50–70% of visitors when reached; build out more case studies
7. **Internal linking from blog → service → portfolio** — currently blog visitors don't move through the funnel

##### Measurement gaps to close
8. **Most conversion events are not firing** — `purchase` and `generate_lead` have 0 fires. Only `phone_click` (13) and `email_click` (4) work. Form-submit tracking is broken or missing entirely
9. **Map the homepage funnel** — where do real users go after landing on `/`?


---



<a id="wp-full"></a>

## WordPress — Full Report

_source: `reports/full/04-wordpress.md`_

##### WordPress Stack Audit — client-example.invalid

**Compiled:** 2026-05-21
**Source:** WordPress REST API (`client-example.invalid/wp-json/`), page source inspection, sitemap analysis

---

#### 1. Stack & Technology

##### Detected via REST API namespace probe (`/wp-json/`)

| Component | Detected | Notes |
|---|---|---|
| WordPress Core | Yes | Active |
| REST API namespace `wp/v2` | Public | Reads exposed, writes require auth |
| Yoast SEO (`yoast/v1`) | Active | SEO plugin, sitemap manager |
| Elementor (`elementor/v1`, `elementor-hello-elementor/v1`) | Active | Page builder |
| Elementor Pro (`elementor-pro/v1`) | Active | Paid Elementor version |
| Elementor AI (`elementor-ai/v1`) | Active | AI content generation feature |
| Hello Elementor theme | Active | Lightweight starter theme designed for Elementor |
| LiteSpeed Cache (`litespeed/v1`, `litespeed/v3`) | Active | Caching/optimization plugin |
| Redirection (`redirection/v1`) | Installed, unused | 301 redirect plugin — zero active redirects configured |
| Trustindex (`trustindex/v1`) | Active | Review widget plugin (Yelp/Google/Houzz reviews) |
| Brainstorm Force (`bsf-core/v1`) | Active | Likely Spectra or UAE (Ultimate Addons for Elementor) |
| NPS Survey (`nps-survey/v1`) | Installed, unused | User feedback survey plugin — not on the live site |
| Cloudflare CDN | Active | Proxy/CDN (confirmed via robots.txt `/cdn-cgi/` block) |
| Application Passwords | Enabled | REST API authentication block confirms enabled |
| oEmbed | Active | Standard WP |

##### What stands out

1. **Redirection plugin is installed but unused.** Zero active 301s are configured. Meanwhile ~25 legacy URLs (`/poway/`, `/encinitas/`, `/about-us/`, `/bathroom-remodeling/`, etc.) from the pre–April 2026 site remain live and indexed alongside their replacements. The tool to fix this is already in place — it just hasn't been used.

2. **LiteSpeed Cache is active but mobile PageSpeed is 53.** The plugin is installed but not properly configured for mobile — combine/minify, defer non-critical JS, and critical CSS extraction are not in effect on the mobile render path.

3. **Elementor + Elementor Pro + Elementor AI + Brainstorm Force.** The full paid page-builder stack is active. This stack is the source of the ~195KB of unused JavaScript flagged by PageSpeed on mobile.

4. **NPS Survey plugin is installed but not visible on the live site.** Plugin bloat that can be removed.

5. **Five sitemaps registered in Google Search Console.** Yoast manages the canonical `/sitemap_index.xml`. The other four entries are residual from earlier configurations and should be removed in GSC.

6. **No security plugin is visible.** Wordfence, Sucuri, iThemes Security — none detected. For a site with admin accounts and form submissions, this is a gap.

##### Components inferred but not directly visible

These would require admin login to confirm:
- Form plugin: most likely Elementor Forms (Elementor Pro is active)
- Backup plugin: unknown
- Image optimization: LiteSpeed handles WebP conversion (matches the March 2026 mass WebP upload pattern in the media library)
- CDN: Cloudflare proxy (confirmed)

---

#### 2. WordPress User Accounts

Three user accounts exist on the site (visible via REST API):

| ID | Name | Slug | Likely Role |
|---|---|---|---|
| 6 | Client Principal | `client-admin` | Owner / Administrator |
| 10 | Accounts Prior Vendor | `prior-vendor-account` | Administrator or Editor (Prior Vendor) |
| 4 | Content Contributor | `prior-vendor-content` | Administrator or Editor (Prior Vendor) |

##### Notes
- The admin slug `client-admin` is a guessable username. Combined with Application Passwords enabled, this is a known brute-force surface. Standard hardening: rename the admin slug, enable 2FA, audit Application Passwords for unused entries.
- Both Prior Vendor accounts are still active in WordPress. They retain full access until they are explicitly disabled.

---

#### 3. Content Inventory

From the WordPress REST API:

| Type | Count |
|---|---|
| Pages | 84 |
| Posts | 39 |
| Media items | 1,274 |

##### Page breakdown

| Category | Count |
|---|---|
| Service pages (`/services/...` + legacy) | 28 |
| Location pages (`/service-areas/...` + legacy `/[city]/`) | 22 |
| Portfolio projects | 18 |
| Core marketing pages (home, about, contact, etc.) | 10 |
| Legal pages (privacy, terms, cookies) | 3 |
| Misc / single-purpose pages | ~3 |

##### Posts (blog)
- All 39 posts authored as user 6 (`client-admin`)
- 33 created in a one-day batch on Oct 10–11, 2024 (template/import)
- 6 created during the audit window (May 2025 × 2, April 2026 × 4 — 2 of which duplicate page slugs)
- All 33 original posts show last-modified Apr 20, 2026 in a 19-second bulk save (database operation, not editorial work)

##### Media library
- 1,274 total items
- Author breakdown: ~80% user 10 (Prior Vendor), ~15% user 4 (Content Contributor), ~5% user 6 (admin)
- Format mix: JPEG (~60%), WebP (~30%), PNG (~8%), SVG/MP4/other (~2%)
- Roughly 30% of media are WebP duplicates of existing JPEGs — output of LiteSpeed's WebP generation. Significant orphan media is present and should be audited.

---

#### 4. Plugin Summary

| Plugin | Status | Purpose |
|---|---|---|
| Yoast SEO | Active | Meta, schema, sitemaps |
| Elementor | Active | Page builder |
| Elementor Pro | Active | Premium page builder features |
| Elementor AI | Active | AI content generation |
| Hello Elementor (theme) | Active | Lightweight theme for Elementor |
| LiteSpeed Cache | Active, misconfigured for mobile | Caching, image optimization |
| Redirection | Installed, unused | 301 manager |
| Trustindex | Active | Review widgets |
| Brainstorm Force (Spectra/UAE) | Active | Elementor add-ons |
| NPS Survey | Installed, unused | Should be removed |
| Cloudflare | Active | Proxy/CDN |
| Security plugin | Not detected | Gap |
| Backup plugin | Unknown | Requires admin login to confirm |
| Form plugin (likely Elementor Forms) | Inferred | Contact form delivery |

---

#### 5. Schema / Structured Data

GSC search appearance report confirms:
- **Product snippets** — 73 impressions in 16 months, 0 clicks
- **Translated result** — 2 impressions

This indicates Yoast has Product/Service schema active on at least one page type, but the snippets are not earning clicks (likely wrong intent match or weak titles/descriptions).

##### Schema markup that should exist for this site

| Schema Type | Where | Currently Visible |
|---|---|---|
| `LocalBusiness` / `GeneralContractor` | `/`, `/contact/` | Not confirmed |
| `Service` | Each `/services/[type]/` page | Possibly partial |
| `Place` / area-served | Each `/service-areas/[city]/` page | Not confirmed |
| `Project` / portfolio | Each portfolio page | Not confirmed |
| `Article` + `BreadcrumbList` | Each blog post | Likely Yoast default only |
| `Review` / `AggregateRating` | Homepage, contact | Trustindex plugin should provide |
| `FAQPage` | About, contact, service pages | Likely missing |
| `Organization` | Sitewide | Likely Yoast default |

---

#### 6. Sitemap Configuration

Five sitemap entries are registered in Google Search Console, reflecting layered plugin history:

| Sitemap | Source | Status |
|---|---|---|
| `/sitemap_index.xml` | Yoast SEO | Current, active — the one to keep |
| `/wp-sitemap.xml` | WordPress core (5.5+) | Duplicate, last submitted Mar 2025 |
| `/sitemap.xml` | Old Yoast or other plugin | 1 warning, last submitted Feb 2025 |
| `/page-sitemap.xml` | Yoast sub-sitemap (broken submission) | Last Aug 2025 |
| `/post-sitemap.xml` | Yoast sub-sitemap (broken submission) | Last Dec 2024 |

The four residual entries should be unsubmitted in GSC so only `/sitemap_index.xml` remains.

---

#### 7. Robots.txt

```
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: */init$
Disallow: */params$
Disallow: */migrations$
Disallow: */data$
Disallow: */helpers/*
Disallow: */terms$
Sitemap: https://client-example.invalid/sitemap_index.xml
```

Standard configuration. The wildcard disallows (`*/init`, `*/params`, etc.) are unusual and suggest a plugin or app once had endpoint paths needing to be blocked. Worth a review to confirm they're still necessary.

---

#### 8. URL Structure & Permalink Hygiene

##### Current state
- Permalinks use `/post-name/` format — good for SEO
- The April 2026 rebuild created new `/services/...` and `/service-areas/...` paths but left ~25 legacy URLs uncoupled. Both versions are live and indexed for the same content:
  - `/about/` (legacy) and `/about-us/` (current)
  - `/poway/` (legacy) and `/service-areas/poway/` (current)
  - `/kitchen-remodeling/` (legacy) and `/services/kitchen-remodeling/` (current)
  - `/privacy_policy/` (legacy, underscore) and `/privacy-policy/` (current, hyphen)

##### Required action
Build a 301 redirect map for all ~25 legacy URLs using the Redirection plugin (already installed). This consolidates Google's ranking signal — right now it's being split between duplicate URLs.

---

#### 9. Performance Impact

Combining the WordPress detection with PageSpeed results (pulled 2026-05-21):

| Component | Mobile Performance Impact |
|---|---|
| Elementor + Pro + AI + Brainstorm Force | ~120KB unused JS (page builder runtime) |
| Trustindex review widget | ~30KB CSS + JS |
| LiteSpeed Cache | Active but not configured for mobile — minimal benefit currently |
| Yoast SEO | Minor |
| Form plugin (inferred) | 10–20KB |

**Mobile unused JS:** 194,862 bytes (PageSpeed)
**Mobile unused CSS:** 36,511 bytes (PageSpeed)

LiteSpeed Cache could eliminate most of this with proper configuration:
- Combine + minify CSS/JS
- Defer non-critical scripts
- Critical CSS extraction
- Image lazy load (verify)
- WebP/Brotli optimizations

The plugin is installed. It needs an admin pass to configure mobile-specific optimization rules.

---

#### 10. Form & Lead Capture

##### What we can confirm externally
- A consultation form exists at `/contact/` (1,082 sessions, 224 key events in the GA4 window)
- The form is likely powered by Elementor Forms (Elementor Pro is active)
- `phone_click` and `email_click` events are firing, but **`generate_lead` has never fired** in GA4 — meaning form-submit tracking is broken and the true conversion count from the form is unknown
- `/contact/` shows a 20.7% rate of GA4 key events per session, but those are driven by phone/email clicks, not form submissions

##### What requires admin login to confirm
- Where form submissions are actually delivered (email, Slack, CRM, Zapier)
- Whether submissions are being captured in WordPress under Elementor → Submissions
- Whether reCAPTCHA / spam filtering is active
- Whether form fields are optimized for mobile UX

Note: GA4 traffic is also inflated by 70%+ bot/internal traffic that has never been filtered out, so baseline session and event counts should be treated as upper bounds.

---

#### 11. WordPress Improvements — Prioritized

| Priority | Action | Plugin/Component |
|---|---|---|
| Critical | Build 301 redirect map for ~25 legacy URLs | Redirection (already installed) |
| Critical | Fix `generate_lead` event tracking on form submit | Elementor Forms + GTM |
| Critical | Add LocalBusiness, Service, FAQ schema to relevant pages | Yoast schema config |
| Critical | Audit and disable unused Prior Vendor user accounts | WP Users |
| High | Configure LiteSpeed Cache properly for mobile | LiteSpeed Cache |
| High | Remove NPS Survey plugin | Plugins page |
| High | Audit and clean up orphaned media library (~30% are WebP duplicates of JPEGs) | Media Library |
| High | Install a security plugin and harden login | Wordfence / Sucuri / iThemes |
| High | Confirm WP backups (UpdraftPlus or host-level) | Backup plugin |
| Medium | Implement Trustindex Houzz/Yelp/Google review widgets on key pages | Trustindex |
| Medium | Audit Elementor templates for inline-CSS bloat | Elementor |
| Medium | Set up a staging environment for safe edits | Host control panel |
| Medium | Disable XML-RPC | wp-config.php or plugin |
| Medium | Hide WordPress version number from meta generator | Theme functions.php |
| Medium | Audit and remove orphan posts/pages from earlier site versions | Pages/Posts admin |

---

#### 12. Hosting & Infrastructure Notes

##### Confirmed
- Cloudflare proxy/CDN is active (per robots.txt `/cdn-cgi/` block)
- LiteSpeed Cache plugin presence indicates the site is hosted on a LiteSpeed-powered web server (LiteSpeed Cache only fully works on LiteSpeed)

##### Unknown without admin access
- Hosting provider
- PHP and MySQL versions
- Server location
- Email deliverability setup (SPF, DKIM, DMARC)
- Backup schedule

---

#### 13. Summary

The WordPress stack itself is modern and well-equipped:
- Industry-standard SEO plugin (Yoast)
- Premium page builder (Elementor Pro + AI)
- High-performance caching (LiteSpeed)
- Reviews widget (Trustindex)
- Redirect manager (Redirection)
- Cloudflare CDN

The April 2026 rebuild stabilized the site technically — accessibility, best practices, and desktop performance are all in good shape. **The dominant issue is configuration, not crawl health or platform choice.** Caching isn't tuned for mobile, redirects haven't been mapped, sitemaps haven't been cleaned up, and conversion tracking is broken. These are configuration tasks — not a rebuild.


---



<a id="site-architecture"></a>

## Site Architecture

_source: `tech/site-architecture.md`_

##### Site Architecture — Client Company

**Data source:** XML sitemaps + manual inspection, 2026-05-21

---

#### Total Site Inventory: ~88 URLs

| Section | URL Count | Last Modified |
|---|---|---|
| Core marketing pages | 10 | 2025-07 to 2026-05 |
| Service pages | 28 | 2026-04-24 |
| Location / service-area pages | 22 | 2026-04-22 |
| Portfolio / project pages | 18 | 2026-04-25 |
| Blog posts | 39 | 2026-04-20 (all 39 same date) |
| Blog index | 1 | 2026-04-25 |
| Legal pages | 3 | 2026-04-19 |
| **Total** | **~88** | — |

---

#### The April 2026 Rebuild

Every blog post shows `lastmod = 2026-04-20`. Content created across years cannot all modify on the same day — this is the fingerprint of a full WordPress import/rebuild on April 20, 2026 (footer attribution: "Prior Vendor"). Page and service URLs show lastmods clustered between 2026-04-17 and 2026-05-04 — same migration window.

##### What the rebuild did well
- Established modern, nested URL patterns: `/services/[type]/` and `/service-areas/[city]/`
- Refreshed page content and theme on a stable Elementor Pro foundation
- Brought all content under one Yoast-managed sitemap (`/sitemap_index.xml`)
- Accessibility, Best Practices, and desktop performance scores all came out healthy

##### What was left unfinished
- **No 301 redirect map was built.** The Redirection plugin is installed but has zero active redirects. The ~25 legacy URLs (`/poway/`, `/encinitas/`, `/about-us/`, `/bathroom-remodeling/`, etc.) are still live and still indexed.
- **Five sitemaps are registered in GSC.** Only `/sitemap_index.xml` (Yoast) should remain — the other four are residual entries from earlier configurations.
- **Conversion tracking is broken.** `generate_lead` has never fired in GA4, so the true number of form submissions is unknown. GA4 traffic is also inflated by 70%+ bot/internal traffic that has never been filtered, so session and event counts should be treated as upper bounds.

The bigger story isn't a "site collapse" — the rebuild is technically competent. The story is **configuration debt**: caching, redirects, sitemaps, and tracking are all unfinished.

---

#### Service Pages (28)

The service architecture is impressively complete for a remodeling firm:

**Core services**
- Kitchen Remodeling
- Bathroom Remodeling
- Whole-Home Renovations
- Home Additions
- Custom Cabinetry

**Specialty services** (rare for a firm this size — a clear differentiator)
- ADU (Accessory Dwelling Unit) construction
- Wine cellars
- Outdoor kitchens
- Smart home integration
- Sunrooms (custom builders, installation, materials)
- Home automation
- Solar integration
- Pool houses

**Strategic note:** The specialty services target lower-competition, high-ticket niches. Ranking for "wine cellar builder san diego" or "ADU contractor la jolla" is easier than "kitchen remodel san diego" — and the leads are more qualified.

---

#### Location Pages (22)

Geographic targeting is well-distributed across affluent San Diego markets:

**Coastal North County** (highest-value market)
- La Jolla, Del Mar, Carmel Valley, Carlsbad, Encinitas, Cardiff, Solana Beach, Oceanside, Torrey Pines

**Inland affluent**
- Rancho Santa Fe, Fairbanks Ranch, Rancho Bernardo, Rancho Peñasquitos, Scripps Ranch, Tierrasanta, Poway

**Other**
- Several additional San Diego neighborhoods

These pages exist but are not ranking — the only location page we have ranking data on is `/rancho-santa-fe/` at position 34. The location-page programmatic play is one of the highest-leverage opportunities once the duplicate-URL split is resolved.

---

#### Portfolio (18 pages)

Individual project case studies. From the Houzz scrape, titles include:
- "Tierrasanta — Whole House Remodeling Craftsmanship"
- "Scripps Ranch Master Bath Remodel — A Chic & Classy Spa Retreat"
- "Scripps Ranch Home Transformation — A Fusion of Blue and Gold Elegance"

**This is an underused asset.** Each portfolio page can be optimized for:
- `[neighborhood] [project type]` long-tail keywords
- Pinterest / Instagram traffic via image schema
- Internal linking from corresponding `/service-areas/[city]/` and `/services/[type]/` pages
- Houzz cross-promotion (the Best of Houzz wins make the content portable)

---

#### Blog (39 posts)

The blog is topically well-structured but editorially thin:

##### Content strengths
- Covers the right topics: design-build process, cabinet selection, smart homes, coastal materials, solar integration, luxury renovations, ADUs, sunrooms, bathroom/kitchen design
- Geographic specificity (Encinitas, Carlsbad, Oceanside, La Jolla variants)
- Service-aligned topics that funnel toward consultation requests

##### Content weaknesses (from titles + scan)
- Templated tone — title patterns like *"Unlocking the secrets to..."*, *"Transforming spaces into luxe havens..."*, *"Discovering San Diego's premier..."* read AI-assisted with minimal editorial uplift
- No author bylines visible
- No publication dates visible (only lastmod)
- No featured-snippet optimization (no clear FAQ blocks, no answer-first paragraphs)

##### Higher-ROI path
Editorial uplift on the existing 39 posts beats commissioning new ones:
- Add a Client Principal byline + photo + 26-year-experience signal
- Add real project photos from each post's geographic match
- Add internal links to relevant service + location + portfolio pages
- Add FAQ sections with schema for snippet capture
- Add publication dates and "Updated" dates for freshness signaling

---

#### Information Architecture Gaps

Pages missing from the site that should exist:

1. **Pricing transparency page** — even ranges ("typical kitchen remodel $80K–$180K") would qualify leads and rank for `[service] cost san diego`
2. **Process page** — design-build is the stated differentiator but has no dedicated page
3. **Team / staff page beyond Client Principal** — luxury clients buy from people
4. **Reviews aggregator page** pulling Yelp / Houzz / Google reviews to a single rich-snippet-optimized URL
5. **Resources / Guides hub** for top-of-funnel content (downloadable kitchen-remodel planner, etc.)
6. **Financing page** — even high-end remodels increasingly involve financing
7. **Warranty page** — trust signal for $250K+ projects

Each of these is both a ranking opportunity and a conversion lever.


---



<a id="performance"></a>

## Performance & Core Web Vitals

_source: `tech/performance.md`_

##### Performance & Technical SEO — Client Company

**Data source:** Google PageSpeed Insights (Lighthouse), pulled 2026-05-21
**Target URL:** https://client-example.invalid/

---

#### PageSpeed Insights Scores (2026-05-21)

| Strategy | Performance | Accessibility | Best Practices | SEO |
|---|---|---|---|---|
| Mobile | 53 | 92 | 96 | 92 |
| Desktop | 93 | 91 | 96 | 92 |

##### Mobile Core Web Vitals

| Metric | Value |
|---|---|
| First Contentful Paint (FCP) | 2.1s |
| Largest Contentful Paint (LCP) | 3.8s |
| Speed Index | 5.4s |
| Total Blocking Time (TBT) | 780ms |
| Cumulative Layout Shift (CLS) | 0.04 |

##### Verdict

- **Desktop is good.** Performance 93, no immediate intervention.
- **Mobile is failing where it matters most.** Mobile Performance is 53, LCP 3.8s, TBT 780ms. The April 2026 rebuild left desktop in good shape but did not configure mobile-specific optimization.
- **Most buyers reach this site on mobile.** Desktop passing is not enough — the mobile render path is the real-world experience for the majority of prospects.
- **Accessibility, Best Practices, and SEO are all healthy** across both strategies, indicating the rebuild was technically competent. The issue is configuration, not platform health.

---

#### Mobile Performance — Detailed Findings

##### Top opportunities

#### 1. Reduce unused JavaScript — savings: 1,150ms, 194,862 bytes
- ~195KB of JavaScript that isn't executed on initial page render
- Source: Elementor Pro + Elementor AI + Brainstorm Force runtime
- Fix: defer non-critical JS, lazy-load page-builder dependencies, audit and remove unused plugins (e.g. NPS Survey is installed but unused)

#### 2. Reduce unused CSS — savings: 450ms, 36,511 bytes
- ~36KB of CSS rules never applied to the page
- Classic WordPress theme/page-builder bloat — the page uses a small fraction of the stylesheets it loads
- Fix: critical CSS extraction for above-the-fold render; defer the remainder via LiteSpeed Cache (the plugin is installed but not configured to do this on mobile)

##### Combined mobile impact
Resolving these two opportunities projects:
- **+1.6s faster mobile load**
- Performance score jump from **53 → 75–85**

##### Field data (CrUX)
Chrome UX Report did not return field data for this URL — suggesting insufficient real-user traffic for CrUX aggregation. A site with healthy organic traffic typically has CrUX data, and this lines up with the low organic volume found in the SEO audit (and the fact that 70%+ of recorded GA4 sessions are bot/internal traffic that has never been filtered out).

---

#### Stack Identification

| Layer | Identified |
|---|---|
| CMS | WordPress (confirmed via `/wp-content/` paths and `wp-admin/admin-ajax.php` in robots.txt) |
| SEO Plugin | Yoast SEO (confirmed in sitemap XML comments) |
| Page Builder | Elementor + Elementor Pro + Elementor AI + Brainstorm Force (confirmed via REST API) |
| Theme | Hello Elementor |
| Caching | LiteSpeed Cache (active, mobile not properly configured) |
| CDN | Cloudflare (per robots.txt `/cdn-cgi/` block) |
| Site Developer | "Prior Vendor" (per footer attribution) |

##### Analytics & tracking — what's broken
- GA4 is installed and recording sessions, but:
  - `generate_lead` has never fired — form-submit tracking is broken, so the true number of consultation requests from the form is unknown
  - 70%+ of recorded sessions are bot/internal traffic that has never been filtered out, inflating every traffic and event number in GA4
- `phone_click` and `email_click` are firing — those are the only meaningful conversion signals currently reaching GA4
- Microsoft Clarity, Hotjar, and Meta Pixel were not detected — no behavioral or paid-pixel infrastructure is in place

---

#### Critical Technical Recommendations

##### Priority 1 — Tracking & Measurement
1. Fix `generate_lead` event so form submissions are actually counted in GA4
2. Apply bot and internal-IP filters in GA4 so the data reflects real prospects
3. Verify Google Search Console and Bing Webmaster properties
4. Define and implement the full conversion event set: phone clicks, form submits, email clicks, portfolio engagement, scroll depth on service pages
5. Install Microsoft Clarity for free session recording — high ROI on a consultation-driven business

##### Priority 2 — Mobile Performance
1. Configure LiteSpeed Cache for mobile: combine/minify CSS+JS, defer non-critical JS, critical CSS extraction
2. Defer the page-builder runtime (Elementor Pro / AI / Brainstorm Force)
3. Audit plugins — remove NPS Survey and any other unused entries
4. Verify image lazy-loading is active (don't assume)
5. Convert remaining hero images to WebP/AVIF where not already done
6. Cloudflare cache tuning (likely under-configured)

##### Priority 3 — Schema & Structured Data
Yoast is active and produces some default schema, but the site currently has Product snippets earning impressions with zero clicks and no visible LocalBusiness/FAQ/Service schema. The site should ship:
- `LocalBusiness` / `GeneralContractor` schema on `/` and `/contact/`
- `Service` schema on each of the 28 service pages
- `Place` / area-specific schema on each of the 22 location pages
- `Project` / `HowTo` schema on portfolio pages
- `Article` + `BreadcrumbList` on all 39 blog posts
- `Review` / `AggregateRating` pulling from Yelp / Houzz

Schema is one of the highest-ROI technical SEO fixes because Google increasingly uses it for AI Overviews and rich results.

##### Priority 4 — Crawl & Index Health
1. Clean up Google Search Console: only `/sitemap_index.xml` (Yoast) should remain — the other four submitted sitemaps should be unsubmitted
2. URL-inspect the top 30 priority URLs and force re-crawl
3. Build the 301 redirect map for the ~25 legacy URLs using the Redirection plugin (installed, currently unused)
4. Implement IndexNow for instant Bing/Yandex notifications on content changes

##### Priority 5 — Conversion Path
1. Add a visible sticky tap-to-call phone number on mobile
2. Reduce friction on the consultation form — test multi-step
3. Add testimonial / Houzz badge social proof above the form
4. Add a geo-pin map and service-area indicator to each of the 22 location pages

---

#### Cloudflare Configuration Notes

The `/cdn-cgi/` block in robots.txt confirms Cloudflare is active. Optimization opportunities:
- Enable Auto Minify (HTML / CSS / JS) if not already on
- Enable Brotli compression
- Configure Polish for image optimization
- Tune cache rules for static assets (1 year for `/wp-content/uploads/*`)
- Enable Early Hints for faster LCP
- Verify Bot Fight Mode isn't blocking Googlebot — a misconfiguration here is rare but seen, and worth ruling out as a contributing factor to indexation drag


---



<a id="prior-vendor-audit"></a>

## Prior Vendor — 15-Month Work Audit

_source: `audit/prior-vendor-audit/README.md`_

##### Prior Vendor — 15-Month Work Audit

**Prepared for:** Client Principal
**Site:** client-example.invalid
**Audit window:** February 2025 → April 2026 (15 months)
**Retainer schedule:**
- **Feb 2025 – Oct 2025** (9 months): $2,000 / month = $18,000
- **Nov 2025 – Apr 2026** (6 months): $3,800 / month = $22,800
- **Total paid in window: $40,800**

**Compiled:** 2026-05-21
**Primary source:** Direct read of the WordPress REST API (`client-example.invalid/wp-json/wp/v2/...`). Every record below is independently verifiable inside WP admin.
**Secondary sources:** Google Search Console, Google Analytics 4, Ahrefs Site Explorer / Site Audit, Google Tag Manager export.

> **Scope note.** This document is a forensic accounting of what is visible inside the platforms Client Company owns. It documents what the systems show was produced and configured during the engagement. It is not a legal opinion, and the question of whether the pattern below constitutes a contractual issue is one for Client Principal and his counsel to determine. The intent is to give Client Principal a reproducible record that any third party (an attorney, an arbitrator, or Prior Vendor themselves) can verify against the same WordPress admin and Google accounts.

---

#### How This Audit Was Built

Every WordPress page, post, and media item has three machine-recorded fields: `date_gmt` (created), `modified_gmt` (last save), and `author` (which user account created it). All timestamps cited below are the values WordPress itself returned via the REST API on 2026-05-21.

Three user accounts have access to this site:

| User ID | Display Name | WP Slug | Identity |
|---|---|---|---|
| **6** | Client Principal | `client-admin` | Administrator account. Prior Vendor has held credentials to this account during the engagement. |
| **10** | Accounts Prior Vendor | `prior-vendor-account` | Prior Vendor operations account. |
| **4** | Content Contributor | `prior-vendor-content` | Prior Vendor content / portfolio account. |

Because Prior Vendor has logged in as `client-admin` during the engagement, some content attributed to "author 6" was likely published by Prior Vendor while signed in to the admin account. Where multiple pages are created in a single hour as author 6 in patterns consistent with Prior Vendor's other batches, this audit notes it.

---

#### TL;DR — What $40,800 Produced

| Deliverable Category | Count (Feb 2025 → Apr 2026) |
|---|---|
| **New pages by Prior Vendor accounts** (authors 4 + 10) | 22 |
| **New pages by `client-admin`** (5 in single-hour bursts consistent with Prior Vendor) | 5 |
| **Blog posts created in window** | 6 (2 of which duplicate slugs Prior Vendor had already created in May 2025) |
| **Unique new content pieces** | 27 (after deducting the 2 duplicate posts and 2 admin-login pages whose authorship is ambiguous) |
| **Media files uploaded by Prior Vendor accounts** | ~392 images / videos (significant portion are WebP duplicates of existing JPEGs) |
| **Major project: full site rebuild** | 1 (April 17–25, 2026) |
| **Original 33 blog posts** | Modified in a single 19-second window (2026-04-20 16:49:24 → 16:49:43) — a bulk database operation, not individual editorial work |

**Average new content output:** ~1.8 items per month.
**Months with zero new content:** 7 of 15. Five of those seven landed *after* the November 2025 rate increase.

##### The Pattern — The Rate Hike Coincided With An Output Drop

| Period | Monthly Rate | Months | Total Paid | New Pages | New Posts | Total Deliverables | Cost / Deliverable |
|---|---|---|---|---|---|---|---|
| **Feb 2025 – Oct 2025** ($2K era) | $2,000 | 9 | $18,000 | 22 | 2 | 24 | **$750** |
| **Nov 2025 – Apr 2026** ($3.8K era) | $3,800 | 6 | $22,800 | 1 new + rebuild | 4 (2 dupes) | 5 (3 unique) | **$7,600** (effective) |

The retainer rate increased **90%** in November 2025. The cost per net-new deliverable increased **~900%**.

---

#### Month-by-Month Output (WordPress-Visible)

| Month | Rate | New Pages | New Posts | Media | Notes |
|---|---|---|---|---|---|
| Feb 2025 | $2,000 | 0 | 0 | 1 | One image. |
| Mar 2025 | $2,000 | 0 | 0 | 3 | Three images. |
| Apr 2025 | $2,000 | 3 | 0 | ~85 | Initial content push. |
| May 2025 | $2,000 | 9 | 2 | ~75 | Programmatic SEO burst (templated pages). |
| Jun 2025 | $2,000 | 1 | 0 | 1 | Single city page. |
| Jul 2025 | $2,000 | 5 | 0 | 0 | 5 pages by `client-admin` in a single hour (service-areas, services, home, san-diego-home-show, thank-you-booth). |
| Aug 2025 | $2,000 | 1 | 0 | ~40 | Tierrasanta project page. |
| Sep 2025 | $2,000 | 3 | 0 | 0 | 3 legal pages (privacy, terms, cookies). |
| Oct 2025 | $2,000 | 3 | 0 | ~40 | Service pages: home additions, kitchen, bathroom. |
| **— Rate increases to $3,800/mo —** | | | | | |
| Nov 2025 | $3,800 | 1 | 0 | ~40 | Whole-home renovations page. |
| Dec 2025 | $3,800 | 0 | 0 | 3 | — |
| Jan 2026 | $3,800 | 0 | 0 | 1 | — |
| Feb 2026 | $3,800 | 0 | 0 | 1 | — |
| Mar 2026 | $3,800 | 0 | 0 | ~80 | WebP format conversions of existing images. |
| Apr 2026 | $3,800 | 0 | 4 | ~22 | Site rebuild + 4 blog posts (2 duplicate prior pages). |

**Months with zero new pages and zero new posts:** Feb 2025, Mar 2025, Dec 2025, Jan 2026, Feb 2026, Mar 2026 (6 months; the 7th, Apr 2026, contained the rebuild but the only "new" posts duplicated existing slugs).

---

#### What's Inside the "Site Rebuild" Deliverable

The April 2026 rebuild is the single largest deliverable in the $3.8K era. What the data shows it consisted of:

**Included:**
1. A WordPress import/refresh that touched every existing page and post (synchronized `modified_gmt` timestamps clustered Apr 17–25, 2026).
2. A mass save operation on all 33 original blog posts at 2026-04-20 16:49:24–43 — a 19-second window, consistent with a database-level update, a search-and-replace plugin run, or a re-import. Not individual editorial passes.
3. 4 new blog posts (2 of which use slugs that duplicate pages Prior Vendor had already created in May 2025: `top-seven-cabinet-makers...` and `encinitas-kitchen-remodel...`).
4. ~22 image uploads in the Apr 17–25 window.
5. Theme/template changes (inferred — content unchanged on most pages but every page resaved).

**Not included, per the records:**
- No new portfolio projects.
- No individual editorial rewrites of the 33 existing blog posts (the 19-second bulk-modify pattern is inconsistent with per-post editing).
- 25+ legacy URLs left without redirects (Redirection plugin is installed but the rule set is empty).
- Sitemap state not cleaned up — 5 sitemaps registered in Google Search Console, only 1 is valid.
- LiteSpeed Cache installed but not configured — mobile PageSpeed score = 53/100.

---

#### The Bulk-Modify Pattern on the Original 33 Blog Posts

When a human edits a piece of content, `modified_gmt` timestamps spread across hours or days. When a database operation, find-and-replace, or re-import runs, timestamps cluster within seconds.

Below is the actual data WordPress returned for the 33 pre-existing blog posts (created Oct 2024, before the Prior Vendor engagement), ordered by `modified_gmt`:

```
2026-04-20 16:49:25 — guide-to-solar-integration-remodels
2026-04-20 16:49:25 — smart-lighting-and-climate-control
2026-04-20 16:49:25 — living-space-expansion-san-diego-guide
2026-04-20 16:49:25 — home-extension-ideas
2026-04-20 16:49:25 — home-security-system-installation-guide
2026-04-20 16:49:25 — best-smart-home-features-for-remodels
2026-04-20 16:49:25 — guide-to-smart-home-systems-san-diego
2026-04-20 16:49:25 — home-additions-san-diego
2026-04-20 16:49:25 — custom-cabinetry-san-diego
2026-04-20 16:49:25 — how-to-choose-kitchen-renovation-contractors-san-diego
2026-04-20 16:49:25 — home-automation-services-san-diego
2026-04-20 16:49:25 — small-kitchen-remodel-tips
2026-04-20 16:49:25 — why-hire-design-build-contractor-san-diego
2026-04-20 16:49:25 — custom-home-design-consultation-guide
2026-04-20 16:49:42 — top-home-upgrades-to-transform
2026-04-20 16:49:43 — how-home-design-consultations-optimize-space
2026-04-20 16:49:43 — how-remodeling-consultations-work-san-diego
2026-04-20 16:49:43 — whole-home-remodeling-san-diego-tips
2026-04-20 16:49:43 — designer-home-renovations-san-diego-guide
2026-04-20 16:49:43 — sunroom-builders-san-diego
2026-04-20 16:49:43 — top-luxury-home-features
2026-04-20 16:49:43 — bathroom-tile-design-trends
2026-04-20 16:49:43 — smart-bathroom-technology-installation
2026-04-20 16:49:43 — best-high-end-home-remodeling-contractors
2026-04-20 16:49:43 — hiring-san-diego-bathroom-remodelers-guide
2026-04-20 16:49:43 — best-sunroom-materials-southern-california
2026-04-20 16:49:43 — sunroom-installation-san-diego
2026-04-20 16:49:43 — custom-sunrooms-san-diego
2026-04-20 16:49:43 — personalized-home-storage-ideas
2026-04-20 16:49:43 — luxury-bathroom-renovations
2026-04-20 16:49:43 — home-addition-contractors-san-diego
2026-04-20 16:49:43 — how-to-find-the-best-ewe-cabinetry-distributor-in-san-diego
```

32 posts modified across a 19-second window. The remaining post in the set follows the same cluster. A human cannot individually open, edit, and save 33 separate posts in 19 seconds. This pattern is consistent with one of:

- A database-level operation (e.g., `wp post update --all`)
- A search-and-replace plugin run (e.g., Better Search Replace, WP Sweep)
- A theme/template variable update that re-saved every post
- A WordPress import that overwrote the existing post records

It is not consistent with individual editorial review or rewriting.

---

#### Beyond Content — Configuration State on 2026-05-21

The WordPress-visible deliverables are only part of what a 15-month engagement is responsible for. The following items live in Client Company's connected platforms (GA4, GSC, GTM, Ahrefs) and are in their current state as of this audit:

**Conversion tracking**
- A `generate_lead` event is configured in GTM (created March 2025). It has fired **zero times** in the 14 months since.
- Form submissions on the "Book Consultation" forms are not being tracked in GA4.

**Search Console**
- 5 sitemaps registered. 4 are stale (2024–2025). 1 is current.
- No disavow file submitted.

**Backlink profile (Ahrefs)**
- Domain Rating fell from 14 to 4.5 between September 2025 and January 2026 — the period that coincides with the rate change.
- In May 2026 a 108-domain spam injection appears in the backlink profile, including `buybacklinks.agency`, `seoexpress.org`, `rankyour.website`, and `rank-top.click`. These backlinks remain active. No disavow has been submitted.

**Redirects**
- 25+ legacy URLs from before the April 2026 rebuild have no redirects in place. The Redirection plugin is installed; the rule set is empty.

**Performance**
- LiteSpeed Cache is installed but not configured.
- Mobile PageSpeed score: 53/100.

**Analytics hygiene**
- No bot filtering configured in GA4. Approximately 70% of recorded sessions are bot or internal traffic.

**Service pages**
- The new `/services/*` pages created by Prior Vendor (Oct–Nov 2025) have converted at 0% over the measurement window:
  - Bathroom: 0 conversions / 139 sessions
  - Kitchen: 0 conversions / 96 sessions
  - Additions: 0 conversions / 71 sessions
  - Whole-home: 0 conversions / 91 sessions

**Paid media**
- A Google Ads Performance Max campaign ran in September 2025 and recorded 149 conversions. It was shut off in October 2025. There is no record in the connected accounts of who set it up, who managed it during September, or why it was paused.

---

#### Output by Category

##### Service-area location pages (22 exist on the site)
Created Oct 2024 by `client-admin` — before the audit window. Modified Apr 20–22, 2026 in tight clusters consistent with a bulk operation. **Net new in window:** 0.

##### Service detail pages (28 exist on the site)
Pre-existing pages were created Oct 2024 — before the window. **4 new pages created by Prior Vendor Oct–Nov 2025:** `home-additions`, `kitchen-remodeling`, `bathroom-remodeling`, `whole-home-renovations`. These are substantive new pages. Modified Apr 22–23, 2026 in cluster. **Net new in window:** 4.

##### Programmatic location-service pages (created May 2025)
9 templated pages created May 1–3, 2025:
- `encinitas-bathroom-remodeling-ideas-with-our-experts`
- `oceanside-bathroom-remodeling-ideas-with-our-experts`
- `carlsbad-bathroom-remodeling-renovation-ideas`
- `lajolla-bathroom-remodeling-ideas-with-our-experts`
- `5-x-10-medium-bathroom-remodel`
- `10x10-large-bathroom-remodel`
- `encinitas-kitchen-remodel-a-design-build-model-is-your-cost-solution`
- `top-seven-cabinet-makers-to-consider-for-your-so-cal-remodel`
- `Client Company-process-driven-firm-transform-homes`

These are real created pages. Note: two of these slugs are duplicated as "new" blog posts in April 2026 (see Blog section).

##### Portfolio / case-study pages
- 18 portfolio projects exist on the site.
- 13 were created Nov 5–8, 2024 by Content Contributor — before the audit window.
- **2 new portfolio items by Content Contributor within the window:** `el-cajon-master-bath-kitchen-remodel-project` (May 29, 2025) and the `san-diego-ca` city page (Jun 25, 2025).
- **Net new portfolio in 15 months:** 2.

##### Blog posts
- 33 original posts created Oct 2024 — outside window. (Subject to the 19-second bulk-modify event described above.)
- **2 new posts in May 2025** by `client-admin`: `unlocking-the-secrets-to-high-end-renovation-in-san-diego`, `transforming-spaces-into-luxe-havens-high-end-remodeling-services-in-san-diego`.
- **4 new posts in April 2026** — 2 of which use slugs that duplicate pages already created in May 2025.
- **Net new blog posts in 15 months:** 6 created, 4 unique.

##### Legal pages
3 created Sept 2025 (privacy, terms, cookies).

##### Media (images, videos)
~392 uploaded by Prior Vendor accounts in window. See [media-timeline.md](./media-timeline.md) for full breakdown. Approximately ~30% of total media items in the library are WebP duplicates of existing JPEGs (a batch image-format conversion, not new visual content).

---

#### Cost Analysis

Comparing $ paid against WordPress-visible output:

- **$2K era (Feb–Oct 2025):** $18,000 paid → 24 new deliverables → **$750/deliverable**
- **$3.8K era (Nov 2025–Apr 2026):** $22,800 paid → 5 new deliverables (3 unique once duplicates are removed) → **$7,600/deliverable (effective)**

The rate change between the two eras was +90%. The cost per new deliverable changed by approximately +900%.

If the April 2026 rebuild is treated as a separate one-time project rather than retainer output, the $22,800 paid in the $3.8K era covers: 1 new service page, 4 blog posts (2 duplicates), and the rebuild itself.

---

#### Questions Worth Asking Prior Vendor

This audit is the WordPress + Google-platforms record. Reasonable questions for Prior Vendor, against which their answers can be cross-checked:

1. **Itemized monthly invoices** — what was billed for, by deliverable, for each of the 15 months.
2. **What justified the November 2025 rate increase from $2,000 to $3,800?** What scope expansion accompanied the 90% price increase?
3. **Per-month task lists** — Prior Vendor presumably tracked work in a system (ClickUp, Asana, Trello, email, etc.).
4. **For any blog post or service page Prior Vendor claims to have "rewritten" or "improved":** before/after diffs. The 19-second bulk-modify timestamp on April 20, 2026 is in the WordPress record.
5. **Hours logged per month.** At $3,800/month and typical agency rates, what did the hours in Dec 2025, Jan 2026, and Feb 2026 cover?
6. **Specifically: what was delivered in Feb 2025, Mar 2025, Dec 2025, Jan 2026, Feb 2026, and Mar 2026** — months with no measurable WordPress output.
7. **The April 2026 rebuild:** was it quoted as a separate project, or absorbed into the retainer? What was the implied retainer rate excluding the rebuild?
8. **Conversion tracking:** the `generate_lead` event has never fired since being configured in March 2025. What testing was done?
9. **The September 2025 Google Ads Performance Max campaign:** who managed it, what was the spend, and why was it paused in October?
10. **Backlink profile:** the DR drop (14 → 4.5, Sept 2025 – Jan 2026) and the 108-domain spam injection in May 2026. What monitoring was in place? Why was no disavow filed?

Prior Vendor can verify every data point above by logging into the same WordPress admin and Google accounts.

---

#### What This Audit Cannot See

The WordPress REST API only tracks content. It does not reveal:

- Plugin installations / configurations
- Theme / CSS edits not stored as posts
- WordPress settings changes (permalinks, comments, reading)
- Server / hosting work (DNS, SSL, caching, CDN)
- Communication time, strategy calls, consulting
- Image editing done off-WordPress before upload
- SEO audits or reports produced outside WordPress
- Email / phone support hours
- Third-party tool work done outside Google's connected platforms

Some of those things are real work. If Prior Vendor claims any of them, supporting artifacts (logs, screenshots, before/after files) would be the way to validate.

---

#### Methodology & Caveats

- All timestamps cited are `date_gmt` / `modified_gmt` values returned by WordPress on 2026-05-21.
- Page, post, and media totals come from the `X-WP-Total` response header on each REST endpoint.
- GA4 figures come from the connected GA4 property; GSC figures from the connected GSC property; Ahrefs figures from Site Explorer pulls dated 2026-05-21.
- This audit is not a legal opinion. Whether the patterns described meet a contractual or fiduciary threshold is a question for Client Principal and his counsel.
- Every data point in this document is reproducible by re-running the same REST API calls against `client-example.invalid/wp-json/wp/v2/`.

---

#### See Also
- **[Full content inventory](./content-inventory.md)** — every page and post by date and author
- **[Media upload timeline](./media-timeline.md)** — image/video uploads by date and author


---



<a id="prior-vendor-content"></a>

## Prior Vendor — Content Inventory

_source: `audit/prior-vendor-audit/content-inventory.md`_

##### Complete Content Inventory — client-example.invalid

**Compiled:** 2026-05-21 from the WordPress REST API
**Total pages:** 84 (per `X-WP-Total` header on `/wp/v2/pages`)
**Total posts:** 39 (per `X-WP-Total` header on `/wp/v2/posts`)
**Total media items:** 1,274 (per `X-WP-Total` header on `/wp/v2/media`)

Audit window highlighted below: **Feb 2025 → Apr 2026** (Prior Vendor retainer period).

> All timestamps are `date_gmt` / `modified_gmt` values returned directly by WordPress. Authorship is the `author` field on each record.

---

#### Pages — Created In Audit Window (15 months)

| Created | Modified | Author | Slug | Title |
|---|---|---|---|---|
| 2025-04-25 | 2025-07-21 | 10 (Prior Vendor) | custom-bathroom-design-remodeling | Custom Bathroom Design Remodeling |
| 2025-04-29 | 2026-04-25 | 10 (Prior Vendor) | additions | Additions |
| 2025-04-29 | 2026-04-20 | 10 (Prior Vendor) | premium-home-renovations-in-san-diego-elevating-your-living-space-to-luxe-heights | Premium Home Renovations In San Diego… |
| 2025-05-01 | 2026-04-17 | 10 (Prior Vendor) | encinitas-bathroom-remodeling-ideas-with-our-experts | Encinitas bathroom remodeling ideas |
| 2025-05-01 | 2026-04-17 | 10 (Prior Vendor) | 5-x-10-medium-bathroom-remodel | 5′ x 10′ Medium Bathroom Remodel |
| 2025-05-02 | 2026-04-17 | 10 (Prior Vendor) | oceanside-bathroom-remodeling-ideas-with-our-experts | Oceanside bathroom remodeling ideas |
| 2025-05-02 | 2026-04-17 | 10 (Prior Vendor) | 10x10-large-bathroom-remodel | 10×10 large bathroom remodel |
| 2025-05-02 | 2026-04-17 | 10 (Prior Vendor) | carlsbad-bathroom-remodeling-renovation-ideas | Carlsbad bathroom remodeling renovation ideas |
| 2025-05-02 | 2026-04-17 | 10 (Prior Vendor) | encinitas-kitchen-remodel-a-design-build-model-is-your-cost-solution | Encinitas kitchen remodel a design build model… |
| 2025-05-02 | 2026-04-17 | 10 (Prior Vendor) | top-seven-cabinet-makers-to-consider-for-your-so-cal-remodel | Top seven cabinet makers… |
| 2025-05-03 | 2026-04-17 | 10 (Prior Vendor) | Client Company-process-driven-firm-transform-homes | Client Company process driven firm transform homes |
| 2025-05-03 | 2026-04-17 | 10 (Prior Vendor) | lajolla-bathroom-remodeling-ideas-with-our-experts | Lajolla bathroom remodeling ideas |
| 2025-05-29 | 2026-04-20 | 4 (Content Contributor) | el-cajon-master-bath-kitchen-remodel-project | El Cajon Master Bath and Kitchen Remodel |
| 2025-06-25 | 2026-04-20 | 4 (Content Contributor) | san-diego-ca | San Diego Design & Remodeling |
| 2025-07-18 | 2026-04-20 | 6 (admin) | service-areas | Location |
| 2025-07-18 | 2026-04-20 | 6 (admin) | services | What we do |
| 2025-07-18 | 2026-05-04 | 6 (admin) | home | Home Page |
| 2025-07-23 | 2026-04-19 | 6 (admin) | san-diego-home-show | San Diego Home Show |
| 2025-07-23 | 2025-07-23 | 6 (admin) | thank-you-for-stopping-by-the-Client Company-booth | Thank You for Stopping by the Client Company Booth! |
| 2025-08-19 | 2026-04-20 | 10 (Prior Vendor) | tierrasanta-whole-house-renovation | Tierrasanta Whole House Renovation |
| 2025-09-25 | 2026-04-19 | 10 (Prior Vendor) | privacy-policy | Privacy Policy |
| 2025-09-25 | 2026-04-18 | 10 (Prior Vendor) | termsofuse | Terms Of Use |
| 2025-09-25 | 2026-04-18 | 10 (Prior Vendor) | cookies | Cookie Policy |
| 2025-10-24 | 2026-04-22 | 10 (Prior Vendor) | home-additions | Home additions |
| 2025-10-24 | 2026-04-20 | 10 (Prior Vendor) | kitchen-remodeling | Kitchen remodeling |
| 2025-10-27 | 2026-04-24 | 10 (Prior Vendor) | bathroom-remodeling | Bathroom Remodeling |
| 2025-11-21 | 2026-04-20 | 10 (Prior Vendor) | whole-home-renovations | Whole Home Renovations |

**Total new pages in window:** 27
- By Author 10 (Accounts Prior Vendor): 20
- By Author 4 (Content Contributor): 2
- By Author 6 (`client-admin`): 5 — these 5 pages were created in July 2025 in single-hour bursts that match the pattern of Prior Vendor's other batches and are likely produced via the admin login.

---

#### Pages — Created BEFORE Audit Window (existing inventory)

57 pages existed prior to Feb 2025. Most of these show `modified_gmt` timestamps clustered Apr 17–25, 2026 (the rebuild window), indicating bulk re-saves rather than individual edits.

##### Pages by author 6 (`client-admin`) created Oct 2024
33 service and location pages created Oct 4–18, 2024; mass-modified Apr 20–25, 2026:
- about-us, projects, portfolio-gallery, blog (4)
- ~20 service pages (sunroom-design-installation, custom-cabinetry, outdoor-living-spaces, smart-home-integration, eco-friendly-remodeling, luxury-renovations, custom-home-office, custom-walk-in-closet, home-theater-entertainment-room-installation, pool-house-guest-house-design, home-gym-design-installation, custom-fireplace-design-installation, custom-pantry-design, hidden-pet-feeding-stations, custom-mudroom-design, laundry-room-upgrades, custom-bookshelves-built-ins, hidden-tv-media-solutions, wine-cellar-installation, technology-integrated-home-remodeling)
- ~17 location pages (la-jolla, del-mar, rancho-santa-fe, carmel-valley, solana-beach, torrey-pines, del-sur, fairbanks-ranch, carlsbad, encinitas, oceanside, poway, tierrasanta, rancho-bernardo, rancho-penasquitos, scripps, cardiff)
- contact

##### Pages by author 4 (Content Contributor) created Nov 2024
14 portfolio projects created Nov 5–8, 2024:
- rancho-penasquitos-remodel-project, encinitas-addition-bath-flooring-remodel-project, scripps-ranch-remodel-project, clairemont-total-refresh-project, scripps-ranch-master-bath-remodel-project, carlsbad-kitchen-outdoor-living-remodel-project, carmel-valley-master-suite-remodel-project, scripps-ranch-multiple-bathrooms-whole-house-remodel-project, escondido-remodel-project, escondido-bathroom-remodel-project, chula-vista-master-bath-remodel-project, tierrasanta-remodel-project, rancho-penasquitos-master-bath-remodel-project, del-mar-deck-water-intrusion-remodel-project
- Plus `remodeling-projects` (FB Landing, Nov 26, 2024)

---

#### Blog Posts — Created In Audit Window

| Created | Modified | Author | Slug | Title |
|---|---|---|---|---|
| 2025-05-03 | 2026-04-20 | 6 (admin) | unlocking-the-secrets-to-high-end-renovation-in-san-diego | Unlocking the secrets to high end renovation in San Diego |
| 2025-05-03 | 2026-04-25 | 6 (admin) | transforming-spaces-into-luxe-havens-high-end-remodeling-services-in-san-diego | Transforming spaces into luxe havens… |
| 2026-04-17 | 2026-04-20 | 6 (admin) | discovering-san-diegos-premier-high-end-custom-builders | Discovering San Diego's Premier High-End Custom Builders |
| 2026-04-17 | 2026-04-20 | 6 (admin) | top-seven-cabinet-makers-to-consider-for-your-so-cal-remodel | Top Seven Cabinet Makers… **(slug duplicates a May 2025 page)** |
| 2026-04-18 | 2026-04-20 | 6 (admin) | encinitas-kitchen-remodel-a-design-build-model-is-your-cost-solution | Encinitas Kitchen Remodel… **(slug duplicates a May 2025 page)** |
| 2026-04-20 | 2026-04-23 | 6 (admin) | how-to-pick-the-right-finishes-for-coastal-living-socal-remodeling-guide | How To Pick The Right Finishes for Coastal Living |

**Total blog posts created in window:** 6
**Unique new posts (excluding duplicate-slug entries):** 4

---

#### Blog Posts — Created BEFORE Audit Window

33 blog posts created Oct 10–11, 2024 by author 6 (`client-admin`). All 33 show `modified_gmt` timestamps clustered between **2026-04-20 16:49:24 and 2026-04-20 16:49:43** — a 19-second window. This pattern is consistent with a single bulk operation (database update, search-and-replace plugin, theme variable resave, or re-import) rather than individual editorial work.

(Full slug list in [README.md](./README.md).)

---

#### Author Activity Summary

##### Author 6 — `client-admin` (administrator account)
- Originally created the site content in Oct 2024 (before the audit window).
- Within the audit window: created 5 pages in July 2025 (service-areas, services, home, san-diego-home-show, thank-you-booth) in patterns consistent with the Prior Vendor admin-login workflow.
- Created 6 blog posts in window (2 in May 2025, 4 in April 2026).
- Was the account used for the 19-second bulk-modify event on Apr 20, 2026.
- Authorship attribution is ambiguous because Prior Vendor has historically used these credentials.

##### Author 10 — Accounts Prior Vendor
- Primary Prior Vendor operations account.
- Created 20 pages in the audit window.
- Uploaded ~315 media items.
- Active months: Apr, May, Aug, Oct, Nov 2025; Mar, Apr 2026.
- Inactive months: Feb, Jun, Jul, Sep 2025; Dec 2025; Jan, Feb 2026; May 2026.

##### Author 4 — Content Contributor
- Prior Vendor content / portfolio account.
- Bulk of activity was Nov 2024 (pre-window) creating 13 portfolio projects.
- Within window: 2 pages (`el-cajon-master-bath-kitchen-remodel-project` May 29, 2025; `san-diego-ca` Jun 25, 2025) and ~76 media uploads (May 28–29, 2025).
- Effectively inactive after June 2025.

---

#### Total Counts — Final Accounting

##### Net new content in 15-month audit window
- Pages by Prior Vendor accounts (authors 4 + 10): **22**
- Pages by `client-admin` (5 in single-hour bursts): **5**
- Blog posts created in window: **6** (4 unique once duplicate slugs are removed)
- Unique new content items: **27** new pages + 4 unique posts ≈ **27 net deliverables once dupes are excluded**
- Media uploads in window (Prior Vendor accounts): **~392**

##### Production rate
- ~27 unique new content items ÷ 15 months = **~1.8 items per month**
- $40,800 ÷ 27 = **~$1,511 per content item, blended across the full window**

##### Output distribution
- 7 of 15 months show zero new pages and zero new posts.
- 5 of those 7 zero-output months landed *after* the November 2025 rate increase.
- 3 months account for ~60% of all content created (May 2025, Oct 2025, Apr 2026), corresponding to the initial content push, service page completion, and the rebuild.

---

#### Methodology Notes

- All counts derived from `X-WP-Total` headers and full paginated REST pulls of `/wp-json/wp/v2/pages`, `/wp-json/wp/v2/posts`, and `/wp-json/wp/v2/media`.
- Pull date: 2026-05-21.
- Records are independently verifiable inside WordPress admin by sorting Pages, Posts, and Media by Date and filtering by Author.


---



<a id="prior-vendor-media"></a>

## Prior Vendor — Media Timeline

_source: `audit/prior-vendor-audit/media-timeline.md`_

##### Media Upload Timeline — client-example.invalid

**Compiled:** 2026-05-21 from the WordPress REST API (`/wp-json/wp/v2/media`)
**Total media items in WordPress:** 1,274 (per `X-WP-Total` header)

> All timestamps are `date_gmt` values returned directly by WordPress. Approximately ~30% of the total media library consists of WebP duplicates of pre-existing JPEGs (a batch image-format conversion, not new visual content).

---

#### Media Uploaded In Audit Window (Feb 2025 → May 2026)

Approximate monthly upload counts by author, based on paginated REST API pulls:

| Month | Author 10 (Prior Vendor) | Author 4 (Content Contributor) | Author 6 (admin) | Total | Notes |
|---|---|---|---|---|---|
| Feb 2025 | 0 | 0 | 1 | 1 | Single PNG. |
| Mar 2025 | 3 | 0 | 0 | 3 | Three JPEGs. |
| Apr 2025 | ~85 | 0 | 0 | ~85 | Bulk batches Apr 25 + Apr 29. 75+ images in tight clusters (timestamps seconds apart — consistent with drag-and-drop bulk upload). |
| May 2025 | 0 | ~75 | 0 | ~75 | Content Contributor's portfolio image push May 28–29. Mostly JPEG project photos plus 1 video. |
| Jun 2025 | 0 | 1 | 0 | 1 | Single JPEG. |
| Jul 2025 | 0 | 0 | 0 | 0 | — |
| Aug 2025 | ~40 | 0 | 0 | ~40 | Aug 19 batch (Tierrasanta project) + 1 video. |
| Sep 2025 | 0 | 0 | 0 | 0 | — |
| Oct 2025 | ~40 | 0 | 0 | ~40 | Oct 7, 24, 27 batches (service page support images). |
| Nov 2025 | ~40 | 0 | 0 | ~40 | Nov 13, 19, 20, 21 batches. |
| Dec 2025 | 3 | 0 | 0 | 3 | Three single-image uploads. |
| Jan 2026 | 1 | 0 | 0 | 1 | One JPEG. |
| Feb 2026 | 1 | 0 | 0 | 1 | One WebP. |
| Mar 2026 | ~80 | 0 | 0 | ~80 | Major bulk upload Mar 2–3. 50+ WebP images in 2 days — appear to be format-converted versions of existing content. |
| Apr 2026 | ~22 | 0 | 0 | ~22 | Apr 17, 22, 25 batches (rebuild support). |
| May 2026 (to 05-21) | 0 | 0 | 0 | 0 | — |
| **TOTAL** | **~315** | **~76** | **1** | **~392** | |

---

#### Pattern Analysis

##### Bulk-upload signature
Most uploads occur in tight batches with timestamps clustered within seconds of each other:
- **Apr 25, 2025:** 10+ images uploaded between 7:46 and 13:26 (PNG/JPEG).
- **Apr 29, 2025:** 75+ images uploaded between 9:42 and 13:26 (mostly JPEGs at ~1-second intervals).
- **May 28–29, 2025:** ~60+ images uploaded by Content Contributor in single sittings.
- **Aug 19, 2025:** 40 images uploaded between 5:43 and 7:34 (Tierrasanta project).
- **Mar 2, 2026:** 50+ WebP images uploaded between 10:35 and 17:14.
- **Mar 3, 2026:** 30 additional WebP images uploaded between 12:17 and 13:10.

These clusters are consistent with bulk drag-and-drop uploads (multi-file select from a folder), not individual per-image processing.

##### Format pattern
- **2024 uploads:** Predominantly JPEG.
- **2025 uploads:** Mixed JPEG and PNG (project photos, banners, mockups).
- **March 2026 uploads:** Almost exclusively WebP. Many appear to be WebP-converted versions of pre-existing JPEGs (same filename root, lighter format). This is automated format conversion — not new visual content.

##### Composition of the ~392 in-window uploads
- ~50 portfolio photography (Content Contributor's May 2025, plus Aug and Oct 2025 batches).
- ~80 format-converted versions of existing images (the March 2026 WebP push).
- ~150 service page support images (Oct–Nov 2025 + Apr 2026 — supporting the new service pages Prior Vendor created).
- ~120 other (bulk imports, stock-style content).

Across the full media library of 1,274 items, approximately ~30% are WebP duplicates of an existing JPEG counterpart.

---

#### What Media Upload Records Cannot Tell Us

The REST API records do not reveal:

- Whether the images were captured / sourced by Prior Vendor or supplied by Client Principal.
- Whether images were professionally edited / color-corrected, or simply batch-converted.
- Whether alt text was written (alt text lives in postmeta, not in the basic REST response).
- Whether the images were used on pages or left orphaned in the library.

To answer those, the WordPress admin Media Library or a `postmeta` table query would be needed.

---

#### Verification You Can Do Inside WP Admin

In **Media → Library**, set the date filter to each month and inspect:

1. **Are uploaded images actually being used on pages?** Click an image; the "Uploaded to" field on the right sidebar shows attachment. An empty "Uploaded to" indicates an orphaned media item.
2. **Do the images have alt text?** Click any image; the Alt text field is visible. Empty alt text is not SEO-optimized.
3. **Are WebP images replacing originals or duplicating them?** Filter by file type. If JPEG and WebP versions of the same content both exist, the WebP is an alternate format, not new content.

---

#### Methodology Notes

- Counts derived from paginated `/wp-json/wp/v2/media` REST pulls; total verified against the `X-WP-Total` header (1,274).
- All timestamps are `date_gmt` values returned by WordPress.
- Pull date: 2026-05-21.


---

