Performance
Server response, caching, and page weight — measured September 25, 2026
No PageSpeed Insights / CrUX API key was available for this audit, so the findings below are a lab-style, source-level analysis (direct curl timing, header inspection, and HTML parsing across the homepage, a city page, and a service page) rather than real-user field data — recommend validating against live PageSpeed Insights before finalizing any client-facing LCP/INP/CLS pass-fail claims. The server foundation here is genuinely better than most small-business WordPress sites: TTFB is excellent and the ExactDN/BunnyCDN image pipeline is correctly configured. The score is dragged down by a caching misconfiguration on the HTML itself and two badly oversized source images.
TTFB & Compression — Pass
| Page | Avg TTFB (5 samples) |
|---|---|
| Homepage | ~147ms |
| City page (Katy) | ~170ms |
| Service page (Tree Trimming) | ~138ms steady-state |
All three well under the 200ms "good" TTFB guideline. Gzip compression is working correctly (homepage HTML: 308,482 bytes → 44,944 bytes gzipped, an 85.4% reduction), and CDN assets are served over HTTP/2.
Critical Finding
Homepage, city page, and service page all return identical headers (Sept 25):
This forces a full re-download of the HTML on every repeat visit or crawl. By contrast, ExactDN image assets are correctly cached (Cache-Control: public, max-age=31536000, confirmed cdn-cache: HIT) — the problem is isolated to the WordPress/Apache HTML response.
Root cause found (Oct 4, 2026): this wasn't a leftover misconfiguration — it's WP Fastest Cache's own plugin code, hardcoded with no settings toggle, regenerated into .htaccess on every cache rebuild. Fixed by adding a separate rule block after the plugin's own section (Apache processes same-named Header set directives in order; the later one wins), which survives future plugin cache clears without being overwritten. Live now: Cache-Control: max-age=300, must-revalidate, no more stale 1923 Expires header. Picked a short 5-minute window rather than the originally suggested 600s to balance real caching benefit against how frequently this site's content is being updated this engagement.
High Findings
| File | Served at (Sept 25) | Size (Sept 25) | Size (Oct 4, resized) |
|---|---|---|---|
| comercial-e1572561462890.jpg | 1937×1937px | 495 KB | 233 KB (origin), 156 KB via ExactDN |
| tree-removal-rig-and-tackle...jpg | 1440×1440px | 475 KB | 417 KB (origin) |
Together ~970KB (41%) of an estimated ~2.35MB worst-case homepage page weight, despite both being capped at 1080px display width per their sizes attribute. Several other portfolio images run 100–165KB each — all Divi gallery images uploaded in 2019 at full resolution and never downsized before upload.
Status (Oct 4, 2026): both master files resized to 1080px/quality 85 (originals backed up first) — real, measurable file-size reduction. But the real-world severity was lower than this finding implied: checking the actual srcset/sizes markup showed these images were already served via ExactDN with correct responsive variants (104-154KB for realistic viewport widths), not the raw 495-599KB master file — real visitors were never actually downloading the worst-case size. The fix is still a genuine improvement (smaller master = smaller worst-case fallback, less storage, faster first-generation of future thumbnail sizes), just not the dramatic page-weight win the original framing suggested.
Only one of the homepage's 10 <link rel="stylesheet"> tags uses the preload/swap pattern; the other 9 are classic render-blocking. Five render-blocking <script> tags with no defer/async also load in <head>: jQuery, jQuery Migrate, and 3 Gravity Forms scripts (~46KB total) — even though the contact form isn't above the fold. City and service pages are cleaner (Gravity Forms isn't loaded there), but still carry 5–7 blocking stylesheets each.
Fix: defer the Gravity Forms JS bundle and apply the preload/swap pattern already used for one Divi stylesheet to the rest.
Image Delivery (ExactDN) — Mostly Good
- WebP content negotiation confirmed working: same URL returns WebP with an Accept: image/webp header, JPEG otherwise
- Responsive srcset/sizes correctly generated with full breakpoint sets
- Long-lived CDN caching on images: max-age=31536000, confirmed BunnyCDN edge HIT
- Lazy loading implemented via lazysizes.js plus native loading="lazy"; the hero/LCP image correctly skips lazy-loading and uses fetchpriority="high"
- No <link rel="preload"> hint for the LCP hero image — would give a more direct LCP improvement than most other changes on this list
Source master images (see PERF-02) are oversized before ExactDN ever resizes them— FIXED, resized Oct 4, 2026. (ExactDN was already compensating well via responsive srcset even before this fix.)One off-brand hotlinked image (advancedhomeexteriors.net/.../five-stars@2x.png) bypasses ExactDN entirely, pointing to an apparently unrelated third-party domain— FIXED, re-hosted Oct 5, 2026: downloaded, uploaded to the WP media library, and both references (the active Theme Builder header layout and its underlying template style) repointed to the new self-hosted file, now served via ExactDN like every other site image. Verified live.
CLS & INP Notes
- 26 of 74 homepage <img> tags lack explicit width/height — concentrated in the Google Reviews widget (small avatar images); minor CLS risk
- DOM size is comfortably under the ~1,500-element Lighthouse threshold on every page tested (homepage ~997, city ~751, service ~487)
- Minimal third-party script footprint: only Google Tag and reCAPTCHA found — no Facebook Pixel, Hotjar, or other heavy trackers
- Divi_new/js/scripts.min.js (70.9KB uncompressed) is Divi's core interaction script and a common source of long main-thread tasks on Divi sites — recommend a real Lighthouse/CrUX pass for INP once traffic volume supports field data
Top Quick Wins
| # | Fix | Expected Impact |
|---|---|---|
| 1 | Done (real impact was smaller than estimated — ExactDN was already serving optimized responsive variants) | |
| 2 | Done, verified live | |
| 3 | Preload the hero/LCP image; defer the Gravity Forms JS bundle | Direct LCP improvement + removes ~46KB of blocking JS |
| 4 | Re-host the hotlinked "five-stars" badge via ExactDN | Removes an uncontrolled third-party dependency |