JSON-LD разметка схемы: Полное руководство по SEO

Последнее обновление 28.03.2026
Структурированные данные Расширенные результаты

JSON-LD структурированные данные точно сообщают поисковым системам содержание вашего контента. Правильная разметка схемы открывает расширенные результаты в Google — выпадающие FAQ, карусели статей, хлебные крошки и другое — прямо на странице поиска.

В этом руководстве рассмотрены все основные типы схем с реальным кодом на C# и точным JSON-выводом. Все примеры взяты из рабочего кода Blazor.

Иллюстрация, показывающая, как JSON-LD структурированные данные обеспечивают расширенные результаты в Google, включая FAQ, карусели статей и навигацию по хлебным крошкам
JSON-LD структурированные данные — самый удобный способ добавить разметку схемы, так как они находятся в отдельном скрипте, полностью отделённом от HTML.

Что такое JSON-LD и почему это важно для SEO

JSON-LD (JavaScript Object Notation for Linked Data) — метод кодирования структурированных данных в формате JSON. Поисковые системы, такие как Google, читают эти данные, чтобы понять смысл вашего контента, а не только ключевые слова.

Когда Google может распознать ваши структурированные данные, страница становится кандидатом на расширенные результаты — визуально улучшенные списки с рейтингами, FAQ, изображениями статей, хлебными крошками и другими функциями прямо в результатах поиска. Такие результаты получают больше кликов, чем обычные ссылки.

Google официально рекомендует JSON-LD вместо Microdata и RDFa, так как его можно разместить в любом месте страницы, включая <head>, без изменения существующих HTML-элементов. Структурированные данные полностью отделены от разметки.

Право на расширенные результаты

Корректная разметка схемы делает ваши страницы подходящими для FAQ, каруселей статей, хлебных крошек и других расширенных функций в Google Search.

Больше кликов при том же ранжировании

Семантическая ясность

Структурированные данные устраняют неоднозначность. Страница с вопросами и ответами явно объявлена как FAQPage, чтобы Google отображал её как расширенный результат FAQ.

Точно сообщите поисковикам, что у вас есть

Без изменений HTML

JSON-LD размещается в скрипте в <head>. Он не влияет на визуальный HTML, поэтому добавление или обновление схемы не нарушит верстку или доступность.

Чёткое разделение ответственности

JSON-LD против Microdata и RDFa

Существует три формата для внедрения структурированных данных schema.org на веб-страницы. Все они поддерживаются Google, но существенно отличаются по способу применения и сопровождения.

Формат Расположение синтаксиса Поддержка Влияние на SEO Рекомендация Google
JSON-LD Отдельный скрипт Просто — без изменений HTML Полная поддержка расширенных результатов Рекомендуется
Microdata Атрибуты в HTML Высокая — тесно связана с разметкой Полная поддержка расширенных результатов Поддерживается
RDFa Атрибуты в HTML Высокая — тесно связана с разметкой Полная поддержка расширенных результатов Поддерживается

Почему JSON-LD лучше для поддержки

В Microdata и RDFa атрибуты схемы разбросаны по всему HTML. Изменение шаблона может незаметно сломать данные. JSON-LD — автономный блок, обновите скрипт — HTML не затрагивается.

Основные типы схем и когда их применять

Schema.org определяет сотни типов, но несколько покрывают большую часть веб-контента. Именно они открывают расширенные результаты в Google Search.

Тип схемы Сценарий использования Тип расширенного результата
Article Блоги, руководства, новости Карусель статей, главные новости
FAQPage Страницы с вопросами и ответами Выпадающий FAQ в результатах поиска
BreadcrumbList Любая страница с навигационной иерархией Хлебные крошки под URL
WebSite / WebPage Главная, хабы, лендинги Поиск по сайту, распознавание сущностей
SoftwareApplication Приложения, инструменты, ПО Расширенный результат приложения с рейтингом и ценой

Словарь Schema.org

Все типы схем определены на schema.org. Свойство @context в каждом JSON-LD блоке указывает парсерам использовать словарь schema.org. Несколько типов схем можно комбинировать на одной странице — Google обрабатывает каждый скрипт отдельно.

Реализация схемы статьи

Схема статьи — самый важный тип для контентных сайтов. Она сообщает Google заголовок, описание, дату публикации, автора и издателя — минимальный набор для расширенных результатов.

Ниже класс C# — модель сериализации. Каждое свойство напрямую соответствует полю JSON-LD с атрибутами JsonPropertyName.

C#Класс ArticleSchema на C# (JsonLdService.cs)
private class ArticleSchema
{
    [JsonPropertyName("@context")]
    public string Context { get; } = "https://schema.org";

    [JsonPropertyName("@type")]
    public string Type { get; } = "Article";

    [JsonPropertyName("headline")]
    public string? Headline { get; set; }

    [JsonPropertyName("description")]
    public string? Description { get; set; }

    [JsonPropertyName("image")]
    public string? Image { get; set; }

    [JsonPropertyName("url")]
    public string? Url { get; set; }

    [JsonPropertyName("author")]
    public Organization? Author { get; set; }

    [JsonPropertyName("publisher")]
    public ArticlePublisher? Publisher { get; set; }

    [JsonPropertyName("datePublished")]
    public string? DatePublished { get; set; }

    [JsonPropertyName("dateModified")]
    public string? DateModified { get; set; }

    [JsonPropertyName("articleSection")]
    public List<string>? ArticleSection { get; set; }
}

Обязательные свойства: headline, image, datePublished, dateModified, author и publisher. Массив articleSection необязателен, но рекомендуется — он указывает тематическую область статьи Google.

HTMLJSON-LD вывод схемы статьи
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "JSON-LD Schema Markup: Complete SEO Implementation Guide",
  "description": "Learn how to implement JSON-LD structured data for Article, FAQPage, BreadcrumbList, WebSite, and WebPage schema types.",
  "image": "https://ghostlyinc.com/images/web/jsonldguide/opengraph/hero-1200.png",
  "url": "https://ghostlyinc.com/en/json-ld-schema-markup-seo-guide/",
  "author": {
    "@type": "Organization",
    "name": "GhostlyInc",
    "url": "https://ghostlyinc.com"
  },
  "publisher": {
    "@type": "Organization",
    "name": "GhostlyInc",
    "logo": {
      "@type": "ImageObject",
      "url": "https://ghostlyinc.com/images/logo.png"
    }
  },
  "datePublished": "2026-03-28T10:00:00Z",
  "dateModified": "2026-03-28T10:00:00Z",
  "articleSection": [
    "What is JSON-LD and why it matters for SEO",
    "JSON-LD vs. Microdata vs. RDFa",
    "Core schema types and when to use them",
    "Article schema implementation"
  ]
}
</script>

Автор и издатель имеют тип Organization. Для личных блогов автор может быть Person с именем и URL.

Схема FAQ для расширенных сниппетов

Схема FAQPage создаёт расширенные результаты FAQ — раскрывающиеся пары вопросов и ответов, отображаемые прямо в результатах Google под вашей страницей. Это значительно увеличивает занимаемое место, улучшая видимость и кликабельность.

Класс FaqPage содержит список вопросов. Каждый вопрос должен иметь имя (вопрос) и acceptedAnswer с текстом (ответ).

C#Класс FaqPage на C# (JsonLdService.cs)
private class FaqPage
{
    [JsonPropertyName("@context")]
    public string Context { get; } = "https://schema.org";

    [JsonPropertyName("@type")]
    public string Type { get; } = "FAQPage";

    [JsonPropertyName("@id")]
    public string? Id { get; set; }

    [JsonPropertyName("name")]
    public string? Name { get; set; }

    [JsonPropertyName("mainEntity")]
    public List<FaqEntity>? MainEntity { get; set; }
}

private class FaqEntity
{
    [JsonPropertyName("@type")]
    public string Type { get; } = "Question";

    [JsonPropertyName("name")]
    public string? Name { get; set; }

    [JsonPropertyName("acceptedAnswer")]
    public FaqAnswer? AcceptedAnswer { get; set; }
}

private class FaqAnswer
{
    [JsonPropertyName("@type")]
    public string Type { get; } = "Answer";

    [JsonPropertyName("text")]
    public string? Text { get; set; }
}

Вывод — один блок FAQPage с массивом mainEntity. Каждый элемент — тип Question с acceptedAnswer. Google поддерживает до десяти вопросов на странице для расширенных результатов.

HTMLJSON-LD вывод схемы FAQ
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "@id": "https://ghostlyinc.com/en/json-ld-schema-markup-seo-guide/#faq",
  "name": "Frequently asked questions",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is the difference between JSON-LD and Microdata?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "JSON-LD is a separate script block that lives in the head and does not touch HTML. Microdata adds attributes directly to HTML elements. Google recommends JSON-LD for its maintainability."
      }
    },
    {
      "@type": "Question",
      "name": "How many FAQ questions can I mark up?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Google supports up to ten questions per page for the FAQ rich result. Additional questions are still valid schema but will not appear in the search result enhancement."
      }
    }
  ]
}
</script>

@id в блоке FAQPage привязывает схему к конкретному фрагменту URL. Это лучшая практика для страниц с несколькими блоками схем, позволяя парсерам однозначно идентифицировать каждую сущность.

Схемы WebSite и WebPage

Схемы WebSite и WebPage создают базовую модель сущностей сайта. WebSite описывает сам сайт — имя, URL, язык и издателя. WebPage описывает отдельную страницу и связывает её с WebSite через isPartOf.

Оба класса используют одинаковый JSON-LD шаблон. @id у WebSite — корень домена; @id у WebPage — полный URL страницы.

C#Классы WebSiteSchema и WebPageSchema на C# (JsonLdService.cs)
private class WebSiteSchema
{
    [JsonPropertyName("@context")]
    public string Context { get; } = "https://schema.org";

    [JsonPropertyName("@type")]
    public string Type { get; } = "WebSite";

    [JsonPropertyName("name")]
    public string? Name { get; set; }

    [JsonPropertyName("url")]
    public string? Url { get; set; }

    [JsonPropertyName("inLanguage")]
    public string? InLanguage { get; set; }

    [JsonPropertyName("publisher")]
    public Organization? Publisher { get; set; }
}

private class WebPageSchema
{
    [JsonPropertyName("@context")]
    public string Context { get; } = "https://schema.org";

    [JsonPropertyName("@type")]
    public string Type { get; } = "WebPage";

    [JsonPropertyName("@id")]
    public string? Id { get; set; }

    [JsonPropertyName("name")]
    public string? Name { get; set; }

    [JsonPropertyName("description")]
    public string? Description { get; set; }

    [JsonPropertyName("url")]
    public string? Url { get; set; }

    [JsonPropertyName("inLanguage")]
    public string? InLanguage { get; set; }

    [JsonPropertyName("isPartOf")]
    public WebSiteReference? IsPartOf { get; set; }
}

Свойство inLanguage использует коды языков BCP 47 (например, en, de, fr). Связь isPartOf связывает WebPage с WebSite через @id домена. Это помогает Google построить полную модель сущностей сайта.

HTMLJSON-LD вывод схем WebSite и WebPage
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "GhostlyInc",
  "url": "https://ghostlyinc.com",
  "inLanguage": "en",
  "publisher": {
    "@type": "Organization",
    "name": "GhostlyInc",
    "url": "https://ghostlyinc.com"
  }
}
</script>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "@id": "https://ghostlyinc.com/en/json-ld-schema-markup-seo-guide/",
  "name": "JSON-LD Schema Markup: Complete SEO Implementation Guide",
  "description": "Learn how to implement JSON-LD structured data for Article, FAQPage, BreadcrumbList, WebSite, and WebPage schema types.",
  "url": "https://ghostlyinc.com/en/json-ld-schema-markup-seo-guide/",
  "inLanguage": "en",
  "isPartOf": {
    "@type": "WebSite",
    "@id": "https://ghostlyinc.com"
  }
}
</script>

Лучшие практики реализации

Метод WrapInScriptTag — единственная точка, где JSON-строки превращаются в валидные JSON-LD блоки. Он оборачивает сериализованные данные в скрипт с MIME типом application/ld+json.

Этот метод вызывают все строители схем в сервисе — Article, FAQPage, BreadcrumbList, WebSite и WebPage передают сюда сериализованный JSON.

C#Метод WrapInScriptTag (JsonLdService.cs)
private static MarkupString WrapInScriptTag(string json)
{
    var builder = new StringBuilder();
    builder.AppendLine("<script type=\"application/ld+json\">");
    builder.AppendLine(json);
    builder.AppendLine("</script>");

    return new MarkupString(builder.ToString());
}

Объект SchemaContext — входная точка для метода BuildSchema. Он содержит все данные для построения полного набора блоков схем страницы — тип, метаданные, FAQ, иерархию хлебных крошек и данные статьи.

C#Логика диспетчеризации BuildSchema (JsonLdService.cs)
public SchemaBuildResult BuildSchema(SchemaContext context)
{
    if (context == null) throw new ArgumentNullException(nameof(context));

    var jsonLd = new List<MarkupString>();

    switch (context.PageType)
    {
        case PageSchemaType.Home:
            jsonLd.Add(WebSite(context));
            jsonLd.Add(WebPage(context));
            break;
        case PageSchemaType.Article:
            jsonLd.Add(Article(context.Article!));
            break;
        case PageSchemaType.Tool:
            jsonLd.Add(WebPage(context));
            jsonLd.Add(SoftwareApplication(context.SoftwareApplication!));
            break;
        case PageSchemaType.Hub:
            jsonLd.Add(WebPage(context));
            break;
    }

    if (context.Faqs != null && context.Faqs.Count > 0)
    {
        jsonLd.Add(FAQ(context.Faqs.ToList(), context.FaqTitle, context.Url));
    }

    if (context.ParentHierarchy.Count > 0)
    {
        jsonLd.Add(BreadcrumbList(BuildBreadcrumbItems(context)));
    }

    return new SchemaBuildResult(jsonLd, context.PageType == PageSchemaType.Article);
}

Переключатель dispatch делает построитель схем модульным. FAQ и хлебные крошки всегда добавляются, если есть, независимо от типа страницы. Это позволяет добавлять FAQ или хлебные крошки на любую страницу без изменения основной логики.

Тестирование и проверка вашей схемы

Корректный синтаксис JSON-LD не гарантирует право на расширенные результаты. Инструменты Google проверяют синтаксис и соответствие контента требованиям политики для каждого типа расширенных результатов.

Тест расширенных результатов

Используйте search.google.com/test/rich-results для проверки любого URL или вставьте HTML. Google покажет обнаруженные типы расширенных результатов и укажет отсутствующие обязательные свойства.

Официальный проверщик соответствия Google

Валидатор разметки схемы

validator.schema.org проверяет вашу разметку по спецификации schema.org независимо от правил Google для расширенных результатов. Полезно для поиска опечаток и несоответствий типов.

Проверка синтаксиса Schema.org

Google Search Console

Раздел «Улучшения» в Search Console показывает ошибки и предупреждения схемы по всем индексированным страницам. Используйте для постоянного мониторинга после первичной проверки.

Масштабный мониторинг после запуска

Часто задаваемые вопросы

Ответы на распространённые вопросы по разметке JSON-LD