Search engines read your HTML and try to understand what each page is about. Headings, content, links, all interpreted by an algorithm doing its best. Schema.org is the optional shortcut where you tell the engines explicitly: "this page is an article, the author is X, it was published on Y, it's about Z". The engines stop guessing.

The reward is not necessarily a higher rank. The reward is richer search results: stars under a recipe, a price under a product, an author photo next to an article, an event date next to a conference, an FAQ snippet under a help page. Pages with rich results have higher click-through, which over time matters more than a small rank bump.

This article shows the five Schema types most sites should use, what they look like in practice, and how to validate without becoming an expert.

How Schema is added to a page

There are three formats, all valid:

  • JSON-LD: a <script type="application/ld+json"> block in the head or body. Recommended by Google. Easiest to maintain because it is separate from the HTML markup.
  • Microdata: attributes inline in the HTML. Older, more verbose.
  • RDFa: like Microdata, even more verbose. Rarely used.

We use JSON-LD throughout. Every example below is a script block you paste into your page.

1. Organization (every site, once)

Tells search engines who is behind the site. Goes on the homepage, or on every page if your CMS supports a global block:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "MIND.DEV",
  "url": "https://mind.dev",
  "logo": "https://mind.dev/favicon.png",
  "foundingDate": "2008",
  "sameAs": [
    "https://www.linkedin.com/company/minddev-it/"
  ],
  "contactPoint": {
    "@type": "ContactPoint",
    "email": "[email protected]",
    "contactType": "customer service"
  }
}
</script>

What this gets you: the right logo and name in Google's Knowledge Panel, a tighter link between your site and your social profiles, support for the "Brand SERP" features.

sameAs is the field for linking your social profiles. Google uses it to confirm "yes, this LinkedIn page belongs to this organisation".

2. Article (blog posts, news, journals)

For every article on your site:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "What a domain name actually is",
  "description": "A domain name is not your website, your hosting, or your IP. It is a leased entry in a hierarchical phonebook.",
  "datePublished": "2025-09-15",
  "dateModified": "2025-09-15",
  "author": {
    "@type": "Organization",
    "name": "MIND.DEV",
    "url": "https://mind.dev"
  },
  "publisher": {
    "@type": "Organization",
    "name": "MIND.DEV",
    "logo": {
      "@type": "ImageObject",
      "url": "https://mind.dev/favicon.png"
    }
  },
  "mainEntityOfPage": "https://mind.dev/en/journal/what-is-a-domain-name"
}
</script>

What this gets you: a structured presence in Google News (if you qualify), the article title and date in rich results, support for "Top Stories" carousels in mobile search.

author can also be a Person (with name, url, and optionally image). For a journal published under a brand, the Organization form is fine.

3. Product (e-commerce)

For every product page:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Espresso Cup, Set of 6",
  "image": "https://example.com/cups.jpg",
  "description": "Hand-painted ceramic espresso cups, 60ml, dishwasher safe.",
  "brand": {"@type": "Brand", "name": "Bottega"},
  "sku": "ESP-006",
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/products/espresso-cups",
    "priceCurrency": "EUR",
    "price": "29.00",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "126"
  }
}
</script>

What this gets you: price and availability under the search result, star rating if you have reviews, sometimes the "free shipping" badge if you also include shippingDetails. WooCommerce, Shopify, Magento all support this through plugins or templates.

4. FAQ (FAQ pages, help pages)

For pages organised as questions and answers:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "How long does a domain registration last?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Between 1 and 10 years, depending on the TLD and the price you pay."
      }
    },
    {
      "@type": "Question",
      "name": "Can I transfer a domain right after registration?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. ICANN imposes a 60-day cooldown after registration during which transfer to another registrar is not allowed."
      }
    }
  ]
}
</script>

What this gets you: an expandable FAQ block directly in the search result, with each question becoming clickable. Strong CTR boost when it triggers.

5. BreadcrumbList (every site with a hierarchy)

For navigation structure:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {"@type": "ListItem", "position": 1, "name": "Home", "item": "https://mind.dev/"},
    {"@type": "ListItem", "position": 2, "name": "Journal", "item": "https://mind.dev/en/journal"},
    {"@type": "ListItem", "position": 3, "name": "What is a domain"}
  ]
}
</script>

What this gets you: the breadcrumb path under the search result instead of the raw URL. Cleaner appearance, slightly better CTR.

How to validate

Two free tools, no signup needed:

Schema.org Validator at validator.schema.org. Paste a URL or the raw JSON, get a list of warnings and errors. Strict, sometimes catches things that other tools miss.

Google Rich Results Test at search.google.com/test/rich-results. Same idea, focused specifically on what Google understands and what triggers rich results in their search. The most useful tool because it tells you "your Article schema is valid, here is the rich result it would produce".

Run a URL through both before publishing significant changes. Both are free, both run in 10 seconds.

What Schema does not do

A few honest limits:

  • It does not guarantee rich results. You can have perfect FAQ markup and Google still chooses not to show the FAQ rich result for your page. They decide. Especially for FAQ, Google tightened the criteria several times since 2023.
  • It does not boost ranking directly. The ranking benefit, if any, is indirect: rich results get more clicks, more clicks improve the page over time.
  • It does not fix bad content. A schema-rich page with thin content does not rank.
  • Lying in schema is a manual penalty. Putting aggregateRating: 5 on a page with no reviews is a violation of Google's guidelines and can lead to a manual action that wipes all rich results from your domain. Only mark up what is actually on the page.

A pragmatic plan

If you are starting from zero:

  1. Add Organization schema to the homepage. Five minutes.
  2. Add Article schema to every blog post automatically through your CMS. WordPress with Yoast or Rank Math does this without you writing JSON.
  3. If you have a shop, configure Product schema in the e-commerce platform. Most do it natively.
  4. Add BreadcrumbList if your site has a hierarchy. Most CMSs handle this automatically too.
  5. Skip FAQ unless you actually have a FAQ page.

Validate with the two tools above. Re-run after every template change. The investment is small, the rich-result reward, when it happens, is real and stable.