Series: Getting Cited by AI — Post #8 (niche deep-dive: local trades — roofing, plumbing, HVAC, electrical). #1: Get Cited by ChatGPT → · #2: Why AI Recommends Your Competitor → · #3: Copy-Paste Schema Templates → · #4: Is Your Site Blocking AI Crawlers? → · #5: Reviews & AggregateRating → · #6: Med Spas → · #7: Real Estate →
A homeowner with a leak opens ChatGPT or Perplexity and types: "who's a good roofer near [city] for storm damage?" or "emergency plumber in [neighborhood] open now?" The assistant names two or three companies, links one, and the homeowner calls it. If you're not on that short list, it's usually not because your work is worse — it's because the model couldn't confidently read what you do, where you do it, and whether you're trustworthy from your site.
This post applies the general series (#1–#5) specifically to the trades, because roofing, plumbing, HVAC, and electrical sites share three quirks that make them especially invisible to AI: a homepage that's a phone number and a hero image, no plain-text list of services and service area, and zero answer-shaped content for the urgent questions homeowners actually type.
Honest caveat first: doing everything below does not guarantee a citation, and there's no fixed timeline for when assistants pick changes up. What it does is remove the specific, fixable reasons a contractor gets skipped. No rankings, leads, or call volume are promised here — only that the machine can finally read what you do and where.
The three reasons trades sites go invisible
1. The homepage is a hero image and a "Call Now" button — not readable content.
A lot of contractor sites lead with a full-bleed photo, a logo, and a giant phone number. That converts a human who already found you, but to a crawler it's an image and a tel: link. Your services, your trades, your towns, your license number, your hours — the facts an AI needs to recommend you — live in the photo or aren't on the page at all. The model lands, finds nothing quotable, and moves on to a competitor whose homepage spells it out in text.
2. Services and service area aren't in plain text.
"Quality work you can trust" tells a machine nothing. Answer engines cite specifics: which trades (roof repair, re-roof, gutters / drain cleaning, water heaters, repipe / AC install, furnace repair), which towns / postcodes / service areas, emergency vs. scheduled, residential vs. commercial, licensed/insured/bonded. If those aren't in plain text a crawler can read, the model can't match you to "emergency roofer in [town]" — so it picks whoever did list it.
3. There's nothing answer-shaped.
Homeowners ask machines very specific things — "how much does a roof replacement cost in [area]," "how long does a water heater install take," "do you charge for estimates," "signs I need a new boiler/furnace." If your site never answers those in plain text, the AI grabs the answer (and the citation) from a national aggregator (Angi, Checkatrade, hipages, and the like) or the competitor who wrote a real FAQ.
None of these are ranking problems. They're readability problems — and readability is fixable in an afternoon, usually without touching your design.
The 10-minute trades visibility check
Run this on your own site before changing anything:
- View source on your homepage and search (Ctrl+F) for your trade and your towns — the actual words "roof repair" / "drain cleaning" / "AC install" and your city / area names. If they only live in the hero image or aren't there at all, a crawler can't see them.
- Read your site as a machine would. Is there a plain-text list of services and the towns you cover? Or just a photo gallery and a contact form?
- Search your site for a real homeowner question — "cost," "estimate," "how long," "emergency." Any plain-text answers? Or only a "Request a Quote" button?
- Check your trust facts. Are your license number, "licensed & insured," years in business, and reviews in text on the page — or buried in an image or pulled silently from Google? (See #5.)
- Confirm crawlers aren't blocked. A quick robots.txt / meta-robots check (see #4) — some site builders and security plugins quietly block AI crawlers.
If you failed 2 or more, that's why you're not in the AI's short list — and it's all fixable text, not a rebuild.
The priority fixes (in order)
Fix #1 — Put your services and service area in plain text on the homepage. A short, scannable block a machine can quote:
"[Company] provides [roof repair, re-roofing, and gutter installation] for homeowners in [Town A, Town B, Town C] since [year]. Licensed & insured ([license #]). Free estimates. Emergency service available."
Specifics beat slogans every time.
Fix #2 — Add a plain-text FAQ answering the 5 questions homeowners actually ask. Do you charge for estimates, typical cost range for your most common job, how long it takes, emergency availability, and warranty. Two or three honest sentences each, in text — not a downloadable PDF, not an image.
Fix #3 — Add the right LocalBusiness subtype schema (RoofingContractor, Plumber, HVACBusiness, or Electrician) so the machine can label what you do and where (template below).
Fix #4 — Surface reviews as on-page text with AggregateRating, not just a Google badge or a screenshot (#5).
Fix #5 — Make sure crawlers can reach it all (#4).
Do #1 and #2 even if you do nothing else. Most contractor sites have neither, so plain services + service area + a real FAQ is often the single biggest readability win.
Copy-paste schema for a trades business
Fill every bracket with verified values from your own site. Pick the @type that matches your trade — RoofingContractor, Plumber, HVACBusiness, or Electrician. Delete any field you can't confirm — never ship a placeholder or an invented number.
{
"@context": "https://schema.org",
"@type": "RoofingContractor",
"name": "[Company Name]",
"image": "[https://yoursite.com/photo.jpg]",
"url": "[https://yoursite.com]",
"telephone": "[+1-555-555-5555]",
"email": "[you@yoursite.com]",
"address": {
"@type": "PostalAddress",
"streetAddress": "[Street]",
"addressLocality": "[City]",
"addressRegion": "[Region/State/Province]",
"postalCode": "[Postcode/ZIP]",
"addressCountry": "[your ISO country code, e.g. GB/AU/CA/SG/IN]"
},
"areaServed": ["[Town 1]", "[Town 2]", "[Town 3]"],
"openingHours": "[Mo-Fr 08:00-17:00]",
"priceRange": "[$$]",
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Services",
"itemListElement": [
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "[Roof Repair]" } },
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "[Roof Replacement]" } },
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "[Gutter Installation]" } }
]
}
}
And a FAQPage block for the homeowner questions (answers in plain text, kept truthful and current):
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Do you charge for estimates?",
"acceptedAnswer": { "@type": "Answer", "text": "[Honest answer for your business.]" }
},
{
"@type": "Question",
"name": "How long does a [roof replacement] take?",
"acceptedAnswer": { "@type": "Answer", "text": "[Typical timeline, honestly stated.]" }
}
]
}
Compliance note: the trades are licensed and regulated. Keep claims truthful, only state "licensed & insured" and a licence/registration number that are real and current, follow your local contractor licensing and advertising rules, and don't promise prices or outcomes you can't substantiate. Schema describes what's already true on the page — it is not a place to inflate anything.
What this is and isn't
This removes the readability reasons an AI skips your trades site. It does not guarantee you'll be cited, doesn't promise leads or call volume or a timeline, and won't outweigh a genuinely thin reputation. But most contractor sites fail the basics — services and towns in text, a real FAQ, honest trust facts, and clean schema — so fixing them is often the difference between "the model couldn't read me" and "the model can finally recommend me for the job I actually do."
Two ways to act on this:
🔎 Free, no-strings: send your site URL to faithpath25@gmail.com with the subject "GEO snapshot" — I'll send back a 1-page read of exactly what AI assistants can and can't currently see on your site, plus the specific fixes. Free pilot, wherever you operate; if it's useful, a short review is all I ask.
🧰 Do it yourself: the copy-paste schema kits, checklists, and the full GEO audit live at SprintLanding → (includes a free starter). Prices in USD; Gumroad converts to your local currency at checkout.
Top comments (0)