What schema is and what it actually does
Schema markup is a small block of code on your website that tells Google, in a format it reads directly, exactly what your business is: your name, phone number, address, hours, and the towns you serve. Visitors never see it. Google does.
Without it, Google guesses. It scrapes your pages and tries to piece together whether the address in your footer is your shop or a job site, and whether the phone number there matches the one on your Google Business Profile. Schema removes the guessing.
Be honest with yourself about what it won't do. Schema is not a ranking rocket. It's plumbing. It makes your business information unambiguous to the machine deciding whether to show you for "furnace repair near me," and it makes you eligible for richer listings (hours shown right in the search result, for example). Google decides when to show those, but you can't get them without the markup.
Pick your business type
Schema has specific types for most trades, and using the specific one beats the generic one. These are exact machine values, so type them with this exact capitalization:
- Plumber
- Electrician
- HVACBusiness
- RoofingContractor
- GeneralContractor
- HousePainter
- Locksmith
- MovingCompany
Landscaping, pest control, or cleaning? There's no dedicated type for those. Use HomeAndConstructionBusiness for landscaping, and plain LocalBusiness for the rest. Generic and correct beats specific and wrong.
Gather your details first (10 minutes)
Do this before you touch any code, and pull everything from your Google Business Profile so the two match exactly. Open business.google.com, click Edit profile, and copy these out:
- Business name, character for character. If Google has "Badger Plumbing LLC," don't write "Badger Plumbing" in your schema.
- Street address, city, state, and zip.
- Phone number in one format. Pick (262) 555-0147 or 262-555-0147 and use that same format everywhere on your site.
- Your hours, day by day.
- Map coordinates: open Google Maps, right-click on your building, and click the coordinates at the top of the menu to copy them.
- Links to your Facebook or Instagram pages, if you have them.
Fill in this template
This is the whole thing. Copy it, swap in your details, and keep the quotes and commas exactly as they are. One missing comma breaks the block, so change only the values.
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Plumber", "name": "Badger Plumbing LLC", "url": "https://www.badgerplumbing.com", "telephone": "(262) 555-0147", "image": "https://www.badgerplumbing.com/photos/truck.jpg", "priceRange": "$$", "address": { "@type": "PostalAddress", "streetAddress": "123 W Main St", "addressLocality": "Waukesha", "addressRegion": "WI", "postalCode": "53186", "addressCountry": "US" }, "geo": { "@type": "GeoCoordinates", "latitude": 43.0117, "longitude": -88.2315 }, "openingHoursSpecification": [{ "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "opens": "07:00", "closes": "17:00" }], "areaServed": ["Waukesha", "Pewaukee", "Brookfield", "Delafield"], "sameAs": [ "https://www.facebook.com/badgerplumbing" ] } </script>
A few notes on the fields. The image link should point to a real photo already on your site (your truck, your storefront). priceRange is loose, "$$" means mid-priced, "$$$" means premium. Hours use 24-hour time, so 5pm is "17:00". areaServed is your list of towns, and it's fine to list eight or ten. If you're closed weekends, just leave Saturday and Sunday out.
Put it on your site
The block goes in the head section of your homepage. Every website platform has a spot for this:
- WordPress: install the free WPCode plugin (Plugins > Add New Plugin, search "WPCode"). Then go to Code Snippets > Header & Footer and paste the whole block into the Header box. Save. Alternative: the free Rank Math SEO plugin has a Local SEO module that builds this markup from a settings form, no code needed.
- Wix: open your site editor, go to Pages, click the three dots next to your homepage, choose SEO basics, open the Advanced SEO tab, and paste the block (without the script tags) under Structured data markup.
- Squarespace: Settings > Advanced > Code Injection, paste the full block into the Header field. This needs the Business plan or higher.
- Someone else built your site: email them the finished block and say "add this JSON-LD to the head of the homepage." It's a five minute job for them.
Put it on the homepage once. Don't paste the same block on every page, and if you later build separate pages for each town you serve, those pages can carry their own version. One block per page, max.
Test it, then keep it in sync
Go to search.google.com/test/rich-results, paste your homepage address, and run the test. It fetches your live page and tells you whether Google can read the markup. Warnings about optional fields are fine to leave. Errors are not, and the most common ones are a missing comma, a missing quote, or a field name you accidentally changed. For a stricter second opinion, validator.schema.org checks the same code against the full standard.
From here on, the job is consistency. When your hours change, change them in three places: your website footer, your Google Business Profile (Edit profile > Hours), and this schema block. When Google sees the same name, address, and phone everywhere, it can connect your website to your profile with confidence, and mismatches are one of the quiet reasons a business slips in local results. Put a note in your phone to recheck all three spots twice a year.