Case Study: How a Florida Roofing Contractor Hit a 96/100 SEO Score and Started Ranking for $8K/Month Keywords — OnyxRank
Industry: Residential & Commercial Roofing Location: Jacksonville, Florida metro area Plan: OnyxRank Growth Timeline: 24-hour technical overhaul + 90-day ranking program Key Result: SEO audit score from 84 → 96 in under 24 hours; 43 high-intent keywords activated with combined search volume exceeding 180,000 searches/month
The Challenge
SunState Roofing (name anonymized) had been in business for nine years. They had a legitimate reputation — solid Google reviews, strong word-of-mouth, and a service area covering the greater Jacksonville metro. On paper, their website wasn’t broken. A surface-level check showed HTTPS active, pages loading quickly, no obvious errors.
But they were invisible in local search.
When their operations manager typed “roofing contractor Jacksonville FL” — 2,900 searches per month from their exact customer base — SunState didn’t appear. Not on page one. Not on page two. Not in the local map pack. Competitors who’d been in business half as long were owning those positions. Leads that should have been calling SunState were calling someone else.
They’d tried paying a freelancer to “do SEO” two years prior. The freelancer had done enough to make the site technically passable — hence the 84/100 baseline score when OnyxRank audited them. But technical soundness is only one dimension of local SEO. In a market as competitive as Florida roofing, where every contractor is targeting the same storm-damage and cost-estimate searches, the gap between an 84-score site and a 96-score site is measured in actual leads.
The diagnosis: their technical SEO was decent but their local signals were almost entirely absent. The site was built to exist — not to rank.
The Approach
OnyxRank runs a continuous audit loop — not just a one-time snapshot. Within hours of SunState’s account activating, our automated system had crawled every indexable page, verified structured data, cross-referenced citation consistency, and flagged the specific gaps suppressing local visibility.
The audit surfaced three categories of issues:
1. Missing Structured Data (Critical)
The site had zero LocalBusiness schema markup, and no RoofingContractor entity signals anywhere on the domain. Google’s local algorithm uses schema to confirm what a business does and where it operates. Without it, even a well-built site competes with both hands tied behind its back. OnyxRank generated and deployed complete LocalBusiness + RoofingContractor JSON-LD across the homepage and all service pages — covering service area, phone number, business hours, accepted payment methods, and aggregate review score.
2. NAP Inconsistency Across Citations (High Priority)
Name, Address, and Phone consistency is foundational to local pack rankings. SunState had three different address formats and two phone number variants scattered across Yelp, HomeAdvisor, Angi, and their Google Business Profile. Google treats these inconsistencies as trust signals — and inconsistent NAP suppresses map pack placement regardless of how good the underlying site is. Our system identified every variant and queued corrections across all major directories.
3. Under-Optimized Geo Pages (Medium Priority)
SunState served Duval County and four surrounding counties but had a single generic “service area” page with no localized content. Competitors ranking for “roof replacement Jacksonville FL” (2,400 searches/month) and “roofing contractor Orange Park FL” had dedicated, keyword-rich landing pages for each city. OnyxRank built out a geo-page strategy targeting 11 service area cities with locally-relevant content — including storm-season context, Florida-specific material guides, and insurance claim guidance that Jacksonville homeowners actively search for.
The 24-Hour Sprint
Every fix in category one was deployed within 24 hours of audit completion. Schema markup went live. Title tags and meta descriptions were reoptimized for local intent. Canonical tags were verified clean. The audit score moved from 84 to 96 — not because we made hundreds of changes, but because the right three changes eliminated the specific friction blocking Google from trusting and ranking the site locally.
By the end of day two, OnyxRank had also built out SunState’s full keyword map: 43 high-intent search terms across the roofing purchase funnel, from early-stage research queries (“how long does a roof last in Florida,” 2,900 searches/month) to ready-to-buy commercial intent (“roof replacement Jacksonville FL,” 2,400/month; “roofing contractor Jacksonville FL,” 2,900/month) to high-volume informational content plays (“how much does a new roof cost in Florida,” 8,100 searches/month).
The Results
Technical Foundation (Day 1–2)
- SEO audit score: 84 → 96 — completed in under 24 hours
- LocalBusiness + RoofingContractor schema deployed across all service pages
- NAP standardized across 14 citation sources
- 11 geo-targeted landing pages built and indexed
- 43 keywords actively tracked; combined monthly search volume: ~180,000 searches
Ranking Momentum (Days 30–60)
Within 30 days of the technical overhaul, Google’s crawlers had re-indexed the updated pages and the structured data was confirmed live in Search Console. SunState’s site began appearing in positions 12–18 for several previously-unranked local terms — early page-two territory for searches like “storm damage roof repair Florida” (2,800 searches/month) and “how long does a roof last in Florida” (2,900 searches/month).
By day 60, two keywords had broken onto page one:
- “how to file roof insurance claim Florida” — moved to position #9 (3,600 searches/month)
- “signs of roof damage after storm” — moved to position #11, approaching page one (2,400 searches/month)
Insurance-claim and storm-damage queries are among the highest-converting traffic a Florida roofing company can capture — homeowners searching these terms are actively dealing with a roof problem and need a contractor immediately.
Local Pack Breakthrough (Day 75)
SunState’s Google Business Profile entered the local map pack for “roofing contractor near me” searches within their primary service zip codes — a position that had been held by a larger regional chain for over three years. Map pack placement is the single highest-click-rate position in local search; for service businesses, it drives more inbound calls than organic rankings in most markets.
Organic lead flow (90-day checkpoint): - Inbound calls from organic search: up 3.4x vs. the prior 90-day period - Contact form submissions from organic: 11 qualified leads in month three - Average estimated job value in the roofing vertical: $8,500–$14,000 - Conservative 90-day organic revenue attribution: $65,000–$95,000 in booked pipeline
Key Takeaways
- A good SEO score doesn’t mean good local visibility. SunState had an 84/100 technical score and zero local rankings. Technical health and local signal optimization are separate dimensions — both matter.
- Local schema is not optional in competitive markets. In hyper-local verticals like Florida roofing, structured data is the difference between a site Google trusts and one it ignores. Deploying it correctly in under 24 hours moved the score 12 points and immediately unblocked crawler confidence.
- NAP consistency is invisible to site owners but visible to Google. Three address formats and two phone numbers across citation sources can silently kill map pack placement — with no error messages, no warnings, nothing obvious to find without a systematic audit.
- Geo pages are revenue pages. A generic “service area” page leaves money on the table. City-specific landing pages targeting “roof replacement [city]” keywords capture ready-to-buy traffic that a single page can’t compete for.
Want Results Like These?
OnyxRank runs this audit and implementation cycle for every new client — typically within 24 hours of onboarding. If your website is technically decent but you’re not ranking locally, you almost certainly have the same category of gaps SunState had.
Start with a free audit. Our system will crawl your site, flag exactly what’s suppressing your local visibility, and show you the specific fixes — no sales call required.
SunState Roofing is a real OnyxRank client. Company name has been anonymized. All metrics reflect verified audit data and tracked keyword/ranking data from the client’s OnyxRank dashboard.
Pro Intel subscribers get the full picture - proprietary analysis, keyword opportunities, tactical playbooks, and template downloads every week. $49/mo.
One email per week. Actionable, no fluff.