Receipts Group · Contractor SEO Book a 30-min call →
Roofing contractor reviewing contractor SEO keyword rankings on a tablet at a residential job site
Pillar guide · Contractor SEO
Contractor SEO: The Operator's Complete Guide — the pillar guide from Receipts Group.

Contractor SEO: The Operator's Complete Guide

Updated · October 6, 2026 · 15 min read · Pillar guide

The conventional advice on contractor SEO is to "create quality content and the rankings will come." That advice is wrong. Google doesn't rank quality in the abstract. It ranks relevance to a search, authority on a topic, and trust built through signals it can verify, like links, reviews and how searchers respond to a result. We learned this after we fired our SEO agency. In the 90 days after we fired our SEO agency, our own site went from 600 to 1,300 organic clicks a month. That's the gap between an agency's promise and an operator's receipts. This guide covers what actually moves the needle for contractors, roofing, windows, HVAC, remodeling, and what to stop paying for. The platform we rebuilt on is not WordPress. It's engineered around city-and-service pages written for the way homeowners actually search, a content engine that keeps the site growing after launch, and a dashboard that shows which pages produce calls, not just which pages rank. Those are three different things. Most agency reports only show you the middle one. If your SEO vendor has never shown you a page-level lead report, that's a gap in the program, not a data problem.

What Is Contractor SEO and Why Does It Work Differently?

Contractor SEO is local search optimization built around service areas, not national traffic, it wins by ranking the right city-and-service page in front of a homeowner who is ready to buy.

'Roof replacement Tampa FL' is not a browsing query. The homeowner who types it is ready to call. Contractor SEO has one job: put your page in front of that person, not Angi's page. Three things have to work at once: a site built around city-and-service combinations, a Google Business Profile that signals real local presence, and content that answers the exact question the homeowner typed. Most contractor websites fail the first test. They have one 'Services' page that lists everything they do and never mentions Tampa, Miami, or any specific city. Google has no reason to rank a page that says nothing specific. Google's SEO Starter Guide is blunt about this: pages need to be useful to people, not useful to crawlers. For contractors, useful means answering the exact service-and-city query, giving the homeowner enough trust signals to call, and loading fast enough that they don't bounce before the phone number renders. If someone lands on your page and leaves in five seconds, that visit failed, and Google's systems may read it the same way. One commenter on Hacker News put it plainly: 'if you see a recipe and then bounce in 5s Google treats that as bad.' Your service pages work the same way. Angi and Thumbtack have spent years building city-and-service authority that most contractor sites don't have. Every month you run a generic site, you hand them more of that traffic. The answer is not to out-spend them on ads forever. It is to build a site that competes for the same queries on the same terms. That takes longer than a month. It costs a fraction of what you will spend buying leads from those same aggregators over two or three years.

Fast load time and a visible phone number above the fold are not design preferences. Speed is part of Google's page experience signals, and a buried phone number costs you the call. A page that takes four seconds to load on mobile loses the homeowner before they read a single word.

What Does a Contractor SEO Site Architecture Look Like?

The right contractor SEO architecture uses one dedicated page per service-and-city combination, not one page listing all services, so Google can match each page to a specific local query.

We build contractor SEO sites, our own included, with one page per service, one page per city, and a hub-and-spoke internal link structure connecting them. A roofing company serving five cities with four services needs at minimum twenty city-service pages, plus a homepage, a main services hub, and a main service-area hub. Each city-service page is written for the way real homeowners search. The target phrase is never "roofing solutions", it's "roof replacement [city name]." The URL matches. The H1 matches. The first paragraph answers the question directly. Google's guidance on creating helpful, people-first content is explicit: write for the person doing the search, not to rank. The good news is those two goals line up when you do it right. One architectural mistake kills a lot of contractor sites: doorway pages. That's when you spin up hundreds of near-identical pages that swap only the city name, with no real content difference between them. Google's spam policies on doorway pages explicitly target this pattern. The fix is simple but slow: write real, locally-specific content on each page. Mention local permitting, local material choices, local weather patterns. A homeowner in Corpus Christi has different roofing concerns than one in Asheville. Write for that person. Internal linking discipline matters more than most contractors realize. Each city-service page should link up to the relevant service hub and the relevant city hub. Those hubs should link back down to the pages beneath them. This moves authority through the site in a way Google can follow. It also keeps a user who lands on your "Roof Replacement Houston" page oriented toward your broader service offering instead of hitting the back button. Map the internal link structure before you write a single word of content. Most agencies skip it entirely because it is not a deliverable they can show a client on a slide.

The Five Pages Every Contractor Site Needs Before Anything Else

Before building out city pages, every contractor site needs these five foundation pages, without them, the rest of the SEO work has nothing to point to.

How Does Google Business Profile Fit Into Contractor SEO?

Google Business Profile is the most important local SEO asset a contractor can control, and it drives Map Pack rankings alongside your website's own authority.

The Map Pack, those three businesses above the organic results with a map, is often where homeowners start and stop. Ranking there is not purely about your website. It is about your Google Business Profile: how complete it is, how many reviews you have, how recent those reviews are, and whether your business information matches what's on your site and in other directories. Google's own tips for improving your local ranking list three primary factors: relevance, distance, and prominence. You control relevance through your GBP category selection and business description. You build prominence through reviews and mentions across the web. Distance is fixed. Showing up in searches nearest to your physical address is the baseline, and expanding that radius requires stronger signals. For contractors, the most overlooked GBP lever is the service area. GBP guidelines allow service-area businesses to hide their physical address and list the areas they serve instead. Use this correctly: list specific cities and counties, not vague regions. Upload job photos, real ones, taken on real jobs. Respond to every review. These are not nice-to-haves. They are the signals Google uses to decide whether you rank above the competitor two miles away. In our view, review recency matters as much as review volume: a profile with plenty of reviews but none in the last six months looks stale next to a competitor with a steady flow of new ones. Build a process, a text or email sent after every closed job, that generates reviews consistently rather than in bursts after a sales push. On the category front, most contractors pick one primary GBP category and stop. Google allows additional categories, so use them. A roofing company can carry "Roofing Contractor" as primary and add "Gutter Cleaning Service" or "Skylight Contractor" as secondaries without weakening the primary signal. Those secondaries open up ranking eligibility for additional query types.

Close-up of a Google Business Profile for a roofing contractor showing contractor SEO review signals and service areas
GBP review velocity and category accuracy directly affect Map Pack rankings.

What Schema Markup Should Contractors Actually Use?

Contractors should implement LocalBusiness and RoofingContractor schema at minimum, these structured data types give Google machine-readable proof of what you do and where you do it.

Schema markup is not magic. It does not guarantee a rich result. But it gives Google a machine-readable layer on top of your human-readable content, which helps Google read exactly what you do and where you do it. The relevant schema types for contractors are LocalBusiness (with the appropriate subtype), Service, and for roofers specifically, Schema.org's RoofingContractor type. Mark up your NAP (name, address, phone), your service area, your hours, and your aggregate review rating. If you're using a JSON-LD implementation, which is what Google recommends, put it on every relevant page, not just the homepage. One operational detail most people miss: your schema's `areaServed` field should match the cities you list in your GBP service area and the city pages on your site. Mismatches between those three layers confuse Google's local relevance signals. Check this alignment by hand on every page. AI Overviews now answer many homeowner questions before the click. The pages they cite tend to be clear, direct and well structured, so write every city page to answer its question in the first lines. Tools like Google's Rich Results Test and Schema.org's validator let you confirm your markup is error-free before it goes live. Running those checks takes less than five minutes per page. They catch the kind of malformed JSON-LD that silently prevents your structured data from being processed at all.

600→1,300
Organic Clicks / Month
Our own site, 90 days after we fired our SEO agency and rebuilt from scratch.
$700K
Best Month, One Floor
One floor, one month: $700K in sales from our own call center.
~650
In-Home Appointments / Month
Set by our own outbound floor for our own windows and roofing company.
55–60%
Appointment Sit Rate
Across our own appointments; every sit is verified by a person before it counts.

A homeowner reading 'How long does a roof last?' is researching. A homeowner searching 'roof replacement cost [city]' is buying. You should rank the second page first, without exception. Blogs have their place, they can capture early-funnel queries and build topical authority, but if your city pages aren't ranking, a blog post about shingle types is not going to save you.

How Do Contractors Track Whether SEO Is Actually Working?

Contractors should track organic leads and calls by source, not just rankings, because a page can rank well and still convert poorly if the call-to-action or page speed fails.

Rankings don't pay rent. Calls do. The gap between those two numbers is where most contractor SEO falls apart: an agency sends you a rank-tracker report while your phone sits quiet. The right tracking setup doesn't cost much. Google Search Console is free and shows you exactly which queries drive impressions and clicks to each page. A commenter on r/bigseo said it plainly: 'Gonna be the obvious one here: Google search console', and for most contractors, that's correct. Start there before you pay for anything else. Then add a call tracking number, tools like CallRail segment calls by source, so you know which calls came from organic search versus Google Ads versus your GBP. Beyond that: 'what we should track are actual leads coming from ChatGPT,' as one practitioner noted on r/bigseo, and in 2026, that's increasingly real. AI referral traffic is showing up in Google Analytics 4 as a named source. If you're not looking at it, you're missing a growing piece of the picture. Watch for referrals from chatgpt.com, perplexity.ai, and claude.ai inside your GA4 traffic sources. Here's a QA check worth running every month. Pull the top ten pages by organic impressions in Search Console and confirm each one has a phone number in the first viewport, loads fast on mobile in PageSpeed Insights, and has a matching GBP category. Three checks, ten pages, thirty minutes. Most agencies skip it because it's not billable. GA4 counts clicks from your Google Business Profile as Google organic traffic unless you add UTM tags to the website link on your GBP. Tag that link, then set up a custom channel group that puts the tagged GBP traffic in its own bucket. Without that split, your organic number is inflated and your GBP performance is invisible. It is a one-time setup, UTM tags on your GBP link plus a channel group in GA4's Admin panel, no third-party tool, no added cost, and it is the difference between knowing your SEO is working and guessing.

Generic SEO Agency vs. Operator-Built Contractor SEO

The core difference between a generic SEO agency and operator-built contractor SEO is who owns the strategy, and who has actually run the business model you're trying to rank for.

FeatureGeneric SEO AgencyOperator-Built Contractor SEO
Site architectureTemplate with your logo swapped inCity-service pages built for how homeowners actually search
Content strategyBlog-heavy, informational, low purchase intentCity pages first, then topical authority content
Schema markupGeneric LocalBusiness, often incompleteRoofingContractor / HVACBusiness / GeneralContractor with full areaServed match
ReportingRank tracker PDF with no revenue tieSearch Console + call tracking mapped to lead source
Content ownershipAgency owns it; you lose it if you cancelYou own the content, the code, and the accounts
Who built this for themselvesNobody on staff runs a contracting companySame platform we run on our own $23M-a-year windows and roofing company
Split-screen comparison of contractor SEO agency report versus operator-built contractor SEO dashboard with real lead data
Reports that show rankings but not calls are the wrong deliverable.

How to Audit Your Own Contractor SEO in 30 Minutes

A 30-minute self-audit of your contractor SEO covers five checks: site architecture, GBP completeness, page speed, schema, and call tracking, and most contractors find a problem immediately.

  1. 1
    Check your page architecture
    Open your site and count how many pages are dedicated to a specific city-and-service combination. If the answer is zero or one, that's the first problem. You need a dedicated page for every market you want to rank in.
  2. 2
    Run a GBP completeness check
    Log into your Google Business Profile. Confirm your primary category is accurate (not just 'Contractor', be specific: 'Roofing Contractor', 'Window Installation Service'). Confirm your service area lists actual cities, not just a radius. Check that your photos were uploaded in the last 30 days.
  3. 3
    Test mobile page speed
    Run your top city page through PageSpeed Insights (pagespeed.web.dev). If your mobile score is below 50, you have a structural problem. Below 70, you're losing homeowners before they call. This is not a 'nice to fix' item: Core Web Vitals feed Google's page experience signals, and slow pages lose callers.
  4. 4
    Validate your schema
    Paste your homepage URL into Google's Rich Results Test (search.google.com/test/rich-results). Confirm you have a LocalBusiness or RoofingContractor type with name, address, phone, and areaServed populated. Fix any errors before worrying about new content.
  5. 5
    Connect call tracking to Search Console
    If you can't tell which phone calls came from organic search last month, you have no idea whether your contractor SEO is working. Set up a tracked number for organic, CallRail or a similar tool, and link Google Search Console to GA4 so impressions, clicks, and conversions are in one view.

Where Does Paid Search Fit Alongside Contractor SEO?

Paid search fills the gap while organic contractor SEO builds, but contractors who run both without separating their tracking often misattribute leads and overspend on ads that organic would have closed anyway.

Contractor SEO takes time. We went from 600 to 1,300 organic clicks in 90 days, but a brand-new site in a competitive market will not rank for "roof replacement Miami" in week one. Paid search bridges that gap. Google Ads and Local Services Ads, which now carry a Google Verified badge, put your name in front of homeowners immediately while your organic authority builds. The mistake is treating them as substitutes. A common mistake is pausing SEO the moment ads start converting, then restarting it six months later when ad costs spike. That's paying twice for the same audience. Run ads from day one, build SEO in parallel, and use call tracking to measure which source closes at a better rate and a lower cost per acquisition over time. For most contractors, organic leads close higher because the homeowner did more research before calling. They're further along in their decision. Local Services Ads operate on a different logic than standard Google Ads. LSAs are pay-per-lead, not pay-per-click. The Google Verified badge adds a trust signal that lifts call rates in categories where homeowners are nervous about who they let into their home, roofing, HVAC, windows. LSAs also require no landing page and no Quality Score management: you set a weekly budget and either let Google maximize leads or set a max per lead. Running them while your organic authority builds gives you presence at the very top of the results page without any of that overhead. Cost per lead varies by market and trade. Track it alongside your organic cost per call so you are comparing the same thing. For contractors who want to see how paid and organic interact across different trades, our HVAC Marketing guide covers the channel mix in more detail. If you're focused on generating roofing jobs, the Roofing Leads pillar walks through every lead source, paid, organic, and outbound, using the same first-party framework.

SEO math only works if people are searching. In markets with very low monthly search volume, the ceiling on organic leads is low, no matter how well you rank. Know your market's search demand before you commit to a six-month program. We never guarantee rankings or lead volume. Anyone who does is selling you something they can't deliver.

What Does Contractor SEO Cost and What Should It Include?

Contractor SEO should include site architecture, city-service pages, GBP optimization, schema, and a reporting dashboard, anything priced below that scope is partial work, not a full program.

Contractor SEO pricing runs from cheap templated work with no city-page strategy to programs with real content, real reporting, and real accountability. Our program is $3,500 to build, then $3,500 a month for six months. That's $24,500 all in. The build and first three months ($14,000), plus $1,000 toward month four, can go on a $15,000 plan over 12 months at 0%, which is $1,250 a month through a third-party lender, subject to approval. You own the content, the code, and the accounts when we're done. That's not a retainer that evaporates if you leave. It's a real asset on your domain. The platform is the same one we run on our own $23M-a-year impact windows and roofing company. Every page is built for how people search, not for how agencies pitch. The dashboard shows which pages produce leads, not just which pages rank. We never guarantee rankings or a date. We show our own numbers. We don't promise yours. One honest framing: if your average job is under $3,000, the math on a full SEO program gets harder. The payback period extends. This works best for contractors where a single closed job covers a meaningful portion of the monthly investment, roofing, windows, HVAC system replacements, whole-home remodels. If your ticket size is below that, start with ads and a GBP optimization before committing to a full SEO build. What you should demand from any SEO vendor, us included, is transparency at the page level: which URLs are receiving impressions, which are generating clicks, and which are producing form fills or calls. A rank report showing position one for a keyword nobody searches is not a business result. Before you sign anything, ask the vendor to walk you through their reporting dashboard live. If they hesitate or redirect to a PDF summary, that tells you everything you need to know about how they define accountability.

Frequently Asked Questions

How long does contractor SEO take to produce leads in a competitive market?

For a contractor site with zero existing authority in a competitive market like Miami or Atlanta, expect three to six months before city-service pages start generating consistent organic calls. Markets with lower competition, mid-size cities, suburban areas, can show movement in six to twelve weeks. Our own site went from 600 to 1,300 organic clicks a month in 90 days after we fired our SEO agency, and a brand-new domain will usually take longer. New domains take longer. We never guarantee a timeline, but we show our own numbers so you can calibrate expectations against something real.

Is contractor SEO worth it for a small roofing company just getting started?

It depends on your average job value. Contractor SEO makes strong financial sense when a single closed job covers a significant portion of your monthly investment. For a roofing company with an average ticket above $8,000, the math works quickly. If your average job is smaller, repairs, minor work, paid search or outbound appointments may produce faster returns while you build organic authority. We tell every operator to match the channel to their ticket size before committing to any program.

What's the difference between contractor SEO and Google Ads?

Google Ads buys you the top of the page the moment you fund the campaign and stops the day you pause it. Contractor SEO builds equity, pages that rank and generate calls without a cost-per-click attached to every call. The practical difference: ads deliver leads immediately but at a variable cost that rises in competitive markets. Organic leads from SEO arrive more slowly but often close at a higher rate because the homeowner has done more research before calling. Most contractors benefit from running both and measuring which source closes better in their specific market.

Do I need a separate contractor SEO strategy for each city I serve in Florida?

Yes, and this is one of the most common mistakes we see. A single service page that says 'We serve Tampa, Orlando, and Jacksonville' will not rank specifically for any of those cities. You need a dedicated city-service page for each market: one page for roof replacement Tampa, one for roof replacement Orlando, and so on. Each page needs locally-relevant content, not just a city name swapped into a template. Google's spam policies specifically target near-identical doorway pages that swap only the city name without real content differences.

Does contractor SEO work for HVAC, remodeling, or windows companies?

Contractor SEO works for any trade where homeowners search before they call, which is most of them. The architecture is the same: city-service pages, Google Business Profile optimization, schema markup, and content that matches purchase-intent queries. The specific keyword targets change by trade (HVAC installation vs. window replacement vs. bathroom remodel), and so does the schema type you implement. The underlying strategy is identical. We build programs for roofing, windows and doors, HVAC, and remodeling contractors using the same platform and page structure.

Ready to Build Contractor SEO That Actually Closes Jobs?

We run this same system on our own windows and roofing company. Our own site went from 600 to 1,300 organic clicks a month in 90 days after we fired our SEO agency. If you want to see the platform, the page architecture, and the reporting dashboard before you commit to anything, book a call. We'll tell you straight if SEO makes sense for your market right now.