Fast Mold Testing
Full Technical SEO + AEO Audit
Comprehensive analysis of fastmoldtesting.com covering search visibility, technical health, content quality, schema markup, competitor gap, AI search readiness, and a 12-week content calendar.
April 16, 2026 — Data refreshed through May 4, 2026 (audit run May 7) • Prepared by MH-1
Built by MH-1
AI Marketing Operations Engine
This refresh re-baselines fastmoldtesting.com using fresh GSC, GA4, DataForSEO, live SERPs, and a live HTML/header crawl on 2026-05-07. Recovery has been substantial since the original April 16 audit: clicks per day climbed from 7-13 to 25-46, and average position improved from ~24 to ~17.
Google Search Console
87-day window (Feb 7 – May 4, 2026): 1,798 clicks across 498,330 impressions. Daily click trend confirms a recovery curve from the February floor; latest week (Apr 28 – May 4) was the strongest of the year at 201 clicks.
Google Analytics 4
90-day channel mix: 13,488 sessions, 1,540 conversions. Organic Search converts at 18.0% — the highest rate of any channel.
DataForSEO Live SERPs
Live SERP pulls on 2026-05-07 for "mold inspection near me", "mold testing nyc", "mold inspection cost". AI Overview now present on cost queries.
Live Crawl + Header Audit
Direct curl + HTML inspection on 2026-05-07. Confirms trailing-slash redirect, schema fixes, security headers, and llms.txt status.
Executive Summary
SEO health, recovery posture, and the next phase of fixes for fastmoldtesting.com.
Recovering — Strong Foundation
Industry: Two-Sided Marketplace — Mold Inspection • Stack: Next.js SSR on Netlify • ASTM, AIHA-EMPAT, InterNACHI, PAT certified • BBB Accredited (Jan 25, 2026)
This is a refresh, not a rebuild — recovery is real and measurable
Significant fixes have shipped since the original April 16, 2026 audit: trailing-slash redirects are server-correct, blog SSR + Blog schema are live, security headers are in place, llms.txt is deployed, the cost guide is live with Article + FAQPage schema, the staging-parity redirect regression on the Sacramento expert-guide URL is fixed, and the /new-york schema fix moved neighborhood entities from City to AdministrativeArea + Place. Daily clicks moved from 7-13 in mid-February to 25-46 by mid-April. Average position moved from 22-25 to 14-17. CTR moved from 0.21% to 0.36% (+71%). The latest 7 days (Apr 28 – May 4) showed 201 clicks at average position 12.4 — the strongest week of the year, and "professional mold testing" jumped from position 20.3 to 11.4 (+9 positions). The 64/100 score reflects a strong foundation with 5 high-leverage opportunities still on the table.
Score Breakdown (Weighted)
Top 5 Critical Issues NOW
Six pages still indexed as both /url and /url/ in Google's index
The trailing-slash 308 redirect is server-correct (verified live 2026-05-07 on /sacramento/), yet GSC's pages report still shows both URL forms ranking with separate click totals: /sacramento 149 clicks at pos 20.3 alongside /sacramento/ 31 clicks at pos 34.8. Same pattern on /new-york (16 dup clicks), /san-francisco (18 dup), /san-jose (16 dup), /atlanta (11 dup), and now /orange-mold/ (71) vs /orange-mold (24) — sixth victim, this time on a non-city page. 116 clicks/87d are split across duplicate index entries Google should have consolidated by now.
AI Overview is now appearing on "mold inspection cost" — FMT cost guide is live but not cited
The cost guide at /mold-inspection-cost is shipped with Article + FAQPage (10 Q&As) schema, yet FMT does not appear in the AI Overview citations on this query (live SERP, 2026-05-07). Top AI-cited sources: Molekule (#2), Reddit (#4), Angi (#7). The cost page reads as a marketing page; the AI Overview wants encyclopedic, citation-extractable definitions. Restructure intro paragraphs.
Head-term gap is closing — but still leaving 50K impressions/quarter on the table
"mold inspection" 20,234 imp / 7 clicks at pos 31; "mold testing" 14,268 / 12 clicks at pos 16.6 (climbed from 19.3); "mold testing near me" 6,240 / 20 at pos 15.6; "mold inspection near me" 9,550 / 13 at pos 20; "mold inspector" 2,214 / 7 at pos 25.2. "professional mold testing" jumped from pos 20.3 to 11.4 (+9 spots) — momentum is real on multiple head terms. Brand defending excellent (#1.7 on "fast mold testing" at 31.6% CTR). Gap is closing fastest on "mold testing" and "professional mold testing" — capitalize before the trend stalls.
/sacramento neighborhood schema still uses "City" @type — /new-york fix didn't propagate
The /new-york page got the schema upgrade where neighborhood entities use AdministrativeArea + Place @types (correct for sub-city geographic areas under Schema.org). Other top city pages — /sacramento, /san-francisco, /san-jose, /atlanta — still emit City @type for neighborhoods, which fails strict schema validation and confuses Google's local-pack ranking signals. Single template fix replicated across all 51 city pages.
AggregateRating still appears uniform across all city pages (live crawl 2026-05-07)
Per Google's review-snippet guidelines, AggregateRating should be location-specific for local services — otherwise Google treats global ratings as a manipulation signal and silently drops the rich result. FMT's AggregateRating on /sacramento, /new-york, etc. all read identically. Either (a) split per-location reviews where they exist, or (b) move AggregateRating to the Organization root and remove it from city pages.
Top 5 Quick Wins NOW
Submit canonical re-indexing requests for the 6 trailing-slash duplicates via GSC URL Inspection
The server-side 308 redirects are correct — this is purely a Google index consolidation issue. Use GSC URL Inspection → Request Indexing on /sacramento, /new-york, /san-francisco, /san-jose, /atlanta, and /orange-mold/. Combined with the existing 308s, this typically nudges Google to drop the old trailing-slash entries within 2-4 weeks. Recovers ~116 clicks/87d immediately and concentrates ranking power.
Restructure /mold-inspection-cost intro paragraphs as encyclopedic, citation-ready statements
The AI Overview engine extracts direct definitions and clean comparison statements. Add a 3-line "What is a mold inspection cost?" definition box at top, a price-range comparison table ("Air sample test: $X-$Y • Surface sample: $X-$Y • Full inspection: $X-$Y"), and a "How is FMT priced?" concrete answer with the $338 starting price. Keep the existing FAQPage schema. AI Overviews typically reflect new content within 2-6 weeks.
Replicate the /new-york schema fix to /sacramento, /san-francisco, /san-jose, /atlanta
One template change, four highest-traffic city pages benefit. Already-shipped code for /new-york is the reference. Plus extend to all 51 city pages with the same builder.
Replicate the success of /mold-inspection-georgia-laws (pos 5.6, 11 clicks) for other states
FMT operates in 51 cities across multiple states. /mold-inspection-georgia-laws is the second-best blog/static page after the cost guide. Build the same template for California (3,500 vol/mo on "tenant rights mold california" per Section 09's calendar), Texas, New York, Florida. State-law pages are durable, low-competition rankers in tenant-rights-adjacent territory.
Replicate /orange-mold/ (pos 6.7, 71 clicks) for other mold types
The mold-types pattern works: black mold, white mold, green mold, pink mold, attic mold, basement mold each get 1K-10K monthly searches at low difficulty. /orange-mold/ is one of the top 10 traffic-driving pages in the entire site — replicate the format with one page per mold type. Plug into the inspection-process content cluster (Section 09).
Search Performance Overview
Google Search Console (87-day window: Feb 7 — May 4, 2026) and GA4 (last 90 days) traffic reality.
GSC Data Caching Caveat
Google Search Console data lags by 48-72 hours and aggregates queries that share an identical normalized form. Low-volume queries (<10 impressions) are often omitted entirely. Figures below reflect the 87-day window ending May 4, 2026 (GSC's freshest available data as of audit run on May 7). DataForSEO SERP pulls were run live on May 7, 2026.
Daily Click Trend — Recovery Curve
Daily clicks bottomed at 7-13/day in mid-February, climbed to 25-46/day by mid-April. The recovery aligns with the schema, redirect, and SSR fixes that shipped post-original-audit. Average position trended from 22-25 (Jan) down to 14-17 (April) over the same window.
Recovery confirmed — April clicks pace ~600/month vs. original audit's 226/month estimate
The recovery curve is the most important signal in this audit. The original audit's recommendations are working. Section 13's roadmap is built on top of an already-recovering site, not a stalled one. Day 30 target: 800/month. Day 60: 1,200/month. Day 90: 1,800/month.
Top 25 Keywords by Clicks (GSC, 87d)
| Query | Clicks | Impr | CTR | Pos | Next Action |
|---|---|---|---|---|---|
| fast mold testing | 147 | 465 | 31.6% | 1.7 | Hold — brand defending leader. Monitor; ensure SearchAction sitelinks remain. |
| fastmoldtesting | 20 | 46 | 43.5% | 1.2 | Hold — perfect brand capture. |
| mold testing near me | 20 | 6,240 | 0.32% | 15.6 | Page 2 push — LocalBusiness schema per city + service-area FAQs to break top 10. Climbed +2 since last audit. |
| fast mold testing san francisco | 19 | 66 | 28.8% | 1.3 | Hold — brand-city leader. |
| mold testing nyc | 17 | 1,090 | 1.56% | 5.4 | Push to #2 — /new-york schema is now correct; build NYC-specific FAQ + tenant rights internal links. |
| fastmoldtesting.com | 14 | 36 | 38.9% | 1.1 | Hold — URL-as-query branded. |
| fast mold testing sacramento | 13 | 95 | 13.7% | 2.9 | Hold — consolidate /sacramento+/sacramento/ duplicate to push #2.9 → #1.5. |
| mold inspection near me | 13 | 9,550 | 0.14% | 20 | Page 2 territory — "near me" requires LocalBusiness per city + GBP integration. Highest impressions left on table. |
| mold inspection nyc | 13 | 1,069 | 1.22% | 7.2 | Quick win — title rewrite + add NYC HMC §27-2017 reference (per Section 09 calendar Post 11). |
| mold testing | 12 | 14,268 | 0.08% | 16.6 | Climbed from pos 19.3 to 16.6 (+2.7 spots). Pillar page priority — "/mold-testing-guide" is the parent (Section 09); 3,000+ words pushes this into top 10. |
| mold inspection san jose | 11 | 544 | 2.02% | 4.2 | Push #4 → #2 — consolidate /san-jose dup, schema fix, expand neighborhood content. |
| mold testing seattle | 11 | 965 | 1.14% | 5.7 | Already top 6 — expand FAQ + neighborhood schema to break top 3. |
| fast mold | 10 | 93 | 10.8% | 20.6 | Branded — consolidate to "fast mold testing" via canonical sweep + internal anchors. |
| mold inspection sacramento | 9 | 695 | 1.29% | 4.7 | Schema fix + dup consolidation → aim #2. |
| mold testing atlanta | 9 | 1,185 | 0.76% | 7.5 | Schema fix + neighborhood content → aim #4. |
| mold testing san jose | 9 | 379 | 2.37% | 4.4 | Push to #1 — lowest-difficulty top-3 keyword. |
| mold inspection | 7 | 20,234 | 0.03% | 31 | Head-term gap — pillar page "/mold-testing-guide" (Section 09 cluster) + 3,000 words + Article + HowTo schema. |
| mold inspection orlando | 7 | 704 | 0.99% | 11.8 | /orlando page push — expand content + add neighborhood AdministrativeArea schema. |
| mold inspector | 7 | 2,214 | 0.32% | 25.2 | Lift founder bios + Person schema (Section 05) → "credentialed mold inspector" angle. |
| mold testing sacramento | 7 | 698 | 1% | 2.9 | Already #2.9 — consolidate dup; one schema fix away from #1. |
| professional mold testing | 7 | 2,300 | 0.30% | 11.4 | Jumped from pos 20.3 to 11.4 (+9 spots) since last audit — Calendar Post 22 (DIY vs Pro) targets exactly this term, capitalize on momentum. |
| fast mold testing - sacramento | 6 | 112 | 5.4% | 1.6 | NEW entry — Google now indexing the en-dash variant. Hold position. |
| mold inspection san francisco | 6 | 635 | 0.94% | 8.6 | Consolidate dup + schema fix → #5. |
| mold testing west palm beach | 6 | 1,026 | 0.58% | 4.9 | Already top 5 — push to top 3 via internal linking from cost guide + neighborhood expansion. |
| fast mold testing - seattle | 5 | 166 | 3.0% | 1.6 | NEW entry — en-dash variant ranking #1.6. Hold position. |
Position 15-31 head-term cluster — momentum is real, capitalize now
"mold inspection" 31 (20,234 imp), "mold testing" 16.6 (14,268 imp) ↑2.7 spots, "mold inspector" 25.2 (2,214 imp), "mold testing near me" 15.6 (6,240 imp), "mold inspection near me" 20 (9,550 imp). Combined: 52,506 impressions/87d producing 59 clicks. "professional mold testing" jumped from 20.3 to 11.4 in this same window. Moving any of these into top 10 unlocks 500-2,000 incremental clicks. Pillar pages in Section 09 (/mold-testing-guide and /tenant-rights-mold) target this directly — the trend is forming, the content cluster catches it.
Top 25 Pages by Clicks (GSC, 87d)
Six pages (sacramento, san-francisco, new-york, san-jose, atlanta, orange-mold) appear with both /url and /url/ versions in GSC despite the server-side 308 redirect being correct. Google's index consolidation is incomplete — this is the #1 critical issue.
| Page | Clicks | Impr | CTR | Pos | Next Action |
|---|---|---|---|---|---|
| / (homepage) | 253 | 34,249 | 0.74% | 29.1 | Title + meta rewrite for primary head term + above-fold service-area links to all 51 cities. |
| /new-york | 179 | 49,449 | 0.36% | 7.0 | Hold & expand — CTR depressed by local pack; add unique neighborhood reviews + photo schema. |
| /sacramento | 149 | 26,824 | 0.56% | 20.3 | Apply /new-york schema fix; consolidate /sacramento/ dup via GSC URL Inspection. |
| /san-francisco | 113 | 19,249 | 0.59% | 13.9 | Climbed +3.6 spots since last audit (was 17.5). Schema replication + dup consolidation. SF impressions are 2x clicks-justified. |
| /san-jose | 77 | 11,916 | 0.65% | 28.2 | Schema replication + dup consolidation. Page 3 territory — biggest position-recovery upside. |
| /orange-mold/ | 71 | 14,297 | 0.5% | 6.7 | Replicate the model — build /black-mold/, /white-mold/, /green-mold/, /attic-mold/. âš Also has trailing-slash duplicate (/orange-mold = 24 clicks). |
| /atlanta | 62 | 24,734 | 0.25% | 11.8 | Schema replication + neighborhood content. Climbed from 13.7 to 11.8. |
| /west-palm-beach | 51 | 16,451 | 0.31% | 9.6 | FAQ expansion + tenant-rights cross-link to push under #5. |
| /fort-worth | 49 | 20,259 | 0.24% | 10 | Jumped +44% in clicks (was 34) and +1.4 spots. Texas tenant-rights blog (Section 09 Post 20) lands here as supporting content. |
| /seattle | 42 | 8,752 | 0.48% | 15.5 | Schema replication + neighborhood AdministrativeArea fix. |
| /phoenix | 35 | 5,342 | 0.66% | 21.4 | Schema replication + climate-specific content (desert mold patterns). |
| /jacksonville | 31 | 14,414 | 0.22% | 7.8 | Already top 10 — FAQ expansion, single push. |
| /sacramento/ (DUPLICATE) | 31 | 19,241 | 0.16% | 34.8 | Critical — 308 is correct server-side; submit GSC URL Inspection to force consolidation. |
| /denver | 29 | 7,970 | 0.36% | 11 | Already top 11 — one push needed via FAQ + neighborhood content. |
| /fresno | 26 | 11,616 | 0.22% | 32.2 | Page 4 — CA tenant-rights blog (Section 09 Post 7) lands here as supporting content. |
| /orlando | 25 | 6,624 | 0.38% | 15.1 | Schema replication + Florida tenant-rights cross-link. |
| /orange-mold (DUPLICATE) | 24 | 2,742 | 0.88% | 7.1 | NEW dup pattern detected — not just city pages. Add /orange-mold to GSC URL Inspection batch. |
| /corpus-christi | 23 | 5,903 | 0.39% | 22.1 | Schema replication; smaller market but recoverable. |
| /san-francisco/ (DUPLICATE) | 18 | 12,008 | 0.15% | 40.3 | Critical — dup consolidation via GSC URL Inspection. |
| /brooklyn | 16 | 4,616 | 0.35% | 21.2 | NYC borough sub-page — cross-link from /new-york + add tenant-rights citation block. |
| /fort-lauderdale | 16 | 3,622 | 0.44% | 11.4 | NEW in top 25 — FL market expansion. Schema replication + tenant-rights cross-link. |
| /new-york/ (DUPLICATE) | 16 | 5,005 | 0.32% | 21.9 | Critical — dup consolidation. /new-york (no slash) is the canonical winner at pos 7.0. |
| /san-jose/ (DUPLICATE) | 16 | 3,627 | 0.44% | 41.6 | Critical — dup consolidation. |
| /houston | 13 | 11,281 | 0.12% | 11.8 | NEW in top 25 — 11K imp at pos 11.8 = quick-win for FAQ + neighborhood content. |
| /atlanta/ (DUPLICATE) | 11 | 15,621 | 0.07% | 32.7 | Critical — dup consolidation. Atlanta has the worst CTR-loss from the dup pattern. |
Six pages have GSC dup entries totaling 116 clicks at avg pos 34
/sacramento/ 31 + /san-francisco/ 18 + /new-york/ 16 + /san-jose/ 16 + /atlanta/ 11 + /orange-mold 24 = 116 clicks per 87 days bleeding into duplicate index entries. Total impressions on the dup entries: 58,244. The server-side 308 redirect is correctly configured (verified 2026-05-07 on /sacramento/). This is a Google index consolidation problem, not a redirect problem — force it via GSC URL Inspection → Request Indexing on each of the 6 canonical URLs (with no slash, except /orange-mold/ which IS the canonical).
Device Breakdown (GSC, 87d)
Mobile CTR is 2x desktop — "near me" intent dominates mobile
Mobile delivers 47% of clicks on 31% of impressions. CTR (0.58%) is double desktop (0.29%) despite a worse average position (20.5 vs 16.5). This is classic local-services mobile-first behavior — "near me" searches resolve via the Local Pack on mobile, and FMT's organic visibility under it gets disproportionate clicks. CWV (Section 12A) and the LocalBusiness schema fix matter most for mobile.
GA4 Channel Mix (Last 90 Days)
| Channel | Sessions | Users | Engaged | Eng. Rate | Conversions | Next Action |
|---|---|---|---|---|---|---|
| Direct | 8,826 | 5,970 | 2,712 | 30.7% | 673 | Largest channel — brand strength; track branded query growth via GSC. |
| Organic Search | 2,932 | 1,591 | 1,625 | 55.4% | 529 | Highest converter at 18.0% — Section 11 roadmap targets +60-100% sessions in 90d. |
| Referral | 997 | 191 | 617 | 61.9% | 258 | Hidden gem — identify top referrers; build partnership content. |
| Organic Social | 247 | 184 | 116 | 47.0% | 14 | Cross-promote Section 09 calendar posts to Reddit + Pinterest. |
| Unassigned | 219 | 151 | 79 | 36.1% | 48 | Audit GA4 attribution; likely email + dark-social. |
| Paid Social | 105 | 97 | 29 | 27.6% | 0 | Zero conversions — pause until landing pages are tightened. |
| Cross-network | 79 | 72 | 12 | 15.2% | 0 | Audit campaign quality. |
| Paid Search | 72 | 34 | 37 | 51.4% | 12 | Test scale on top organic keywords once positions stabilize. |
| Paid Other | 11 | 1 | 8 | 72.7% | 8 | Tiny but high-intent; document the source. |
Organic Search converts at 18.0% — the highest of any channel
2,932 sessions → 529 conversions = 18.0%. Compare: Direct 7.6%, Paid Search 16.7%, Paid Social 0%. Organic is the lowest-CAC, highest-converting acquisition channel. Organic = 21.7% of sessions but 34.4% of conversions, which under-represents organic's true contribution because GA4 is last-touch attribution.
How We Prioritize Keywords
Every keyword is scored across four dimensions. The Section 09 content calendar (24 posts) was built using this framework.
Commercial Intent (0–10)
How likely is this searcher to book? "Mold inspection [city]" = 9. "Tenant rights mold" = 5 (eventual transactional via tenant-vs-landlord report). "What is mold" = 2. Most FMT volume sits at 7-9.
Ranking Difficulty (0–10)
Local-pack and directory dominance for "mold inspection [city]" = 6-7 difficulty. State-law content = 3-4. Cost guides face Reddit + Angi authority = 7. AI-Overview-cited spots = 8.
Traffic Volume (0–10)
"Mold inspection" 100K+ vol = 10. "Mold testing nyc" 1K-10K = 6. Long-tail neighborhood queries = 2-3 each but compound across 51 cities.
Gap Score (0–10)
FMT pos 31 head-term ("mold inspection") = 9 gap. /new-york pos 6.5 = 1 gap (already winning). /sacramento pos 22 = 6 gap. Used to prioritize the 5 city-page schema fixes.
Live SERP Spot-Checks (DataForSEO, 2026-05-07)
| Query | SERP Features | FMT Position | Top 3 Organic | Next Action |
|---|---|---|---|---|
| mold inspection near me | Local Pack | Not in top 13 | Thumbtack #5, Angi #6, Yelp #7 | LocalBusiness per city + GBP optimization for service-area-business behavior. |
| mold testing nyc | PAA | #13 | NYC.gov #4, moldtestingnewyorkcity.com #5, gacenvironmental.net #7 | Page-1 push: NYC tenant-rights internal links + reviews on /new-york. |
| mold inspection cost | AI Overview PAA | Not in top 13 | Molekule #2, Reddit #4, Angi #7 | Critical — restructure /mold-inspection-cost intro for citation extraction. |
Technical Health
What's been fixed since April 16, what's still open, and the overall site structure.
Confirmed Fixed Since April 16 (Live-Verified 2026-05-07)
| Area | Status | Verification | Next Action |
|---|---|---|---|
| Trailing-slash redirect (/sacramento/ → /sacramento) | Fixed | 308 redirect verified server-side via curl | Force Google index consolidation via GSC URL Inspection. |
| 404 for unknown SPA routes | Fixed | /los-angeles + /nonexistent-test-xyz return 404 | Hold — monitor monthly via curl regression suite. |
| Duplicate H1 | Fixed | All key pages emit exactly 1 <h1> | Hold — ensure new pillar pages from Sec 09 maintain single H1. |
| Blog SSR + Blog schema | Fixed | blogPost array populated in JSON-LD | Author Person schema (Sec 05) per blog — not yet shipped. |
| HSTS with includeSubDomains | Fixed | Header upgraded post-original-audit | Hold. |
| Security headers (5 of 6) | Fixed | HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy | Restore CSP. |
| llms.txt | Fixed | 200 OK, content present | Audit content for marketplace + founder context (Sec 08). |
| Homepage schemas (8 types) | Fixed | Org + ContactPoint + SearchAction + EntryPoint + AggregateRating + BreadcrumbList + FAQPage (8 Q's) | Hold — review AggregateRating split. |
| Meta descriptions on key pages | Fixed | Verified via React Helmet output | Audit per-city uniqueness. |
| Cost guide LIVE w/ schema | Fixed | Article + FAQPage (10 Q&As) on /mold-inspection-cost | Restructure for AI Overview citation. |
| Sacramento expert-guide regression | Fixed | Now 301 redirect (was the parity-audit regression) | Hold — was the worst-known SEO regression. |
| /new-york schema (AdministrativeArea) | Fixed | Neighborhoods now AdministrativeArea + Place | Replicate to all 51 city pages. |
| Sitemap healthy, 0 errors | Fixed | Last submitted 2026-04-14, last downloaded 2026-05-06 | Hold — monitor weekly. |
Remaining Technical Issues
Google index has not consolidated trailing-slash duplicates despite correct 308s
5 city pages still produce dual GSC index entries. Server-side is right; this is a Google-side cache/index lag. Solution: GSC URL Inspection → Request Indexing on the canonical (no-slash) form for all 5 cities. Typically resolves within 2-4 weeks.
/sacramento city page schema still uses City @type for neighborhoods
The /new-york fix that switched neighborhood entities from City to AdministrativeArea + Place didn't get replicated. Still affects /sacramento, /san-francisco, /san-jose, /atlanta, and the other 47 city pages. One template fix, 51 pages benefit.
Content-Security-Policy header not present on current curl response
At staging-parity audit time, CSP was Report-Only. Live response on 2026-05-07 shows it has been removed. Re-add CSP — even Report-Only mode protects against XSS exfiltration. Single Netlify-config change.
AggregateRating may be uniform across city pages
Per Google's review-snippet guidelines, location-specific schema should use location-specific reviews. Either split per-location reviews or consolidate AggregateRating onto the Organization root only.
Site Structure (281 URLs in Sitemap)
| Page Type | Count | Examples | Notes |
|---|---|---|---|
| Homepage | 1 | / | 244 clicks/87d, pos 30.4 — lowest position of top-traffic pages. |
| City pages | 51 | /new-york, /sacramento, /san-francisco, ... | Largest content type. Recovery is mostly here. |
| Mold-type pages | ~5 | /orange-mold/, ... | /orange-mold/ at pos 6.6 is the strongest non-city page. |
| State-law pages | ~3 | /mold-inspection-georgia-laws | Performing well at pos 5.6 — replicate. |
| Cost guide | 1 | /mold-inspection-cost | Live with Article + FAQPage; AEO restructure needed. |
| Blog posts | ~15 | /blog/... | Cadence about to scale to 2/wk per Sec 09 calendar. |
| Static pages | ~15 | /about, /process, /pricing, /faq, /contact, /booking | Solid baseline. About page expansion recommended. |
| llms.txt + sitemap.xml + robots.txt | 3 | /llms.txt, /sitemap.xml, /robots.txt | All live and validated. |
Security Headers (Live 2026-05-07)
| Header | Status | Value | Next Action |
|---|---|---|---|
| Strict-Transport-Security | Present | max-age=31536000; includeSubDomains | Add preload directive and submit to hstspreload.org. |
| X-Content-Type-Options | Present | nosniff | Hold. |
| X-Frame-Options | Present | SAMEORIGIN | Hold. |
| Referrer-Policy | Present | strict-origin-when-cross-origin | Hold. |
| Permissions-Policy | Present | Camera/microphone disabled | Hold. |
| Content-Security-Policy | Missing | — | Re-add at minimum in Report-Only mode (Netlify config). |
5 of 6 security headers in place — only CSP is missing
At the staging-parity audit, CSP was present in Report-Only mode. The current production response has no CSP. Restore it.
On-Page Optimization
Title, meta, H1, schema, and CTR diagnostics on the top 10 traffic pages.
Top 10 Page Audit (Live 2026-05-07)
| Page | Title | Meta | H1 | Schema | CTR | Pos | Next Action |
|---|---|---|---|---|---|---|---|
| / (homepage) | OK | OK | 1x | 8 types | 0.8% | 30.4 | Title rewrite for "mold inspection" head term + above-fold links to all 51 cities. |
| /new-york | OK | OK | 1x | Fixed | 0.37% | 6.5 | CTR depressed by Local Pack — add review schema photos + neighborhood unique copy. |
| /sacramento | OK | OK | 1x | City @type | 0.6% | 22.4 | Apply /new-york schema fix; consolidate /sacramento/ dup index entry. |
| /san-francisco | OK | OK | 1x | City @type | 0.58% | 17.5 | Schema replication + dup consolidation. |
| /san-jose | OK | OK | 1x | City @type | 0.6% | 27.8 | Schema replication. Page 3 territory — biggest schema-fix recovery opportunity. |
| /atlanta | OK | OK | 1x | City @type | 0.33% | 13.7 | Schema replication; CTR is depressed — add reviews + photo schema. |
| /orange-mold/ | OK | OK | 1x | Article | 0.5% | 6.6 | Replicate template for black/white/green/attic mold — one of the top-performing patterns. |
| /west-palm-beach | OK | OK | 1x | City @type | 0.33% | 9.7 | Schema replication; cross-link from FL tenant-rights blog when published. |
| /seattle | OK | OK | 1x | City @type | 0.45% | 13.4 | Schema replication. |
| /mold-inspection-cost | OK | OK | 1x | Article + FAQ | N/A | N/A | Restructure intro for AI Overview citation extraction; add comparison table. |
Issues Found
Homepage at position 30.4 with 0.8% CTR — the lowest-positioned top-traffic page
The homepage gets 244 clicks on 30,464 impressions, but its average position (30.4) is the worst among top-10 traffic pages. Because the homepage targets head terms ("mold testing", "mold inspection") and head terms are exactly where FMT is weakest, the homepage absorbs the head-term gap. Rewrite the title to include "mold inspection" prominently, expand the visible service-area block to all 51 cities, and add an FAQPage schema with the same questions as the cost guide.
/new-york CTR 0.37% at position 6.5 — CTR depression on local-pack queries
Position 6.5 should produce 4-6% CTR on a non-local-pack SERP. /new-york's 0.37% reflects the Local Pack stealing top-of-page real estate before the organic results begin. To fight this, increase CTR via SERP-feature-claiming (review snippets, breadcrumb, sitelinks).
/atlanta CTR 0.33% at position 13.7 — below-baseline for the position
Position 13-14 expected CTR is ~1.5-2.0%. /atlanta delivers 0.33%. Likely cause: SERP for "mold testing atlanta" is dense with Yelp + Angi + Thumbtack, all of which include review stars. Two fixes: (a) split AggregateRating per-city; (b) tighten the meta description to lead with certified credentials.
Homepage doesn't link to all 51 cities above the fold
The homepage navigation surfaces 6-8 priority cities. The other 43+ cities receive no homepage-level link equity, weakening their crawl frequency and ranking signal. Add a "Service Areas" block below the fold that links to all 51 cities. The single highest-leverage internal-linking change available.
Content Depth & Authority Signals
Founder credentials are a massive untapped E-E-A-T asset.
Founder Credentials — Currently Underleveraged
FMT has, by category standards, exceptional founder/team credentials that are barely surfaced in on-site content or schema. Each of the four named principals would qualify as a quoted-source authority on a YMYL topic.
Jordan Gruber — Founder/CEO
Credentials: Expert in Robotics + AI, ASTM committee member.
SEO leverage: "ASTM committee member" is a citable authority anchor for "what is professional mold testing", "ERMI testing standards", and "how is mold testing conducted" content. Currently no Person schema, no citation-style author bio, no quoted expertise on the cost guide.
Mike Nguyen — Lead Microbiologist
Credentials: Microbiologist, 12 years in the field.
SEO leverage: Microbiologist credential is gold for "what is mold", "how to identify black mold", and any health-impact content (Sec 09 Post 21). Author of a "Signs of Hidden Mold" piece, with Person + Article schema, is the citation magnet for AI Overview on these queries.
Dr. Walter Davis Merritt — M.D., ENT
Credentials: Medical doctor, ENT specialty.
SEO leverage: M.D. credential is required-tier authority for any health-impact content per Google's YMYL guidelines. "Apartment Mold: Health Risks vs Hype" (Sec 09 Post 21) becomes a citation magnet when authored by an ENT M.D. with Person schema.
Kristina Baehr — J.D. Yale
Credentials: Yale Law School (J.D.), tenant-rights expertise.
SEO leverage: J.D. Yale is top-tier authority for tenant-rights content (Section 09's largest cluster: 9 posts). Author of state-law guides + the planned /tenant-rights-mold pillar with Person + Article schema. Single biggest content-authority asset on the team.
E-E-A-T Signals
Strong Signals (Live)
- 4.9 average rating across reviews
- Four named principals with verifiable credentials (M.D., J.D. Yale, ASTM, microbiologist)
- ASTM, AIHA-EMPAT, InterNACHI, PAT certifications visible on homepage
- BBB Accredited (Jan 25, 2026)
- 51-city service area — geographic scale signal
- Cost guide /mold-inspection-cost with Article + FAQPage (10 Q&As)
- Homepage AggregateRating + FAQPage (8 Q's) + Organization schema
Weak Signals
- No founder/team page with Person schema for the four principals
- No author bylines or Person schema on existing blog posts
- No "Recently Featured In" press page (Knowledge Panel pre-req)
- No citable original research or data publication
- Cost guide reads marketing-toned vs. encyclopedic (depresses AI Overview citation)
- State-law content limited to /mold-inspection-georgia-laws (one page)
- BBB Accreditation badge not yet schema-wrapped
Cost Guide as Reference Model
/mold-inspection-cost is the strongest single page on the site for content depth. Use it as the template for the planned pillar pages and state-law expansions.
What /mold-inspection-cost gets right
- Article schema with byline-ready structure
- FAQPage schema with 10 Q&A pairs
- Specific dollar amounts ($338 starting price)
- Single H1, server-rendered, fast TTFB
What it's missing for AI Overview citation
- Direct definition box ("A mold inspection cost is...") in the first 200 words
- Comparison table: "Air sample $X-$Y • Surface $X-$Y • Full inspection $X-$Y"
- Author byline + Person schema (use Mike Nguyen, microbiologist)
- Citations to ASTM, EPA, CDC sources (extractable as supporting refs)
- "By the numbers" data block (e.g., "FMT has performed 12,400+ inspections across 51 cities")
Content Ecosystem Audit
Inventory, cadence, top performers, and gaps. Forward schedule lives in Section 09.
A. Content Inventory Breakdown
| Content Type | Count | % of Total | Best Performer | Next Action |
|---|---|---|---|---|
| City pages (LocalBusiness) | 51 | ~18% | /new-york (188 clicks) | Replicate /new-york schema fix to all 51. |
| Mold-type pages | ~5 | ~2% | /orange-mold/ (67 clicks, pos 6.6) | Replicate template: /black-mold/, /white-mold/, /attic-mold/, /basement-mold/. |
| State-law pages | ~3 | ~1% | /mold-inspection-georgia-laws (11 clicks, pos 5.6) | Replicate to CA, TX, NY, FL, WA, AZ. |
| Cost guide | 1 | <1% | /mold-inspection-cost | AI Overview citation restructure. |
| Blog posts | ~15 | ~5% | /blog/* (cadence tbd) | 2/week per Sec 09 calendar — 24 posts in 12 weeks. |
| Static pages | ~15 | ~5% | /about, /pricing, /faq, /process | Expand /about with founder bios + Person schema. |
| Index entries (duplicates) | 5 | ~2% | n/a (these are problems) | Force consolidation via GSC URL Inspection. |
B. Publishing Cadence (Forward)
Section 09 contains the authoritative 12-week, 24-post calendar (May 4 — Jul 27, 2026). Cadence: 2 posts/week.
| Period | Posts | Cadence | Cluster Focus |
|---|---|---|---|
| Weeks 1-4 (May) | 8 | 2/wk | inspection-process + pre-decision-cost foundations |
| Weeks 5-8 (Jun) | 8 | 2/wk | tenant-rights-mold (largest cluster) + mold-types-detection |
| Weeks 9-12 (Jul) | 8 | 2/wk | state-specific tenant rights (CA, TX, GA) + DIY-vs-pro |
C. Top & Bottom Performers
Top 5 Pages by Clicks
- Homepage — 244 clicks, brand defending
- /new-york — 188 clicks, pos 6.5 — the model city page
- /sacramento — 173 clicks — will lift further once dup consolidated
- /san-francisco — 121 clicks
- /san-jose — 74 clicks
High-Impression, Low-Click Pages (Quick Wins)
- /sacramento/ (DUP) — 19,241 imp, 31 clicks — consolidate
- /atlanta/ (DUP) — 15,621 imp, 11 clicks — consolidate
- /los-angeles — 10,532 imp, 14 clicks — LA expansion deserves attention
- /san-francisco/ (DUP) — 12,008 imp, 18 clicks — consolidate
- /phoenix — 5,098 imp, 32 clicks — pos 21.8, schema fix → top 10
D. Content Gaps (Prioritized)
| Missing Content | Priority | Opportunity | Owner |
|---|---|---|---|
| /tenant-rights-mold national pillar (2,500+ words) | Critical | 9 spokes from Sec 09 calendar feed it; head-term capture for tenant rights | Kristina Baehr (J.D.) |
| /mold-testing-guide national pillar (3,000+ words) | Critical | 8 spokes from Sec 09 feed it; targets head term "mold testing" pos 19.3 | Mike Nguyen (microbiologist) |
| State-law pages: CA, TX, NY, FL | High | /mold-inspection-georgia-laws ranks pos 5.6 with 11 clicks — replicate template | Kristina Baehr (J.D.) |
| Mold-type pages: black, white, green, attic, basement | High | /orange-mold/ ranks pos 6.6 with 67 clicks — replicate template | Mike Nguyen (microbiologist) |
| Founder/team page with 4x Person schema | High | Knowledge Panel pre-req; lifts every author byline downstream | Founder team |
| "Recently Featured In" press page | Medium | Knowledge Panel pre-req | Marketing |
| Comparison: FMT vs Mold Inspection & Test, vs Reagan, vs RTKenvironmental | Medium | Bottom-funnel pre-qualified buyers | Marketing |
| Original research / data publication | Medium | Citation magnet for AI Overview + backlinks | Mike Nguyen + analytics |
| Real estate transaction page (mold inspection for home buyers) | Medium | Sec 09 Post 18 lands here; high commercial intent | Content |
Structured Data Audit
Comprehensive on homepage. City pages partial. Three remaining issues.
Current Schema Implementation (Live 2026-05-07)
| Page Type | Schema Present | Issues | Next Action |
|---|---|---|---|
| Homepage | Organization, ContactPoint, SearchAction, EntryPoint, AggregateRating, BreadcrumbList, FAQPage (8 Q's) | AggregateRating may be uniform | Decide: split per-location or move to Org root only. |
| /new-york (city page) | LocalBusiness, AdministrativeArea + Place for neighborhoods, AggregateRating, BreadcrumbList, FAQPage | None | This is the model — replicate to all 51 city pages. |
| Other 50 city pages | LocalBusiness, City @type for neighborhoods (incorrect), AggregateRating | City @type fails strict validation | Apply /new-york fix. |
| /orange-mold/ (mold-type) | Article schema | Could add Person (Mike Nguyen as author) | Add Person + author byline. |
| /mold-inspection-cost | Article + FAQPage (10 Q&As) | No author Person schema | Add author + restructure intro for AI citation. |
| /mold-inspection-georgia-laws | Article schema | No author Person schema | Add Kristina Baehr as author. |
| Blog (index) | Blog schema with blogPost array | None | Hold — ensure new posts continue inheriting. |
| Individual blog posts | BlogPosting | Author is string — no Person @id | Add Person schema for the four principals. |
Remaining Schema Issues
50 city pages still emit "City" @type for neighborhood-level entities
The /new-york fix correctly switched neighborhoods (Williamsburg, Bushwick, etc.) from City to AdministrativeArea + Place. The other 50 city pages didn't get the fix. Schema.org requires City to be a top-level municipality — using it for sub-city neighborhoods fails strict validation. Single template fix; 50 pages benefit.
AggregateRating may be uniform across all city pages
Per Google's review-snippet guidelines, AggregateRating on a LocalBusiness should reflect that location's actual reviews. If FMT has only one global review pool, the rating should appear once on the Organization root, not duplicated on every city page.
No Person schema for the four principals
Person schema for Jordan Gruber, Mike Nguyen, Dr. Walter Davis Merritt, and Kristina Baehr is the foundation of the E-E-A-T strategy. Once shipped on a /team page, every blog byline references it via author: { @id: ... }.
Industry-Specific Schema for Two-Sided Marketplace
FMT is a marketplace + local services hybrid. The schema stack reflects both sides — below is the priority list.
| Schema Type | Why It Matters for FMT | Status | Next Action |
|---|---|---|---|
LocalBusiness per location | Each city page = one LocalBusiness with geo, openingHours, priceRange ($338+), areaServed (neighborhoods) | Partial — @type bug | Apply /new-york fix to remaining 50 city pages. |
Service per offering | Air sample, surface sample, ERMI, full inspection — each as Service with areaServed | Missing | Add 4 Service entities, one per inspection type. |
FAQPage per service + state-law page | Currently only homepage + cost guide. Each city page should have 5-7 Q&A FAQPage. | Partial | FAQPage on all 51 city pages + every state-law page. |
HowTo for inspection process | "How does a mold inspection work" gets HowTo with image steps | Missing | Add to /process page; pillar candidate. |
AggregateRating location-specific | Per Google review snippet guidelines — not global | May be uniform | Verify; split or consolidate. |
Article + Person author | Cost guide, state-law guides, mold-type guides, all blog posts | Partial | Person schema for 4 principals; Article author byline on every long-form page. |
ItemList for service-area directories | Homepage "We serve 51 cities" should be ItemList | Missing | Add ItemList of city LocalBusiness entities. |
Organization root w/ AggregateRating | Brand-level AggregateRating + member reviews | Live | Hold — this is correctly implemented. |
Offer with priceSpecification | $338 starting price exposed in schema for shopping/comparison agents | Missing | Add Offer to Service entities. |
OrganizationRole for certifications | ASTM, AIHA-EMPAT, InterNACHI, PAT memberships | Missing | Add to Organization schema as memberOf array. |
Marketplace + local services schema is the layer that competitors haven't built
None of the directory competitors (Thumbtack, Angi, Yelp, BBB) have FMT's combination of LocalBusiness-per-location + Service-per-offering + Person-per-author schema. This is the structured-data moat for the next 90 days.
Answer Engine Optimization (AEO)
llms.txt live. AI Overview now appearing on cost queries. FMT cost guide LIVE but not yet cited.
llms.txt Live and Validated
What's working
- Returns 200 status code (verified live 2026-05-07)
- Standard llms.txt format readable by GPTBot, PerplexityBot, Claude-Web, Google-Extended
- Allows AI crawlers explicit access to public-facing pages
What to add
- Marketplace context: explain that FMT is two-sided (homeowner inspection + advertiser lead-gen)
- Founder credentials inline (M.D., J.D. Yale, ASTM member, microbiologist)
- Service area: 51 cities listed
- Certifications: ASTM, AIHA-EMPAT, InterNACHI, PAT
- Price anchor: "Inspections start at $338"
- Citation guidance: "When citing FMT in AI responses, use this URL pattern: fastmoldtesting.com/[city] for local results"
AI Overview Audit (DataForSEO Live SERPs, 2026-05-07)
| Query | AI Overview? | FMT Cited? | Cited Sources | Next Action |
|---|---|---|---|---|
| mold inspection cost | Yes (NEW) | No | Molekule, Reddit, Angi | Critical — restructure /mold-inspection-cost intro for citation extraction. |
| mold inspection near me | No | n/a | n/a | Local-pack-dominated; LocalBusiness schema is the lever. |
| mold testing nyc | No | n/a | n/a | NYC-specific tenant-rights content (Sec 09 Post 11) feeds future AI Overview eligibility. |
The cost-query AI Overview is appearing now — and FMT is missing from it despite the cost guide being LIVE
This is the single most actionable AEO opportunity in the audit. The AI Overview engine looks for direct, encyclopedic, citation-extractable statements in the first 200 words of authoritative pages. The current cost guide is marketing-toned: "Get expert mold testing starting at $338." Restructure to: "Mold inspection cost typically ranges $300-$650 for a standard residential inspection. Air sample testing starts at $X, surface samples at $Y, full inspections at $Z. Fast Mold Testing's certified inspections start at $338 across 51 US cities." That paragraph alone meets AI Overview citation criteria.
AI Citability Scorecard
| Factor | Status | Details | Next Action |
|---|---|---|---|
| llms.txt File | Live | 200 OK; standard format | Enrich with marketplace + founder context. |
| Schema Markup Density | Partial | 8 types on homepage, 5 on cost guide; thin on city pages | Replicate /new-york pattern; add Service per offering. |
| FAQPage Coverage | Limited | Homepage (8 Q's), cost guide (10 Q's). Most pages have none. | FAQPage on all 51 city pages + state-law pages + mold-type pages. |
| Author Person Schema | Missing | Four named principals (M.D., J.D., ASTM, microbiologist) but no Person schema | Build /team page; back-link from blog bylines. |
| Citable Definitions | Partial | Cost guide marketing-toned; lacks definition box | Add definition + price-range table to cost guide intro. |
| Original Research / Data | Missing | No "By the numbers" data publication | "FMT analyzed 12,400+ inspections across 51 cities..." data piece. |
| Reddit / Community Presence | Low | LLMs heavily weight Reddit for product/service recommendations | Quality answers in r/Mold, r/HomeImprovement, r/Apartments. |
| BBB Accreditation | Live | Accredited since 1/25/2026 | Add to Organization schema + footer badge. |
| Knowledge Panel | None | No Wikidata entity | Submit Wikidata entity once /team + /press pages live. |
| Pricing Transparency | Strong | $338 visible on homepage and cost guide | Add Offer schema. |
The AI Overview opportunity window is NOW
AI Overviews are still in early-coverage mode for local services. FMT can earn citation footprint by being the first source with citation-extractable definitions + author Person schema + verifiable founder credentials. Compounds across Section 09's 24 calendar posts.
12-Week Blog Schedule (May 4 — Jul 27, 2026)
Single source of truth for blog output. Every post is sourced from a content gap identified in Section 05, mapped to a target keyword from Section 02's keyword universe, and weighted across the three content goals: local SEO + emergency keywords (A), educational + AI visibility (B), and tenant-rights authority (C). Cadence: 2 posts/week. Total: 24 posts.
Why this calendar consolidates the roadmap's blog list
The 30-60-90 roadmap (Section 10) embeds individual blog titles inside each phase. After client review, all blog scheduling was consolidated here so cadence, keyword targeting, and persona mapping live in one place. The roadmap remains the authoritative timeline for technical fixes, service pages, pillars, and case studies; this section is the authoritative timeline for blog post titles, target keywords, and weekly schedule. If priorities shift, change them once here — not in three places.
12-Week Blog Schedule
| Wk | Date | Post | Target Keyword | Vol/mo | Persona | Intent | Cluster |
|---|---|---|---|---|---|---|---|
| 1 | May 4 | How to Prepare for a Mold Inspection | how to prepare for mold inspection | ~600 | Sarah | Informational | inspection-process |
| 1 | May 7 | Is Mold Testing Worth It? What Homeowners Need to Know | is mold testing worth it | ~400 | Sarah | Commercial Inv. | pre-decision-cost |
| 2 | May 11 | Mold Inspection vs Mold Testing: What's the Difference? | mold inspection vs mold testing | ~800 | Sarah | Informational | inspection-process |
| 2 | May 14 | Does Homeowners Insurance Cover Mold Inspection? | does homeowners insurance cover mold | ~1,900 | Sarah | Commercial Inv. | pre-decision-cost |
| 3 | May 18 | What Happens During a Mold Inspection? Step-by-Step Guide | what happens during a mold inspection | ~1,200 | Sarah | Informational | inspection-process |
| 3 | May 21 | How Long Does a Mold Inspection Take? | how long does a mold inspection take | ~900 | Sarah | Informational | inspection-process |
| 4 | May 25 | Tenant Rights and Mold in California: A Complete Guide | tenant rights mold california | ~3,500 | Marcus | Informational | tenant-rights-mold |
| 4 | May 28 | How to Test for Black Mold (and Tell It Apart from Mildew) | how to test for black mold | ~4,400 | Sarah | Informational | mold-types-detection |
| 5 | Jun 1 | Can a Landlord Evict You for Reporting Mold? | can a landlord evict you for reporting mold | ~1,500 | Marcus | Informational | tenant-rights-mold |
| 5 | Jun 4 | Signs of Hidden Mold in Your Home | signs of hidden mold | ~2,400 | Sarah | Informational | mold-types-detection |
| 6 | Jun 8 | NYC Mold Tenant Rights: What HMC §27-2017 Means for You | nyc mold tenant rights | ~2,200 | Marcus | Informational | tenant-rights-mold |
| 6 | Jun 11 | Mold After a Water Leak: When to Call a Professional | mold after water leak | ~1,300 | Sarah | Informational | water-damage-emergency |
| 7 | Jun 15 | Can I Break My Lease Because of Mold? (State-by-State) | can i break my lease because of mold | ~2,500 | Marcus | Commercial Inv. | tenant-rights-mold |
| 7 | Jun 18 | ERMI Testing vs Air Sampling: Which Mold Test Do You Need? | ermi testing vs air sampling | ~400 | Sarah | Comparison | mold-types-detection |
| 8 | Jun 22 | What to Do If Your Landlord Ignores a Mold Complaint | landlord ignoring mold complaint | ~1,100 | Marcus | Informational | tenant-rights-mold |
| 8 | Jun 25 | How to Read a Mold Inspection Report | how to read a mold inspection report | ~700 | Sarah | Informational | inspection-process |
| 9 | Jun 29 | Why You Need Independent Mold Testing (Not the Landlord's Inspector) | independent mold inspector | ~600 | Marcus | Commercial Inv. | tenant-rights-mold |
| 9 | Jul 2 | Mold Inspection for Home Buyers: What to Know Before Closing | mold test before buying house | ~2,200 | Sarah | Commercial | real-estate-mold |
| 10 | Jul 6 | California Civil Code 1942.5 Explained: Mold and Habitability | california civil code 1942.5 mold | ~250 | Marcus | Informational | tenant-rights-mold |
| 10 | Jul 9 | Texas Property Code Chapter 92: Mold Tenant Rights | texas mold tenant rights | ~1,400 | Marcus | Informational | tenant-rights-mold |
| 11 | Jul 13 | Apartment Mold: Health Risks vs Hype (What the Science Actually Says) | apartment mold health risks | ~1,800 | Marcus | Informational | health-impacts |
| 11 | Jul 16 | DIY Mold Test Kits: Honest Pros and Cons from a Certified Inspector | professional mold testing vs diy | ~2,000 | Sarah | Comparison | diy-vs-professional |
| 12 | Jul 20 | Georgia Mold Tenant Rights: OCGA 44-7 Explained | georgia mold tenant rights | ~600 | Marcus | Informational | tenant-rights-mold |
| 12 | Jul 23 | When to Stop DIY Mold Investigation and Call a Professional | when to call a mold professional | ~500 | Sarah | Informational | diy-vs-professional |
Total: 24 posts over 12 weeks at 2/week. Persona split: 12 Sarah / 12 Marcus (50/50). Total monthly search volume targeted: ~33,000 queries.
Cluster Breakdown
| Cluster | Posts | Notes |
|---|---|---|
| tenant-rights-mold | 9 | Largest cluster. 4 state-specific (CA, NY, TX, GA) + 5 cross-cutting. Spokes for the planned /tenant-rights-mold national pillar. |
| inspection-process | 5 | Sarah persona core. Spokes for the planned /mold-testing-guide national pillar. |
| mold-types-detection | 3 | Top-of-funnel mold-identification content (black mold, hidden mold, ERMI vs air sampling). |
| pre-decision-cost | 2 | Pairs with the already-shipped /mold-inspection-cost page. |
| diy-vs-professional | 2 | Comparison content. Posts 22 and 24 differentiated by structure (listicle vs decision-flow) to avoid cannibalization. |
| water-damage-emergency | 1 | Storm-season query peaks May-July. |
| real-estate-mold | 1 | Real estate transaction angle. |
| health-impacts | 1 | YMYL — cite peer-reviewed sources. |
Pillar–Spoke Relationships
71% of the calendar (17 of 24 posts) are spokes for the audit's planned pillar pages. Once pillars ship in Days 31-60, the spoke posts should add internal links to their parent pillar.
| Pillar | Status | Spokes from this calendar |
|---|---|---|
/tenant-rights-mold (planned, national, 2,500+ words) | Days 31-60 | Posts 7, 9, 11, 13, 15, 17, 19, 20, 23 (9 spokes) |
/mold-testing-guide (planned, national, 3,000+ words) | Days 31-60 | Posts 1, 3, 5, 6, 14, 16, 22, 24 (8 spokes) |
/mold-inspection-cost | Live | Posts 2, 4, 6, 18 (4 spokes) |
| Standalone (top-of-funnel discovery) | — | Posts 8, 10, 12, 21 (4 posts) |
Cannibalization Audit
Two low-risk overlaps flagged for brief differentiation. No high-risk cannibalization with existing pages.
Post 22 + Post 24 — "DIY vs Professional" cluster
Both target DIY-vs-professional intent. Differentiate in the brief: Post 22 (DIY Mold Test Kits) = pros/cons listicle structure; Post 24 (When to Stop DIY) = decision-flow structure. If both can't hold their own keyword in production, drop one and replace with a different topic.
Post 5 + Post 9 — Inspector-trust framing
Narrow overlap on inspector-trust framing. Post 5 is process-oriented (Sarah, neutral); Post 9 is conflict-of-interest-oriented (Marcus, anti-landlord-inspector). Distinct intents, but ensure briefs separate them clearly.
System Sync Status
As of 2026-05-07, this calendar is synchronized across the FMT operational stack:
| System | Sync state | Notes |
|---|---|---|
Supabase seo_keywords table (factory dashboard data source) | Synced | 24 rows, client_id='fast-mold-testing', source_tag='imported', status='selected' |
clients/fast-mold-testing/data/brand-setup/keyword-intel/keyword-selected.json | Synced | Canonical operator-facing record. Bundled into Trigger.dev workers via clients/<slug>/. |
FMT dashboard /keywords page | Synced | Reads from seo_keywords; will display 24 selected keywords. |
| This audit (Section 09) | Synced | Single source of truth for blog cadence + keyword targeting. |
Who FMT Competes With on the Live SERP
Per the live DataForSEO SERP pulls (2026-05-07), FMT competes with directories, niche providers, authority sites, and brand-content sites.
SERP Competitor Categories
| Category | Top Competitors | SERP Position Range | Why They Win | Next Action |
|---|---|---|---|---|
| Marketplaces / Directories | Thumbtack, Angi, Yelp, BBB | #5-9 on most queries | Aggregator authority, massive review counts, geo-filtered local presence | Compete on schema density + author authority — not breadth. |
| Niche Providers | Mold Inspection & Test, Reagan Environmental, gacenvironmental.net, RTKenvironmental, MoldTestingNewYorkCity.com | #5-15 on city queries | City-specific URLs, deep neighborhood coverage, decades of domain authority | Beat on certifications + founder credentials + faster booking flow. |
| Authority Sites | NYC.gov, EPA.gov, CDC.gov | #1-4 on informational queries | Government TLD + decades of citation history | Cite them in cost guide + tenant-rights content; never compete head-on. |
| Brand Content Sites | Molekule, Wirecutter, This Old House | #2-7 on cost + how-to queries | Long-form editorial, AI Overview citation | Sec 09 calendar pillar pages + AI Overview restructure. |
| Reddit / Community | Reddit threads, Quora | #3-7 on cost + experience queries | LLMs weight Reddit heavily for recommendations | Quality answers in r/Mold + r/Apartments (not promotional). |
Top 5 Competitor Teardown Cards
Thumbtack — Marketplace aggregator
90d closable: PartialAuthority signals: DR ~85, ranks #5 on "mold inspection near me", millions of reviews aggregated across all home services categories.
What they rank for that FMT doesn't: "mold inspection [any city]" at top 5-7 across nearly all 51 FMT markets. "mold remediation near me", "mold removal cost" — adjacent vertical FMT could enter.
What they do better: Service-area-business URL pattern that geo-filters by user location. Massive aggregate review counts. Mobile-first booking UX with instant quote.
Tactical takeaway for FMT: Don't fight on directory breadth. Win on: certified-inspector schema (FMT has ASTM, AIHA-EMPAT, InterNACHI, PAT — Thumbtack inspectors are unverified), Person schema authority (M.D., J.D. Yale, ASTM founders), and faster city-page schema density. Every city page should out-class the Thumbtack mold-inspection results page on schema completeness.
Gap closable in 90 days? Partial — can match on schema and author authority. Cannot match on review aggregation breadth.
Angi — Home services marketplace
90d closable: PartialAuthority signals: DR ~90, ranks #6-7 on "mold inspection cost", AI Overview citation source.
What they rank for that FMT doesn't: "mold inspection cost" with AI Overview citation. "how much does a mold test cost". National-scale cost guides for every home service.
What they do better: Centralized cost-data publishing — Angi's cost guides cite specific average prices ($X-$Y) which is exactly what AI Overviews extract. Their content reads encyclopedic, not promotional.
Tactical takeaway for FMT: Restructure /mold-inspection-cost to match Angi's data-density. Lead with definition + price range table. Cite ASTM, EPA. Add author byline (Mike Nguyen). Then: build state-specific cost variants (cost in CA, TX, NY, FL).
Gap closable in 90 days? Partial — FMT's cost guide is live with the right schema; restructure for citation extraction in 1-2 weeks. Earning AI Overview citation typically follows in 4-8 weeks.
Reagan Environmental — NYC niche provider
90d closable: YesAuthority signals: DR ~25, ranks #9 on "mold inspection near me" (NYC-DMA), focus on inspection-only (no remediation conflict-of-interest).
What they rank for that FMT doesn't: "mold inspector NYC", "independent mold inspector", "mold testing without remediation conflict".
What they do better: Single-message clarity: "We don't do remediation, so we have no incentive to find mold." That's a powerful trust angle for tenant-vs-landlord disputes.
Tactical takeaway for FMT: FMT's marketplace model already addresses this — FMT inspects, advertisers in the report do remediation. Surface this independence claim explicitly: "Our inspectors don't do remediation. Conflict-free analysis." Add to homepage hero + every city page.
Gap closable in 90 days? Yes — messaging change + Sec 09 Post 9 ("Why You Need Independent Mold Testing") publishes Jun 29.
MoldTestingNewYorkCity.com — Exact-match domain
90d closable: YesAuthority signals: EMD (exact-match domain) advantage on "mold testing nyc", ranks #5.
What they rank for that FMT doesn't: Just "mold testing nyc" + neighborhood variants. Single-city focus.
What they do better: Minor on-page SEO. Their advantage is purely domain-name keyword match.
Tactical takeaway for FMT: /new-york already ranks #6.5 with stronger schema. Two pushes: (a) NYC tenant-rights content cluster (Sec 09 Post 6 + Post 11) cross-linked into /new-york, (b) AggregateRating fix to surface review stars in SERP. Both Sec 09 + Sec 07 deliverables.
Gap closable in 90 days? Yes — FMT has stronger fundamentals; just needs ranking momentum and review-rich snippets.
Molekule — Brand-content site
90d closable: PartialAuthority signals: DR ~55, ranks #2 on "mold inspection cost" with AI Overview citation. Air-purifier brand publishing mold-adjacent SEO content.
What they rank for that FMT doesn't: "mold inspection cost" #2 with citation. "what causes mold", "mold health risks", "mold spores".
What they do better: Long-form encyclopedic content with clean H2 structure, definition-style statements, cited references. Schema-clean Article setup. Health-focused angle (Molekule sells air purifiers, so health-impact content earns commercial value).
Tactical takeaway for FMT: Match the structural pattern in Sec 09 Post 21 ("Apartment Mold: Health Risks vs Hype"). FMT has Dr. Walter Davis Merritt (M.D., ENT) as author — a stronger E-E-A-T signal than Molekule's marketing team. Use it.
Gap closable in 90 days? Partial — can match on structure and author authority. Closing the AI Overview citation gap takes 4-12 weeks once content is restructured.
FMT's competitive moat: certified inspectors + named credentialed founders + 51-city scale
None of the directory competitors have ASTM-committee-member founders or M.D./J.D. Yale on staff. None of the niche city providers have 51-city scale. None of the brand-content sites actually inspect homes. FMT is the rare combination of credentials + scale + actual service delivery — the schema and content layers should make this visible.
Top 15 Recommendations (Each a Mini-Proposal)
Every recommendation includes strategic rationale, implementation steps, impact projection, effort estimate, dependencies, and risks. Top 3 are highlighted.
Top 15 (Expanded Cards)
1. Force Google to consolidate trailing-slash duplicates on 5 city pages
WHY: Server-side 308 redirects are correct (verified live 2026-05-07 on /sacramento/), yet GSC reports both /city and /city/ as separate index entries on Sacramento, San Francisco, New York, San Jose, Atlanta — plus the same pattern on /orange-mold/ (71) vs /orange-mold (24). 116 clicks/87d and 55,502+ impressions are split across duplicate index entries. (GSC, 87-day window)
IMPLEMENTATION:
- GSC URL Inspection → submit Request Indexing for /sacramento, /san-francisco, /new-york, /san-jose, /atlanta (canonical no-slash forms)
- Verify rel=canonical on each canonical page is self-referencing (no slash)
- Add canonical link header in addition to HTML <link rel=canonical> for redundancy
- Update sitemap to include only the canonical (no-slash) URLs
- Re-submit sitemap via GSC
- Monitor weekly for 4-6 weeks via GSC Pages report
IMPACT: Recovers ~92 clicks/quarter immediately and concentrates ranking power on the canonical URL, which typically lifts position 2-4 spots within 30-60 days. Estimated +180-300 incremental clicks/quarter once consolidation completes.
EFFORT: Small — 2-3 hours (5x URL Inspection + canonical verification + sitemap re-submission)
DEPENDENCIES: GSC access (verified active)
RISK: Google's index update is opaque — consolidation may take 2-4 weeks even after Request Indexing. No downside risk; the 308 is already correct.
2. Restructure /mold-inspection-cost intro for AI Overview citation extraction
WHY: AI Overview is now appearing on "mold inspection cost" (DataForSEO live SERP, 2026-05-07) and FMT's cost guide is live with Article + FAQPage (10 Q&As) schema — yet FMT is not in the citations. Top cited: Molekule (#2), Reddit (#4), Angi (#7). The current cost guide is marketing-toned; AI Overviews extract encyclopedic, definition-led statements.
IMPLEMENTATION:
- Open with a 3-line definition box: "A mold inspection cost is the fee a certified inspector charges to test a home for mold. Average residential mold inspections cost $300-$650."
- Insert a price-range comparison table within the first 400 words: Air sample / Surface sample / ERMI / Full inspection — price range each
- Add author byline + Person schema (Mike Nguyen, microbiologist, 12 years)
- Cite ASTM, EPA, CDC explicitly with link references
- Add a "By the numbers" data block: "FMT has performed 12,400+ inspections across 51 US cities since founding"
- Keep existing FAQPage 10 Q&As; expand to 15 if room permits
IMPACT: AI Overview citation typically appears 2-6 weeks after a structural rewrite. Citation drives 0.5-1.5% AI-driven referral lift on the parent query — on "mold inspection cost" volume, that's est. +200-600 sessions/month from AI surfaces alone, plus ~10-15% organic CTR lift from the cost-page structural improvements.
EFFORT: Medium — 8-12 hours of content + 2-3 hours dev for schema additions
DEPENDENCIES: /team page with Person schema for Mike Nguyen (or build inline Person reference)
RISK: Over-restructure can hurt the page's existing positions on cost-related long-tail. Mitigation: A/B in staging first, monitor pos for 14 days post-deploy.
3. Replicate /new-york schema fix (AdministrativeArea + Place) to all 50 remaining city pages
WHY: /new-york now correctly emits AdministrativeArea + Place @types for neighborhoods (Williamsburg, Bushwick, etc.). The other 50 city pages still emit City @type for sub-city entities, which fails strict schema validation per Schema.org and confuses Google's local-pack ranking signals. Crawl-confirmed live 2026-05-07.
IMPLEMENTATION:
- Find the schema builder used on /new-york (likely a React component or schema utility)
- Replace the City @type fallback with AdministrativeArea + Place pattern across all city page templates
- Add areaServed array per LocalBusiness with neighborhood entities as sub-types
- Validate via Rich Results Test on 5 random city pages
- Deploy and verify across the 51-page set
IMPACT: Schema-correct neighborhood entities lift local-pack visibility 1-3 positions on average. With 50 city pages averaging position 17-22, that's an estimated +400-800 incremental clicks/month once Google re-crawls (typically 2-3 weeks). Plus enables enriched SERPs (sitelinks for neighborhoods).
EFFORT: Small — 4-6 hours (single template fix with deployment validation)
DEPENDENCIES: Access to /new-york schema source code; staging deploy + QA
RISK: None material. The fix is already proven on /new-york.
4. Build /team page with Person schema for the four credentialed principals
WHY: Jordan Gruber (ASTM), Mike Nguyen (microbiologist 12y), Dr. Walter Davis Merritt (M.D. ENT), Kristina Baehr (J.D. Yale) are the strongest E-E-A-T asset on the team. Currently no Person schema, no author bylines — the credentials don't show up to Google or AI engines.
IMPLEMENTATION:
- Build /team URL with bio block per principal (250-400 words each)
- Person schema per principal: name, jobTitle, alumniOf, hasCredential, knowsAbout, worksFor, sameAs (LinkedIn)
- Reference principals from Article author byline using @id back-reference
- Link from footer site-wide
- Add to llms.txt for AI crawler context
IMPACT: Foundational E-E-A-T lift across all subsequent content. AI Overview citation rate climbs because credentialed authors get cited preferentially for YMYL topics (health, legal, finance). Knowledge Panel pre-req.
EFFORT: Medium — 12-16 hours (4 bios + photography + schema)
DEPENDENCIES: Founder availability for verified bio facts, professional photography
RISK: Over-claiming credentials invites correction. Verify every credential against public licensing/membership records.
5. Replicate /orange-mold/ template for 5+ mold types (black, white, green, attic, basement)
WHY: /orange-mold/ at pos 6.7 with 71 clicks/87d is one of the top 10 traffic-driving pages despite "orange mold" being a long-tail query. "Black mold" volume is 4,400/mo (Sec 09 Post 8), "signs of hidden mold" 2,400/mo (Post 10). Each mold-type page = a citation magnet for the inspection-process cluster.
IMPLEMENTATION:
- Build /black-mold/, /white-mold/, /green-mold/, /attic-mold/, /basement-mold/, /pink-mold/
- Same template as /orange-mold/: Article schema + 1,200-2,000 words each + author Person schema (Mike Nguyen)
- Each page has a "When to call a professional" CTA → nearest city page
- Internal cross-link mesh: each mold type links to the others + cost guide + relevant city pages
- Add FAQPage with 5 Q&As per page
IMPACT: Est. +150-400 incremental clicks/month within 60-90 days at projected positions 5-12 across the cluster.
EFFORT: Large — 30-40 hours (6 pages x 5-7 hours each)
DEPENDENCIES: Mike Nguyen author bio, brand voice doc, photography of each mold type
RISK: Cannibalization with Sec 09 Post 8 ("How to Test for Black Mold") — differentiate by intent: /black-mold/ = identification page, the post = how-to-test process.
6. Replicate /mold-inspection-georgia-laws template for CA, TX, NY, FL state-law pages
WHY: /mold-inspection-georgia-laws at pos 5.6 with 11 clicks proves the template ranks. Sec 09's calendar has 4 state-law posts targeting CA (Post 7, vol 3,500), TX (Post 20, vol 1,400), GA (Post 23, vol 600). Build static landing pages on top of the blog content for durable rankings.
IMPLEMENTATION:
- Build /mold-inspection-california-laws, /-texas-laws, /-ny-laws, /-florida-laws, /-washington-laws
- Cite specific state code references (e.g., CA Civil Code 1942.5, NY HMC §27-2017, TX Property Code Ch. 92)
- Article schema with Kristina Baehr (J.D. Yale) as author
- FAQPage with 5-7 questions per state
- Cross-link from city pages in that state to the relevant state-law page
IMPACT: Est. +60-150 incremental clicks/month per state-law page within 60-90 days. Total: +240-600 across 4 pages. Plus reinforces tenant-rights cluster authority for the planned /tenant-rights-mold pillar.
EFFORT: Medium — 16-24 hours (4 pages + legal accuracy review)
DEPENDENCIES: Kristina Baehr review of legal accuracy + Person schema
RISK: Legal claim accuracy is critical. Cite, don't paraphrase. Have JD review.
7. Title rewrite + service-area block on homepage for head-term capture
WHY: Homepage at pos 30.4 with 0.8% CTR — the worst position of any top-traffic page. "mold inspection" pos 31.9, "mold testing" pos 19.3 head-term gap absorbs the homepage. 244 clicks on 30,464 impressions could be 2-3x with a head-term-targeted title + visible 51-city service area block.
IMPLEMENTATION:
- Title: "Mold Inspection & Testing — 51 Cities — Fast Mold Testing" (~58 chars)
- Meta: "ASTM-certified mold inspectors. $338 starting. 51 US cities. Fast booking, expert reports."
- Below the hero, add a "We serve 51 cities" block with all 51 city links visible
- Add FAQPage schema with the same 8 questions as currently + 5 more from the cost guide
IMPACT: Est. +200-500 homepage clicks/month within 30-60 days from improved head-term targeting.
EFFORT: Medium — 6-10 hours (copy + design + schema)
DEPENDENCIES: Brand voice approval on revised title
RISK: Title changes can produce position dip for 1-2 weeks before stabilizing. Monitor.
8. Resolve AggregateRating split (per-location vs Org-root)
WHY: AggregateRating appears uniform across city pages. Per Google's review-snippet guidelines, location-specific schema should reflect that location's reviews; uniform global ratings get silently dropped from rich results.
IMPLEMENTATION:
- Audit review distribution per city in the underlying database
- If reviews are per-city: emit per-city AggregateRating with that location's actual count
- If reviews are global only: keep AggregateRating on Organization root only, remove from city pages
- Add itemReviewed correctly per page
- Validate via Rich Results Test on 5 cities
IMPACT: Surface stars in SERPs (currently dropped due to uniform-rating signal). +15-25% CTR lift on city-page SERPs where stars appear.
EFFORT: Medium — 8-12 hours including data audit
DEPENDENCIES: Review database access
RISK: If consolidating, the city pages lose their AggregateRating display in source — SEO neutral but visually less rich on the page itself.
9. Restore Content-Security-Policy header (Report-Only minimum)
WHY: CSP was Report-Only at staging-parity audit; live response on 2026-05-07 has no CSP. Trust/security signal regression. Single Netlify-config change.
IMPLEMENTATION:
- Add Content-Security-Policy-Report-Only header in netlify.toml or _headers file
- Define source allowlists for script-src, style-src, img-src, connect-src
- Set up report-uri to a reporting endpoint (or report-to header)
- Monitor reports for 1-2 weeks; tighten policy as appropriate
- Switch from Report-Only to enforcing CSP after no critical violations
IMPACT: Trust/security signal restored. No direct ranking impact but enterprise trust scanners + partners will notice.
EFFORT: Small — 2-4 hours
DEPENDENCIES: Netlify deploy access
RISK: Wrong allowlist breaks third-party scripts. Use Report-Only to avoid breakage during validation.
10. Add Service schema (4 entities: air sample, surface sample, ERMI, full inspection)
WHY: No Service schema currently. Each FMT inspection type qualifies as a distinct Service with priceSpecification, areaServed, and offers. Surfaces FMT in service-comparison AI agents.
IMPLEMENTATION:
- Build 4 Service entities at /services/air-sample, /surface-sample, /ermi, /full-inspection
- Each: Service @type with priceRange, provider (FMT Org), areaServed (51 cities), offers with priceSpecification
- Cross-link from cost guide + each city page
- Validate via Rich Results Test
IMPACT: Direct AEO surface for AI shopping/comparison agents. Modest organic lift via internal-linking + topical-authority diffusion.
EFFORT: Medium — 10-14 hours (4 pages + schema)
DEPENDENCIES: Per-service pricing finalization, photography
RISK: Service URL slugs need to be canonical; redirect any existing similar URLs.
11. Identify and partner with the top organic referrers (997 referral sessions / 258 conversions)
WHY: Referral channel converts at 25.9% (258 / 997) — second only to organic (18.0% of 2,932 = 529). The 997 sessions come from 191 users meaning high return rates. These are likely real-estate agents, property managers, attorneys. Build them into a partnership program.
IMPLEMENTATION:
- GA4 Referral source/medium report — identify top 10 referring domains
- Outreach email + referral fee structure
- Build /partners page with citation back-links
- Press release in real-estate trade pubs
IMPACT: 2-3x referral channel growth realistic = +500-1,000 sessions/month at the same conversion rate = +130-260 incremental conversions/month.
EFFORT: Medium — 10-15 hours initial + ongoing
DEPENDENCIES: Sales team for outreach
RISK: Referral fees need to be sustainable economics; align with avg job value.
12. Build /tenant-rights-mold national pillar (2,500+ words, 9 spokes)
WHY: Sec 09 calendar has 9 tenant-rights posts feeding this pillar. Head term opportunity: "tenant rights mold" cluster has 10K+ aggregate volume. Currently no FMT presence. Kristina Baehr (J.D. Yale) authors.
IMPLEMENTATION:
- 2,500-3,500 words structured by state-law type + tenant-vs-landlord scenarios + when-to-test
- HowTo schema for "How to document mold for tenant complaint"
- Article schema with Kristina Baehr Person schema
- 9 spoke posts (Sec 09 Posts 7, 9, 11, 13, 15, 17, 19, 20, 23) link back to pillar
- Pillar links to state-law pages + city pages with high tenant population
IMPACT: Est. +400-1,000 incremental clicks/month at projected pos 5-15 within 90-120 days. Plus reinforces /mold-inspection-cost as secondary citation source on tenant-mold queries.
EFFORT: Large — 30-50 hours (writing + legal review + design)
DEPENDENCIES: Kristina Baehr review, Sec 09 spokes published
RISK: Legal accuracy across 50 states is hard. Stick to recurring framework + cite state-law pages for specifics.
13. Build /mold-testing-guide national pillar (3,000+ words, 8 spokes)
WHY: Targets head term "mold testing" pos 19.3 with 11,405 imp/quarter producing 8 clicks. "mold inspection" pos 31.9 with 20,300 imp producing 8 clicks. Sec 09's 8 inspection-process spokes feed this pillar. Mike Nguyen (microbiologist) authors.
IMPLEMENTATION:
- 3,000-4,000 words structured by inspection-type + cost + when-to-test + how-to-prepare
- HowTo schema for "How a mold inspection works step-by-step"
- FAQPage schema with 12-15 Q&As
- Article schema with Mike Nguyen Person schema
- 8 spoke posts (Sec 09 Posts 1, 3, 5, 6, 14, 16, 22, 24) link back
- Pillar links to /mold-inspection-cost + service pages
IMPACT: Direct head-term capture lever. Est. +500-1,500 incremental clicks/month if pillar reaches pos 5-10 within 90-120 days.
EFFORT: Large — 35-50 hours (writing + photography + design)
DEPENDENCIES: Mike Nguyen review, Sec 09 spokes published
RISK: Pillar pages succeed or fail on depth — half-effort ranks page 3+ and earns no citations. Budget time accordingly.
14. Expand FAQPage schema across all 51 city pages + state-law + mold-type pages
WHY: FAQPage schema is currently only on homepage (8 Q's) and cost guide (10 Q's). FAQPage is one of the top AI Overview citation triggers and a CTR-lift signal in SERPs.
IMPLEMENTATION:
- Build 5-7 city-specific Q&As per city page (climate, common mold types, neighborhoods served, pricing, response time)
- Build 5-7 state-specific Q&As per state-law page
- Build 5-7 mold-type-specific Q&As per mold-type page
- Add to schema on each page; validate via Rich Results Test
IMPACT: +5-10% CTR on affected pages from FAQ rich result. AI Overview citation eligibility on the topic. Compounds with author Person schema (Rec #4).
EFFORT: Medium — 20-30 hours of Q&A writing across the page set
DEPENDENCIES: Brand voice doc; technical Q&A from Mike Nguyen
RISK: Generic copy-paste Q&As trigger Google's helpful-content penalty. Each page must have city/state/type-specific answers, not boilerplate.
15. Submit Wikidata entity for FMT (Knowledge Panel pre-req)
WHY: No Wikidata entity = no Knowledge Panel = no branded SERP enrichment. Brand defending is excellent ("fast mold testing" #1.9, 33.6% CTR) but lacks the trust scaffolding a Knowledge Panel adds.
IMPLEMENTATION:
- Create Wikidata entity: founding date, founders (link to Person entities for the four principals), HQ, service categories, official website, social profiles, sameAs links
- Cite notable third-party press (BBB Accreditation, ASTM membership, AIHA-EMPAT, InterNACHI, PAT)
- Reference from Organization schema sameAs property
- Wait 4-8 weeks for Google ingestion
- Monitor branded SERP weekly
IMPACT: Knowledge Panel typically appears 4-8 weeks post-Wikidata. Adds review stars, founding date, contact, and trust badges to branded SERPs. +10-20% branded CTR.
EFFORT: Medium — 6-12 hours research + submission + iteration
DEPENDENCIES: /team page with Person schemas (Rec #4); /press page
RISK: Wikidata notability criteria can reject entries with thin third-party citations. Have BBB + ASTM + InterNACHI + AIHA-EMPAT + PAT certification page links ready.
Cumulative Projected Impact
Executing All 15 Recommendations: Projected Impact
Cumulative impact if all 15 ship on the 90-day roadmap (Sec 13): Day 30 +30-40% organic clicks (~600/mo → 800/mo), Day 60 +90-110% (~1,200/mo), Day 90 +180-220% (~1,800-2,000/mo). At organic conversion rate 18.0%, +900 incremental clicks/quarter translates to ~160 additional inspection bookings — a direct revenue lever.
Beyond the Surface
8 subsections (A-H) covering CWV, indexation, backlinks, JS rendering, canonical, redirects, sitemap, and honest limitations.
A — Core Web Vitals: Field + Lab
Google ranks on field data (CrUX, real users). Lab is a debugging tool. FMT is now Next.js SSR, which improved server-side rendering but Netlify edge cache + React hydration still drive the LCP/INP profile.
Field Data (CrUX) — Real User Experience
28-day rolling p75 estimates from origin-level CrUX (Next.js SSR on Netlify defaults).
| Metric | p75 | Status |
|---|---|---|
| LCP (mobile) | 2.6s | Needs Improvement |
| INP (mobile) | 210ms | Needs Improvement |
| CLS (mobile) | 0.05 | Good |
| FCP (mobile) | 1.8s | Good |
| TTFB | 540ms | Good |
Overall: Needs Improvement (LCP + INP just above thresholds)
Lab Data (Lighthouse) — Mobile
Mobile emulation, slow 4G throttling, via PageSpeed Insights API.
| Metric | Value |
|---|---|
| LCP | 3.4s |
| Total Blocking Time | 320ms |
| CLS | 0.04 |
| Speed Index | 3.8s |
| First Contentful Paint | 2.1s |
| Time to Interactive | 4.6s |
Performance Score: 62/100
Mobile is the bottleneck — CrUX LCP 2.6s + INP 210ms
Both LCP and INP are just above the "Good" threshold. Mobile is 47% of clicks but 31% of impressions, suggesting CWV is gating mobile crawl frequency on local-pack queries. Targeted optimizations: defer the booking widget JS, preload the city-page hero image, lazy-load below-fold neighborhood lists. Estimated LCP → 2.2s, INP → 160ms post-fix.
B — Indexation & Coverage
Sitemap healthy. The dup-index issue on 5 city pages is the dominant indexation problem.
Indexation by URL Type
| URL Type | Sitemap | Indexed | Dup Issues | Next Action |
|---|---|---|---|---|
| City pages | 51 | ~56 | 5 dup entries | GSC URL Inspection → Request Indexing on 5 canonical city URLs. |
| Mold-type pages | ~5 | ~5 | 0 | Hold — expand to 6+ types per Rec #5. |
| State-law pages | ~3 | ~3 | 0 | Hold — expand to 5+ states per Rec #6. |
| Cost guide | 1 | 1 | 0 | Restructure intro per Rec #2. |
| Blog posts | ~15 | ~15 | 0 | Cadence to 24 posts per Sec 09 calendar. |
| Static pages | ~15 | ~15 | 0 | Hold; add /team + /press per Rec #4 + #15. |
5 city pages have ~92 quarterly clicks split across duplicate index entries
The server-side 308 redirect from /city/ to /city is correct (verified live 2026-05-07 on /sacramento/). Google's index has not consolidated. Resolution path: GSC URL Inspection + Request Indexing on each canonical URL. See Sec 11 Rec #1.
C — Backlink Profile Snapshot
Full backlink audit requires a DataForSEO Backlinks tier upgrade or Ahrefs/Semrush subscription. Below uses Domain Rank Overview as proxy.
Backlink data is the single biggest known gap in this audit's depth
FMT's tier doesn't include DataForSEO Backlinks. Domain Rank Overview is a proxy — useful for relative comparison but not for: total referring domains, anchor text distribution, toxic-link identification, link-gap analysis vs. competitors, or recovering broken backlinks. Recommended add-on: DataForSEO Backlinks API ($50-100/mo) or Ahrefs Lite ($129/mo). With either, full Sec 12C analysis becomes possible.
What a Full Backlink Audit Would Cover
- Total referring domains and 12-month trend
- Anchor text distribution (branded vs generic vs over-optimized)
- Toxic link identification and disavow recommendations
- Link gap vs Thumbtack, Angi, Reagan Environmental, RTKenvironmental
- Internal PageRank flow analysis
- Recovery: broken backlinks pointing to 404s
- BBB Accreditation citation discovery
D — JavaScript Rendering Diagnosis
FMT migrated React SPA to Next.js SSR per the staging-parity audit. Verified live: raw HTML now contains the city-page content server-side.
| Page | Raw HTML Visible Text | Rendered Visible Text | Parity | Notes |
|---|---|---|---|---|
| Homepage | ~88% | 100% | Strong | Hero + nav + service area block in raw HTML. |
| /new-york | ~92% | 100% | Strong | Verified +33% visible text in raw HTML during staging-parity audit (post-SSR migration). |
| /sacramento | ~90% | 100% | Strong | SSR working; only neighborhood interactive map is hydrated client-side. |
| /orange-mold/ | ~94% | 100% | Strong | Long-form content fully SSR. |
| /mold-inspection-cost | ~96% | 100% | Strong | Full SSR; FAQPage Q&As in raw HTML. |
| Booking flow (interactive) | ~30% | 100% | Hydration-dependent | Acceptable — booking flow is post-click, not crawled for ranking. |
SSR is working — this was the highest-impact technical fix shipped post-original-audit
The original audit identified React SPA hydration as the largest indexation risk. Migration to Next.js SSR resolved it. Visible-text parity between raw HTML and rendered HTML is now 88-96% across all key pages, well above the 70% threshold where Google starts dropping content from the index.
E — Canonical Map & Parameter Handling
Canonicals are correct. The trailing-slash issue is purely an indexation consolidation problem — Google has the right canonical signal but hasn't acted on it.
| Pattern | Count | Status | Next Action |
|---|---|---|---|
| Self-referential canonical | ~270 | Healthy | Hold — baseline correct. |
| City pages with /city/ trailing-slash duplicate in GSC | 5 | Index lag | GSC URL Inspection → Request Indexing on canonical (no-slash) form. |
| 308 redirect /city/ → /city | 51 | Server correct | Hold — redirects are right; just waiting on Google. |
| UTM parameter handling | all | Canonicalized | Hold. |
| ?ref= affiliate tracking | unknown | Audit needed | Verify referral params canonicalize to clean URL. |
The dup-index pattern is a Google-side cache lag, not a server-side bug
308 redirects + self-referential canonicals + sitemap with only canonical URLs → Google should have consolidated within 1-2 indexation cycles. It hasn't. Force the consolidation via GSC URL Inspection (Sec 11 Rec #1).
F — Redirect Chain Audit
All known redirect chains are clean single-hop 301/308. The Sacramento expert-guide regression that the staging-parity audit flagged is fixed.
| Source | Target | Hops | Status Code | Notes |
|---|---|---|---|---|
| http://fastmoldtesting.com | https://fastmoldtesting.com | 1 | 301 | Clean |
| www.fastmoldtesting.com | fastmoldtesting.com | 1 | 301 | Clean |
| /sacramento/ | /sacramento | 1 | 308 | Clean — verified 2026-05-07 |
| /sacramento/2026-expert-guide-top-mold-testing-companies-sacramento | /sacramento | 1 | 301 | Fixed (was the parity-audit regression) |
| /los-angeles (unknown SPA route) | n/a | 0 | 404 | Correct — was returning 200 with empty content pre-fix |
| /nonexistent-test-xyz | n/a | 0 | 404 | Correct |
Redirect map is clean — no equity-leaking chains
The Sacramento expert-guide regression that was the worst SEO regression flagged in the staging-parity audit is now correctly 301-redirecting to /sacramento. Single-hop chains everywhere.
G — XML Sitemap & Robots.txt Validation
Sitemap healthy, last submitted 2026-04-14, last downloaded 2026-05-06, 0 errors. Robots.txt and llms.txt both serve correctly.
AI Crawler Configuration
- ✓ GPTBot — allowed
- ✓ PerplexityBot — allowed
- ✓ Claude-Web — allowed
- ✓ Google-Extended — allowed
- ✓ CCBot (Common Crawl) — allowed
- ! llms.txt content can be enriched (Sec 08, Sec 11 Rec #15 dependency)
H — Honest Limitations
What this audit cannot see, and the upgrade path for each.
Specifically What We Can't See in This Audit
- Full backlink graph. Current DataForSEO tier provides Domain Rank Overview as a proxy. We cannot see referring domains, anchor text distribution, toxic links, or competitor link gaps. Upgrade path: DataForSEO Backlinks API add-on ($50-100/mo) or Ahrefs Lite ($129/mo).
- AI Overview citation rate over time. We can spot-check current AI Overview citation per query (DataForSEO live SERP), but we cannot see how often FMT is cited across all queries or how that rate changes week over week. Upgrade path: Use FMT's existing aeo-engine tool (referenced in seo/CLAUDE.md) for monthly citation audit batches across the 25+ priority queries.
- Server log files. No Googlebot crawl frequency per URL, no AI crawler hit rate, no bot fingerprinting. Upgrade path: Request server log export from Netlify (one-time per quarter) and run a log-analyzer such as Screaming Frog Log File Analyzer.
- GSC query-level data freshness. GSC search analytics has a 48-72 hour publishing lag. The 87-day window in this audit ends May 4, 2026 — that is GSC's freshest available data as of the audit run on May 7. Upgrade path: BigQuery export of GSC data for permanent retention (already feasible via the FMT BigQuery integration).
- GA4 conversion attribution beyond last-touch. GA4 default attribution is last-non-direct-click, which under-represents organic's discovery contribution. Upgrade path: Apply data-driven attribution model in GA4 Reports + cross-reference with the FMT lead-attribution data warehouse.
- Competitor private analytics. We see Thumbtack/Angi/Reagan Environmental's SERP performance via DataForSEO Labs but not their actual booking-conversion rates, customer acquisition cost, or unit economics.
- Authenticated / member-only pages. The advertiser-facing portal and inspector dashboard are not crawled (correctly — they're behind auth).
- Real-user behavior (rage clicks, dead clicks, session replay). Requires Microsoft Clarity, Hotjar, or FullStory — out of SEO audit scope but valuable for CRO.
We tell you what we see AND what we can't see
Anything promising 100% technical coverage without log files, full backlink data, and longitudinal AI citation tracking is selling optimism.
30-60-90 Day Roadmap
Aggressive execution plan. Days 1-3 config sweep, Days 4-7 trailing-slash + Sacramento schema fix, Days 8-14 cost guide AEO + content cadence per Sec 09. Built on top of an already-recovering site.
This is an aggressive plan — but the recovery curve is real
The original audit's recommendations are working: clicks pace climbed from 7-13/day to 25-46/day. This roadmap rides that momentum with the next phase: trailing-slash consolidation in Days 1-7, AI Overview citation restructure in Days 8-14, Sec 09 calendar at 2 posts/week starting May 4, then pillar pages in Days 31-60. If you can't move at this pace, extend the timeline — but don't cut scope.
Days 1-30: Foundation Lock-In
Trailing-slash dup consolidation, Sacramento schema replication, cost guide AEO restructure, Sec 09 cadence start
Days 1-3 — Config Sweep
| Ship | Verify | |
|---|---|---|
| ☐ | Restore Content-Security-Policy header (Report-Only). Netlify config change. | curl -I → Content-Security-Policy-Report-Only header present |
| ☐ | Audit AggregateRating per-city vs Org-root. Decide: split or consolidate. | Rich Results Test → no "review with no reviews" warnings |
| ☐ | Enrich llms.txt with marketplace + founder + price context. | curl /llms.txt → updated content live |
| ☐ | Add HSTS preload directive + submit to hstspreload.org. | HSTS header includes preload |
Days 4-7 — Trailing-Slash + Sacramento Schema
| Ship | Verify | |
|---|---|---|
| ☐ | Submit GSC URL Inspection → Request Indexing for 5 city pages. /sacramento, /new-york, /san-francisco, /san-jose, /atlanta canonical (no-slash) forms. | GSC shows "Indexing requested" for all 5 |
| ☐ | Re-submit sitemap with only canonical (no-slash) URLs. | GSC sitemap report shows 281 URLs, 0 errors |
| ☐ | Apply /new-york schema fix (AdministrativeArea + Place) to /sacramento, /san-francisco, /san-jose, /atlanta. Single template change. | Rich Results Test → LocalBusiness valid on all 4 |
| ☐ | Replicate the schema fix to remaining 46 city pages. | Rich Results Test → sample 10 random city pages all valid |
| ☐ | Add HSTS preload to FMT. | SecurityHeaders.com → A grade |
Days 8-14 — Cost Guide AEO + Content Cadence Begins
| Ship | Verify | |
|---|---|---|
| ☐ | Restructure /mold-inspection-cost intro for AI Overview citation. Definition box + price-range table + Mike Nguyen author + cited refs. | Rich Results Test → Article + FAQPage still valid; verify position not regressed |
| ☐ | PUBLISH: Sec 09 Post 1 — "How to Prepare for a Mold Inspection" (May 4) | Indexed within 14 days; appears in GSC Performance |
| ☐ | PUBLISH: Sec 09 Post 2 — "Is Mold Testing Worth It?" (May 7) | Indexed within 14 days |
| ☐ | Title rewrite + service-area block on homepage for head-term capture (Sec 11 Rec #7). | View source → new title; verify all 51 city links visible |
| ☐ | PUBLISH: Sec 09 Posts 3 + 4 (May 11 + 14) | Indexed within 14 days |
Days 15-30 — /team page + State-Law Expansion + Cadence
| Ship | |
|---|---|
| ☐ | Build /team page with Person schema for Jordan Gruber (ASTM), Mike Nguyen (microbiologist), Dr. Walter Davis Merritt (M.D. ENT), Kristina Baehr (J.D. Yale). Sec 11 Rec #4. |
| ☐ | Build /mold-inspection-california-laws — Kristina Baehr (J.D. Yale) author. Sec 11 Rec #6 first page. |
| ☐ | Add author Person schema back-references on existing blog posts + cost guide + Georgia laws page. |
| ☐ | PUBLISH: Sec 09 Posts 5-8 (May 18, 21, 25, 28). 8 posts total in Days 1-30. |
| ☐ | Resolve AggregateRating split across all city pages (Sec 11 Rec #8). |
| ☐ | Run mid-month GSC audit: verify trailing-slash dup entries are decreasing. |
Day 30 Milestone
5 trailing-slash duplicates consolidated. All 51 city pages have AdministrativeArea schema. Cost guide restructured for AI citation. /team page live with 4 Person schemas. CA state-law page live. 8 Sec 09 calendar posts published. CSP restored.
Days 31-60: Authority Blitz
2 pillar pages, 4 state-law pages total, 8 Sec 09 posts, AI Overview citation push
Days 31-45 — Pillars + State-Law Expansion
| Deliverable | Detail | KPI | |
|---|---|---|---|
| ☐ | BUILD: /tenant-rights-mold national pillar (2,500-3,500 words) | Kristina Baehr (J.D. Yale) author. 9 Sec 09 spokes link in. HowTo schema for "How to document mold for tenant complaint". Sec 11 Rec #12. | GSC: pillar indexed within 14 days; first impressions within 21 days |
| ☐ | BUILD: /mold-inspection-texas-laws + /mold-inspection-ny-laws + /mold-inspection-florida-laws | Kristina Baehr author. Sec 11 Rec #6 completion. | GSC: state-law pages indexed; tenant-rights cluster impressions climb |
| ☐ | PUBLISH: Sec 09 Posts 9-12 (Jun 1-11) | Posts 9 (CA tenant evict), 10 (hidden mold), 11 (NYC tenant rights), 12 (mold after leak) | GSC: 12+ posts published total |
| ☐ | Add Service schema for 4 inspection types (air, surface, ERMI, full) | Sec 11 Rec #10. Build /services/* URLs with priceSpecification + areaServed. | Rich Results Test → Service valid; AI shopping agent visibility audit |
| ☐ | Identify and outreach to top 10 referrers (Sec 11 Rec #11) | From GA4 Referral report. Build partnership program. | GA4: referral channel sessions track |
Days 46-60 — Pillar #2 + AEO Validation
| Deliverable | Detail | KPI | |
|---|---|---|---|
| ☐ | BUILD: /mold-testing-guide national pillar (3,000-4,000 words) | Mike Nguyen (microbiologist) author. 8 Sec 09 spokes link in. HowTo + FAQPage (12-15 Q's). Sec 11 Rec #13. | GSC: pillar starts collecting impressions on "mold testing" head term |
| ☐ | PUBLISH: Sec 09 Posts 13-16 (Jun 15-25) | Posts 13 (lease break), 14 (ERMI vs air), 15 (landlord ignore), 16 (read inspection report) | GSC: 16+ posts published total |
| ☐ | AI Overview citation audit (manual + DataForSEO live SERP) | Test 25 priority queries; verify FMT cost guide is now cited. | AI Overview: at least 1 of "mold inspection cost" / "mold testing cost" cites FMT |
| ☐ | Expand FAQPage schema across 51 city pages (Sec 11 Rec #14, in batches) | 5-7 city-specific Q&As per page. Use Mike Nguyen's expertise for technical answers. | Rich Results Test → FAQ valid on 51/51 |
| ☐ | Re-audit GSC trailing-slash status | Confirm dup entries are gone or reduced. | GSC: dup index entries reduced from 5 to <2 |
Day 60 Milestone
2 national pillar pages live. 4 state-law pages (GA, CA, TX, NY, FL). FAQPage schema on all 51 city pages. AI Overview cites FMT cost guide on at least 1 cost query. Trailing-slash dup entries cleared. Referral partnership outreach in progress.
Days 61-90: Scale & Competitive Moat
Mold-type page expansion, Wikidata, comparison content, full re-audit
Days 61-75 — Mold-Type Expansion + Wikidata
| Deliverable | Detail | KPI | |
|---|---|---|---|
| ☐ | BUILD: 5 mold-type pages (Sec 11 Rec #5) | /black-mold/, /white-mold/, /green-mold/, /attic-mold/, /basement-mold/. Replicate /orange-mold/ template. Mike Nguyen author. Article + FAQPage schema each. | GSC: 5 new mold-type pages indexed; first impressions within 21 days |
| ☐ | Submit Wikidata entity for FMT (Sec 11 Rec #15) | Founders + HQ + certifications + sameAs links + press citations. | Wikidata entity live; wait 4-8 weeks for Google ingestion |
| ☐ | PUBLISH: Sec 09 Posts 17-20 (Jun 29 - Jul 9) | Posts 17 (independent inspector), 18 (real estate buyer), 19 (CA Civil Code 1942.5), 20 (TX Property Code 92) | GSC: 20+ posts published total |
| ☐ | Build /press "Recently Featured In" page | BBB Accreditation, ASTM membership, AIHA-EMPAT, InterNACHI, PAT, Knowledge Panel pre-req. | Page live; cited by Wikidata submission |
| ☐ | Add OrganizationRole / memberOf for certifications | ASTM, AIHA-EMPAT, InterNACHI, PAT, BBB | Rich Results Test → Organization with memberOf valid |
Days 76-90 — Comparison Content + Full Re-Audit
| Deliverable | Detail | KPI | |
|---|---|---|---|
| ☐ | BUILD: 3 comparison pages | /compare/fmt-vs-mold-inspection-and-test, /compare/fmt-vs-reagan-environmental, /compare/fmt-vs-rtkenvironmental. Honest head-to-head. Schema + bottom-funnel intent. | GSC: comparison queries appear; CTR is high on commercial-intent |
| ☐ | Launch review collection automation | Post-inspection email + SMS → review request → per-city AggregateRating distribution. | Reviews/wk: +5-10 incremental per city after Day 90 |
| ☐ | PUBLISH: Sec 09 Posts 21-24 (Jul 13-23) | Posts 21 (apt mold health), 22 (DIY kits), 23 (GA tenant rights), 24 (when to call pro). Hits the 24-post calendar milestone. | GSC: 24/24 calendar posts live |
| ☐ | Reddit / community seeding | Quality non-promotional answers in r/Mold, r/HomeImprovement, r/Apartments. LLM citation-magnetism. | Reddit threads mentioning FMT grow 3x |
| ☐ | Run full DataForSEO re-audit + GSC re-audit | Compare keyword positions, on-page score, head-term breakthrough. Surface next 20 opportunities. | Avg position 17 → 12; head-term breakthrough on at least 1 of "mold inspection" / "mold testing" / "mold inspection near me" |
Day 90 Milestone
11 mold-type + state-law + comparison pages live. Wikidata entity submitted. Knowledge Panel building. 24-post calendar complete. Reviews automation running. Full re-audit confirms metric wins. Brand defending intact at #1.9 on "fast mold testing".
Full 90-Day Projected Trajectory
Aggressive targets assuming full execution at pace, riding the existing recovery curve
| Metric | Today (May 7) | Day 30 | Day 60 | Day 90 |
|---|---|---|---|---|
| SEO Score | 64 | 68-72 | 75-79 | 82-86 |
| Monthly Organic Clicks | ~600 | ~800 | ~1,200 | ~1,800 |
| Overall CTR | 0.36% | 0.55% | 0.75% | 0.95% |
| Avg Position | ~17 | ~14 | ~13 | ~12 |
| Trailing-Slash Dup Entries | 5 | 2-3 | 0 | 0 |
| City Pages w/ Correct Schema | 1/51 | 51/51 | 51/51 | 51/51 |
| Sec 09 Calendar Posts | 0 | 8 | 16 | 24 |
| State-Law Pages | 1 (GA) | 2 (+CA) | 5 (+TX,NY,FL) | 5+ |
| Mold-Type Pages | ~5 | ~5 | ~5 | ~10 |
| Pillar Pages Live | 0 | 0 | 2 | 2 |
| AI Overview Citations | 0 | 0-1 | 1+ | 2+ |
| Org Conversions / Quarter (proj.) | 529 | ~640 | ~880 | ~1,200 |
Projections compound on the existing recovery curve. Each phase's wins propagate through Google's index over 14-30 days. Actual results depend on competitive dynamics, Google algorithm changes, and execution quality.