webtrajans
en

Schema markup and JSON-LD: a practical guide

Structured data describes your page in a format machines understand. Done right, it helps search engines interpret your content and can unlock rich results.

Updated: 5 min read

Schema markup is a shared vocabulary (from Schema.org) for describing things on a web page: this is a business with these opening hours, this is a product with this price, this is an article written by this person. Search engines, and increasingly AI assistants, use it to understand pages with less guesswork. Google also uses certain types to show rich results: star ratings, prices, breadcrumbs, event dates and more.

JSON-LD is a block of JSON inside a <script> tag, usually in the <head>. It doesn’t change how the page looks.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Elm & Oak Ltd",
  "url": "https://elmandoak.co.uk",
  "logo": "https://elmandoak.co.uk/logo.png",
  "sameAs": [
    "https://www.linkedin.com/company/elm-and-oak",
    "https://www.instagram.com/elmandoak"
  ]
}
</script>

You can generate valid blocks for the common types with our schema markup generator.

The most useful types

Organization

Identifies your company: name, logo, website, social profiles, contact details. Put it on the homepage (or an About page). It helps Google connect your brand’s knowledge panel and logo.

LocalBusiness

For businesses with a physical location or service area: address, phone, opening hours, geo coordinates, price range. Use the most specific subtype available (Dentist, Plumber, Restaurant, AutoRepair). Keep the details identical to your Google Business Profile.

{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "name": "FlowFix Plumbing",
  "telephone": "+44 113 496 0000",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "12 Kirkgate",
    "addressLocality": "Leeds",
    "postalCode": "LS1 6BY",
    "addressCountry": "GB"
  },
  "openingHours": "Mo-Su 00:00-23:59"
}

Product

For product pages: name, image, description, brand, SKU/GTIN, and an offers object with price, currency and availability. Adding aggregateRating or review can enable star ratings, but only for genuine reviews shown on the page. Product markup supports price, availability and review snippets in search and merchant listings.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Ergonomic Office Chair",
  "image": "https://example.com/img/chair.jpg",
  "sku": "EC-200",
  "brand": { "@type": "Brand", "name": "SitWell" },
  "offers": {
    "@type": "Offer",
    "price": "249.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}

Article

For news and blog posts: headline, images, datePublished, dateModified and author (ideally with a URL to an author page). It helps Google show the right date and understand authorship.

Describes the page’s position in the site hierarchy (Home › Guides › SEO). Google can show the breadcrumb trail instead of a raw URL, which makes results easier to read.

FAQPage

Still a valid Schema.org type and still used to understand content, but Google no longer shows FAQ rich results. After restricting them to well-known government and health sites in August 2023, Google stopped displaying them for all sites on 7 May 2026, with the Search Console report being retired in the following months. There’s no need to remove existing FAQ markup, but don’t add it expecting extra visibility in Google.

Rich results: what to expect in 2026

Google has steadily trimmed the list of supported rich results. HowTo results were removed in 2023, and in 2025 Google phased out several niche types such as Course Info, Claim Review and Vehicle Listing. Types that remain widely supported include Product, Review snippet, Breadcrumb, Article, Event, Recipe, Video, Local business, Organization and Job posting. Always check Google Search Central’s current “Search gallery” before investing in a type.

Remember:

  • Eligibility isn’t a guarantee. Google decides per query.
  • Markup must reflect visible content. Marking up reviews, prices or FAQs that users can’t see breaks the guidelines and can lead to a manual action.
  • Self-serving reviews (a business marking up reviews of itself on its own site with LocalBusiness or Organization) don’t get star snippets.

Connecting entities with @id

On larger sites, it helps to link your markup together rather than repeating the same organisation details on every page. Give key entities a stable @id (usually a URL with a fragment) and reference it elsewhere:

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How to Choose an Office Chair",
  "datePublished": "2026-09-30",
  "author": { "@type": "Person", "name": "Sam Patel", "url": "https://example.com/authors/sam-patel" },
  "publisher": { "@id": "https://example.com/#organization" }
}

Here publisher points to the Organization defined once on the homepage with "@id": "https://example.com/#organization". This builds a consistent picture of who publishes what, which matters for search engines and for AI systems that summarise web content.

Testing and validation

  1. Rich Results Test (Google) shows which rich results a URL or code snippet is eligible for and lists errors and warnings.
  2. Schema Markup Validator (validator.schema.org) checks against the whole Schema.org vocabulary, including types Google doesn’t use for rich results.
  3. Search Console enhancement reports show errors across the whole site after Google crawls it.
  4. Our SEO checker detects whether structured data is present alongside your other meta tags.

Errors must be fixed; warnings mean optional properties are missing, and adding them can improve eligibility.

Common mistakes

  • Invalid JSON: a trailing comma or unescaped quote breaks the whole block.
  • Prices or availability in markup that don’t match the page.
  • Using Organization markup with fake or purchased reviews.
  • Several plugins outputting conflicting schema for the same page.
  • Relative URLs for images and logos: use absolute URLs.
  • Forgetting to update dateModified or prices when content changes.

Checklist

  • JSON-LD in the page, generated by one source (theme, plugin or custom code, not all three).
  • Organization on the homepage; LocalBusiness if you serve customers locally.
  • Product, Article and BreadcrumbList on the relevant templates.
  • All marked-up information visible to users and kept up to date.
  • Tested in the Rich Results Test, monitored in Search Console.
  • Titles and descriptions optimised too: see how to write title tags and meta descriptions.

Frequently asked questions

Does schema markup improve rankings?

Not directly. Structured data helps Google understand a page and can make it eligible for rich results, which may improve click-through rate, but it isn't a ranking boost on its own.

Does Google still show FAQ rich results?

No. FAQ rich results were limited to authoritative government and health sites in 2023 and stopped appearing for all sites on 7 May 2026. FAQPage markup is still valid and harmless, but it no longer produces the dropdown snippet.

Which format should I use: JSON-LD, Microdata or RDFa?

JSON-LD. Google recommends it because it sits in a single script block, separate from the visible HTML, and is easier to generate and maintain.

Why is my valid markup not showing rich results?

Valid markup only makes a page eligible. Google decides per query whether to show a rich result, and it also checks content quality, guideline compliance and whether the markup matches what users see.

Related guides