JSON-LD Schema Generator
Create JSON-LD structured data for Articles, Products, Local Businesses, and more by filling out a simple form.
| Open | Day | Opening Time | Closing Time | Break |
|---|
What is the JSON-LD Schema Generator?
Help search engines understand your content and earn rich results like star ratings, prices, and FAQ dropdowns. This tool generates the necessary JSON-LD script for `Article`, `LocalBusiness`, `Product`, `FAQ`, `Breadcrumbs`, and `Organization` schemas. Our form is built for practical use, with detailed fields for business hours and live validation that warns you about missing required fields. Since everything runs in your browser, your private business information is never sent to our servers. It's free, with no sign-up needed.
How to use
- Select the schema type you need from the top menu, such as `๐ Article`, `๐ช LocalBusiness`, or `๐ฆ Product`.
- Fill out the form on the left. Fields marked with a red `*` are mandatory to be eligible for rich results.
- As you type, the complete `<script>` block is generated on the right. Review the warnings below it for potential issues.
- For a `LocalBusiness`, check the operating days and enter the `Opening Time` and `Closing Time` for each.
- Click `Copy` and paste the script into your page's HTML, either in the `<head>` or before the closing `</body>` tag.
- Test your implementation with Google's Rich Results Test to ensure it's recognized correctly.
JSON-LD Schema Generator guide
How this tool is used in real work, and what to watch out for.
Does Markup Guarantee Rich Results? โ There Are Conditions
Structured data is an "eligibility requirement," not a "guarantee." Even if your markup is syntactically perfect, Google may not display it as a rich result. To actually get rich results, all four of these conditions generally need to be met:
- Correct syntax and required fields โ This is the part this tool helps with. If you leave a required field empty, your content won't even be considered.
- The page must be indexed โ Rich results don't appear for unindexed pages. If a page is blocked by robots.txt, Google can't read the markup either.
- The markup content must be visible on the page โ We'll cover this in more detail below.
- Google must deem the type useful for that context โ This is beyond your control. FAQ is a prime example of this.
Why You Shouldn't Put Content in Markup That's Not on the Page
Following this one rule will prevent most problems. Google's structured data policy is that "markup should describe the content visible to the user." Violating this can lead to a manual action, causing rich results for your entire site to disappear. The penalty can apply to the whole site, not just one page.
Here are some common types of violations:
- Adding `aggregateRating` of 4.8 and 128 reviews to a product page that has no reviews โ This is the most common and most certain way to get penalized. A company giving its own product a star rating is also a policy violation.
- Putting FAQs in the markup that don't exist on the page โ The answers must be visible on the screen. Content within a collapsed accordion is fine, but it can't be completely absent.
- Writing a `BreadcrumbList` in a different order than the visible breadcrumb menu on the page.
- A `price` that differs from the actual price โ Mismatched values will lead to exclusion from shopping-related features.
LocalBusiness โ What Really Matters for Businesses in Practice
If you have a local shop, `LocalBusiness` is the most beneficial schema type. However, for a business in a market like Korea's, there are a few things to keep in mind.
First, your Name, Address, and Phone (NAP) must be identical, character for character, across your website, Google Business Profile, Naver Place, and KakaoMap (the dominant local portal and map services in Korea). Subtle differences like "Teheran-ro 123, 4th floor" versus "Teheran-ro 123 4th floor" can make a search engine uncertain if they refer to the same business. This markup serves as evidence to corroborate information Google already has, so inconsistencies are unhelpful or, worse, confusing.
Choose the most specific `@type` possible. The more precise the subtypeโlike `CafeOrCoffeeShop`, `Dentist`, or `ExerciseGym` instead of the generic `LocalBusiness`โthe better the search engine's understanding. Only use `LocalBusiness` or `ProfessionalService` when nothing else in the list fits.
- If you have multiple branches, each branch should have its own page with its own markup. Putting multiple branches on one page will not be recognized.
- For opening hours, unchecking a day marks it as closed and excludes it. Days with the same hours are automatically grouped into a single entry. For 24-hour operation, enter 00:00 to 23:59.
- This form cannot create split opening hours for a single day, such as for a lunch break. You'll need to manually duplicate the `openingHoursSpecification` object in the generated JSON and adjust the times.
- You can find latitude and longitude by right-clicking the location on Naver Maps or Google Maps. Both are required to create a `geo` object.
- Use `sameAs` to list your Naver Place, Instagram, and blog URLs. This helps search engines connect these scattered profiles to your business.
Choosing a Type and How Many per Page
You can include multiple schema types on a single page. It's common for a blog post page to have both `BlogPosting` and `BreadcrumbList` markup, each in its own script block. Since this tool creates one type at a time, you can generate the code, switch the type, and then copy and paste the second block. Your inputs for each type are saved separately in your browser, so they won't be erased when you switch back and forth.
Lower your expectations for `FAQPage`. Since 2023, Google only shows FAQ rich results for certain types of sites, such as government and health organizations. Adding the markup isn't a problem and still helps with page comprehension, but you shouldn't invest a lot of work expecting an expandable UI to appear in search results.
| Page | Schema to Use | Notes |
|---|---|---|
| Blog Post | BlogPosting + BreadcrumbList | Select BlogPosting from the subtype dropdown. |
| News Article | NewsArticle | Publication and modification dates are especially important. |
| Store/Clinic Page | LocalBusiness subtype | Separate page for each branch. |
| Product Detail | Product + BreadcrumbList | Only include star ratings if actual reviews are present. |
| Company 'About' or Home Page | Organization | Usually placed only on the home page. |
| FAQ Page | FAQPage | Don't expect to see the expandable UI in results. |
Always Verify After Pasting
- Paste the generated script block anywhere inside the page's HTML, either within the `<head>` or before the closing `</body>` tag. The location does not matter.
- Test the page URL with Google's Rich Results Test (search.google.com/test/rich-results) to see if it's recognized. If the page isn't live yet, you can paste the code directly into the tool.
- Also check the schema syntax itself with the Schema.org Validator (validator.schema.org). The Google tool only validates types that Google uses.
- After a few days, check the Enhancements reports in Google Search Console for any errors or warnings. What shows up here is what's actually being processed.
- Whenever you update the page's content, update the markup too. If you change a price but the markup still shows the old one, it's a mismatch.
Frequently asked questions
Will using structured data improve my search ranking?
It's not a direct ranking factor, but the rich results it can generate (like star ratings or prices) often increase click-through rates from search. It also helps search engines better understand your page content.
Can I put information in the schema that isn't on my page?
No. Your JSON-LD markup must correspond to content that is visible to users on the page. Adding fake reviews, prices, or other information is a policy violation and may result in a penalty from Google.
How do I enter the opening hours for a LocalBusiness?
Check the box for each day your business is open and enter the times in 24-hour format (e.g., `09:00` to `18:00`). To mark a day as closed, simply uncheck it. The tool automatically groups days with identical hours.
Is the business information I enter sent to your server?
No. Your company name, address, phone number, and all other details are processed entirely within your browser. Nothing you type is ever transmitted or stored on our servers, ensuring your data remains private.