For the complete documentation index, see llms.txt. Every page on this site is also served as Markdown: append `.md` to any URL, or send `Accept: text/markdown`.
Skip to content
Attensira LogoAttensira

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.

Generate markup

Seconds, on our server · Free, no sign-up

Only used if the page never states who publishes it. We will not guess an organization name from your domain or the tail of your title tag, so without an og:site_name, an existing Organization block, or this field, no Organization markup is generated.

We 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 the article: date tags.
  • FAQPage: from question and answer pairs that are visible in the HTML: a details/summary, a dt/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

See our own run

Share
Our runattensira.com

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
Schema markup generator, production, n=1 run ·

What does it build, and from what?

  1. 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.

  2. Article

    The headline from the first H1, the dates from the article meta tags, and an author only where the page states one.

  3. 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 takes url from the origin of the URL the page was finally served from (which is not the address you typed if the site redirected), and sameAs from links on the page to hosts that carry profiles. It never invents a logo or a contactPoint: an og:image is a share image, not a logo, and a phone number read out of body text is a guess with consequences.
  • Article takes its headline from the first h1, falling back to og:title and then title. Dates come from article:published_time and article:modified_time. The author comes from meta[name="author"], an article:author, a rel="author" link, or an author already stated in the page's JSON-LD, and from nowhere else.
  • FAQPage takes pairs from a details/summary, a dt/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 its section or article, and the start of the footer: 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-started into "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.

Pull requestyour-site

JSON-LD only: Organization sameAs on /about, company profiles only

attensirawaits for your review

about page · JSON-LD

  1. unchanged: "@type": "Organization",
  2. unchanged: "sameAs": [
  3. removed: the founder's personal LinkedIn profile,
  4. added: the company's own profiles only,
  5. unchanged: ]
Web engineer agentWeb engineer · would hand you a pull request like thisExample · the kind of change this finding calls for, not one that shipped

Why 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