Skip to main content
MCANIX
Teardown·14 min read

DFW Roofing Company Marketing Audit

We audited a $3M Dallas–Fort Worth roofing company's full marketing stack. Site, SEO, GBP, ads, reviews, AI search — plus the 90-day fix plan.

Owen Nixon
Co-Founder, MCANIX

We audit roofing companies for fun. Sometimes for clients. Sometimes just because we want to see where the money's leaking. This is a real DFW roofing marketing audit — a $3M residential roofer headquartered north of Dallas, twelve employees, two crews, ten years in business. The kind of company doing well enough to not be desperate, and busy enough to ignore most of what we're about to walk through.

We've masked the company's name and URL. Why: we're a Texas agency talking about a Texas peer, and the point of this roofing marketing teardown isn't to embarrass anyone. It's to show what we look at when we audit a hands-on business — and what most agencies miss because they're optimizing for the wrong scoreboard.

The observations below are real. They were pulled from a live audit against this operator and cross-checked against two other mid-market DFW roofers' sites to confirm the patterns are typical, not isolated. If you're a roofing company owner reading this, you'll recognize about 80% of it in your own business. That's the point.

We'll call them Lone Star Crest Roofing for the rest of this piece. If you'd rather see the complete system we'd build instead of the audit, our 2026 Roofing Marketing Playbook covers it end to end.

Who We Audited (And Why)

Lone Star Crest is a textbook mid-market DFW storm-restoration roofer. Family-owned. Founded 2014. Headquartered in a Frisco-area suburb. ~$3M in annual revenue. About 70% of their work is storm-driven residential reroofs and insurance claim assistance; the other 30% is retail repair and gutter work. They run two crews, sub out their own production overflow, and have a small office team handling estimates, scheduling, and claims.

Marketing footprint: a WordPress site built around 2018, a Google Business Profile that's been active for years, a Facebook page that gets posted to "when the owner's wife remembers," and a Google Ads account a previous agency set up that nobody's optimized in fourteen months.

We picked them because they're representative. Not the smallest roofer in DFW, not the biggest, not the worst, not the best. The median. If we can show how to find $300K–$700K in additional booked revenue in a roofer at this size — and we can — that math works for most of the DFW market.

1. The Website

The site is the foundation. Everything else (ads, SEO, GBP, social) is just traffic — if the foundation leaks, nothing else matters.

Speed and Core Web Vitals

Loaded over a 4G connection: 4.2 seconds to first meaningful paint. Largest Contentful Paint (LCP) hit 3.8 seconds. Cumulative Layout Shift was tolerable. The killer was the hero image — a 1.4 MB JPEG of a generic suburban house, served at the same size on mobile as desktop, no WebP, no lazy load, no responsive srcset. That single image is most of the LCP problem.

Google's threshold for "good" LCP is 2.5 seconds. Anything over 4 seconds is in the "poor" bucket. This site is in the poor bucket. That hurts paid ad Quality Score (which raises CPCs), hurts organic ranking, and bounces ~30% of mobile visitors before they ever see a CTA.

Mobile experience

The site is responsive, but it wasn't built mobile-first. Tap targets are small. The phone number in the header collapses into a hamburger on mobile, so a homeowner who lands on the site during a storm has to tap twice to call. Every additional tap costs leads.

Bigger issue: the contact form on mobile is below seven scrolls of content. There's no sticky call-to-action bar. No floating "Call Now" or "Get Free Inspection" button. On a roofing site — where about 65% of high-intent traffic comes from a phone — the lack of a persistent CTA is a quiet, expensive miss.

Conversion elements

The above-fold CTA reads "Schedule Free Inspection." It's fine. It's not great. "Free Inspection" is the price-of-entry offer in DFW roofing — every competitor offers it. There's nothing in the headline or sub-headline that distinguishes this company from the other 400 roofers within 30 miles.

What's missing:

  • No financing offer. A roof replacement averages $12K–$25K in DFW. Storm restoration is often insurance-driven, but retail jobs increasingly need financing. Not mentioning it on the homepage costs deals.
  • No insurance claim walkthrough. This company specializes in storm work. The homepage doesn't say so above the fold. A homeowner who just got hailed on can't tell from the first screen whether this company handles insurance.
  • No real photos. The hero is a stock image. The "Our Work" section uses what look like manufacturer photos. Nothing on the page is recognizably Texan — no shot of a crew on a real Dallas-area job, no neighborhood landmarks, no licensed trucks parked in front of a real house.
  • No social proof above the fold. The Google review count and star rating live in the footer. Trust signals — BBB, GAF, Owens Corning — appear as tiny grayscale logos halfway down the page.

Copy

The copy is what we call "agency boilerplate." "Trusted." "Quality craftsmanship." "Family owned." "Serving DFW since 2014." All of these phrases appear on roughly 380 other DFW roofer sites. Nothing here is specific, surprising, or owner-voiced. That matters because in a saturated market, the only durable differentiator is a voice that sounds like the actual owner you'd call. Boilerplate can't do that.

2. SEO

This is where we'd find the most upside on a 90-day timeline.

Title tags and meta descriptions

The homepage title tag reads "Roofing Services in Dallas Fort Worth | Lone Star Crest Roofing."

That's the title 90% of mid-market roofers use. It ranks for nothing competitive because there's no qualifier — no offer, no review signal, no city specificity. A title that works in DFW looks more like "Frisco & Plano Roofing | 4.8★ on Google | Free Inspection in 24 Hrs." Specific, scannable, click-worthy.

Meta descriptions: missing across most pages. WordPress is auto-generating from the first paragraph of body copy. That means the snippet Google shows in search results is whatever happened to be the first sentence of the page — usually generic intro filler. Hand-written meta descriptions can lift organic CTR by 10–20% with zero ranking change.

Headings

The homepage h1 is "Welcome to Lone Star Crest Roofing." Welcome to nothing. That's a polite phrase that wastes the most valuable text on the page. The h1 should contain the primary keyword and an action verb. Something like "Dallas–Fort Worth Roofing Contractor for Storm Damage and Insurance Claims."

Section headings ("Our Services," "About Us," "Why Choose Us") use bold paragraph styling instead of actual h2 tags. That breaks the document outline and makes the page harder for both Google and screen readers to parse.

Local SEO and city pages

Lone Star Crest serves 25+ DFW communities. They list those cities in a comma-separated paragraph on the homepage. They have one city page (Dallas). They should have at least 20 — Frisco, Plano, McKinney, Allen, Prosper, Flower Mound, Southlake, Colleyville, Keller, Grapevine, Coppell, Las Colinas, Carrollton, Lewisville, Highland Park, University Park, Garland, Rockwall, Mesquite, Richardson. Each one its own URL, each one 1,000–1,500 words of genuinely-local content, each one with at least one neighborhood-specific testimonial and one job photo from that ZIP code.

City pages are the single highest-leverage SEO play for a local trade business. A roofer who builds 20 real city pages can typically expect to rank in the top 10 for the city + service combo within 90–120 days — and those pages convert at 2–3x homepage rates because they pre-qualify the visitor's intent.

Schema markup

We checked the source. No JSON-LD schema markup is present on the homepage. No LocalBusiness, no Service, no Review, no FAQPage, no BreadcrumbList. This is a free pass we'd take immediately.

LocalBusiness schema with NAP (name, address, phone), service area, opening hours, aggregate review rating, and price range tells Google exactly what kind of entity this is and where it operates. FAQ schema is even higher leverage right now because it's one of the strongest signals for getting cited in Google's AI Overviews (more on that below).

Content gaps

The blog has six posts, all from 2022. Topics: "Why Choose Us for Your Roofing Needs," "Top 5 Reasons to Replace Your Roof," "Spring is Coming: Roof Maintenance Tips." These are templated SEO articles that don't rank, don't get linked to, and don't convert.

The content this market is starving for: decision content. "Should I file an insurance claim for hail damage? (A Texas homeowner's guide)." "What does a roof replacement actually cost in Frisco?" "How to read your insurance estimate without getting screwed." Articles like these get linked from local Reddit, get cited by AI models, and pull in high-intent traffic — homeowners about to spend $20K who are looking for someone trustworthy to help them think.

Internal linking

Internal links exist in the main nav. Past that, almost none. Service pages don't link to relevant city pages. Blog posts don't link to service pages. The homepage doesn't link deep into the site. From an SEO standpoint, every page is a dead end. That wastes the page authority Google does assign and makes it harder for the site to rank deep pages.

3. Google Business Profile

Lone Star Crest's GBP is in the worst possible state: set up, claimed, and forgotten.

  • Reviews: 87 reviews, 4.6 stars. Solid average. For a $3M roofer with ten years in business, that count should be 400+. They've left an estimated 3+ years of review velocity on the table.
  • Last new review: 23 days ago. A roofer running two crews finishes 8–15 jobs a week. They should be getting 8–15 new review opportunities a week. Two or three should convert. They're getting one every three weeks.
  • Primary category: "Roofing contractor." Correct.
  • Secondary categories: Missing. Should include "Gutter cleaning service," "Insulation contractor," "Siding contractor" if applicable. Each secondary category opens additional search query types.
  • Services list: Three entries ("Roof Repair," "Roof Replacement," "Gutters"). Should be 15+ — each one a specific service with a description and price range where possible. Google uses this list to match the listing to long-tail queries.
  • Photos: 12 total. None added in the last 90 days. Roofers with active photo strategies (one new photo per job, posted weekly) consistently see more "discovery" search appearances. Photos are also one of the cheapest ranking signals Google currently rewards.
  • Posts: Zero in the last 6 months. GBP Posts are free real estate. They expire in 7 days, so consistency matters more than perfection.
  • Q&A: Three questions. Two unanswered. Both unanswered questions are about insurance ("Do you handle insurance claims?" — yes, but nobody answered). Unanswered questions get answered by random strangers, which Google then surfaces in search.
  • Booking link / appointment URL: Not set.
  • Messaging: Off.
  • Products tab: Empty.

Total time to fix all of the above: about six hours, spread over two weeks. Estimated impact on call volume: 20–40% lift within 60 days.

4. Paid Ads

What we can see from outside the account:

Google Ads: Running. They appear for "roofing company Plano" and "roof repair Frisco." Ad copy is generic ("Top Rated Roofers — Free Inspection Today"). Headline 1 is the company name. Headline 2 is "Free Inspection." Headline 3 is "Call Now." That's the default WordStream/Google Ads-suggested template. It's not bad. It's not optimized.

What's missing from the ads:

  • No location extensions showing the office address
  • No call extensions with the phone number tappable directly from the SERP
  • No sitelink extensions to specific service pages or city pages
  • No promotion extensions ("$500 off full roof replacement through May")
  • No structured snippet extensions highlighting services or service areas

The landing page for paid traffic is the homepage. This is the single most common — and most expensive — paid mistake roofers make. A dedicated landing page for "Roof Replacement in Plano," built for that specific search intent, with a focused offer and a single CTA, typically converts 2–4x better than a homepage. At $80–$120/click in the DFW roofing market, doubling conversion rate roughly halves your cost per booked job.

Local Services Ads (LSA): No "Google Guaranteed" badge visible in their listing area. Either they're not enrolled, or they failed verification. LSAs in DFW roofing typically cost $12–$45 per lead — versus PPC at $80–$120 per click and a 8–15% conversion rate from click to actual lead. The math overwhelmingly favors LSAs for this category. Getting Google Guaranteed should be a top-five priority for any DFW roofer who isn't already enrolled.

Meta Ads: A few boosted Facebook posts visible in their feed. No structured campaign. No retargeting pixel firing on the site (we checked — there's no Meta Pixel installed). That means every visitor who lands on the site and doesn't convert is gone forever. Retargeting on Meta for a roofer typically costs $3–$8 per thousand impressions and recovers 8–15% of warm-but-not-yet-ready traffic.

5. Reputation and Reviews

PlatformReviewsRatingOwner response rate
Google874.6★~40%
BBB14A+~20%
Facebook234.8★0%
Yelp63.0★0% (claimed but ignored)
Nextdoor0No presence

The Google rating is solid. The volume is the problem — 87 reviews for ten years in business is roughly one new review per six weeks. That's not what an active two-crew operation should look like.

Bigger issue: response patterns. Owner responses to 5-star reviews are generic ("Thank you for the kind words!"). Responses to the few 1- and 2-stars are either absent or defensive. Both are unforced errors. Future customers read reviews and especially read responses. A thoughtful, specific 5-star response signals an owner who cares. A measured, professional response to a complaint signals an owner you can trust when something goes wrong — which, in roofing, will eventually happen.

Nextdoor is the unclaimed gold mine. In DFW suburbs (Frisco, Plano, McKinney, Southlake), Nextdoor is where homeowners ask each other for contractor recommendations. A roofer with an active Nextdoor "Local Deal" profile and authentic neighborhood engagement can generate 5–15 inbound inquiries per month at zero acquisition cost.

6. AI Search Presence (GEO)

This is the section most agencies aren't even checking yet. It's also the one with the longest runway and the smallest competitive set.

We tested Lone Star Crest's name and category in three places:

  • ChatGPT ("best roofing companies in Frisco TX"): Not mentioned. Top results were two aggregator sites and three competitors with strong content footprints.
  • Perplexity ("roofer recommendations Plano hail damage"): Not mentioned. Cited a local news article about storm season and three roofers with strong PR presence.
  • Google AI Overview (logged-in search for "roofing company near me" with Plano location): Showed an aggregator and two competitors. Lone Star Crest absent.

Why they don't appear:

  1. No schema markup for Google's AI systems to parse confidently.
  2. No industry directory citations — they're not listed in Roofing Contractor magazine's directory, GAF's contractor finder shows them but with thin metadata, BBB profile is minimal.
  3. No editorial citations — they've never been quoted in local news, never been written about in a trade publication.
  4. Thin first-party content — the AI models pull entity descriptions and capability statements from a company's own site. Lone Star Crest's About page is one paragraph.
  5. No FAQ content structured as definitive answers — the format AI loves.

The fix is what we call a GEO foundation build. Comprehensive schema (LocalBusiness, Service, Review, FAQPage, BreadcrumbList). Expanded About/Capabilities content with specific service descriptions, certifications, and service-area data. A targeted FAQ hub built around the questions DFW homeowners actually type into AI tools. Outreach to one or two local journalists during storm season for a quote — local news citations are gold for AI training data.

First-mover advantage matters here. The roofers who get cited by ChatGPT and Google AI in 2026 are going to compound that visibility for years. The ones who wait until 2027 are going to be playing catch-up against entrenched citations.

7. The Fix: A 90-Day Action Plan

This is what we'd do if Lone Star Crest hired us tomorrow. Specific weeks, specific milestones, ordered by leverage.

Days 1–30 — Foundation

  • Week 1: Audit and clean up the Google Business Profile. Claim and clean up all citation profiles (BBB, Yelp, Nextdoor, Angi, HomeAdvisor, BuildZoom). Install GA4, Google Search Console, and call tracking. Install Meta Pixel.
  • Week 2: Rewrite all primary page title tags and meta descriptions. Fix h1 hierarchy across the site. Add LocalBusiness, Service, and FAQPage schema markup.
  • Week 3: Build the first 5 city pages (Frisco, Plano, McKinney, Flower Mound, Allen). 1,200 words each, unique testimonials, neighborhood-specific photos.
  • Week 4: Set up an automated review request system — text message 24 hours after job completion with a one-click Google review link. Install missed-call text-back on the main phone line.

Days 31–60 — Engine On

  • Week 5: Build three dedicated PPC landing pages (Roof Replacement, Storm Damage, Roof Repair). Repoint Google Ads campaigns away from the homepage. Add all extensions (location, call, sitelink, promotion, structured snippet).
  • Week 6: Apply for and complete verification on Google Local Services Ads. Begin LSA spend at $50/day for initial data.
  • Week 7: Build the remaining 15 city pages.
  • Week 8: On-site photo and video shoot at three active job sites. 30 production photos, 6 short-form videos (vertical, 15–30 seconds). Post to GBP weekly, to Meta and Instagram weekly.

Days 61–90 — Scale and GEO

  • Week 9: Launch FAQ-driven content hub. Eight 1,500-word pieces on insurance claims, storm damage identification, and homeowner decision-making. Each piece structured with FAQPage schema for AI citation.
  • Week 10: Outreach to local news (CBS DFW, WFAA, NBC 5) for storm-season expert quotes. Submit to roofing industry directories and association sites.
  • Week 11: Launch Meta retargeting layer with educational creative and a soft offer for non-converters.
  • Week 12: Review velocity should be running 12+/month. Set quarterly target of 30+/month. Begin measuring AI citation appearances on a defined query set.

Expected outcomes

  • Booked jobs from organic and GBP: +40–60% by day 90
  • Cost per booked job from paid (post-LSA): down 30–50%
  • Google review velocity: 6–8x baseline
  • Organic ranking on city + service combos: top 10 on 10–15 combos by day 120
  • First AI citation appearances: within 60–90 days on at least 2 of 6 test queries

The total time investment from the owner: about 4 hours a month. The rest is on us.

Want This Same Audit on Your Business?

This is what we do. Not just for roofers — for HVAC, plumbing, electrical, remodeling, and any other hands-on industry where the marketing is broken and the owner is too busy running crews to fix it.

If you want us to run this exact audit on your company, free, no pitch deck, no contract — book a 30-minute Growth Audit. We'll look at your site, your GBP, your reviews, your ads, and tell you honestly where the money's leaking. You can take the findings and fix them yourself, or hand them to us.

→ See what we offer for the trade: our roofing marketing services → Grade your own marketing in 3 minutes: Marketing Health Score

About the author

Owen Nixon is the Co-Founder of MCANIX, a Texas-based digital marketing and software company focused exclusively on hands-on industries. He writes from direct experience running marketing systems for roofing, HVAC, plumbing, and electrical companies.

Want us to run this analysis on YOUR business?

30-minute free Growth Audit. No pitch deck, no contract. We'll pull your real site, GBP, and ad account and tell you honestly where the money's leaking.