A line-by-line SEO audit of a Riverside HVAC site that has everything going for it on paper and still ranks page 3. Here’s what’s actually broken.
This is the audit I run on every site that walks in the door — applied to a composite Riverside HVAC business assembled from patterns I see across the IE. Established company, 12 years in business, 80+ Google reviews averaging 4.7 stars, a respectable WordPress site that doesn’t look broken. And yet: ranking 18–25 for ‘HVAC Riverside,’ invisible on the Map Pack outside of branded searches, and dependent almost entirely on referral traffic.
Here’s how I’d work through it.
Step 1: Crawl the site and look at the obvious metrics first
First pass is mechanical. I run a Screaming Frog crawl, pull PageSpeed Insights numbers for the top five URLs, check Google Search Console performance, and look at the GBP audit dashboard. Within 20 minutes I have a baseline: how many pages, how many of them have unique title tags and meta descriptions, what’s the mobile LCP, what queries the site is actually surfacing for.
The composite site comes back with: 24 pages, only 14 with unique title tags (the rest are templated as ‘Service — Business Name’), mobile LCP 4.8s, GSC showing 1,200 impressions/month but a 0.6% CTR. These three numbers alone explain ~70% of the ranking gap.
Step 2: On-page audit — title tags, H1s, intent
I open the homepage source and look at the <title> tag. It reads ‘Home | Acme HVAC.’ This is the single most common on-page failure in HVAC SEO. ‘Home’ is not a keyword. The title tag is the highest-leverage on-page element. A reasonable rewrite: ‘HVAC Repair & AC Installation in Riverside, CA | Acme HVAC.’ Just that change typically lifts CTR by 30–60% for ranking positions 4–15.
Next: H1. The page has two H1s (one in the header logo wrapper, one in the hero). Google can handle this but it’s sloppy and dilutes signal. Fix: one H1 per page, primary keyword present, semantically clear.
Service pages: each has a title tag like ‘Air Conditioning | Acme HVAC.’ Should be ‘Air Conditioning Repair in Riverside, Corona & Moreno Valley | Acme HVAC.’ The location modifiers are the difference between ranking for branded vs. ranking for high-intent commercial queries.
Step 3: Technical — speed, schema, indexation
PageSpeed shows the homepage shipping 2.4MB of JavaScript, mostly from a slider plugin and an analytics stack with three overlapping tools. Mobile LCP 4.8s. Quick win: remove the slider entirely (sliders kill conversion for service businesses), consolidate analytics to GA4 only, defer all non-critical JS. Expected outcome: LCP under 2.5s.
Schema: I view-source and search for ‘ld+json.’ Nothing. No LocalBusiness, no Service, no FAQ. Add LocalBusiness schema on the root layout, Service schema on each service page, FAQ on the pages with Q&A. This is a one-day implementation with substantial ranking impact in 30–60 days.
Indexation: GSC shows 9 pages excluded as ‘Duplicate without user-selected canonical.’ These are paginated blog archives and tag pages. Add canonical tags pointing to the primary version, or noindex them entirely.
Step 4: Content gap analysis
The site has a /services page that lists 8 services as expandable accordions. Each ‘service’ is 80–120 words. This is the dominant content failure for HVAC sites in the IE. The fix: pull each service onto its own URL (/services/ac-repair, /services/heater-installation, /services/ductless-mini-split, etc.), expand each to 800+ words with real customer-facing content — what the symptom looks like, what the repair process is, what typical pricing ranges are, what the warranty looks like.
City pages: there are zero. The site lists ‘Service Areas: Riverside, Corona, Moreno Valley, Eastvale, Norco, Jurupa Valley’ in the footer. Six high-intent local queries with no landing pages built for them. This is the single biggest content opportunity in the audit.
Step 5: Local SEO — GBP, citations, NAP
GBP audit: claimed and verified, primary category is ‘HVAC Contractor’ (correct). Secondary categories: only one, ‘Air Conditioning Contractor.’ Missing: ‘Heating Contractor,’ ‘Furnace Repair Service,’ ‘Air Duct Cleaning Service.’ Each missing secondary category removes the business from eligibility for hundreds of monthly searches.
Photos: 11. Should be 30+. Posts: last one was 8 months ago. Services section: 3 entries, should be 15+. Review responses: 60% of reviews unanswered. Q&A section: completely empty.
Citations: NAP audit across 24 directories shows 9 inconsistencies — most because the business updated its suite number two years ago and only changed it on the website and GBP. Yelp, BBB, Angi, HomeAdvisor, Yellow Pages, and four others still show the old address.
Step 6: Prioritization — what to fix first
After the full audit I rank the gaps by leverage × effort. The top five for this composite site would be:
- Rewrite all title tags and meta descriptions with location modifiers and intent keywords. (1 day, immediate CTR lift)
- Strip the slider, defer JS, fix LCP to under 2.5s. (1 day, ranking & UX lift)
- Build six city landing pages — one per Inland Empire city served. (2 weeks, large traffic upside)
- Add LocalBusiness, Service, and FAQ JSON-LD across the site. (1 day, ranking & rich-result eligibility)
- Clean up NAP across the nine inconsistent citations and add 3 missing GBP secondary categories. (3 days, Map Pack lift)
If those five are executed cleanly, this composite business goes from ranking page 3 to the bottom of page 1 within 60 days and into the top of the Map Pack for ‘HVAC Riverside’ and several city-modified queries within 120 days. None of it is magic. All of it is just disciplined application of fundamentals.
Want this audit run on your actual HVAC site (or any service business site) in Riverside? The contact form gets a personal reply within one business day. I’ll do a free quick scan and tell you the three highest-leverage moves for your specific situation.