Anonymized example · direct client identifiers replaced · performance data preserved
Client Company Digital Visibility · Full Report
client-example.invalid · anonymized sample · prepared by Comcreate · 2026-05-21

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.


Table of Contents

Executive

Research

Ahrefs

GSC

GA4

WordPress

Prior Vendor


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:

Credentials & Reputation (the brand is genuinely strong)

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):

Ahrefs estimates (directional only):

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:

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:

Traffic streams worth surfacing separately

3. What's Going Right

The site has real assets:

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.


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


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)
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
Per Houzz (more comprehensive list)
Specialty (from site service pages)

Service Areas (22 location pages)

Coastal/North County (premium markets)

Inland affluent

Other


Reputation & Reviews

Yelp
Houzz
BBB
Other Platforms
Review Themes (from search-scraped feedback)
Editorial Coverage / Backlinks From

Credentials & Certifications


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.


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
Key benchmark: Jackson Design & Remodeling
Key benchmark: Kaminskiy

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
123 Remodeling
Kaminskiy

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
Own the specialty niches first
Win on Houzz traffic (already winning, just convert it)
Win on local pack / GBP
Use editorial credentials defensively

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:

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:

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

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:

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:

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.


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:

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

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

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

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:

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:

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.


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:

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

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

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

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

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

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:

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

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:

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.


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:

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


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

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:

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.


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

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

Net Takeaway

The April 2026 rebuild did not crater rankings in the immediate window after deployment. In fact:

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.


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

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:


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.


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

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):

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:

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:

The newer /services/[slug]/ detail pages convert at 0%:

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

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

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

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

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:

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:

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

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

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)
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):

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:

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:

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.


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:

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.

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:

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

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
  1. Instagram, Facebook — present but low engagement
  2. Yelp — small but qualified
  3. Bing — minimal volume
Growth channels (untapped or new)
  1. AI engines (ChatGPT, Claude, Copilot) — early, growing, worth dedicated tracking
  2. Pinterest — not visible in current data despite Client Company having a Pinterest account; unused channel inventory worth investigating
Filter / fix channels
  1. "Direct" — must be filtered to extract real direct traffic from bot noise
  2. 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

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

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:

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:

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:

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:

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


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:

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:

The 16-month picture is starker:

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 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
  1. Localize service-area pages — they get impressions but no engagement; add real photos, real projects, real testimonials, and neighborhood-specific content
  2. Expand portfolio depth — portfolio pages engage 50–70% of visitors when reached; build out more case studies
  3. Internal linking from blog → service → portfolio — currently blog visitors don't move through the funnel
Measurement gaps to close
  1. Most conversion events are not firingpurchase and generate_lead have 0 fires. Only phone_click (13) and email_click (4) work. Form-submit tracking is broken or missing entirely
  2. Map the homepage funnel — where do real users go after landing on /?

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:


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

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)
Media library

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:

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
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:

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


10. Form & Lead Capture

What we can confirm externally
What requires admin login to confirm

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
Unknown without admin access

13. Summary

The WordPress stack itself is modern and well-equipped:

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.


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
What was left unfinished

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

Specialty services (rare for a firm this size — a clear differentiator)

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)

Inland affluent

Other

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:

This is an underused asset. Each portfolio page can be optimized for:


Blog (39 posts)

The blog is topically well-structured but editorially thin:

Content strengths
Content weaknesses (from titles + scan)
Higher-ROI path

Editorial uplift on the existing 39 posts beats commissioning new ones:


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.


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

Mobile Performance — Detailed Findings

Top opportunities

1. Reduce unused JavaScript — savings: 1,150ms, 194,862 bytes

2. Reduce unused CSS — savings: 450ms, 36,511 bytes

Combined mobile impact

Resolving these two opportunities projects:

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

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:

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:


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:

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:


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:

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

Search Console

Backlink profile (Ahrefs)

Redirects

Performance

Analytics hygiene

Service pages

Paid media


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:

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
Blog posts
Legal pages

3 created Sept 2025 (privacy, terms, cookies).

Media (images, videos)

~392 uploaded by Prior Vendor accounts in window. See 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:

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:

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


See Also


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


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:

Pages by author 4 (Content Contributor) created Nov 2024

14 portfolio projects created Nov 5–8, 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.)


Author Activity Summary

Author 6 — client-admin (administrator account)
Author 10 — Accounts Prior Vendor
Author 4 — Content Contributor

Total Counts — Final Accounting

Net new content in 15-month audit window
Production rate
Output distribution

Methodology Notes


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:

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

Format pattern
Composition of the ~392 in-window uploads

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:

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