H

seo leadgen

HVAC Schema Markup: The Types That Still Earn Results

Syed AliPublished 2026-08-17Updated 2026-08-1814 min read14 verified sources

HVAC schema markup earns two things: eligibility for a small set of rich results, and a machine-readable statement of who your business is. Google's structured data features gallery documents 25 rich-result features; a contractor site can realistically reach six of them. FAQ markup earns nothing after May 7, 2026, and review markup you control was never eligible.

"Schema" here means schema.org structured data — the JSON-LD block that describes your business to machines — not a database schema. It is one of the cheapest technical wins on an HVAC website and one of the most oversold: proposals still bill for FAQ markup Google switched off, for review stars a contractor site cannot earn, and for "AI schema" Google has said in writing it does not need. This page covers what to ship, what to delete, and how to check it. How the site around the markup gets built — rendering, speed, page structure — belongs to how we ship structured data on a new HVAC build.

01

Which schema types matter for HVAC sites?

Six rich-result features are realistically reachable for an HVAC contractor site, of the 25 that Google's structured data features gallery documents. That classification is ours, not Google's: Google publishes the feature list, we sorted it against what a residential and light-commercial HVAC company has pages for. The remaining 18 describe things a heating and cooling business does not publish — recipes, movies, datasets, vacation rentals, job postings, math solvers.

Google's framing of what markup buys you is deliberately narrow: "Google uses structured data to understand the content on the page and show that content in a richer appearance in search results, which is called a rich result."

TypeWhat it describesWhat it earnsVerdict for an HVAC site
HVACBusiness (a LocalBusiness subtype)The company: name, address, phone, hours, service areaEligibility for the Local business feature, which Google describes as "Business details displayed in the Google knowledge panel". Not the map pack — see the review section belowShip it. One block, on the homepage or a shared template
BreadcrumbListWhere a page sits in your site hierarchyBreadcrumb rich result showing the page's positionShip it. Cheap, automatic in most templates
ArticleBlog posts and guidesArticle rich result treatmentShip it on the blog only — not on service pages
OrganizationThe business entity itself, including logo and social profilesOrganization rich results and entity resolutionShip it if you are multi-location or want the logo tied to the brand
ImageObject (image metadata)Licence and creator data on your photosImage metadata treatment in Google ImagesOptional. Worth it if you publish real job photography
VideoObjectVideo content you host or embedVideo rich resultsOnly if you actually publish video
Review / AggregateRating on your own businessStar ratings about youNothing, when you control the reviewsDo not ship. See the policy trap below
ServiceIndividual services: AC repair, furnace installNo documented rich resultOptional description layer, not a results play
FAQPageQuestion-and-answer blocksNothing since May 7, 2026Stop paying for it

Two entries need naming precisely: they get sold hardest. Service markup is a legitimate schema.org type describing your offerings accurately — it is simply not in the feature gallery, so no rich result exists for it to earn. FAQPage is worse: the feature it targeted is gone.

The AI question sits underneath all of this, and Google answers it in writing: "Structured data isn't required for generative AI search, and there's no special schema.org markup you need to add. However, it's a good idea to continue using it as part of your overall SEO strategy, as it helps with being eligible for rich results on Google Search." Read both halves. No schema type gets an HVAC company into AI Overviews or ChatGPT answers, and no reason exists to strip markup out either. Ship it for the rich results and the entity clarity, not as an AI product.

02

HVACBusiness/LocalBusiness done right

HVACBusiness is a real schema.org type, defined as "A business that provides Heating, Ventilation and Air Conditioning services", sitting in the hierarchy Thing > Organization > LocalBusiness > HomeAndConstructionBusiness > HVACBusiness. Schema.org's own usage panel puts the type on "10K - 100K Domains", a figure it captions "Based on monthly aggregations from Google's web index." and stamps "(Google - July 2026)" — established enough to be safe, specific enough to be a signal most contractor sites still skip.

Be precise about the return, because this is where proposals inflate. Google's gallery entry for the Local business feature promises one thing: "Business details displayed in the Google knowledge panel, including open hours, ratings, directions, and actions to book appointments or order items." Google frames even that as being "eligible to appear in Local Business rich results", not guaranteed one. Neither page attributes a map-pack position to on-page markup. Google puts that surface somewhere else entirely: its Business Profile help says "You can use your Business Profile to improve your business's local ranking", and that local results are "mainly based on relevance, distance, and popularity". Your JSON-LD is not on that list.

Use it rather than plain LocalBusiness; Google's instruction is explicit: "Use the most specific LocalBusiness sub-type possible". The required-property bar is also far lower than agencies imply — Google's LocalBusiness reference requires exactly two properties, address and name. Everything else is recommended: geo, openingHoursSpecification, priceRange, telephone, url, department.

A complete, honest block for a single-location shop. Paste this inside a <script type="application/ld+json"> tag in your page head — JSON-LD is Google's recommended format:

{
  "@context": "https://schema.org",
  "@type": "HVACBusiness",
  "name": "Smith Heating & Air",
  "url": "https://example.com/",
  "telephone": "+1-303-555-0142",
  "priceRange": "$$",
  "image": "https://example.com/img/shop-front.jpg",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1420 W Colfax Ave",
    "addressLocality": "Denver",
    "addressRegion": "CO",
    "postalCode": "80204",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 39.7402,
    "longitude": -105.0233
  },
  "areaServed": [
    { "@type": "City", "name": "Denver" },
    { "@type": "City", "name": "Lakewood" },
    { "@type": "City", "name": "Wheat Ridge" }
  ],
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "07:00",
    "closes": "18:00"
  }]
}

Five rules decide whether that block helps or quietly does nothing:

  1. Every value must appear on the page. Google's guidelines say "Don't mark up content that is not visible to readers of the page". If the markup claims 7am–6pm and your footer says 8am–5pm, you have shipped a contradiction, not a signal.
  2. Match your Google Business Profile exactly. Same legal name, same street address, same phone. Markup that disagrees with your profile gives Google two versions of one business to reconcile — and the profile is the copy that feeds the map pack, so the profile fields your markup has to agree with are the ones to settle first.
  3. One block per business, not one per page. Repeat the same HVACBusiness block site-wide via your template, or place it once on the homepage. Twenty variants across twenty pages is twenty chances to drift out of sync.
  4. Combine types as an array, never with additionalType. Google states: "If you have multiple types, specify them as an array (additionalType isn't supported)." A company that genuinely belongs to two schema.org types — an HVAC business that also runs a parts counter, say — writes "@type": ["HVACBusiness", "Store"], not two competing blocks.
  5. Use areaServed for your service radius; do not invent addresses. A single shop that covers nine suburbs lists nine areaServed cities and one real address. Registering a virtual office per suburb to justify nine address blocks puts a real, staffed-location requirement on a listing you cannot staff — we do not do it, and no markup gain is worth gambling the profile.

Multi-location contractors use department to nest branches under one parent entity. Add BreadcrumbList alongside it — a breadcrumb trail "indicates the page's position in the site hierarchy" and needs only itemListElement, with item, name and position on each entry. Most contractor templates already hold that data.

03

The markup that no longer earns rich results

Three types are still being sold to HVAC contractors after the feature they targeted stopped appearing. Each has a dated, checkable paper trail.

MarkupStatusThe dated evidenceWhat to do
FAQPageEarns no rich resultRestricted to "well-known, authoritative government and health websites" on August 8, 2023; deprecated in Google's changelog in May 2026 with the note that the feature "will no longer appear in Google Search starting May 7, 2026"; documentation removed in June 2026Keep the FAQ section for readers. Stop paying for the markup
HowToEarns no listed featureLimited to desktop users only on August 8, 2023; absent from the current features galleryDo not add it to maintenance or install guides
ServiceNever had a rich resultNot among the 25 features in the features galleryOptional. Accurate description, zero SERP effect

Google's advice on stale markup comes from a named source. John Mueller, bylined on the post as "Search Advocate, Google Switzerland", wrote in the August 2023 announcement:

"While you can drop this structured data from your site, there's no need to proactively remove it. Structured data that's not being used does not cause problems for Search, but also has no visible effects in Google Search."

So the correct response to a site full of FAQPage blocks is not a cleanup project. It is a line-item review: a monthly charge for FAQ schema maintenance stopped buying anything on May 7, 2026, and the fix is a conversation, not a code change.

The same discipline applies to the newer wave of AI-flavoured markup claims. Google's AI-optimization guide states that "You don't need to create new machine readable files, AI text files, markup, or Markdown to appear in Google Search (including its generative AI capabilities), as Google Search itself doesn't use them" — the same section that dismisses content "chunking" and inauthentic mentions. The file version of that promise gets the same treatment in our breakdown of what a root-level AI text file really does; the schema version fails for the identical reason. A self-declared description is a claim, and engines that can read your pages directly do not need your claim about them.

04

Review markup: the policy trap

Review markup about your own HVAC company is ineligible for star ratings in Google Search — not risky, not borderline, ineligible. Google's review snippet guidelines state it plainly: "If the entity that's being reviewed controls the reviews about itself, their pages that use LocalBusiness or any other type of Organization structured data are ineligible for star review feature." That covers the standard contractor pattern exactly — a testimonials page, or a homepage widget pulling in your own Google reviews, wrapped in AggregateRating.

The stars an owner points at usually come from a different surface: the Google Business Profile that feeds "local results on Google Maps and Search", or a directory page about you, where the reviewed entity does not control the reviews. Markup on your own site cannot reproduce them.

Filling the gap with invented numbers runs into two further constraints.

Google's guidelines add a content rule on top of eligibility: "Don't include fake or undisclosed incentivized reviews on your page or in your structured data markup", covering both reviews not based on genuine experience and reviews written in exchange for a benefit without clear disclosure. Google logged that guidance addition in its July 2026 documentation updates.

The legal constraint is heavier. The FTC's final rule on consumer reviews, announced August 14, 2024 on a 5-0 Commission vote, addresses reviews and testimonials that misrepresent that they are by "someone who does not exist, such as AI-generated fake reviews, or who did not have actual experience with the business" — and, in the Commission's own words, will "allow the agency to seek civil penalties against knowing violators." The rule's other prohibited categories govern how reviews get collected rather than how they get marked up, so they sit with which review-collection tactics the rule puts off limits. What matters here is narrow: a hand-typed AggregateRating of 4.9 from 312 reviews that do not exist is not a schema error. It is a representation about your business, in machine-readable form, on a page you publish.

So the honest position on review markup for an HVAC site has three parts:

  1. Do not place AggregateRating about your own company in your own markup. It is ineligible, and if the numbers are not real it is a legal exposure with your name on it.
  2. Earn the stars where they render. Google's Business Profile help is direct about what moves them: "More reviews and positive ratings can help your business's local ranking." That is a review-collection workstream, described in how we run profile and reputation work month to month, not a markup task.
  3. Where reviews about someone else are genuinely the page's subject — you reviewing a piece of equipment, for instance — Review requires author, itemReviewed and reviewRating.ratingValue, and the rating must be real.
05

Validating and maintaining schema

Two validators answer different questions. Google's Rich Results Test checks whether a page is eligible for a Google rich result — Google's own documentation calls it "an easy and useful tool for validating your structured data, and in some cases, previewing a feature in Google Search." The Schema Markup Validator checks whether your JSON-LD is valid schema.org, including types Google has no feature for. Valid schema.org and Google-eligible are different results; a clean pass on one proves nothing about the other.

The maintenance loop is short enough to run yourself:

  1. Run the Rich Results Test on one page of each template — homepage, a service page, a blog post. Templates repeat, so three tests cover a whole site.
  2. Paste the same block into the Schema Markup Validator to catch schema.org errors Google's tool ignores because no feature depends on them.
  3. Check Search Console's rich result status reports after deployment. Google directs site owners there "to monitor the validity of your pages" — it reports what Google saw on the live site, which is the only report that matters.
  4. Re-test after any change to hours, phone, address or template. Markup drifts silently; nothing on the page turns red when the JSON-LD still says the old number.
  5. Read the Manual Actions report if a feature disappears. A structured-data manual action means a page "loses eligibility for appearance as a rich result; it doesn't affect how the page ranks in Google web search" — painful, but not the ranking catastrophe it gets described as.

Most broken markup on contractor sites fails one of two ways. The first is markup that no longer matches the page: a seasonal phone number, revised hours, a rebrand the template never propagated. Google's requirement is that structured data "must be a true representation of the page content", and stale is a form of untrue. The second is missing required properties — Google states that "Items that are missing required properties are not eligible for rich results", which for HVACBusiness means a block with no address earns nothing at all, however much else it contains.

Markup belongs in the site template, generated from one source of truth, so a phone-number change updates every page at once. Markup maintained by hand across pages will be wrong within a year — and unlike a broken layout, nobody notices.

FAQ

Frequently asked questions

Is schema markup still relevant for HVAC websites?

Yes, for a narrower reason than five years ago. Schema markup still earns eligibility for local business rich results, breadcrumbs and Article treatment, and still gives Google a clean statement of your name, address, phone and service area. What it no longer earns is FAQ dropdowns, HowTo panels or review stars on your own site.

What is an example of HVAC schema markup?

The HVACBusiness JSON-LD block in the section above is a complete, working example: type, name, url, telephone, priceRange, address, geo, areaServed and openingHoursSpecification. Google requires only address and name of those, so a minimum viable block is two properties plus the @context and @type lines.

How do I test my schema markup?

Run the page through Google's Rich Results Test for Google eligibility, then through the Schema Markup Validator for schema.org validity, then check Search Console's rich result status reports once the page is live. Test one page per template rather than every URL — the markup is generated from the same code.

Should I use HVACBusiness or LocalBusiness?

HVACBusiness, because Google instructs you to "Use the most specific LocalBusiness sub-type possible" and HVACBusiness inherits every LocalBusiness property anyway. HomeAndConstructionBusiness, its parent, is the right choice only for a genuinely multi-trade contractor — and if you also want a second trade named, declare both types in an array rather than swapping to the broader parent.

Do I need a paid schema generator for my HVAC site?

No. The block on this page is copy-and-editable and free generators exist. What no generator does is verify that the values are true, match your Google Business Profile, and appear on the page — which is the whole job. If your site runs on WordPress, your SEO plugin most likely already outputs LocalBusiness; check what it emits before adding a second, conflicting block.

Does schema markup get my HVAC company into AI answers?

No, and Google says so directly: "Structured data isn't required for generative AI search, and there's no special schema.org markup you need to add." Any proposal pricing "AI schema" as a visibility product is billing for a markup type Google has publicly stated it does not require. Keep shipping structured data for rich results and entity clarity — just not on that promise.

Will removing old FAQPage markup hurt my site?

No, and there is no rush. John Mueller's guidance was that unused structured data "does not cause problems for Search, but also has no visible effects." Leave it or remove it on your next template change. The only thing worth acting on today is any invoice still charging you to maintain it.

06

Where schema fits in the rest of the work

Schema markup is a small, finishable job near the bottom of the list of things that decide whether an HVAC site produces calls. A correct HVACBusiness block takes an afternoon and then stops needing attention. A site that loads fast, states its service area above the fold, and can be read by a crawler at all is a permanently larger lever — what actually makes a contractor site slow covers the performance half, and structured data is one line item inside the technical-SEO workstream inside an HVAC retainer.

Order the work accordingly: ship the markup because it is cheap and finished, not because it is powerful. Spend the remaining budget on the pages, the speed and the proof.

Want this working for your HVAC company?

Transparent pricing, month-to-month, and a plan built from your market's data — not a template.