How do you generate and check schema markup for your page?
This free schema markup generator builds JSON-LD for twelve types: Person, Organization, LocalBusiness, Article, Product, Event, Recipe, Video, JobPosting, SoftwareApplication, FAQPage and breadcrumbs. Person, Organization and LocalBusiness come out as one connected graph, linked by stable IDs, with sameAs profile links and knowsAbout topics. A second tool checks JSON-LD you already have. Both run in your browser.
Part 1
Build or check your markup
Choose a type to generate markup, or paste existing JSON-LD to check its structure.
1. How do you generate schema markup for your page?
Choose what the page is about, fill in only what is true and visible on it, and copy the JSON-LD the tool produces.
Directional The output updates as you type once it has been generated. Run it through Google's Rich Results Test before you publish
2. Is your existing JSON-LD structurally sound?
Paste a script block or raw JSON-LD, and the checker lists structural problems with a fix for each.
Check the markup of any live page, including markup added by JavaScript
- Drag Send JSON-LD to checker to your bookmarks bar, or and paste it as the address of a new bookmark.
- Open the page you want to check.
- Click the bookmark. This page opens with every JSON-LD block from that page filled in.
Directional It reads the page as your browser rendered it, so it sees markup that a tag manager added. No server is involved. A few sites block bookmarks with a security policy, and it works on desktop browsers only
Directional It checks structure, common mistakes and property names against the schema.org vocabulary for 90 common types, not whether Google will use the markup. Use Google's Rich Results Test as well
3. What does each choice generate?
Person, Organization and LocalBusiness produce a linked three-node graph; every other choice produces one node for the page.
| Person, Organization, LocalBusiness | WebSite, the page (WebPage, AboutPage or ProfilePage) and the entity |
|---|---|
| Article | One article node with author, publisher and dates |
| Product, Software app | One node with an offer, and an optional real rating |
| Event, Recipe, Video, JobPosting | One node for the page, with the details Google asks for |
| FAQPage | One node holding every question and answer |
| Breadcrumb | One ordered trail |
Confirmed The linked pattern matches the one this site uses on its own entity page, shown in Part 4
4. What do you do with the output?
Paste it into the head of the page you entered, then check it before you publish.
- Copy the script block, or download the JSON.
- Add it to the head of that one page.
- Make sure every fact in it is visible on the page.
- Run it through the checks in Part 4.
Confirmed Google says markup must describe content that users can see on the page
Part 2
Understand what the markup does
What each type needs, what Google actually uses, and what markup cannot do.
5. How does the entity graph connect?
Each node has a stable @id, and the others refer to it, so a crawler reads one entity instead of several loose snippets.
1. WebSite
example.com/#website
The site as a whole. Its publisher points to the entity.
2. Page
/about/#webpage
The page that carries the markup. Its mainEntity names who or what the page is about.
3. Entity
/about/#person
The Person, Organization or LocalBusiness: name, URL, image, description and identity details.
4. Connections
sameAs, knowsAbout, worksFor
Links to official profiles, topics and related organizations that tell machines which entity this is.
Directional Stable IDs make the graph easier to reuse across pages; Google does not document a graph structure as a ranking input
6. Which type should you use?
Use the most specific type that matches what the page is really about, and a page type that matches what the page really is.
| Type | Describes | Use it when |
|---|---|---|
Person | An individual | A personal brand, author or founder has a page of their own |
Organization | A company, studio or brand | The home page or About page represents an organization with no public location |
LocalBusiness and subtypes | A business with an address or service area | Customers visit or are served at a place |
Article, BlogPosting, NewsArticle | A written piece | A dated article with an author |
Product with Offer | Something for sale | A product page that shows a price |
Event | A dated event at a real place | A page for one public event with a venue and start time |
Recipe | A dish with ingredients and steps | A recipe page with an image of the finished dish |
VideoObject | A video | The page lets visitors watch that video |
JobPosting | A real, open job | A page that describes one job and lets people see it without logging in |
SoftwareApplication, WebApplication, MobileApplication | An app | A page about an app with a price and real ratings |
BreadcrumbList | The path to a page | The page shows a breadcrumb trail |
FAQPage | Questions with answers | The page shows the questions and answers; no Google rich result today |
WebSite, WebPage, AboutPage, ProfilePage | The site and the page | To tie a page to the entity it is about |
Confirmed Google advises the most specific LocalBusiness subtype and says a store home page is not a valid ProfilePage
7. What does Google require for each type?
Article and Organization need nothing strictly, LocalBusiness needs a name and address, and Product needs a name plus an offer, review or rating.
| Type | Required | Recommended |
|---|---|---|
| Organization | Nothing | name, url, logo, sameAs, contact details, legal name, founding date |
| ProfilePage | mainEntity (a Person or Organization) with a name | dateCreated, dateModified, image, sameAs, description |
| LocalBusiness | name, address | telephone, openingHoursSpecification, geo (5 or more decimals), priceRange (under 100 characters), url |
| Article | Nothing | author (name and url), headline, datePublished, dateModified, image |
| Product | name, and at least one of offers, review or aggregateRating | Offer price (required if offers is used), priceCurrency, availability |
| Event | name, startDate, location (a venue name and a full address) | endDate, eventStatus, image, description, offers, performer, organizer |
| Recipe | name, image | author, datePublished, description, prepTime, cookTime, totalTime, recipeYield, recipeIngredient, recipeInstructions, nutrition.calories (needs recipeYield), category, cuisine, keywords |
| VideoObject | name, thumbnailUrl, uploadDate | description, contentUrl or embedUrl, duration, expires, clips |
| JobPosting | title, description, datePosted, hiringOrganization, jobLocation (or a fully remote setup) | validThrough, employmentType, baseSalary, directApply, identifier |
| SoftwareApplication | name, offers.price, and an aggregateRating or a review | applicationCategory, operatingSystem, priceCurrency |
| BreadcrumbList | At least two items, each with a name and an item URL (the last item may omit the URL) | position on every item |
Confirmed From Google Search Central documentation for each type, read on 14 October 2026
8. Which of Google's structured data features does this tool cover?
It covers 11 of the 25 features in Google's gallery, plus FAQPage, which Google no longer shows; the other 14 are listed so nothing is hidden.
| Google feature | Here? | Note |
|---|---|---|
| Article | Yes | Article, BlogPosting and NewsArticle |
| Breadcrumb | Yes | One trail per run |
| Event | Yes | Physical events only, as Google requires |
| Job posting | Yes | On-site or fully remote |
| Local business | Yes | Four common subtypes |
| Organization | Yes | In the connected graph |
| Product | Yes | With an offer; rating only if you supply a real one |
| Profile page | Yes | For a Person |
| Recipe | Yes | Durations are converted for you |
| Software app | Yes | The rich result also needs a real rating or review |
| Video | Yes | Clips and live badges are not generated |
| Review snippet | Partly | Only as a rating you supply inside a Product, Recipe or app; never for your own business |
| Carousel | No | Pairs with other features such as recipes or courses |
| Course list | No | Lists of courses from one provider |
| Dataset | No | For Google Dataset Search |
| Discussion forum | No | For user discussions |
| Education Q&A | No | Flashcard-style questions |
| Employer aggregate rating | No | Shown in job search |
| Image metadata | No | Creator, credit and licence details for images |
| Math solver | No | For math problem pages |
| Movie | No | For movie carousels |
| Q&A | No | One question with several answers |
| Speakable | No | For news text-to-speech |
| Subscription and paywalled content | No | Marks paywalled content so it is not read as cloaking |
| Vacation rental | No | Property listings |
Confirmed The feature list is from Google's structured data gallery, read on 14 October 2026; Google changes it, so check the gallery for new features
9. What does Google actually use?
Google uses Organization markup to identify a business and choose its logo, but it documents no dedicated Person feature and no use of knowsAbout.
| Markup | What Google says |
|---|---|
| Organization | No property is required. It helps tell your organization apart from others, choose a logo and show details in knowledge panels. Put it on the home page or one About page |
| Logo | At least 112 x 112 px, crawlable and indexable, and it should look right on a white background |
| ProfilePage | For pages about one person or organization that shares first-hand perspective, with a Person or Organization as main entity |
| Person | No standalone rich result in the documentation reviewed; it is used inside ProfilePage and as an author |
knowsAbout | Not listed in the Organization or ProfilePage documentation |
| FAQPage | Google stopped showing FAQ rich results in May 2026 |
| Event | Events must have a real physical location and be open to the public; online-only events are not supported |
| JobPosting | Only real, open jobs, with a complete description visible on the page; remove or expire filled jobs. Google suggests the Indexing API for faster crawling of job pages |
| HowTo | Google cut back HowTo rich results in 2023 and it no longer appears in its structured data gallery |
| Quality rules | Markup must match visible content and not mislead; violations can cause a manual action that removes rich result eligibility |
Confirmed From Google Search Central pages for Organization, ProfilePage, FAQPage, structured data policies and the 2023 HowTo and FAQ announcement; the HowTo row is Directional
10. What does schema markup not do?
It does not guarantee rich results, higher rankings, a knowledge panel or an AI citation.
Google says valid markup does not guarantee a rich result, and its structured data introduction does not describe markup as required for generative AI features. Treat the graph as a clear statement of who you are, not as a switch.
Confirmed Google's documentation; AI engines other than Google publish less about how they read markup
11. Can you add review stars to your own business?
Generally no: Google does not show review stars when a business controls the reviews of itself, so this tool leaves them out.
- Reviews of your own business or organization on your own site are not eligible for stars
- Reviews are for sites that collect reviews of other entities, such as products they sell
- Ratings must come from users, not be written or compiled by editors for local businesses
- If you add Product reviews, they must be real and shown on the page
Confirmed Google's review snippet documentation; the checker warns when a business node carries its own rating
12. How does this relate to an entity home and a knowledge panel?
The markup is the machine-readable half of an entity home: the page says who you are in words, and the graph says it in structure.
Google says Organization markup can influence visual elements such as the knowledge panel, but it does not guarantee one. Read what an entity home page is first, and see the entity home service if brand or founder confusion is the problem.
Directional Based on the approach used on this site; results vary and are logged in the experiment log
13. What do the technical terms mean?
Most terms describe how one fact is named, labelled and linked, so a machine can tell what the page is about.
| Term | Plain meaning |
|---|---|
| Structured data | Facts about a page written in a fixed format that software can read |
| schema.org | The shared vocabulary of types and properties used for that format |
| JSON-LD | A way of writing structured data as a block of JSON in a script tag |
@context | Says which vocabulary the keys come from, normally https://schema.org |
@type | What kind of thing a node is, such as Person |
@id | A unique address for one node, so others can refer to it |
@graph | A list of nodes that belong together |
| Node and entity | A node is one object in the markup; an entity is the real person or brand it stands for |
sameAs | Links to other official pages about the same entity |
| Rich result | A search result with extra features, such as a logo or product price |
| Knowledge panel | The information box Google may show about a well-known entity |
Part 3
Set it up on your site
Where the markup goes, what it looks like, and how to avoid common mistakes.
14. Where should the markup go?
Put it in the head of the one page it describes: the entity on its home or About page, and each article, product or trail on its own page.
- One page, one set of facts: the markup belongs on the page it describes
- Use JSON-LD in a script tag in the head; Google recommends it
- Google can read JSON-LD added by JavaScript or a tag manager, but plain server output is simpler to verify
- If you use a tag manager, check the rendered page with URL Inspection, not just the template
- Do not block the page with robots.txt or noindex, or the markup cannot be read
- Keep the same
@idfor the same entity wherever you refer to it - Never ship staging addresses in
urlor@id; test on staging, then switch the domain - On multilingual sites, keep one
@idper entity across languages and translate only the visible text
Confirmed Placement and JSON-LD points are from Google's documentation; the multilingual advice is Directional
15. What does finished markup look like?
Below is real output from this generator for each type, using example names and links.
Person on a ProfilePage
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://example.com/#website",
"url": "https://example.com/",
"name": "Jane Example",
"publisher": {
"@id": "https://example.com/about/#person"
}
},
{
"@type": "ProfilePage",
"@id": "https://example.com/about/#webpage",
"url": "https://example.com/about/",
"isPartOf": {
"@id": "https://example.com/#website"
},
"mainEntity": {
"@id": "https://example.com/about/#person"
},
"dateModified": "2026-10-14",
"dateCreated": "2024-03-01"
},
{
"@type": "Person",
"@id": "https://example.com/about/#person",
"name": "Jane Example",
"alternateName": "J. Example",
"url": "https://example.com/about/",
"description": "Jane Example is a search strategist who helps brands get found and cited.",
"jobTitle": "Search strategist",
"image": "https://example.com/images/jane-example.jpg",
"address": {
"@type": "PostalAddress",
"addressLocality": "Leeds",
"addressCountry": "GB"
},
"worksFor": {
"@type": "Organization",
"name": "Example Studio",
"url": "https://example.com/"
},
"alumniOf": {
"@type": "Organization",
"name": "Example University"
},
"knowsAbout": [
{
"@type": "Thing",
"name": "Search engine optimization",
"sameAs": "https://en.wikipedia.org/wiki/Search_engine_optimization"
},
"Entity SEO"
],
"sameAs": [
"https://www.linkedin.com/in/janeexample",
"https://github.com/janeexample"
],
"mainEntityOfPage": {
"@id": "https://example.com/about/#webpage"
}
}
]
}
Organization on a home page
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://example.com/#website",
"url": "https://example.com/",
"name": "Example Studio",
"publisher": {
"@id": "https://example.com/#organization"
}
},
{
"@type": "WebPage",
"@id": "https://example.com/#webpage",
"url": "https://example.com/",
"isPartOf": {
"@id": "https://example.com/#website"
},
"mainEntity": {
"@id": "https://example.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Example Studio",
"legalName": "Example Studio Ltd",
"url": "https://example.com/",
"description": "Example Studio is a search consultancy.",
"logo": "https://example.com/images/logo.png",
"foundingDate": "2015",
"founder": {
"@type": "Person",
"name": "Jane Example"
},
"email": "hello@example.com",
"address": {
"@type": "PostalAddress",
"addressLocality": "Leeds",
"addressCountry": "GB"
},
"sameAs": [
"https://www.linkedin.com/company/examplestudio"
],
"mainEntityOfPage": {
"@id": "https://example.com/#webpage"
}
}
]
}
LocalBusiness (a cafe)
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://example.com/#website",
"url": "https://example.com/",
"name": "Example Coffee Roasters",
"publisher": {
"@id": "https://example.com/#localbusiness"
}
},
{
"@type": "WebPage",
"@id": "https://example.com/leeds/#webpage",
"url": "https://example.com/leeds/",
"isPartOf": {
"@id": "https://example.com/#website"
},
"mainEntity": {
"@id": "https://example.com/#localbusiness"
}
},
{
"@type": "Restaurant",
"@id": "https://example.com/#localbusiness",
"name": "Example Coffee Roasters",
"url": "https://example.com/leeds/",
"description": "A neighbourhood coffee shop and roastery.",
"image": "https://example.com/images/shop.jpg",
"telephone": "+44 113 000 0000",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "1 High Street",
"addressLocality": "Leeds",
"addressRegion": "West Yorkshire",
"postalCode": "LS1 1AA",
"addressCountry": "GB"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 53.79648,
"longitude": -1.54785
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"opens": "08:00:00",
"closes": "17:00:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Saturday"
],
"opens": "09:00:00",
"closes": "15:00:00"
}
],
"sameAs": [
"https://www.instagram.com/examplecoffee"
],
"mainEntityOfPage": {
"@id": "https://example.com/leeds/#webpage"
}
}
]
}
BlogPosting
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "BlogPosting",
"@id": "https://example.com/blog/entity-seo/#article",
"headline": "What is entity SEO?",
"description": "A plain explanation of entity SEO.",
"image": "https://example.com/images/entity-seo.jpg",
"datePublished": "2026-10-01T09:00:00+01:00",
"dateModified": "2026-10-14",
"author": {
"@type": "Person",
"name": "Jane Example",
"url": "https://example.com/about/"
},
"publisher": {
"@type": "Organization",
"name": "Example Studio",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/images/logo.png"
}
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://example.com/blog/entity-seo/"
}
}
]
}
Product with an offer
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Product",
"@id": "https://example.com/shop/roast-beans/#product",
"name": "Example Roast Beans 1kg",
"description": "Medium roast whole beans.",
"image": "https://example.com/images/beans.jpg",
"sku": "BEANS-1KG",
"brand": {
"@type": "Brand",
"name": "Example Coffee Roasters"
},
"url": "https://example.com/shop/roast-beans/",
"offers": {
"@type": "Offer",
"url": "https://example.com/shop/roast-beans/",
"price": "14.5",
"priceCurrency": "GBP",
"availability": "https://schema.org/InStock"
}
}
]
}
Event
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Event",
"@id": "https://example.com/events/cupping-night/#event",
"name": "Example Coffee Cupping Night",
"description": "An evening of coffee tasting at our Leeds roastery.",
"image": "https://example.com/images/cupping.jpg",
"startDate": "2026-11-20T19:00:00+00:00",
"endDate": "2026-11-20T21:30:00+00:00",
"eventStatus": "https://schema.org/EventScheduled",
"location": {
"@type": "Place",
"name": "Example Coffee Roasters",
"address": {
"@type": "PostalAddress",
"streetAddress": "1 High Street",
"addressLocality": "Leeds",
"addressRegion": "West Yorkshire",
"postalCode": "LS1 1AA",
"addressCountry": "GB"
}
},
"offers": {
"@type": "Offer",
"url": "https://example.com/events/cupping-night/",
"price": "15",
"priceCurrency": "GBP",
"availability": "https://schema.org/InStock"
},
"performer": {
"@type": "Person",
"name": "Jane Example"
},
"organizer": {
"@type": "Organization",
"name": "Example Coffee Roasters",
"url": "https://example.com/"
}
}
]
}
Recipe
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Recipe",
"@id": "https://example.com/recipes/flat-white/#recipe",
"name": "Simple Flat White",
"description": "A flat white at home with a basic espresso machine.",
"image": "https://example.com/images/flat-white.jpg",
"author": {
"@type": "Person",
"name": "Jane Example"
},
"datePublished": "2026-09-01",
"prepTime": "PT5M",
"cookTime": "PT3M",
"totalTime": "PT8M",
"recipeYield": "1 cup",
"recipeCategory": "Drink",
"recipeCuisine": "Italian",
"keywords": "coffee, espresso",
"nutrition": {
"@type": "NutritionInformation",
"calories": "120 calories"
},
"recipeIngredient": [
"18 g ground coffee",
"150 ml whole milk"
],
"recipeInstructions": [
{
"@type": "HowToStep",
"text": "Pull a double espresso."
},
{
"@type": "HowToStep",
"text": "Steam the milk until glossy."
},
{
"@type": "HowToStep",
"text": "Pour the milk over the espresso."
}
]
}
]
}
VideoObject
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "VideoObject",
"@id": "https://example.com/videos/dial-in/#video",
"name": "How to dial in espresso",
"description": "A five-minute guide to dialling in a grinder.",
"thumbnailUrl": "https://example.com/images/dial-in-thumb.jpg",
"uploadDate": "2026-10-01T09:00:00+01:00",
"duration": "PT5M12S",
"contentUrl": "https://example.com/media/dial-in.mp4",
"embedUrl": "https://example.com/embed/dial-in"
}
]
}
JobPosting (on-site)
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "JobPosting",
"@id": "https://example.com/careers/search-analyst/#job",
"title": "Search Analyst",
"description": "Example Studio is hiring a Search Analyst to audit sites, report on organic performance and recommend fixes. You will work with clients on technical, content and measurement work. Requirements: two years in SEO, strong analytics skills and clear writing.",
"identifier": {
"@type": "PropertyValue",
"name": "Example Studio",
"value": "SA-2026-01"
},
"datePosted": "2026-10-01",
"validThrough": "2026-12-31",
"employmentType": "FULL_TIME",
"hiringOrganization": {
"@type": "Organization",
"name": "Example Studio",
"sameAs": "https://example.com/",
"logo": "https://example.com/images/logo.png"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "Leeds",
"addressRegion": "West Yorkshire",
"addressCountry": "GB"
}
},
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "GBP",
"value": {
"@type": "QuantitativeValue",
"minValue": 32000,
"maxValue": 40000,
"unitText": "YEAR"
}
}
}
]
}
WebApplication
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebApplication",
"@id": "https://example.com/apps/rank-tracker/#software",
"name": "Example Rank Tracker",
"description": "A web app that tracks keyword positions.",
"url": "https://example.com/apps/rank-tracker/",
"applicationCategory": "BusinessApplication",
"operatingSystem": "Any (web browser)",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
}
}
]
}
FAQPage
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "FAQPage",
"@id": "https://example.com/faq/#faq",
"mainEntity": [
{
"@type": "Question",
"name": "Do you ship abroad?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes, we ship to most countries."
}
},
{
"@type": "Question",
"name": "How long does delivery take?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Orders arrive in three to five working days."
}
}
]
}
]
}
BreadcrumbList
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "BreadcrumbList",
"@id": "https://example.com/blog/entity-seo/#breadcrumb",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://example.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Blog",
"item": "https://example.com/blog/"
},
{
"@type": "ListItem",
"position": 3,
"name": "What is entity SEO?"
}
]
}
]
}
Wrap any block in <script type="application/ld+json"> and </script>. All names, links and addresses are examples.
Confirmed Generated by this tool from the example inputs; real values must be true and visible on your page
16. When is this the right tool?
Use it when you need to state one clear entity or page, and the checker when you inherit markup you did not write.
| Situation | What to do |
|---|---|
| A personal brand or consultant site | Person on a ProfilePage or AboutPage, with profile links and topics |
| A company home page | Organization with logo, founder and profile links |
| A shop, clinic or cafe with a location | LocalBusiness with address, hours and phone on the page for that location |
| Author pages and blog posts | One ProfilePage per author; BlogPosting on each post, with the author's link |
| A product catalogue | Product with an offer on each product page, matching the visible price |
| A venue, club or organizer with dated events | One Event per page, each with its own address, start time and ticket details |
| A food or recipe site | Recipe with image, times, ingredients and steps, matching the visible page |
| A site with how-to or product videos | VideoObject on each page where the video can be watched |
| A company hiring | JobPosting per open role, removed or expired when filled |
| A software or SaaS product | SoftwareApplication with a real price, and real ratings if you show them |
| Deep pages in a hierarchy | BreadcrumbList that matches the visible trail |
| Brand or founder confusion in search | Consistent name, sameAs links and one @id across pages |
| After a redesign or migration | Rebuild the markup and run the checker on the new templates |
| An agency inheriting a client site | Paste existing markup into the checker to find duplicates and gaps |
| Multi-location business | One LocalBusiness page per location, each with its own address and @id |
17. How does this fit with plugins and site builders?
Many platforms already output some markup, so add yours only after you know what is there, or you will create duplicate entities.
| Platform | What usually happens | Common trap |
|---|---|---|
| WordPress | SEO plugins can output Organization, Person, WebSite and Article markup; custom markup goes in a header setting or the theme | The plugin and your own block both describe the same entity with different IDs |
| Shopify | Themes often output Organization and Product markup; custom blocks go in the theme code | Duplicate Organization or Product nodes after adding your own |
| Wix, Squarespace, Webflow | Offer a custom code or SEO panel for JSON-LD | Plan limits on custom code, and page-level versus site-wide placement |
| Tag manager | Injects JSON-LD with JavaScript | Markup that appears only after a tag fires is harder to verify |
| Custom or static site | You paste the block into the page head | The block is missing from the production build |
Run your live page through the checker above, then turn off one of the duplicate sources.
Directional Plugin and platform behavior changes; check what your own page outputs rather than assuming
18. What mistakes does this check catch most often?
The costliest mistakes are markup that does not match the page, duplicate entities and profile links to pages that are not yours.
| Mistake | What happens | Fix |
|---|---|---|
| Markup describes things not visible on the page | Breaks Google's quality rules and risks a manual action | Mark up only what the page shows |
| Two entity nodes for one person or brand | Machines see two entities | Use one @id and one node |
| Relative URLs such as /about/ | The reference is ambiguous | Use full https:// URLs |
Staging or old-domain URLs left in url or @id | The entity points at a site that does not exist | Switch to the live domain before launch |
sameAs to profiles you do not own | Ties your entity to the wrong thing | List official profiles only |
| Inventing a Wikipedia or Wikidata link | A broken or false link | Add it only if the entry exists and is about you |
| ProfilePage on a company home page | Not a valid use under Google's guidance | Use WebPage or AboutPage with Organization |
| Review stars on your own business | Not eligible; can look manipulative | Remove them unless the site reviews other businesses |
| Product price that differs from the page | Mismatch with visible content | Generate the markup from the same data as the page |
| Author name written as "By Jane" | Google asks for the name only | Put only the name; use publisher and job title elsewhere |
| A date without a timezone | Google assumes its own crawler's timezone | Add an offset such as +01:00 |
| Placeholder or missing images | Google asks for real, crawlable images | Use a real photo or logo URL |
| Curly quotes from a word processor | The JSON is invalid | Paste into a plain-text editor, then run the checker |
| Marking up an online-only event | Google supports events with a real place | Use the markup only for physical events |
| Event markup for a promotion, sale or opening hours | Not an event under Google's rules | Mark up real, dated, public events only |
| A job posting left up after it is filled | Misleads job seekers and breaks Google's rules | Remove it, or set a past valid-through date |
| Salary, dates or codes in the job title | Google asks for the job title only | Put pay in baseSalary |
| Recipe times written as "10 minutes" | Not a valid duration | Use ISO form such as PT10M (the generator does this) |
| Calories without servings | Google requires recipeYield with calories | Add the number of servings |
| Video contentUrl that points to the page | It must point to the video file | Use the file address, or an embed address |
| Software app with no rating or review | Valid markup, but not eligible for the rich result | Add real ratings from the page, or accept no rich result |
| Assuming valid means eligible | No rich result appears | Valid markup is necessary, not a guarantee |
Confirmed Rules from Google's structured data policies and type documentation; the rest are common practice
19. What do the validator messages mean?
Errors mean a required piece is missing or wrong, while warnings and optional fields are recommendations that do not block eligibility.
| Message type | Meaning | What to do |
|---|---|---|
| Missing required field | The feature cannot use the item without it | Add the field, with a value visible on the page |
| Missing optional or recommended field | The item can work, but is less complete | Add it if you have the information |
| Invalid value | The field is present but in the wrong format, such as a bad date or a price with a symbol | Use ISO dates and plain numbers |
| Parsing or syntax error | The JSON cannot be read | Fix commas, quotes and brackets |
| "Either offers, review or aggregateRating" style messages | A Product needs at least one of those | Add an Offer with price and currency |
| No items detected | The tester found no supported markup | Check the script is on the page and not blocked |
Directional Wording changes between tools and over time; the principle is the same in Google's Rich Results Test and the Schema Markup Validator
20. How do you keep the markup correct over time?
Treat it like any other part of the page: update it when the page changes, and re-check it after every template, plugin or domain change.
- Change
dateModifiedonly when the content really changes - Update prices, hours, addresses and job titles when they change on the page
- Re-run the checker after a redesign, a plugin update or a move to a new domain
- Watch the Search Console enhancement reports for new errors
- Review the topics and profile links each quarter, and remove any that no longer apply
- Record what you changed and when, so later movement can be explained
Directional A practical routine; Google describes Search Console reports for monitoring after deployment
Part 4
Verify and learn from a live example
A checking order, and the real entity graph used on this site.
21. How do you verify the markup?
Check the structure here, then validate the syntax, then test it against Google's features, then monitor it in Search Console.
- Check structure with the checker aboveDuplicates, references, URLs, dates
- Validate syntax at validator.schema.orgSchema.org's own validator
- Test it in the Rich Results TestShows which Google features the page is eligible for
- Inspect the live URL in Search ConsoleConfirms Google found the markup
- Watch the Search Console reportsCatches breakage after later edits
Confirmed Google recommends the Rich Results Test and describes URL Inspection and Search Console reports for monitoring
22. What does this site's own entity graph look like?
The entity page on this site describes one Person, linked to a ProfilePage, a WebSite and the organizations and book connected to it.
Its graph holds 12 nodes: WebSite, ProfilePage, Person, three Organizations, a university, a Book, two ImageObjects, a BreadcrumbList and a FAQPage. This is an excerpt of the Person node:
{
"@type": "Person",
"@id": "https://asfandjunejo.com/who-is-asfand-yar-junejo/#person",
"name": "Asfand Yar Junejo",
"alternateName": [
"Asfand Junejo",
"Asfandyar Junejo"
],
"url": "https://asfandjunejo.com/who-is-asfand-yar-junejo/",
"mainEntityOfPage": {
"@id": "https://asfandjunejo.com/who-is-asfand-yar-junejo/#profilepage"
},
"jobTitle": "Search, AI Visibility & Digital Growth Strategist",
"worksFor": {
"@id": "https://asfandjunejo.com/who-is-asfand-yar-junejo/#org-swag-brand"
},
"sameAs": [
"https://www.linkedin.com/in/asfandyarjunejo",
"https://www.youtube.com/@digitalthekedar",
"https://twitter.com/asfandyarjunejo"
],
"knowsAbout": [
{
"@type": "Thing",
"name": "Search engine optimization",
"sameAs": "https://en.wikipedia.org/wiki/Search_engine_optimization"
},
{
"@type": "Thing",
"name": "Semantic search",
"sameAs": "https://en.wikipedia.org/wiki/Semantic_search"
},
"..."
]
}
The full record is on who is Asfand Yar Junejo. What changed in search after updates like this is logged in the experiment log.
Confirmed Excerpt of this site's current markup; it suits this site and is not a template for yours
23. What should match the visible page?
Every name, job title, link, price and detail in the markup should also appear on the page a visitor sees.
- The name and description read the same on the page
- Each profile link is visible or clearly implied (a footer or bio link)
- The photo or logo is shown on the page
- Facts such as employer, address, hours and price are stated in the text
- Every question in FAQ markup is shown with its answer
Confirmed Google's policy: markup must represent content visible to users
24. How will you know it helped?
Compare a dated baseline of branded searches and AI answers before and after, and expect change to be slow and not guaranteed.
Record what Google and AI assistants say about the name today, add the markup, and re-test after a few weeks. A knowledge panel or a corrected answer is a possible outcome, not a promise. Keep impressions, citations, referrals and enquiries as separate measures.
Directional A method, not a result; many things change at once
Part 5
Questions answered
Short answers to the questions that come up most.
25. What do people ask about schema markup and entities?
The questions below cover rankings, AI answers, FAQ and HowTo markup, local businesses, products, events, jobs, recipes, videos, apps, authors and privacy. Tap a question to open the answer.
Does schema markup improve rankings?
No guarantee. Google says valid markup does not guarantee rich results, and it does not describe markup as a ranking factor.
Confirmed Google's structured data documentation
Do you need schema markup to appear in AI answers?
Google's documentation does not say markup is required for its generative AI features, and other engines publish little about how they use it.
Directional Absence of a requirement in documentation is not proof of no effect
Does FAQ schema still give rich results?
No. Google stopped showing FAQ rich results in May 2026, after having limited them to well-known government and health sites in 2023.
Confirmed Google's FAQPage documentation notice; the markup remains valid schema.org
Should you remove old FAQ or HowTo markup?
There is no need to remove it in a hurry: Google said in 2023 that leaving the markup does no harm, but it gives no search appearance now.
Directional Based on Google's August 2023 announcement; remove it if it no longer matches the page
Should you use Person or Organization?
Use Person for an individual and Organization for a company or brand; if both apply, mark up both and connect them with worksFor.
Directional A practical rule; pick the entity the page is actually about
Should a local business use LocalBusiness or Organization?
Use a LocalBusiness subtype when customers visit or are served at a place, and Organization when the brand has no public location.
Confirmed Google asks for the most specific subtype and requires a name and address for LocalBusiness
Does Google use knowsAbout?
Google does not list knowsAbout in its Organization or ProfilePage documentation, so treat it as a clear statement for any system that reads schema.org.
Directional Absence from documentation, not proof it is ignored
What belongs in sameAs?
Official profiles that belong to the same entity, such as LinkedIn, YouTube or a company profile; add Wikipedia or Wikidata only if an entry about you exists.
Directional Never invent a profile or link to a page about someone else
Should the markup be on every page?
No. Google says Organization markup belongs on the home page or one page that describes the organization, not on every page.
Confirmed Google's Organization documentation
Can you add review stars with markup?
Not for your own business. Google does not show stars when a business controls the reviews of itself, and ratings must come from real users.
Confirmed Google's review snippet documentation
How should you mark up several authors?
List each author as a separate entry with only the name and a link to a profile page, as Google asks.
Confirmed Google's Article documentation; the generator takes one author per line
Should dateModified change on every edit?
Only when the content really changes; changing it for tiny edits or to look fresh is misleading.
Directional Google's ProfilePage guidance says the date should reflect human-edited changes
JSON-LD or Microdata?
Use JSON-LD. Google recommends it, and it is easier to keep separate from your page layout; avoid describing the same item in both.
Confirmed Google's structured data policies; Microdata and RDFa are also supported
Can a tag manager add the markup?
Yes. Google can read JSON-LD added by JavaScript, but check the rendered page, because a tag that fails to fire means no markup.
Confirmed Google's structured data introduction; the testing advice is Directional
What about multilingual sites?
Keep one stable @id for each entity across language versions, and make the visible text and markup match on each page.
Directional A practical approach; Google gives no entity-specific multilingual rule in the pages reviewed
How long until changes show up?
There is no fixed time: Google must recrawl the page, and rich results or panels may never appear.
Directional Use URL Inspection to request a recrawl, and track changes against a dated baseline
Can you mark up an online-only event?
Not for Google's event feature: it supports events with a real physical location and says virtual-only experiences are not supported.
Confirmed Google's Event documentation
How do you handle a fully remote job?
Set the job as remote with a country applicants must live in, and state clearly in the visible description that the job is fully remote.
Confirmed Google's JobPosting documentation
Do job posts need the Indexing API?
No, but Google recommends it for job pages because it prompts crawling sooner; you should still submit a sitemap.
Confirmed Google's JobPosting documentation
Why does the recipe tool ask for minutes?
Google wants durations in ISO 8601 form such as PT30M, so the tool turns your minutes into that form and adds the total for you.
Confirmed Google's Recipe documentation
What does a video need to be eligible?
A title, thumbnail and upload date, plus a file or player address, on a page where visitors can actually watch the video.
Confirmed Google's Video documentation
Why does the software app need a rating?
Google's software app feature requires either an aggregate rating or a review, so markup without one is valid but not eligible for the rich result.
Confirmed Google's Software app documentation; only add ratings that come from real reviews shown on the page
How many times can you use the free tools?
You get 3 free runs across all the free tools. After that, joining the Search Signals newsletter with a business email unlocks 10 more.
Loading an example, copying and downloading do not use a run. The count is kept in your browser, so clearing site data resets it.
Directional A fair-use limit that may change; the count is a convenience, not a security control
Why does the unlock need a business email?
To keep the newsletter list made of real business contacts: personal addresses such as Gmail or Yahoo, and temporary addresses, are not accepted.
If your work address is rejected by mistake, email asfand@asfandjunejo.com and the tools can be unlocked by hand.
Directional The check uses lists of free and disposable providers plus a mail-server lookup, so it is strong but not perfect
Is what you enter sent anywhere?
No. The markup is built and checked in your browser, and the tool does not send what you type to a server. The only thing a tool can send is the business email you choose to give when you unlock more runs.
Directional Stated by the builder; you can confirm it in your browser's network panel
Should you put your address or phone in Person markup?
Only what is already public on the page; for a person, a city and country is usually enough, and a home address should never go in.
Directional A privacy precaution; markup is public to every crawler
Why can the tool not read my live page for you?
Browsers stop one site reading another site's pages, so a client-side tool cannot fetch them. Use the bookmark in the checker to send a live page's JSON-LD here, or paste it.
The bookmark runs on the page you are viewing, so it also sees markup added by JavaScript, and no server is involved.
Confirmed This is the browser's same-origin policy
Part 6
Limits and sources
What this tool cannot do and where the facts come from.
26. What can these tools not do?
They build and check structure only; they cannot tell you whether Google will use the markup.
| Builds | Person, Organization, LocalBusiness, Article, Product, Event, Recipe, VideoObject, JobPosting, SoftwareApplication, FAQPage and breadcrumb markup |
|---|---|
| Checks | JSON syntax, types, IDs, references, URLs, dates, the type rules in Part 2, and misspelled or undefined property names |
| Cannot see | Your live page unless you use the bookmark, visible content, or image sizes |
| Not covered | The 13 gallery features marked "No" in Part 2, and reviews of your own business |
Directional Prototype tool; always run Google's Rich Results Test before relying on it
27. Where do the facts on this page come from?
From Google Search Central and schema.org, read on 14 October 2026.
- Google: Organization structured data
- Google: ProfilePage structured data
- Google: LocalBusiness structured data
- Google: Article structured data
- Google: Product snippet structured data
- Google: Event structured data
- Google: Recipe structured data
- Google: Video structured data
- Google: Job posting structured data
- Google: Software app structured data
- Google: structured data search gallery
- Google: Breadcrumb structured data
- Google: Review snippet structured data
- Google: structured data policies
- Google: FAQPage notice
- Google: changes to HowTo and FAQ rich results (2023)
- Google: introduction to structured data
- schema.org: Person
- schema.org: vocabulary downloads (used for the property check)
Brand or founder confusion in search? See why Google confuses brands → Or see the entity home service → Back to all free tools →