DEV Community

Michael Lip
Michael Lip

Posted on • Originally published at zovo.one

Structured Data Is Free SEO: A Guide to JSON-LD Schema Markup

Google's search results have evolved far beyond ten blue links. Rich snippets show star ratings, price ranges, recipe calories, FAQ accordions, event dates, and job listings directly in the results page. The mechanism behind all of these is structured data, specifically JSON-LD schema markup.

What schema markup does

Schema markup is a vocabulary (defined at schema.org) that tells search engines what your content means, not just what it says. A page about a recipe contains ingredient lists, cooking times, and nutritional information. Without schema, Google sees text. With schema, Google sees structured data it can display as a rich result.

The impact is measurable. Pages with rich snippets typically see 20-30% higher click-through rates than plain results at the same position. An FAQ schema can add 2-4 additional lines to your search result, pushing competitors further down the page.

JSON-LD is the preferred format

Three formats exist for structured data: JSON-LD, Microdata, and RDFa. Google recommends JSON-LD because it's decoupled from the HTML markup. You add a script tag to the head or body, and the structured data is independent of how the page is rendered.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Understanding Schema Markup",
  "author": {
    "@type": "Person",
    "name": "Michael Lip"
  },
  "datePublished": "2026-03-25",
  "image": "https://example.com/image.jpg"
}
</script>
Enter fullscreen mode Exit fullscreen mode

The most valuable schema types

Article/BlogPosting: For news and blog content. Enables article-specific rich results and can qualify for Google News inclusion.

Product: Shows price, availability, and review ratings in search results. Essential for e-commerce.

FAQ: Adds expandable questions and answers directly in search results. One of the highest-impact schemas for click-through rate.

HowTo: Step-by-step instructions with images. Shows in search results with step numbers and thumbnail images.

LocalBusiness: Powers the local pack (the map results). Includes address, hours, phone, and reviews.

Recipe: Cooking time, calories, ingredients, ratings. Recipe rich results are among the most visually prominent.

Event: Date, location, price. Shows event-specific details in search.

JobPosting: Title, salary, location, company. Powers the Google Jobs feature.

Common mistakes

Missing required properties. Each schema type has required and recommended properties. A Product without "offers" (price information) won't generate a rich result. Use Google's Rich Results Test to validate.

Schema that doesn't match page content. Adding FAQ schema for questions that don't appear on the page is a violation of Google's guidelines. The structured data must represent content visible on the page.

Wrong type selection. Using "Article" for a product page, or "LocalBusiness" for an online-only business. The schema type must match the content type.

Duplicate schemas without proper nesting. Two separate Product schemas on a page with multiple products, rather than properly nested ItemList containing multiple Product items.

I built a schema generator at zovo.one/free-tools/schema-generator that creates valid JSON-LD for all major schema types. Fill in the fields, and it generates copy-paste-ready markup that passes Google's validation. It includes all required and recommended properties so nothing gets missed.

I'm Michael Lip. I build free developer tools at zovo.one. 500+ tools, all private, all free.

Top comments (1)

Collapse
 
bhavin-allinonetools profile image
Bhavin Sheth

This is actually one of those “small effort, big win” things in SEO.

I started adding JSON-LD to a few pages and didn’t expect much… but the CTR bump was real, especially with FAQ and Product schema.

Also agree on using a generator — doing it manually gets messy fast and easy to miss required fields.

For anyone testing this, I’ve been using simple tools like image converter alongside schema tweaks, and even small optimizations like these start stacking up over time 👍