Guides

JSON-LD structured data: a practical guide for SEO and AI engines

JSON-LD tells machines what your page already shows people. Done well, it makes a page eligible for rich results and removes any doubt about who you are; done badly, it does nothing, or worse. Here is the method, type by type.

  • JSON-LD
  • Schema.org
  • structured data
  • rich results

In short

JSON-LD is a script block that describes a page's visible content with the Schema.org vocabulary. Google recommends it among the three accepted formats and uses it for rich results, without ever guaranteeing them. It is not required to appear in Google's AI features, but it makes your entity explicit. Start with Organization, BreadcrumbList and Article, describe only what is visible, and validate each template before you ship it.

On this page
  1. What is JSON-LD?
  2. What it does, and what it does not
  3. The rules to follow
  4. The essential types, with examples
  5. Organization on the home page
  6. Article and BlogPosting on content
  7. BreadcrumbList on deeper pages
  8. Product, Service and LocalBusiness on offers
  9. Linking entities with @id and @graph
  10. FAQPage in 2026: no more rich result
  11. Validating your markup
  12. The most common mistakes
  13. How NeoRank checks your JSON-LD
  14. Frequently asked questions

What is JSON-LD?

Structured data is a standard way to tell a search engine what a page contains: an organisation, an article, a product, a breadcrumb trail. The shared vocabulary is called Schema.org; it defines types (Organization, BlogPosting…) and their properties (name, author, datePublished…).

JSON-LD is one of the three formats that carry this vocabulary, alongside Microdata and RDFa. It is a plain JSON object placed in a script tag of type application/ld+json, kept apart from the visible HTML. Google's general guidelines accept all three formats and recommend JSON-LD: it can be maintained without touching the visual template and is easy to generate on the server.

What it does, and what it does not

According to Google's introduction to structured data, markup helps Google understand the page and can make it eligible for rich results: breadcrumbs, article details, logos, reviews and so on. Eligible does not mean displayed. Google is explicit: correct markup guarantees nothing, and the algorithm decides based on the query, the device and the context.

  • What it does: it makes the entity (who publishes), the type of content, the dates, the author and the site's hierarchy explicit. A search engine no longer has to guess.
  • What it does not do: it does not lift a page in the rankings on its own. A structured data manual action removes eligibility for rich results without affecting how the page ranks in web search.
  • And for AI? Google's guide to generative AI features says no special Schema.org markup is required to appear in them, while advising you to keep using structured data as part of your overall SEO strategy.

For other answer engines, JSON-LD remains a readable, unambiguous statement of identity. It does not replace content: what the page says is what gets reused in answers. Our article on AEO explains where it sits among the other levers.

The rules to follow

Google's general guidelines come down to a few principles, and breaking them can make syntactically perfect markup useless, or even get it treated as spam:

  1. Describe visible content. Do not mark up information the reader cannot see, even when it is accurate. If the JSON-LD names an author, the page must name them too.
  2. Describe the page it sits on. An article's markup belongs on the article's page, not on the home page.
  3. Keep it current. Stale information loses eligibility for time-sensitive content.
  4. Do not mislead. No fake reviews, no impersonating an organisation, no content unrelated to the page.
  5. Let Google reach it. A page blocked by robots.txt or by noindex does not pass on its markup.
  6. Write valid JSON. One trailing comma or an unclosed quote, and the whole block is ignored.

The essential types, with examples

There is no need to mark up all of Schema.org. Four families cover most of what a company site, a publication or a SaaS needs.

Organization on the home page

This is your brand's identity card: name, URL, logo and official profiles through sameAs. Google's Organization documentation explains that this markup helps Google understand the organisation's administrative details and choose its logo. The full type is described at schema.org/Organization.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://www.example.com/#organization",
  "name": "Example Studio",
  "url": "https://www.example.com/",
  "logo": "https://www.example.com/logo-512.png",
  "sameAs": [
    "https://www.linkedin.com/company/example-studio",
    "https://github.com/example-studio"
  ]
}
</script>

Use exactly the same brand name as in your titles, your legal notice and your external profiles. For a business with a physical address, LocalBusiness (a subtype of Organization) adds the address, the opening hours and the area served.

Article and BlogPosting on content

On an article, state the headline, the author, datePublished and dateModified. The Article documentation explains that this markup helps Google understand the page better; BlogPosting is the subtype meant for a blog post.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "How we cut our page weight in half",
  "datePublished": "2026-09-01",
  "dateModified": "2026-09-15",
  "author": { "@type": "Organization", "name": "Example Studio", "url": "https://www.example.com/" },
  "publisher": { "@id": "https://www.example.com/#organization" },
  "mainEntityOfPage": "https://www.example.com/blog/page-weight"
}
</script>

Only change dateModified when the content really changes. Showing an update date without an actual update is exactly the kind of misleading signal the guidelines forbid.

The breadcrumb trail describes where a page sits in the site's hierarchy. It must match the trail visible on the page (Breadcrumb documentation).

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.example.com/" },
    { "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://www.example.com/blog" },
    { "@type": "ListItem", "position": 3, "name": "Page weight" }
  ]
}

Product, Service and LocalBusiness on offers

On an offer page, Product or Service describes what you sell. Only add a price, an availability or a rating if they are shown on the page and accurate at the moment the page is crawled.

Linking entities with @id and @graph

When several blocks describe the same organisation, give it a stable identifier (@id, a URL with a fragment) and reference it instead of repeating it. A @graph groups several nodes in a single block. The result: the publisher of an article, the owner of the site and the organisation on the home page are explicitly the same entity.

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://www.example.com/#organization",
      "name": "Example Studio",
      "url": "https://www.example.com/"
    },
    {
      "@type": "WebSite",
      "@id": "https://www.example.com/#website",
      "url": "https://www.example.com/",
      "name": "Example Studio",
      "publisher": { "@id": "https://www.example.com/#organization" }
    }
  ]
}

FAQPage in 2026: no more rich result

The Google Search Central “What's new” page announces that the FAQ rich result no longer appears in Google Search as of May 7, 2026, and that its documentation has been removed. So do not expect expandable questions under your link any more.

The FAQPage type still exists in the Schema.org vocabulary. It remains a clean description of questions and answers visible on the page, readable by any machine. Keep it if your pages have a real FAQ; do not create a FAQ for the sake of the markup.

Validating your markup

  1. Rich Results Test: the Rich Results Test shows which types Google recognises on a URL or a code snippet, and the errors that block eligibility.
  2. Schema.org validator: the Schema Markup Validator checks conformance with the full vocabulary, including types that have no Google rich result.
  3. URL Inspection in Search Console: it shows the HTML Googlebot actually received. Essential when your JSON-LD is injected with JavaScript.
  4. Monitoring: once deployed, Search Console's enhancement reports flag errors across every page concerned.

The most common mistakes

MistakeConsequenceFix
Invalid JSON (trailing comma, quote)The whole block is ignoredGenerate the JSON on the server, never by hand
Marked-up content missing from the pageGuidelines breachedMark up only what is displayed
A different brand name from page to pageA diluted entityOne name, one @id
dateModified bumped with no changeA misleading signalChange it only with the content
The same markup copied onto every pageA false description of each pageOne markup per page template

How NeoRank checks your JSON-LD

The NeoRank Engine reads the JSON-LD of every crawled page. The site audit reports JSON_LD_INVALID when a block does not parse as JSON: it is a syntax check, not a check of conformance with the Schema.org vocabulary, which is why the validator above is still worth running. The full list is in the audit checks.

  • In AI visibility, the Schema.org tile counts the pages of the latest crawl that carry JSON-LD, as well as the invalid blocks (“AI-ready” tiles).
  • The page report, in Crawled pages, shows the JSON-LD found on each URL.
  • The AEO documentation page explains which types to favour for answer engines.

Frequently asked questions

Does JSON-LD directly improve rankings?
No. Google uses it to understand the page and make it eligible for rich results. A manual action removes that eligibility without affecting rankings, which shows it is not a direct ranking lever.
Do Google's AI features need special markup?
No. Google's guide to generative AI features says no special Schema.org markup is needed, while recommending that you keep using structured data as part of your SEO strategy.
Should I remove my FAQPage markup?
Not necessarily. Google has not shown the FAQ rich result since May 2026, but the type still correctly describes a real, visible FAQ. Remove it only if it describes questions that are not on the page.
JSON-LD, Microdata or RDFa: which should I choose?
Google accepts all three and recommends JSON-LD. It is kept apart from the visible HTML, simpler to generate on the server and easier to review, which limits maintenance mistakes.
How do I know whether my JSON-LD blocks are valid across the whole site?
Test one page template with the Rich Results Test and the Schema.org validator, then monitor the whole site: the NeoRank audit flags every block that does not parse as JSON, page by page.

To go further, our 15-check technical SEO audit places JSON-LD among the other checks a page needs, and the free analysis shows where your site stands.

See where your site stands

Run the free analysis to see what the NeoRank Engine finds on your site, JSON-LD included.

Start the free analysis

Sources

  1. Google Search Central — Introduction to structured data markup
  2. Google Search Central — General structured data guidelines
  3. Google Search Central — Article structured data
  4. Google Search Central — Organization structured data
  5. Google Search Central — Breadcrumb structured data
  6. Google Search Central — Latest documentation updates
  7. Google Search Central — Optimizing your website for generative AI features
  8. Schema.org — Getting started
  9. Schema.org — Organization
  10. Schema.org — BlogPosting
  11. Schema.org — FAQPage
  12. Schema Markup Validator
  13. Google Rich Results Test

Share