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`.
Attensira Logo
Attensira

Schema markup generator

JSON-LD written from what your page actually says. Every value names the tag it came from, and anything the page does not state is left out and listed.

Only used if the page never states who publishes it. We will not guess an organisation 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.

What this generator reads, and what it refuses to 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.

Why 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 organisation 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 actually gets read when an assistant is deciding whether your page is worth citing. 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 organisation 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, and anyone promising that is selling something. 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 organisation 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.

Where to go next

See Where You Rank in AI Search Results

Get your free AI visibility report in 60 seconds. Track how often ChatGPT, Claude, and Google AI mention your brand—and discover exactly what your competitors are doing to outrank you.