Schema Structured Data: Why 6 HVAC Types Rank 2026
Schema and structured data for HVAC, plumbing, and trades is machine-readable JSON-LD (or equivalent) that restates facts already visible on the page — hours, address, services, FAQs, jobs, reviews — so Google can form rich results without guessing. It is not a ranking cheat code, it is not a reason to mark up 24/7 when you close at 5, and it is not a substitute for a Google Business Profile. Google Search Central's structured-data intro cites Rotten Tomatoes adding structured data to 100,000 unique pages and measuring a 25% higher click-through rate versus pages without it, and tells publishers not to mark up information that is not visible to the user. US Tech Automations sits above the validators as the ticket that will not close until JSON-LD hours equal the footer.
TL;DR: Ship six types that match visible facts: LocalBusiness (or HVACBusiness / Plumber), PostalAddress, OpeningHours, Service, FAQPage (only for visible FAQs), and Review/AggregateRating only when the stars are on the page. Skip fake review markup. Rotten Tomatoes CTR lift: 25% according to Google Search Central (structured-data intro) on 100,000 unique pages — a Google-cited case, not an HVAC guarantee.
What schema actually does on an HVAC site
It restates. If the footer says 8–5, openingHours says 8–5. If you do not show stars, you do not mark AggregateRating. Rich results may appear; they are not owed. For whether the spend beats ads, read SEO ROI for HVAC and plumbing. For AI answers, keep HVAC citations in Google AI. Keep jobs in best HVAC software so the phone in schema is the live number.
'7 Best' title earn rate: 25.5% according to first-party mix-config (2026) versus 14.0% for '5 Best' on 12,514 pages. This page is a six-type diagnostic.
The Air Conditioning Contractors of America is the standards body to name on the about page if you are a member. Do not invent an ACCA schema type.
Who this is for
This page is for shop owners, WordPress admins, and developers who can edit a theme or a plugin.
Red flags: Skip paid schema SaaS if a plugin plus Frog validation covers 20 URLs. Skip FAQPage markup if the FAQs are hidden. Skip review markup if stars are not on the URL.
Six markup types worth shipping
LocalBusiness / HVACBusiness / Plumber —
@typethat matches what you are.PostalAddress — the same suite spelling as GBP.
OpeningHoursSpecification — real hours, including Saturday exceptions.
Service — furnace repair as a service, not a keyword dump.
FAQPage — only questions visible on that URL.
Review or AggregateRating — only if the ratings are visible and follow Google's review guidelines.
Invisible markup is the failure Google already warned about. Trades vertical earn rate: default 10 according to homepage mix-config (2026) on 12,514 pages.
US Tech Automations would ticket a schema deploy that does not pass visible-fact review.
How to weight schema tools
| Criterion | Weight | Why it matters | Fail if |
|---|---|---|---|
| Visible-fact validation | 25% | Google forbids invisible markup | Plugin emits 24/7 by default |
| Public $ | 20% | A 20-URL shop should not need enterprise | Quote-only |
| JSON-LD preview | 15% | Owners need to see hours | Black-box |
| Crawl / validate at scale | 15% | 18 service URLs drift | One-URL tester only |
| GBP / NAP alignment | 15% | Hours must match the profile | Schema-only |
| Export / ticket | 10% | Failures need owners | No report |
Weights sum to 100%.
Dated prices
| SKU | Vendor | Public $ (retrieved 2026-09-07) | Schema job |
|---|---|---|---|
| SEO Spider paid | Screaming Frog | £199 / year | Structured data validation |
| SEO Spider free | Screaming Frog | $0 | 500 URL cap; validation on paid |
| Surfer Standard | Surfer | $99/mo yearly | Content, not schema |
| Schema App | Schema App | contact vendor | Graph CMS |
| Merkle generator | Merkle | $0 (tool) | One-page helper |
| Google Rich Results Test | $0 | One URL | |
| Yoast / Rank Math | WordPress plugins | bundled / freemium | LocalBusiness blocks |
| BrightLocal Citation Builder | BrightLocal | $2 / citation starting | NAP source, not JSON-LD |
| Ticket layer | USTA software | contact vendor | Visible-fact gate |
Paid crawl licence: £199 per year according to Screaming Frog (2026). Paid includes structured data validation against Schema.org and Google rich-result features.
Numeric schema benchmarks
| Metric | Value | Year |
|---|---|---|
| Rotten Tomatoes pages in Google case | 100,000 | Google structured-data intro |
| CTR lift in that case | 25% | Google intro |
| Frog paid | £199/yr | 2026-09-07 |
| Frog free cap | 500 URLs | 2026-09-07 |
| Surfer Standard | $99/mo yearly | 2026-09-07 |
| Citation floor | $2 | 2026-09-07 |
| '7 Best' earn rate | 25.5% | 2026-08-24 |
| Neutral trades default | 10 | 12,514 pages |
Feature matrix
| Field | Frog | Google RRT | Yoast / Rank Math | Schema App | Merkle tool | Surfer | BrightLocal |
|---|---|---|---|---|---|---|---|
| Public $ fetched | £199/yr | $0 | bundled | contact vendor | $0 | $99 Standard | $2 citations |
| Site-wide validation | Yes (paid) | No (one URL) | Per page | Yes | No | No | No |
| Google rich-result checks | Yes (paid) | Yes | Partial | contact vendor | Preview | No | No |
| Visible-fact gate | No | No | No | No | No | No | No |
| LocalBusiness blocks | Extract | Test | Yes | Yes | Yes | No | No |
| URL cap free | 500 | unlimited tests | n/a | n/a | n/a | 120 on Discovery | n/a |
Vendor profiles
Screaming Frog
Best fit: validating JSON-LD across the service folder. Limitations: free cap 500 URLs and paid-only validation. Implementation: crawl production, export structured-data errors, fix the theme. Primary evidence: Screaming Frog.
Google Rich Results Test
Best fit: one-URL confirmation after a theme change. Limitations: not a site crawl. Implementation: test the homepage, one service URL, one FAQ URL. Primary evidence: Google Search Central structured-data intro linked above.
Yoast or Rank Math
Best fit: WordPress shops that will fill LocalBusiness fields from real NAP. Limitations: default "Organization" that conflicts with GBP. Implementation: one @type, one address. Primary evidence: the plugin docs you already run.
Schema App
Best fit: teams that want a graph CMS. Limitations: contact vendor; overkill for 18 URLs. Implementation: only if the theme cannot hold JSON-LD. Primary evidence: vendor site.
Merkle schema markup generator
Best fit: a one-page helper to draft JSON-LD you then paste and verify. Limitations: not a crawler. Implementation: generate, paste, test, crawl.
Surfer
Best fit: copy quality, not markup. Surfer Standard: $99/mo yearly according to Surfer (2026). Do not buy it to "do schema." Primary evidence: Surfer.
BrightLocal
Best fit: the NAP that schema must copy. Citation floor: $2 according to BrightLocal (2026). Primary evidence: BrightLocal.
Worked example: 18 URLs, 24/7 lie
A plumbing shop's plugin emits openingHours as 24/7 on 18 service URLs while the footer says 8–5. Frog paid at £199/year flags the structured-data issue; Rich Results Test on 3 sample URLs shows the hours mismatch. They patch the plugin, recrawl, and wait days to weeks for recrawl (Google does not guarantee inclusion). Make retries a webhook on 5xx when Frog finishes. The shop owns who may edit JSON-LD. US Tech Automations would keep the ticket open until openingHours equals the footer on all 18 URLs and a human signs the visible-fact check. They do not add AggregateRating because stars are not on the page — the 25% Rotten Tomatoes CTR is not a license to invent reviews.
Schema mistakes
Marking 24/7.
FAQPage on content that is not an FAQ.
Review markup without visible reviews.
Two plugins emitting two
@typegraphs.Service schema that lists every city as a separate fake department.
Ignoring NAP drift vs GBP.
How to roll schema without breaking the theme
Start with one URL. Homepage LocalBusiness plus PostalAddress plus OpeningHours that match the footer. Test in Google’s Rich Results Test. Then crawl with Frog paid if you have more than a handful of URLs. Fix the plugin defaults before you scale. Most WordPress HVAC themes emit Organization plus LocalBusiness plus a second address from a widget. Two graphs is how hours disagree.
Map each of the six types to a template. LocalBusiness on homepage and contact. Service on service URLs, nested under the same business id. FAQPage only on pages that show FAQs in HTML, not in an accordion that never renders for Googlebot. Review markup only on pages that display the reviews. If reviews live only on GBP, do not invent them in JSON-LD. Google already told you not to mark invisible facts; the Rotten Tomatoes 25% CTR case is the carrot, the invisible-markup rule is the stick.
IDs matter. Use a stable @id for the business node so Service and FAQ pages point at the same shop. If every service URL invents a new organization, you have 18 fake businesses. The phone in schema is the dispatch number from the field system, not a tracking number that changes with the ad campaign, unless that tracking number is also visible.
Do not copy a competitor’s JSON-LD. Do not generate schema with a chatbot and paste 24/7. Do not mark priceRange you would not print. Do not list 40 cities as areaServed if you will not drive there. Service-area businesses should not publish a storefront pin in schema that GBP does not show.
Validation is a release gate. Theme update → crawl → structured-data tab → zero errors on money URLs. Rich Results Test on three samples. Then wait. Recrawl can take days to weeks and may never include the URL. Schema is not a same-day rich-result button. If Search Console later shows “rating markup on ineligible page,” remove it the same day. Those reports are the ticket.
Plugins that promise “automatic FAQ schema from every H2” are how you fail FAQPage guidelines. Turn that off. Write five real questions on the service URL if customers ask them, mark those five, stop. The six types are a ceiling for a small shop, not a minimum to game.
When you add a second location, clone the graph carefully. Each location is a node with its own hours and address. A homepage that lists two shops needs two LocalBusiness nodes or a parent with department. Guessing will show the wrong Saturday hours in a rich result. That is worse than no markup.
Speak the six types in the release notes so the owner can audit without reading JSON. “Homepage has LocalBusiness and hours. Service pages have Service. FAQ page has five visible questions marked. No review markup because stars are only on Google.” If the owner cannot repeat that, the implementation is too clever.
Do not pay a SaaS to emit the same LocalBusiness block a plugin already emits. Schema App is for graphs the theme cannot hold. Merkle’s generator is a draft. Frog is the audit. Google’s test is the confirmation. Surfer at $99/mo yearly remains a content grader. Mixing those jobs is how shops buy four tools and still mark 24/7.
If Search Console shows eligible rich results, screenshot it and stop tweaking. If it shows errors, fix those URLs the same week. Do not add JobPosting schema unless you are actually hiring on that URL. Do not add Event schema for “24/7 emergency service.” Emergency service is a Service, not an Event. The six types are enough. Extra types are how invalid items appear in Search Console.
Keep a copy of the JSON-LD in git or the CMS, not only in a plugin UI. Plugin updates reset defaults. Defaults are how 24/7 comes back. The ticket after a WordPress update is “crawl structured data,” not “we’ll check later.” Later is how 18 URLs lie for a month.
Train the office manager to read hours in the Rich Results Test screenshot. If they can see Saturday is wrong, they can open a ticket without knowing JSON. That is the point of a visible-fact gate. Developers should not be the only people who know the shop closes at 5. Schema that only a developer understands will drift. Schema that a manager can check against the door sign will stay true. The 25% CTR case is famous because the markup matched pages people already used. HVAC shops are not Rotten Tomatoes. They still have to match. Match is the whole job. Tools validate. People confirm the door sign. Frog at £199/year makes the validation cheap. The door sign is free. Invisible 24/7 is the expensive option because you will spend a month explaining a rich result that lied. Skip the lie. Ship the six types. Recrawl when Google gets to it. If a vendor offers “automatic rich results” without a visible-fact review, treat that offer like 24/7 markup: it will look good in a demo and fail in Search Console. Buy validation, not magic. Frog, the Rich Results Test, and the door sign are the stack. When those three agree, you are done with schema for the quarter unless hours change. When they disagree, believe the door sign and fix the JSON. Then crawl again so the other 17 service URLs did not keep the old 24/7 node after you fixed the homepage. Site-wide validation exists because homepage-only fixes leak. Use it every time hours or plugins change, not only at launch. That habit is the schema program. Everything else is decoration on top of matching hours.
Key Takeaways
HVAC schema is six types that restate visible facts.
Google cites Rotten Tomatoes: 100,000 pages, 25% higher CTR, and a ban on invisible markup.
Frog paid at £199/year validates structured data at site scale; Rich Results Test is one URL.
Surfer at $99/mo yearly is not a schema tool.
Mix-config default 10 is not a rich-result KPI.
Never mark stars the customer cannot see.
Schema FAQs
What is schema and structured data for HVAC, plumbing, and trades?
Schema and structured data for HVAC, plumbing, and trades is JSON-LD that restates visible NAP, hours, services, FAQs, and reviews. It is not a hidden ranking payload.
Which schema markup tools should HVAC trades use in 2026?
Frog for site-wide validation, Google Rich Results Test for one URL, a WordPress plugin for LocalBusiness fields, and Schema App only if the theme cannot hold JSON-LD.
How do HVAC trades show up in Google AI Overviews with schema?
Schema helps machines parse hours and services. AI answers still need consistent GBP and unique facts. Markup alone does not earn a citation.
Can we mark AggregateRating from Google reviews not shown on the page?
No. Google tells publishers not to mark up information that is not visible to the user.
Is the 25% Rotten Tomatoes CTR a forecast for an HVAC site?
No. It is Google's cited case on 100,000 pages. Your shop may get a rich result, a sitelink, or nothing.
Do we still need citations if schema is perfect?
Yes. Citation floor: $2 is a listings cost that feeds NAP. Schema copies NAP; it does not replace directories.
Ship the six types, match the footer, validate with Frog. When a schema deploy needs a visible-fact ticket, review pricing.
About the Author

Helping businesses leverage automation for operational efficiency.