Skip to content
SEO & Growth

Schema Structured Data: Why 6 HVAC Types Rank 2026

Sep 7, 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

  1. LocalBusiness / HVACBusiness / Plumber@type that matches what you are.

  2. PostalAddress — the same suite spelling as GBP.

  3. OpeningHoursSpecification — real hours, including Saturday exceptions.

  4. Service — furnace repair as a service, not a keyword dump.

  5. FAQPage — only questions visible on that URL.

  6. 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

CriterionWeightWhy it mattersFail if
Visible-fact validation25%Google forbids invisible markupPlugin emits 24/7 by default
Public $20%A 20-URL shop should not need enterpriseQuote-only
JSON-LD preview15%Owners need to see hoursBlack-box
Crawl / validate at scale15%18 service URLs driftOne-URL tester only
GBP / NAP alignment15%Hours must match the profileSchema-only
Export / ticket10%Failures need ownersNo report

Weights sum to 100%.

Dated prices

SKUVendorPublic $ (retrieved 2026-09-07)Schema job
SEO Spider paidScreaming Frog£199 / yearStructured data validation
SEO Spider freeScreaming Frog$0500 URL cap; validation on paid
Surfer StandardSurfer$99/mo yearlyContent, not schema
Schema AppSchema Appcontact vendorGraph CMS
Merkle generatorMerkle$0 (tool)One-page helper
Google Rich Results TestGoogle$0One URL
Yoast / Rank MathWordPress pluginsbundled / freemiumLocalBusiness blocks
BrightLocal Citation BuilderBrightLocal$2 / citation startingNAP source, not JSON-LD
Ticket layerUSTA softwarecontact vendorVisible-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

MetricValueYear
Rotten Tomatoes pages in Google case100,000Google structured-data intro
CTR lift in that case25%Google intro
Frog paid£199/yr2026-09-07
Frog free cap500 URLs2026-09-07
Surfer Standard$99/mo yearly2026-09-07
Citation floor$22026-09-07
'7 Best' earn rate25.5%2026-08-24
Neutral trades default1012,514 pages

Feature matrix

FieldFrogGoogle RRTYoast / Rank MathSchema AppMerkle toolSurferBrightLocal
Public $ fetched£199/yr$0bundledcontact vendor$0$99 Standard$2 citations
Site-wide validationYes (paid)No (one URL)Per pageYesNoNoNo
Google rich-result checksYes (paid)YesPartialcontact vendorPreviewNoNo
Visible-fact gateNoNoNoNoNoNoNo
LocalBusiness blocksExtractTestYesYesYesNoNo
URL cap free500unlimited testsn/an/an/a120 on Discoveryn/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 @type graphs.

  • 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

Garrett Mullins
Garrett Mullins
Workflow Specialist

Helping businesses leverage automation for operational efficiency.