Schema.org
for tradespeople:
step by step.
Schema.org is one of the biggest SEO levers that hardly anyone uses. This tutorial shows you how to add LocalBusiness, Service, FAQ and Review schema to your site — with copy-paste code that works right away.
// What is Schema.org
// LocalBusiness Setup
// Service + FAQ Schema
// Testing with Google
Was ist Schema.org?
Schema.org is a vocabulary that Google, Bing and other search engines developed together to describe content on websites in a structured way. Instead of the search engine having to guess what's on your page, you tell it directly: "Here is a master electrician firm in Wiesbaden with these opening hours, this address, these services."
In concrete terms: you add a JSON-LD block to your page that describes the meta information in a machine-readable way. Users see none of it — the search engines see everything.
The effect: rich snippets in the search results (star ratings, opening hours, prices visible directly in Google), better local rankings, better visibility in voice search ("Hey Google, which electrician is open now?") and — brand new — better findability in AI search engines like ChatGPT and Perplexity.
Step 1 — LocalBusiness schema.
The most important schema for local trades businesses. It tells Google everything relevant for local SEO: name, address, phone (NAP), opening hours, business category, geo coordinates.
Copy this code into the <head> section of your homepage and adjust the values:
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Electrician", "name": "Elektro Vogel GmbH", "image": "https://elektro-vogel.de/logo.png", "@id": "https://elektro-vogel.de", "url": "https://elektro-vogel.de", "telephone": "+49 611 1234567", "priceRange": "$$", "address": { "@type": "PostalAddress", "streetAddress": "Musterstraße 12", "addressLocality": "Wiesbaden", "postalCode": "65183", "addressCountry": "DE" }, "geo": { "@type": "GeoCoordinates", "latitude": 50.0826, "longitude": 8.2400 }, "openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "07:00", "closes": "17:00" } ], "sameAs": [ "https://www.facebook.com/elektrovogel", "https://www.instagram.com/elektrovogel" ] } </script>
Important: Instead of "Electrician" you can use types appropriate to your trade: Plumber, Roofer, HVACBusiness, Locksmith, GeneralContractor. Or simply LocalBusiness as the parent category.
Step 2 — Service schema.
Every service page (e.g. "Electrical installation", "Photovoltaics", "EV charging point") should have a Service schema. It makes your offers machine-readable for Google and AIs — and can generate rich snippets with prices.
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Service", "serviceType": "EV charging point installation", "provider": { "@type": "Electrician", "name": "Elektro Vogel GmbH" }, "areaServed": { "@type": "City", "name": "Wiesbaden" }, "hasOfferCatalog": { "@type": "OfferCatalog", "name": "Charging stations for electric cars", "itemListElement": [ { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Wallbox 11kW installation" }, "priceSpecification": { "@type": "PriceSpecification", "price": "1590", "priceCurrency": "EUR" } } ] } } </script>
A separate schema for each service page. Sounds like effort, but makes a huge difference to local visibility.
Step 3 — FAQ schema.
If you have FAQ sections on your page (which you should — see our GEO article), you can mark them up with FAQ schema. Effect: Google shows the answers directly in the search results as an expandable panel.
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "What does a wallbox installation cost?", "acceptedAnswer": { "@type": "Answer", "text": "A standard 11 kW wallbox including installation in Wiesbaden costs between 1,290 and 1,890 euros. Depending on the distance to the meter box and the cabling effort." } }, { "@type": "Question", "name": "Are there subsidies for wallboxes?", "acceptedAnswer": { "@type": "Answer", "text": "There's currently no nationwide KfW subsidy any more, but some municipal utilities in Hessen subsidise private wallboxes with 300 to 500 euros. We check this in advance for every customer." } } ] } </script>
Important: The questions and answers must also appear visibly on the page — not just in the schema. Otherwise Google counts it as spam.
Step 4 — Review schema.
If you show customer reviews on the page (e.g. testimonials), you can mark them up with Review or AggregateRating schema. This produces the yellow stars in the search results.
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Electrician", "name": "Elektro Vogel GmbH", "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.9", "reviewCount": "47" } } </script>
Caution: Since 2019 Google no longer shows AggregateRating for self-reported reviews. You have to reference real, verified reviews — ideally those from your Google Business Profile. That's technically possible, but takes effort.
Step 5 — test the schema.
After adding it: test, test, test. There are two official Google tools for it:
1. Rich Results Test
URL: search.google.com/test/rich-results
Shows you whether your schema data is recognised correctly and whether it can trigger rich snippets. This is the most important test before deployment.
2. Schema Markup Validator
URL: validator.schema.org
Shows syntax and structure errors in the schema. Important for complex setups with nested objects.
3. Google Search Console
After deployment: in Search Console under "Enhancements", monitor the individual schema types. There you see which pages were indexed successfully and where errors occur.
The 5 most common mistakes.
- Schema data that isn't in the visible content: if you have a question in the FAQ schema that isn't visible anywhere on the page, Google counts it as spam and removes the schema entirely.
- Wrong types: "Organization" instead of "LocalBusiness" for a business, "Product" instead of "Service" for services. Google only ranks correctly typed schemas.
- Outdated info: old phone numbers, wrong opening hours, un-updated addresses. Schema data has to be maintained just like your website text.
- NAP inconsistency: name/address/phone must be identical to the Google Business Profile and other directories. "GmbH" vs. "G.m.b.H." can already cause problems.
- Not tested: adding schema without the Rich Results Test is like deploying code without a build. If it breaks, you're invisible — and you only notice weeks later in the rankings.
What comes next.
Once you've implemented the basic setup (LocalBusiness + Service + FAQ), there are advanced schemas that make sense depending on the use case:
- BreadcrumbList — for the navigation paths in Google
- HowTo — for how-to articles (e.g. "How to change a fuse")
- Event — for open days, trade-fair appearances
- Article — for your blog articles
- Person — for author pages, important for E-E-A-T
- VideoObject — if you embed videos
Every additional schema is another lever for better visibility. To start with, though, the basic setup is enough — that alone brings most businesses 20 to 40% more clicks from the Google search results.
Schema.org is invisible SEO.
Your user sees none of it. But Google, Bing, ChatGPT and Claude see everything. And whoever works cleanly here has a real edge over competitors who ignore the topic.
For a typical trades business (homepage + 5 service pages + FAQ), adding it takes about 4 to 8 hours. The effect lasts years. It's one of the best SEO investments you can make.
If you don't want to or can't do it yourself: we implement Schema.org by default in all our web projects — with Premium packages even fully including E-E-A-T, breadcrumbs and Review integration.