Перейти к содержимому

← Все статьи блога

Как добавить BlogPosting JSON-LD к статье блога: headline, author и даты

Автор: Алексей Доронин

Редактор вставил JSON-LD из генератора: headline длиннее title в браузере, author - строка «Алексей», datePublished без часового пояса. Yoast уже отдавал Article - в исходнике два блока. Rich Results Test молчал, в Яндексе warning на дату. Отключил разметку в плагине, оставил один script с get_the_date(‘c’) и Person - через 10 минут оба валидаторы зеленые. Боль не в «сложной Schema.org», а в полях, которые не совпали с H1 и автором на странице. За вечер на одном посте - один BlogPosting JSON-LD без дубля.

JSON-LD - блок JSON в head: заголовок, автор, даты, обложка. Для поста блога тип BlogPosting (подтип Article). Здесь - один пост, один вечер, два валидатора.

Честный нюанс из документации Google (обновление 2025-12-10, актуально на июль 2026): юридически обязательных свойств нет. Параллельно половина SEO-гайдов пишет «headline обязателен». Практика: без headline, author, dates, image и publisher rich results и дата в сниппете не стабильны - даже если синтаксис JSON валиден.

Выберите BlogPosting для обычного поста, не NewsArticle

blogposting-json-ld-dlya-stati-bloga-inline-01 Как добавить BlogPosting JSON-LD к статье блога: headline, author и даты

Боль: в JSON-LD стоит Article или NewsArticle «на всякий случай», а пост - обычная заметка в блоге, не новостной разрыв. Google поддерживает Article, NewsArticle и BlogPosting; для записи в блоге корректный тип - BlogPosting (наследует поля Article: headline, author, datePublished, dateModified).

На практике NewsArticle нужен для новостного контента с жесткими правилами freshness. Обычный how-to или разбор процесса - BlogPosting. Типичная ошибка: копировать шаблон Organization с главной и вставить его на single post - там другой @type, другая логика.

Ситуация @type в JSON-LD Что не делать
Обычный пост в блоге BlogPosting Не ставить NewsArticle без новостного формата
Новостной разрыв, редакционный стандарт NewsArticle Не смешивать с BlogPosting на одной URL
Главная, лендинг, не пост WebPage / Organization Не копировать BlogPosting с поста на главную

Результат секции: в script один @type BlogPosting, без путаницы с новостной разметкой.

Соберите headline, author и даты из WordPress, не из генератора

blogposting-json-ld-dlya-stati-bloga-inline-02 Как добавить BlogPosting JSON-LD к статье блога: headline, author и даты

Боль: headline в JSON-LD не совпадает с title в вкладке и H1 на странице. Google сравнивает видимый заголовок и разметку; расхождение - warning или игнор поля. Решение: headline = тот же текст, что видит читатель в H1, до ~110 символов (индустрийный лимит для длинных title).

Author как строка «Алексей» - типичная ошибка. Нужен вложенный объект Person: @type, name, url (страница автора или профиль). sameAs с LinkedIn или Habr - плюс для E-E-A-T, если ссылки реальные.

Даты: ISO 8601 с timezone, например 2026-07-30T12:00:00+03:00. В WordPress - get_the_date(‘c’) для datePublished и get_the_modified_date(‘c’) для dateModified. dateModified только если пост реально обновляли и значение >= datePublished.

  1. Откройте live URL поста: запишите H1, canonical, дату в шапке и имя автора - это эталон.
  2. View Source: найдите существующие script type=»application/ld+json» (Yoast, Rank Math, тема).
  3. Соберите минимальный BlogPosting: @context, @type, headline, author (Person), datePublished, mainEntityOfPage (WebPage @id = canonical).
  4. Добавьте dateModified, image (URL обложки), publisher (Organization + logo), description из meta.
  5. Вставьте один script в head (wp_head + is_singular(‘post’)) или Custom HTML на статике.

Пример BlogPosting JSON-LD:
{
  «@context»: «https://schema.org»,
  «@type»: «BlogPosting»,
  «headline»: «Как добавить BlogPosting JSON-LD к статье блога: headline, author и даты»,
  «description»: «Пошагово: один BlogPosting без дубля, Person-автор, ISO-даты, проверка Google и Яндекса.»,
  «mainEntityOfPage»: { «@type»: «WebPage», «@id»: «https://example.com/blogposting-json-ld-dlya-stati-bloga/» },
  «author»: { «@type»: «Person», «name»: «Алексей Доронин», «url»: «https://example.com/author/aleksei-doronin/» },
  «datePublished»: «2026-07-30T10:00:00+03:00»,
  «dateModified»: «2026-07-30T18:30:00+03:00»,
  «image»: «https://example.com/wp-content/uploads/2026/07/cover.jpg»,
  «publisher»: { «@type»: «Organization», «name»: «Example Blog», «logo»: { «@type»: «ImageObject», «url»: «https://example.com/wp-content/uploads/logo.png» } }
}

В реальном проекте замените example.com на ваш домен. headline копируйте из get_the_title(), не из ChatGPT-шаблона с другим wording.

Оставьте один источник разметки: плагин или тема, не оба

blogposting-json-ld-dlya-stati-bloga-inline-03 Как добавить BlogPosting JSON-LD к статье блога: headline, author и даты

Боль: в head два BlogPosting - Yoast/Rank Math и ручный script или тема. Google видит конфликт, rich results нестабильны. Решение: один источник на single post. Либо SEO-плагин (настройки Schema), либо ваш код в child theme, либо отдельный плагин с фильтром - но не все вместе.

Часто ломается так: разметку в плагине не отключили, «на всякий случай» добавили второй script из гайда. Отключите Article/BlogPosting в Yoast (Search Appearance - Content Types - Posts) или аналог в Rank Math, оставьте один генератор. В GitHub-плагинах (soderlind-json-ld, Ligase-Schema-Markup) смотрите фильтры - один @graph лучше, чем два независимых script.

Тема WordPress может тянуть BlogPosting из inc/json-ld.php, а SEO-плагин дублирует поля. Разметка только на is_singular(‘post’), не на архивах - там второй BlogPosting ломает валидатор.

Схема на вечер:

Открыть пост → View Source → если два BlogPosting → отключить дубль в плагине → один script → Rich Results Test → microtest Яндекса

Результат: один application/ld+json на URL, без конкурирующих headline и author.

Проверьте URL в Rich Results Test и валидаторе Яндекса

Боль: «разметка есть, rich results нет» - часто image URL не crawlable, publisher без logo, или URL закрыт auth wall. Проверка - по публичному URL без логина. Советуем убедиться, что пост открывается без пароля; избегайте теста draft за auth wall.

Google: Rich Results Test - вставьте URL поста, смотрите Article/BlogPosting без критических ошибок. Синтаксис отдельно: validator.schema.org. Rich Results Test проверяет eligibility для Google; schema.org validator - чистый JSON-LD без учета Яндекса. Делайте оба шага: зеленый syntax не гарантирует дату в сниппете, если image 404 или headline расходится с H1.

Яндекс: microtest - URL или фрагмент HTML. Дата без timezone дает warning «некорректное значение даты» - типичная ошибка после копипасты из генератора без +03:00.

  1. Rich Results Test - BlogPosting распознан, headline/author/dates без critical.
  2. microtest - BlogPosting виден, даты ISO 8601.
  3. View Source - ровно один script BlogPosting.
  4. Сравните headline в JSON и H1 в браузере - символ в символ.
  5. Опционально Request indexing в Search Console после правок.

Чек-лист: когда разметка готова к индексации

До FAQ - критерии успеха. Пять зеленых пунктов - итог: получите один BlogPosting без дубля, сможете закрыть задачу.

  • Один BlogPosting на live URL, без второго блока от плагина.
  • headline = видимый H1, не длиннее ~110 символов.
  • author - Person с name и url, не строка.
  • datePublished и dateModified в ISO 8601 с timezone; dateModified >= datePublished.
  • Rich Results Test и microtest без критических ошибок на дату проверки.

Fail-сигналы: дубль BlogPosting, author string, дата без timezone, headline 200+ символов, image 404. Важно: перед индексацией проверьте author url и image - не стоит откладывать. Следующий шаг после BlogPosting - FAQPage или BreadcrumbList, но не в том же вечере: сначала стабильный пост.

Аудит блога - GEO-чеклист для ИИ-поиска; после поста - llms.txt для сайта; процесс микроразметки - calmopsai.com.

Редакционная проверка: Елена Ковалева, главный эксперт по SEO/GEO.
Достоверность: типы Article/BlogPosting, рекомендуемые поля и ISO-даты - Google Search Central и schema.org, accessed 2026-07-30; валидатор Яндекса - ISO 8601 для date. Показы Wordstat по кластеру «микроразметка сайта» в этом прогоне не верифицированы (MCP Wordstat недоступен).

Частые вопросы

Article или BlogPosting - что выбрать для поста WordPress?

Для обычной записи блога - BlogPosting. Article в документации Google - общий класс; BlogPosting точнее описывает формат. NewsArticle только для новостного контента с редакционными правилами freshness.

Нужен ли dateModified при каждой правке?

Нет. dateModified - когда контент реально обновили: текст, обложка, существенные правки. Косметическая правка опечатки - спорный случай; главное - dateModified не раньше datePublished и не фиктивная «сегодня» без изменений.

Как не задвоить schema плагином и ручным кодом?

View Source до правок. Если Yoast или Rank Math уже выводит BlogPosting - отключите schema для posts в настройках плагина или уберите ручной script. Один источник на URL.

Обязателен ли headline, если Google пишет «нет required properties»?

Юридически Google не штрафует пустой headline. Практически без headline, author и dates rich results и дата в сниппете часто не появляются. Делайте recommended набор, не минимальный пустой JSON.

Куда вставлять script на WordPress?

В head через hook wp_head в functions.php child theme при is_singular(‘post’), либо через плагин JSON-LD с фильтром на BlogPosting. Не в body поста - парсеры ожидают JSON-LD в head или допустимо в body, но head - канон для тем.

Чем BlogPosting JSON-LD отличается от «микроразметки всего сайта»?

Гайды про микроразметку сайта закрывают Organization, Product, FAQ целиком. Эта инструкция - только один пост: headline, author, даты, один script, два валидатора. Не подменяет site-wide schema.

Telegram