SEO Freelancer Guru

Free local business schema generator

Build LocalBusiness JSON-LD with your address, hours and phone. No signup.
  • No signup
  • Free
  • Results in ~5 seconds

Opening hours

Profile links

Missing required fields

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "address": {
    "@type": "PostalAddress"
  }
}
</script>

In Rank Math or Yoast, open the schema or custom code box and paste this. Or use WPCode to add a header snippet on that page only.

Schema makes you eligible for rich results. It does not guarantee them.

Self-serving reviews on LocalBusiness or Organization are not eligible for review stars. Only mark up reviews that are visible on the page.

Want schema across the whole site, with an @graph and entity links? That is part of my technical SEO service.

Embed: <iframe src="https://seofreelancerguru.com/tools/schema-markup-generator/embed/" width="360" height="720" title="Schema generator by Saad Tanvir"></iframe>

Want this sent to you?

LocalBusiness schema names the business, the place, and the hours in a form Google and other machines already understand. For a trade, I want one clear entity per location page, tied to the same details as the Google Business Profile.

LocalBusiness schema for trades

Use a subtype when one exists. A plumber should be a Plumber, a dentist a Dentist, an HVAC company an HVACBusiness. The generator lists subtypes so you are not stuck on the generic LocalBusiness type. The generic type is fine when nothing more specific fits.

Fill the name exactly as it appears on the site and on the profile. Fill the phone in the international format you actually answer. Fill the address you can receive post at, or the service area if you do not see customers at that address. A service-area business should not invent a shopfront.

Hours should match the hours on the page and on the profile. If you are closed on Sunday, say so. A schema that claims 24 hours while the page says weekdays is a contradiction, and contradictions are what get repeated wrongly.

One LocalBusiness per location page

If you have one town, put one LocalBusiness on the location page or the homepage, not both with different details. If you have several towns, give each location page its own LocalBusiness, its own address or area, and its own @id. The homepage can point at the parent Organization.

Do not list every town you will travel to as a separate LocalBusiness with the same address. That reads as a pile of fake branches. Mention the area served in areaServed, and keep a real page only for places where you have something specific to say.

sameAs is the list of profiles that are really you: the Google profile, Facebook, LinkedIn, a directory you control. Leave out anything you do not recognise. Those links are how a model decides that two pages are the same business.

Linking the markup to your Google Business Profile

The profile and the schema should tell one story. Same name, same phone, same primary category as far as the subtype allows, same hours. The website field on the profile should be the page that contains this markup, usually the homepage or the main location page.

Schema does not replace the profile. Reviews, photos, and the map pin live on the profile. The markup tells a crawler what the page claims. When I audit a trade site, I open the profile and the JSON-LD side by side. The free generator gets the JSON-LD into shape. The profile work is separate.

Details that must match

Write the name once and use it everywhere. A trading name in the H1 and a limited company name in the schema is fine only if you are explicit about both. A shortened name on the profile and a long name in the markup gives machines two businesses.

The phone number should be the one a customer should call, in one format. Extra tracking numbers that change by campaign do not belong in the schema. They belong in the ad platform. The address should be a place you can explain. If you work from home and do not want that address public, use the service area and do not invent a high street.

Opening hours are a common lie by accident. The schema says open until 6 because that was true last year. The Google profile says 5 because someone edited it on a phone. Pick the real hours, put them on the page, and copy them into both places.

For several locations, I want a page per location with its own markup, and a clear parent organization. I do not want ten copies of the homepage with the city swapped. If the only difference is the city name, you do not have a location page yet. Write something that is true of that place, then mark it up.

Link the markup to the profile with the website field and with sameAs when you have a stable profile URL. The profile is still where reviews and the map pin live. Schema will not create either. It will stop the website from describing a different phone number than the one on the pin.

If you cover a region but only have one base, say so in areaServed and keep a single LocalBusiness. Listing every town as its own business at the same address is a pattern I remove in audits. It reads as branches you do not have.

The generator will not log into Google and edit the profile. It writes the script. You still open the profile and check the name, the phone, and the hours against the page. That five-minute comparison catches more local problems than another schema type will. Do it before you publish.

Questions about schema

Google no longer shows FAQ rich results. The Search Central changelog (8 May 2026) says they stopped appearing on 7 May 2026. The markup can still describe questions and answers for machines. Do not expect the old dropdown in Google.

Still unsure?

Book a consultation, $75, 30-60 minutes.

Want me to add the schema?