Free audit
Technical SEO

Schema.org and Structured Data: A Complete JSON-LD Guide for Service Sites and Online Stores

KKyivan team
6 min read
Schema.org JSON-LD markup structure shown as connected nodes
Article contents

In short: structured data is a machine-readable description of your page: who you are, what you offer, how much it costs, who wrote the article. The most convenient format is JSON-LD in the <head>. Markup doesn't lift rankings on its own, but it helps search engines and AI systems understand a page unambiguously, and for stores it unlocks rich results with price and availability.

What is structured data and why does it matter?

A person reads plain text easily, while an algorithm has to guess: is "$49" the product price or the shipping fee? Is "Alex" the author or a character in a case study? Structured data removes the guessing. You state the entity type (organisation, article, product, service) and its properties using the Schema.org vocabulary.

In practice it gives you:

  • Rich results. Price, availability and rating for products; a clear path for pages with breadcrumbs.
  • A clearer brand identity. Search engines connect your site, company name, logo and profiles more reliably.
  • Better readiness for AI answers. Systems that assemble answers extract facts from structured pages more easily. This doesn't guarantee citations, but it removes ambiguity.
  • A foundation for Merchant Center. Product data on the page and in the feed must match, and Product markup helps confirm it.

JSON-LD, Microdata or RDFa: which to choose?

Google recommends JSON-LD. It lives in a separate block and doesn't mix with HTML layout, so it is easier to add, change and test.

Format Where it goes Maintenance
JSON-LD A separate <script> in <head> or <body> Easy, independent of layout
Microdata Attributes inside HTML tags Medium, templates must be edited
RDFa Attributes inside HTML tags Medium, used less often

For new projects choose JSON-LD and don't mix formats on one page.

Which markup types does a business site need?

Type Where to use it Purpose
Organization Homepage, About Name, logo, contacts, social profiles
WebSite Homepage Site name, language
BreadcrumbList All inner pages Breadcrumbs in results
Article / BlogPosting Blog posts Author, dates, image
Service Service pages Service description, provider, area
LocalBusiness Contacts, local pages Address, hours, phone
Product + Offer Product page Price, currency, availability, brand
FAQPage Pages with an FAQ section Structures questions and answers

Don't mark up everything. Use the types that match the real content of the page.

Example: Organization for the homepage

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Kyivan",
  "url": "https://kyivan.com/",
  "logo": "https://kyivan.com/assets/logo.png",
  "email": "hello@kyivan.com",
  "sameAs": [
    "https://t.me/example",
    "https://www.linkedin.com/company/example"
  ]
}

Insert the real data from your site. Contacts and profiles in the markup must match what visitors see.

Example: Article for a blog post

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Article title",
  "datePublished": "2026-09-19T10:00:00+03:00",
  "dateModified": "2026-09-19T10:00:00+03:00",
  "inLanguage": "en",
  "image": "https://kyivan.com/assets/blog/cover.webp",
  "author": { "@type": "Organization", "name": "Kyivan" },
  "publisher": { "@type": "Organization", "name": "Kyivan" }
}

datePublished and dateModified must match the dates visible on the page. Don't update dateModified without real changes to the text.

Example: Product and Offer for a product page

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Product name",
  "image": ["https://example.com/img/product.webp"],
  "brand": { "@type": "Brand", "name": "Brand" },
  "sku": "ABC-123",
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/product/abc-123",
    "priceCurrency": "UAH",
    "price": "1490",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  }
}

Price and availability in the markup must match the page and your Merchant Center feed. Mismatches are a typical reason for product disapprovals.

What changed with rich results?

Since 2023 Google has sharply limited rich results for FAQPage (mostly to well-known government and health sites) and removed HowTo rich results. That doesn't mean you should delete the markup: it remains a valid machine-readable description of the page. Just don't plan click growth around it. Check the current requirements in Google Search Central, because the list of supported types changes.

How do you add markup on MODX, WordPress and Laravel?

  • MODX. Create a chunk with JSON-LD and placeholders (Schema.org and Structured Data: A Complete JSON-LD Guide for Service Sites and Online Stores, 2026-09-19 09:00:00) and include it in the template. For dynamic arrays (products, FAQ) a snippet that builds JSON with json_encode works well.
  • WordPress. Use an SEO plugin that generates base markup, or print your own block in wp_head. Make sure plugins don't duplicate each other's markup.
  • Laravel. Build an array in the controller or a view composer and print it with @json in the Blade template. That way markup always reads from the same models as the page.

The key rule: markup data comes from the same source as the visible text. Then the two never drift apart.

How do you validate markup?

  1. Rich Results Test from Google shows which rich results are available for a page.
  2. Schema Markup Validator checks general correctness against Schema.org, even for types that give no rich result.
  3. Search Console enhancement reports show errors across the whole site, not one page.
  4. After deployment, check the code in the page's source HTML, not just in the inspector: markup must be in the server response or in the DOM after rendering.

Common markup mistakes

  • Marking up things that aren't on the page (reviews, ratings, prices).
  • Duplicates: an SEO plugin and the theme output different Organization blocks.
  • Invalid JSON: a trailing comma, unescaped quotes.
  • Price without currency, or availability in free text instead of Schema.org values.
  • Hidden text the visitor can't see.
  • Stale data after prices or contacts change.

A 5-step rollout plan

  1. List your page templates: homepage, services, article, product, contacts.
  2. For each template pick the markup types from the table above.
  3. Pull data from a single source (CMS fields, models) instead of typing it by hand.
  4. Test one page per template in the Rich Results Test and the validator.
  5. Set up monitoring in Search Console and re-check after every template release.

FAQ

Does Schema.org affect rankings?

Google doesn't call markup a direct ranking factor. It helps understand the page and can produce rich results that influence click-through.

Does markup guarantee a rich snippet?

No. Google decides whether to show a rich result even when markup is valid.

Is markup needed for AI search?

There are no separate requirements, but structured data reduces ambiguity. It's a useful, though not mandatory, part of GEO.

Can you mark up reviews?

Only genuine reviews that visitors can see on the page. Self-published reviews of your own business in markup can be treated as a guideline violation.

How many markup types should a page have?

As many as match its content. For an article that is usually Article, BreadcrumbList and, if there is an FAQ section, FAQPage.

Does markup need updating?

Yes: when prices, contacts, company name or site structure change. Best of all is markup generated automatically from CMS data.

Want to know what's wrong with your site's markup? Request a free Kyivan audit — a developer will check Schema.org, validation errors and consistency between pages and your feed.

Share: Telegram Facebook
K
Kyivan team

Web developer and SEO specialists. We write about technical SEO, Google Shopping and ads.

Three steps to the top of Google

We work in order: first we remove what interferes with the site, then we prepare it for search queries and only then we build up positions. This way, the result lasts longer.

Start with an audit
  1. 1Stage 1

    Technical problems.

    We find and eliminate what prevents Google from reading the site.

    • Indexing, 404 and Redirect Errors
    • Slow loading of pages
    • Duplicate pages and canonical
    ResultA site that the search engine understands and indexes
    Learn more →
  2. 2Stage 2

    Website optimization

    We prepare pages for queries that customers are looking for.

    • Structure, URL and internal linking
    • Title, H1, Schema.org micro markup
    • Texts and content for semantics
    ResultPages that meet customer requests
    Learn more →
  3. 3Stage 3

    SEO promotion

    We are building up positions, traffic and the main thing, applications and sales.

    • Extension of semantics and new pages
    • Expert content and links
    • Reports on applications, not only on items
    ResultStable growth of traffic and applications
    Learn more →

FAQ

Didn't find an answer?

Write to us and we will respond.

Ask a question
Free audit

Find out what's holding your site back in Google

Answer five short questions and we'll send a list of issues with a fix plan.

  • Technical errors that block indexing and speed
  • What to fix first
  • An action plan in plain language
  1. 1Site
  2. 2Goals
  3. 3Platform
  4. 4Situation
  5. 5Contacts
20%
What kind of site do you have?

Choose one option