Schema.org markup is one of the most powerful SEO tools, allowing search engines to better understand content. Proper structured data markup can provide rich snippets, improve CTR, and increase the chances of appearing in AI answers. Let’s look at all aspects of implementation.
What is Schema.org
Schema.org is a structured data vocabulary created jointly by Google, Microsoft, Yahoo, and Yandex. It describes entities (products, articles, organizations) in a format that search engines can understand.
Markup formats
1. JSON-LD (recommended)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Заголовок статьи",
"author": {
"@type": "Person",
"name": "Иван Петров"
}
}
</script>2. Microdata
<article itemscope itemtype="https://schema.org/Article">
<h1 itemprop="headline">Заголовок статьи</h1>
<span itemprop="author" itemscope itemtype="https://schema.org/Person">
<span itemprop="name">Иван Петров</span>
</span>
</article>3. RDFa
<article vocab="https://schema.org/" typeof="Article">
<h1 property="headline">Заголовок статьи</h1>
<span property="author" typeof="Person">
<span property="name">Иван Петров</span>
</span>
</article>Recommendation: Use JSON-LD—it is easier to maintain, does not mix with HTML, and is recommended by Google.
Main schema types
Article — for articles and blogs
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Core Web Vitals 2026: полное руководство",
"description": "Актуальное руководство по оптимизации Core Web Vitals",
"image": "https://example.com/article-image.jpg",
"author": {
"@type": "Person",
"name": "Иван Петров",
"url": "https://example.com/authors/ivan"
},
"publisher": {
"@type": "Organization",
"name": "TechBlog",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"datePublished": "2026-01-11",
"dateModified": "2026-01-11",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://example.com/article-url"
}
}Product — for products
{
"@context": "https://schema.org",
"@type": "Product",
"name": "iPhone 17 Pro",
"image": "https://example.com/iphone17.jpg",
"description": "Смартфон Apple iPhone 17 Pro 256GB",
"brand": {
"@type": "Brand",
"name": "Apple"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/iphone17",
"priceCurrency": "RUB",
"price": "149990",
"availability": "https://schema.org/InStock",
"seller": {
"@type": "Organization",
"name": "TechStore"
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "1234"
}
}LocalBusiness — for local businesses
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Веб-студия Digital",
"image": "https://example.com/office.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "ул. Пушкина, д. 10",
"addressLocality": "Москва",
"postalCode": "101000",
"addressCountry": "RU"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 55.7558,
"longitude": 37.6173
},
"telephone": "+7-495-123-45-67",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "18:00"
}
],
"priceRange": "$$"
}FAQPage — for FAQ sections
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Сколько стоит разработка сайта?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Стоимость разработки сайта зависит от сложности проекта. Лендинг — от 50 000 ₽, корпоративный сайт — от 150 000 ₽, интернет-магазин — от 300 000 ₽."
}
},
{
"@type": "Question",
"name": "Какие сроки разработки?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Лендинг — 2-3 недели, корпоративный сайт — 1-2 месяца, интернет-магазин — 2-4 месяца."
}
}
]
}HowTo — for instructions
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "Как установить Node.js на Ubuntu",
"description": "Пошаговая инструкция установки Node.js",
"totalTime": "PT10M",
"step": [
{
"@type": "HowToStep",
"name": "Обновите систему",
"text": "Выполните команду: sudo apt update && sudo apt upgrade",
"url": "https://example.com/nodejs#step1"
},
{
"@type": "HowToStep",
"name": "Добавьте репозиторий NodeSource",
"text": "Выполните: curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -",
"url": "https://example.com/nodejs#step2"
},
{
"@type": "HowToStep",
"name": "Установите Node.js",
"text": "Выполните: sudo apt install -y nodejs",
"url": "https://example.com/nodejs#step3"
}
]
}BreadcrumbList — breadcrumbs
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Главная",
"item": "https://example.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Блог",
"item": "https://example.com/blog"
},
{
"@type": "ListItem",
"position": 3,
"name": "SEO",
"item": "https://example.com/blog/seo"
}
]
}Organization — company information
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "reChecker",
"url": "https://rechecker.ru",
"logo": "https://rechecker.ru/logo.png",
"description": "Бесплатные SEO-инструменты для разработчиков",
"sameAs": [
"https://t.me/recheckerru",
"https://github.com/rechecker"
],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer service",
"email": "support@rechecker.ru"
}
}Advanced techniques
Nested entities
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Обзор MacBook Pro M4",
"author": {
"@type": "Person",
"name": "Иван Петров",
"worksFor": {
"@type": "Organization",
"name": "TechReview"
}
},
"about": {
"@type": "Product",
"name": "MacBook Pro M4",
"brand": {
"@type": "Brand",
"name": "Apple"
}
}
}Multiple schemas on one page
<!-- Организация -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "TechCompany",
"url": "https://example.com"
}
</script>
<!-- Хлебные крошки -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [...]
}
</script>
<!-- Статья -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "...",
"author": {...}
}
</script>Using @graph to combine them
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "TechCompany",
"url": "https://example.com"
},
{
"@type": "WebSite",
"@id": "https://example.com/#website",
"url": "https://example.com",
"name": "TechCompany Blog",
"publisher": {
"@id": "https://example.com/#organization"
}
},
{
"@type": "Article",
"headline": "Заголовок статьи",
"publisher": {
"@id": "https://example.com/#organization"
},
"isPartOf": {
"@id": "https://example.com/#website"
}
}
]
}Implementation in popular frameworks
Next.js
// app/blog/[slug]/page.tsx
import { Article, WithContext } from 'schema-dts';
export default function BlogPost({ post }) {
const jsonLd: WithContext<Article> = {
'@context': 'https://schema.org',
'@type': 'Article',
headline: post.title,
description: post.description,
author: {
'@type': 'Person',
name: post.author.name,
},
datePublished: post.publishedAt,
};
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
<article>{/* контент */}</article>
</>
);
}React (Helmet)
import { Helmet } from 'react-helmet-async';
function ProductPage({ product }) {
const schema = {
'@context': 'https://schema.org',
'@type': 'Product',
name: product.name,
offers: {
'@type': 'Offer',
price: product.price,
priceCurrency: 'RUB',
},
};
return (
<>
<Helmet>
<script type="application/ld+json">
{JSON.stringify(schema)}
</script>
</Helmet>
<div>{/* контент */}</div>
</>
);
}WordPress
// functions.php
function add_schema_markup() {
if (is_single()) {
global $post;
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'Article',
'headline' => get_the_title(),
'datePublished' => get_the_date('c'),
'author' => array(
'@type' => 'Person',
'name' => get_the_author()
)
);
echo '<script type="application/ld+json">' .
json_encode($schema, JSON_UNESCAPED_UNICODE) .
'</script>';
}
}
add_action('wp_head', 'add_schema_markup');Validation and debugging
Validation tools
- reChecker Schema Validator — quickly validate any URL
- Google Rich Results Test — Google’s official tool
- Schema.org Validator — syntax validation
Common errors
1. Missing required fields
// ❌ Плохо — нет author
{
"@type": "Article",
"headline": "Заголовок"
}
// ✅ Хорошо
{
"@type": "Article",
"headline": "Заголовок",
"author": {
"@type": "Person",
"name": "Автор"
}
}2. Incorrect date format
// ❌ Плохо
"datePublished": "11 января 2026"
// ✅ Хорошо (ISO 8601)
"datePublished": "2026-01-11"3. Image URLs that do not exist
// ❌ Плохо — битая ссылка
"image": "https://example.com/deleted-image.jpg"
// ✅ Хорошо — проверенный URL
"image": "https://example.com/existing-image.jpg"Schema.org implementation checklist
Required for all websites
- Organization — company information
- WebSite — website description
- BreadcrumbList — navigation
For content websites
- Article — for articles
- FAQPage — for FAQ sections
- HowTo — for instructions
For e-commerce
- Product — product pages
- Offer — prices and availability
- AggregateRating — ratings
For local businesses
- LocalBusiness — address, business hours
- GeoCoordinates — coordinates
Conclusion
Schema.org markup is an investment in website visibility. It provides:
- Rich snippets — enhanced snippets in search results
- Better understanding of content by search engines
- Higher CTR through visual prominence
- An advantage in AI search — structured data is easier to extract
Start with basic schemas (Organization, Article, BreadcrumbList) and expand gradually. Check your markup regularly using reChecker Schema Validator — errors in JSON-LD are not visible to the naked eye, but are critical for search engines.