Free tool · Technical SEO
JSON-LD schema generator that checks what Google needs
Pick the most specific type that fits.
Address · leave blank if you have no public address
Comma-separated. Essential for service-area businesses with no public address.
One URL per line: profiles that are clearly the same business.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LegalService",
"@id": "https://www.example.com/#business",
"name": "Example Real Estate Law",
"url": "https://www.example.com",
"telephone": "+1-916-555-0100",
"image": "https://www.example.com/logo.png",
"logo": "https://www.example.com/logo.png",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "100 Capitol Mall, Suite 200",
"addressLocality": "Sacramento",
"addressRegion": "CA",
"postalCode": "95814",
"addressCountry": "US"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"opens": "09:00",
"closes": "17:30"
}
]
}
</script>Generated in your browser. Markup must match what visitors can see on the page.
The guide
How I use structured data on client sites
Structured data is one of the first things I check in a technical SEO audit. It's rarely missing completely. More often it's wrong: a plugin outputs three different Organization blocks, an article lists "admin" as the author, or a business that works from home shows a made-up street address. None of that helps, and fake details can hurt trust.
My rule is simple. Markup should describe what a visitor can already see on the page, in a way a machine can read. If the page doesn't show opening hours, don't mark them up. If the FAQ answer on the page is two sentences, the answer in the markup should be the same two sentences.
This site uses the same types the generator builds: Person and ProfessionalService for me, Service on service pages, BlogPosting on blog posts, FAQPage where there are questions, and BreadcrumbList on every page below the home page. The generator is the form I'd want if I were writing these by hand for a client.
Which schema type for which page
Local business: home or contact page
Name, phone, website, address or areas served, opening hours and profile links. Use one block per business, on the page that represents it, usually the home page. Pick a specific type such as LegalService or Dentist when one fits.
Service: each service page
What the service is, who provides it and where. There's no rich result for it, but it ties the page to your business entity through the provider's @id, which the generator sets to match your business block.
Article: blog posts and guides
Headline, image, author, dates. The author should be a real person with a page about them. Change dateModified only when the content really changes; Google compares it with what it sees.
Breadcrumb: every page below the home page
The trail from home to the current page. Google can show it instead of the raw URL in results. Every item except the last needs a URL.
FAQ is the special case. It is valid on any page with real questions and answers, but since 2023 Google only shows FAQ rich results for well-known government and health sites. I still add it where a page has a genuine FAQ, because it costs nothing and describes the page, but I don't promise clients it will change their listing.
An example: a business with no public address
A lot of the businesses I work with don't have a shopfront. A chauffeur company dispatches from a yard nobody visits. A consultant works from home. The temptation is to add a virtual office address so the markup looks complete. Don't. It doesn't match Google Business Profile, where service-area businesses hide their address, and a fake address is the kind of detail that erodes trust if anyone checks.
The honest version is simple. Leave the street, city and postal code blank, fill in the business name, phone and website, and list the areas you serve: "Sacramento, Riverside, Los Angeles". The generator stops asking for an address once areas served is filled in, and writes each area as a Place. Add opening hours only if you show them on the page, and add your real profiles (Yelp, Facebook, an industry directory) as sameAs links so Google can connect them to the same business. For how this works on individual service pages, see my airport transfer SEO guide.
How to add and test it
Fill in the form
Required fields are marked. The panel on the right turns red until the errors are fixed and lists warnings you can choose to act on.
Copy the code
The output is a complete script tag. Characters that could break your HTML are escaped.
Paste it into the page
In the head is tidy, but anywhere in the HTML works. One block per type, per page.
Test the live URL
Use Google's Rich Results Test on the published page, not just the code, so you see what Google sees after your theme and plugins have run.
Watch Search Console
The Enhancements section reports errors across the whole site. Fix new ones when they appear.
Remove duplicates
If a plugin already outputs a type, edit that one instead of adding a second. Two conflicting LocalBusiness blocks are worse than one.
Mistakes that get markup ignored
- Marking up content that isn't on the page. Hidden FAQs, reviews from elsewhere, or a price list that only exists in the code.
- Self-serving review stars. Google doesn't show star ratings for reviews a LocalBusiness or Organization adds about itself.
- Fake or virtual addresses for a service-area business. Use areas served instead.
- Relative URLs. Every URL in the markup must be absolute: https://www.example.com/logo.png, not /logo.png.
- Updating dateModified on every deploy. If every article shows today's date, Google learns to ignore it.
- Copying one LocalBusiness block onto every page. It belongs on the page that represents the business. Other pages can reference it by @id.
Related checks
Schema only helps once Google can crawl and index the page. If you're not sure it can, run the indexing checker, and check the site-wide rules with the robots.txt and sitemap checker. The free SEO audit also reports which structured data types a page already has, so run it before adding more.
For local businesses, markup is one small part of being found. I wrote about the rest for med spas and limo companies, two of the industries I do SEO for.
FAQ
Schema markup questions
What is JSON-LD schema markup?
A block of structured data, written in JSON inside a script tag, that tells search engines what a page is about in a fixed vocabulary from schema.org: this is a law firm, here is its address and phone number, this is an article written by this person on this date. Google recommends JSON-LD over the older microdata and RDFa formats.
Where do I put the code?
Anywhere in the page’s HTML, usually the head. In WordPress, a header-code plugin or your SEO plugin’s custom schema option works. In Next.js or other frameworks, render it as a script tag with type application/ld+json. Then test the live URL in Google’s Rich Results Test.
Does schema markup improve rankings?
Not directly. Google has said structured data isn’t a ranking factor. It helps Google understand the page and makes it eligible for rich results such as review stars, breadcrumbs and article details, which can improve how the listing looks and how often it is clicked.
Do FAQ rich results still show in Google?
Only for a small group of authoritative government and health sites, since August 2023. FAQ markup is still valid and still describes your page, but most sites no longer get the expandable questions in results. The generator tells you this so you can decide whether it’s worth adding.
What if my business has no public address?
Leave the address blank and fill in areas served. That’s the honest setup for a service-area business that visits customers or works remotely, and it matches how Google Business Profile treats those businesses. Never add an address you don’t operate from.
LocalBusiness or ProfessionalService?
Use the most specific type that fits. LegalService, Dentist and Plumber are all LocalBusiness subtypes, so they inherit everything. ProfessionalService suits consultants and agencies with no more specific type. More specific types help Google, but only if they’re accurate.
More free tools
Not sure your structured data is right?
I'll check your markup against what's on the page and what Google supports, and tell you what to fix. The review is free.