DEV Community

Anosh
Anosh

Posted on

Structured Data: How Schema Markup Actually Helps Search Engines Understand Pages

"Add schema to get rich snippets" is the most common way structured data gets explained, and it's backwards. Rich results are a possible side effect. The real job of schema is simpler: it helps a machine understand what a page is about.

Search engines are good at reading text, but text is ambiguous. Is "Apple" a fruit or a company? Is "Jordan" a country or a person? Is "$49" a price, a fee or a random number? Schema removes that guesswork.

The mental model

Think of it as a pipeline:

Page content
    ↓
Structured entities (things)
    ↓
Machine-readable relationships
    ↓
Search engine understanding
Enter fullscreen mode Exit fullscreen mode
  • Page content: the words, images and numbers a human reads
  • Entities: the distinct things the page is about, like a company, a person, a product or an event
  • Relationships: how those things connect (this article was written by this person, who works for this organization)
  • Understanding: the search engine can place your page in its knowledge of the world, instead of guessing from keywords

Schema.org and JSON-LD

These two get mixed up constantly, but they're different things.

  • Schema.org is the shared vocabulary. It defines types (Product, Event) and properties (price, startDate). Think of it as the dictionary.
  • JSON-LD is the format you write it in. Think of it as the sentence.

Google recommends JSON-LD because it lives in a separate <script> block, so it doesn't tangle with your visible HTML:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Example Co",
  "url": "https://example.com",
  "logo": "https://example.com/logo.png",
  "sameAs": [
    "https://www.linkedin.com/company/example"
  ]
}
</script>
Enter fullscreen mode Exit fullscreen mode

A few core ideas:

  • @context says which vocabulary you're using
  • @type says what kind of thing this is
  • Properties describe it
  • @id lets you give an entity a stable identifier, so other blocks can refer to it

The types you'll actually use

Organization

  • Describes the business or brand behind the site
  • Key properties: name, url, logo, sameAs (links to official profiles)
  • It tells search engines which entity your site belongs to, and connects your profiles together

Person

  • Describes an individual, such as an author or founder
  • Key properties: name, url, jobTitle, sameAs
  • Helpful for tying content to a real author

WebSite

  • Describes the site as a whole
  • Key properties: name, url
  • Helps clarify your site name. Google retired the old sitelinks search box feature, so don't add it expecting that result.

Article

  • Describes a blog post or news piece
  • Key properties: headline, author, datePublished, dateModified, image
  • Tells the engine who wrote it and when, and when it was last updated

Product

  • Describes something for sale
  • Key properties: name, image, description, offers (price, currency, availability), aggregateRating
  • Turns a product page into clean, comparable data: what it is, what it costs, whether it's in stock

BreadcrumbList

  • Describes where a page sits in your site's hierarchy
  • Key properties: a list of items with position, name and item (URL)
  • Shows how your content is organized, which helps both understanding and navigation

LocalBusiness

  • Describes a business with a physical presence
  • Key properties: name, address, telephone, openingHours, geo
  • Connects the page to a real-world location, which supports local search

FAQPage

  • Describes a page of questions and answers
  • Key properties: mainEntity with Question and acceptedAnswer
  • Marks up the question-and-answer structure clearly. Note that Google now shows FAQ rich results only for a small set of well-known authoritative sites, so the value for most sites is clarity, not appearance.

Review

  • Describes a review of something, including the rating and reviewer
  • Key properties: reviewRating, author, itemReviewed
  • Make sure the review is about something real and visible on the page. Self-serving reviews of your own business, placed on your own site, aren't eligible for review stars.

Event

  • Describes something happening at a specific time and place
  • Key properties: name, startDate, location, eventAttendanceMode, offers
  • Gives the engine exact dates, venues and ticket info, which is hard to pull reliably from prose

Where relationships come in

Single blocks are useful, but the real power is connecting entities. Here, an article points to its author and publisher using @id:

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://example.com/#org",
      "name": "Example Co",
      "url": "https://example.com"
    },
    {
      "@type": "Person",
      "@id": "https://example.com/#author",
      "name": "Jane Doe",
      "worksFor": { "@id": "https://example.com/#org" }
    },
    {
      "@type": "Article",
      "headline": "How Schema Works",
      "author": { "@id": "https://example.com/#author" },
      "publisher": { "@id": "https://example.com/#org" },
      "datePublished": "2026-10-01"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Now the engine sees a small graph: an article, written by a person, who works for an organization. That's understanding, not just labelling.

Valid schema does not equal a guaranteed rich result

This is where expectations go wrong. Valid markup means your code follows the rules. It doesn't mean Google will do anything visible with it.

Reasons valid schema may produce no rich result:

  • Eligibility. Not every type has a rich result, and some have been restricted or retired.
  • Quality and trust. Google decides whether your page and site deserve the enhancement.
  • Content mismatch. Markup must reflect what users can see on the page. Marking up hidden or invented content breaks guidelines and can lead to a manual action.
  • Missing required properties. The markup might validate as schema but lack what a specific rich result needs.
  • Google's discretion. Even eligible pages don't always get the feature on every search.

So treat the two things separately:

  • Valid: passes syntax and vocabulary checks
  • Eligible: meets Google's documented requirements for a given feature
  • Displayed: Google chooses to show it, sometimes

Your control stops at the first two.

Common mistakes

  • Marking up content that isn't visible on the page
  • Copying a template without changing the values
  • Duplicate or conflicting blocks from both a plugin and the theme
  • Adding aggregateRating with invented numbers
  • Using the wrong type because it "gets stars"
  • Treating schema as a ranking factor. It helps understanding. It isn't a shortcut to higher rankings.
  • Setting it up once and never updating prices, dates or availability

How to test it

  1. Run the page through the Rich Results Test to see which features it's eligible for
  2. Use the Schema Markup Validator to check general schema.org syntax
  3. Watch the Enhancements reports in Search Console for errors and warnings
  4. Compare the markup against the visible page and ask whether they say the same thing

Final thoughts

Schema is a translation layer between how humans read a page and how machines parse it. Done well, it makes your pages clearer, your entities more consistent and your content easier to connect to the wider web of information. Sometimes that earns a rich result, and sometimes it simply means a search engine understood you correctly.

Start with the basics, which are Organization, WebSite, Article or Product depending on the page, and BreadcrumbList. Keep it accurate and keep it honest.

What's the schema type that gave you the most trouble? Tell me in the comments.

Suggested tags: seo, webdev, json, beginners

Visit my website: anoshbb.com

Top comments (2)

Collapse
 
citedy profile image
Dmitry Sergeev •

We need to output a short comment, following dev style. No quotes, no labels, no markdown. Must be specific reaction or question about the video. No promotional. Should be casual, maybe ask about implementation details. Ensure no em-dash, no curly quotes, no double hyphen. Use straight quotes if needed. Probably: "i tried adding product schema but didn't get the snippet, any tips on debugging?" That's fine. Ensure short, maybe one sentence. Check: no double hyphen. No special characters. Output only

Collapse
 
shieldxbot profile image
shieldx •

The gap between implementing schema and actually seeing those rich snippets show up in SERPs is huge. I have often seen developers perfectly validate their JSON-LD through the Rich Results Test only to wait weeks without seeing any visual change in search results. One thing I have learned is that Google often uses schema as a signal for confidence rather than a guarantee for display. It is also worth noting that if your structured data contradicts the visible content on the page, Google might ignore it entirely or even flag it as spammy. Do you have any specific advice on how to handle schema for dynamic content where the properties might change frequently?