Free tool
Schema markup generator
The schema markup generator writes JSON-LD from what a page actually says. Every value names the tag it came from, and anything the page does not state is left out and listed, so the markup never claims more than the page. Copy it into your page head and validate it. Free, no sign-up.
Inputattensira.com/about
- Blocks written
- 3: Organization, Article, FAQPage
- ✓ Passes
- Blocks skipped
- 1: BreadcrumbList
- Properties filled
- 10, each with its source tag
- ✓ Passes
- Left out as unreadable
- 4, e.g. contactPoint
- sameAs
- Picked up a personal LinkedIn profile
- ◐ Weak
- Already on the page
- Organization: flagged as a duplicate
- ◐ Weak
7 days free · card required
Generate markup
Seconds, on our server · Free, no sign-upWe fetch the page once, as ourselves, and read only what came back. Nothing here executes JavaScript, so an FAQ or a breadcrumb rendered in the browser will not be seen. Free, no sign-up, the whole result is shown.
Four blocks, built from your markup or not built at all.
- Organization: from
og:site_name, the origin of the URL, and the profile links the page carries. - Article: from the first
h1, the meta description, the byline and thearticle:date tags. - FAQPage: from question and answer pairs that are visible in the HTML: a
details/summary, adt/dd, or a heading that ends in a question mark. - BreadcrumbList: from a nav, ol, ul or div whose attributes name it a breadcrumb.
A property the page does not state is left out and listed as unreadable, with the markup that would make it readable. You will not get an author we invented, a date we assumed or a breadcrumb built by title-casing your URL slugs.
Your result appears here
- Blocks written
- Blocks skipped
- Properties filled
- Left out as unreadable
- sameAs
- Already on the page
Inputattensira.com/about
- Blocks written
- 3: Organization, Article, FAQPage
- ✓ Passes
- Blocks skipped
- 1: BreadcrumbList
- Properties filled
- 10, each with its source tag
- ✓ Passes
- Left out as unreadable
- 4, e.g. contactPoint
- sameAs
- Picked up a personal LinkedIn profile
- ◐ Weak
- Already on the page
- Organization: flagged as a duplicate
- ◐ Weak
What does it build, and from what?
Organization
The name from og:site_name or your existing JSON-LD, the url from the address the page was served from, sameAs from profile links. Never a logo it guessed.
Article
The headline from the first H1, the dates from the article meta tags, and an author only where the page states one.
FAQPage
Questions and answers from details and summary, dt and dd, or a heading whose text ends in a question mark.
What does it write for our About page?
We ran it on attensira.com/about, a page that already carries its own JSON-LD.
The note it attached, verbatim
These are the profile links this page carries; we cannot tell which of them are yours, so check each one and delete any that belongs to somebody else before you ship this.
The founder's personal LinkedIn sits on our About page, so the generator offered it as a sameAs for the company. That would tell an engine the company and the person are the same entity. The tool flagged it rather than guessing, which is the behaviour you want.
It also noticed the page already declares an Organization. Pasting its block in as well would be a duplicate, not an addition.
The run is the result panel at the top of this page. Read on 4 Oct 2026.
What does the generator read, and what won't it write?
Every value in the output above was copied out of the HTML the URL served, and each one is printed next to the tag it came from. That attribution is the point of the tool. A generator that fills author with a name it inferred produces markup that looks correct, validates cleanly, and tells search engines and assistants something about your page that is not true.
- Organization takes its name from
og:site_name, from an Organization node already in the page's JSON-LD, or from the field on this page. It takesurlfrom the origin of the URL the page was finally served from (which is not the address you typed if the site redirected), andsameAsfrom links on the page to hosts that carry profiles. It never invents alogoor acontactPoint: anog:imageis a share image, not a logo, and a phone number read out of body text is a guess with consequences. - Article takes its
headlinefrom the firsth1, falling back toog:titleand thentitle. Dates come fromarticle:published_timeandarticle:modified_time. The author comes frommeta[name="author"], anarticle:author, arel="author"link, or an author already stated in the page's JSON-LD, and from nowhere else. - FAQPage takes pairs from a
details/summary, adt/dd, or a heading whose visible text ends in a question mark. For a heading, the answer is the visible text between it and whichever comes first of the next heading, the end of itssectionorarticle, and the start of thefooter: nothing in the markup says where the author meant the answer to stop. That rule is ours, not a standard, so read the pairs before you ship them: a heading that ends in a question mark but is not a question will be picked up, and only you can tell. - BreadcrumbList takes the trail from navigation markup that names itself a breadcrumb. It is never derived from the URL path. Turning
/docs/getting-startedinto "Getting Started" invents a label your site never published, and a breadcrumb whose names disagree with your own navigation is worse than no breadcrumb.
Generated markup is a draft that describes the page as it was when we read it. We do not check that the block is eligible for any rich result (that is Google's call, made against the live page), and we do not know whether this page is an article, an FAQ or a product listing. Read each block, delete the ones that do not describe this page, and fill the gaps we listed.
What would the crew ship for that page?
Inside Attensira, structured data is safe hygiene: a JSON-LD-only change can open as a pull request on its own in Act mode, and every one carries the note that markup alone is not expected to move an answer. What counts as a safe change.
JSON-LD only: Organization sameAs on /about, company profiles only
attensirawaits for your review
about page · JSON-LD
- unchanged: "@type": "Organization",
- unchanged: "sameAs": [
- removed: the founder's personal LinkedIn profile,
- added: the company's own profiles only,
- unchanged: ]
Web engineer · would hand you a pull request like thisExample · the kind of change this finding calls for, not one that shippedWhy do the missing properties matter more than the generated ones?
The list of properties we could not read is the more useful half of this output. Each one is a fact about your page that no machine can currently establish: no byline means nothing connects the page to a person or an organization with expertise, no dateModified means nothing signals that a page kept current is current, and no sameAs means the entity on this page is not tied to the profiles that corroborate it elsewhere.
Adding the property to your JSON-LD by hand fixes the markup and leaves the page unchanged. Adding it to the page (a visible byline, a published date, a real FAQ section) fixes both, and is what a reader, and anything that reads the page for them, can actually see. Structured data describes a page; it does not substitute for one.
Questions people ask about generated schema
Why did it refuse to generate an Organization block for my site?
Because the page never states the name of the organization that publishes it: no og:site_name, and no Organization node in the JSON-LD it already carries. We could derive a name from your domain or from the text after the dash in your title tag, and it would be right often enough to feel clever and wrong often enough to matter. Add og:site_name to the page, or type the name into the optional field and run it again. Then the value has a source, and the source is you.
Can I paste the generated JSON-LD straight into my site?
Read it first. Everything in it came off your page, but whether the block belongs is a judgement about the page that markup cannot settle. Article on a pricing page is a claim the page does not support, and a sameAs list built from footer links may include a partner's profile rather than yours. Then check it with the schema markup validator, which runs the same property table in the other direction.
My page has an FAQ but the tool found no pairs. Why?
Almost always because the accordion is rendered by JavaScript. Nothing here executes JavaScript, so we read what the server sent, which is what a crawler that does not render sees too. That is a finding about your page, not only about this tool. The other cause is markup that never pairs the question with its answer: a question in a div and an answer in a sibling div with no summary, dt or heading linking them.
Does adding schema get me cited by AI assistants?
On its own, no. Structured data makes the facts on a page machine-readable (who wrote it, when it changed, what question it answers), which removes ambiguity for a system deciding what your page is about. It does not make the page worth citing, and it does not help at all if the crawler never got there. Check that first with the AI crawler URL inspector.
The page already has JSON-LD. Should I add these blocks too?
Not blindly. Where the page already declares a type, the block above is flagged as a duplicate rather than offered quietly. Two Organization blocks describing the same organization differently is a contradiction a parser has to resolve, and it will not ask you which one you meant. Compare them and keep one.
Do you store the pages I run this against?
Not against you. There is no account, no email field and no history tied to you, and the result you see is the whole result. Nothing is held back behind a signup. The generated markup is held for about an hour in a shared cache keyed by the URL, so an identical request in that window returns the same JSON-LD without fetching the page again. Edit the page and re-run after that hour to pick up the change.
This writes the markup. Attensira's crew ships it.
7 days free · card required