Schema Markup WordPress: пошаговое добавление структурированных данных в 2026 году
Что такое Schema Markup и почему он важен для WordPress
Schema.org – это набор типизированных атрибутов, которые помогают поисковым системам понять содержание страницы. При правильной разметке ваш контент (рецепты, товары, отзывы) может появиться в виде rich snippets – улучшенных сниппетов в выдаче, что повышает CTR и позицию в SERP.
В WordPress добавить schema markup проще, чем кажется: от готовых плагинов до чистого кода в functions.php. В этой статье мы разберём оба подхода, покажем готовые примеры и расскажем, как проверить разметку.
Лучшие плагины для автоматической разметки
- Schema & Structured Data for WP & AMP – поддерживает более 30 типов сущностей, генерирует JSON‑LD и выводит
<script type="application/ld+json">в<head>. Идеален для новостных сайтов и блогов. - WP Recipe Maker – специализированный плагин для рецептов. Автоматически добавляет
Recipeschema, выводит время готовки, ингредиенты и рейтинг. - WooCommerce SEO – если ваш магазин работает на WooCommerce, этот плагин генерирует разметку
Product,OfferиReviewбез дополнительного кода. - Schema Pro – визуальный конструктор, позволяющий задавать шаблоны разметки для любой записи через UI.
Все перечисленные плагины совместимы с последними версиями WordPress и проходят проверку на конфликт с другими расширениями.
Ручное добавление JSON‑LD в тему
Если нужен полный контроль или вы хотите минимизировать количество плагинов, можно внедрить разметку вручную. Самый надёжный способ – вывод JSON‑LD через хук wp_head. Ниже пример функции, добавляющей разметку для отдельного поста «Рецепт».
add_action( 'wp_head', 'my_schema_recipe_markup' );
function my_schema_recipe_markup() {
if ( ! is_single() || get_post_type() !== 'post' ) {
return;
}
$post_id = get_the_ID();
$title = get_the_title( $post_id );
$excerpt = get_the_excerpt( $post_id );
$image_url = get_the_post_thumbnail_url( $post_id, 'full' );
$prep_time = get_post_meta( $post_id, '_prep_time', true ); // в мин
$cook_time = get_post_meta( $post_id, '_cook_time', true ); // в мин
$ingredients = get_post_meta( $post_id, '_ingredients', true ); // массив строк
$instructions = get_post_meta( $post_id, '_instructions', true ); // массив шагов
$data = [
'@context' => 'https://schema.org/',
'@type' => 'Recipe',
'name' => $title,
'description' => $excerpt,
'image' => $image_url,
'prepTime' => 'PT' . intval( $prep_time ) . 'M',
'cookTime' => 'PT' . intval( $cook_time ) . 'M',
'recipeIngredient' => $ingredients,
'recipeInstructions' => array_map( function( $step ) {
return [ '@type' => 'HowToStep', 'text' => $step ];
}, $instructions ),
];
echo '' . wp_json_encode( $data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT ) . '';
}
Не забудьте создать метаполя _prep_time, _cook_time, _ingredients и _instructions (можно через Advanced Custom Fields). После добавления кода проверьте вывод в «View source» – должна появиться чистая JSON‑LD‑строка.
Примеры разметки для популярных типов контента
Товары (WooCommerce)
Для продукта достаточно добавить несколько полей в functions.php и вывести их в wp_head. Ниже минимальный набор:
add_action( 'wp_head', 'my_schema_product_markup' );
function my_schema_product_markup() {
if ( ! is_product() ) return;
global $product;
$data = [
'@context' => 'https://schema.org/',
'@type' => 'Product',
'name' => $product->get_name(),
'image' => wp_get_attachment_url( $product->get_image_id() ),
'description'=> wp_strip_all_tags( $product->get_description() ),
'sku' => $product->get_sku(),
'offers' => [
'@type' => 'Offer',
'priceCurrency' => get_woocommerce_currency(),
'price' => $product->get_price(),
'availability' => $product->is_in_stock() ? 'https://schema.org/InStock' : 'https://schema.org/OutOfStock',
'url' => get_permalink( $product->get_id() ),
],
];
echo '' . wp_json_encode( $data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT ) . '';
}
Отзывы (User‑generated)
Если ваш сайт собирает отзывы через форму, добавьте тип Review. Пример кода, который берёт данные из пользовательских полей:
add_action( 'wp_head', 'my_schema_review_markup' );
function my_schema_review_markup() {
if ( ! is_singular( 'post' ) ) return;
$rating = get_post_meta( get_the_ID(), '_review_rating', true ); // 1‑5
$author = get_post_meta( get_the_ID(), '_review_author', true );
$data = [
'@context' => 'https://schema.org/',
'@type' => 'Review',
'author' => [ '@type' => 'Person', 'name' => $author ],
'reviewRating' => [
'@type' => 'Rating',
'ratingValue' => $rating,
'bestRating' => '5',
'worstRating'=> '1',
],
'itemReviewed' => [
'@type' => 'CreativeWork',
'name' => get_the_title(),
],
];
echo '' . wp_json_encode( $data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT ) . '';
}
Тестирование и отладка разметки
После внедрения проверьте результат в Google Rich Results Test. Если разметка не проходит, обратите внимание на:
- Корректность JSON (отсутствие лишних запятых, правильные кавычки).
- Соответствие типу schema (например,
RecipeтребуетrecipeIngredient). - Доступность изображений – URL должен быть абсолютным и публичным.
Для ускорения загрузки JSON‑LD стоит кэшировать результат в transients, а также убедиться, что ваш хостинг не замедляет TTFB. Подробнее о том, как сократить TTFB в WordPress, читайте в статье Как сократить TTFB в WordPress: 7 проверенных методов ускорения сайта.
Важные нюансы и типичные ошибки
- Дублирование разметки. Не стоит одновременно использовать плагин и ручный код для одного типа сущности – это запутает поисковики.
- Отсутствие обязательных полей. Google игнорирует разметку, если в ней нет обязательных атрибутов (например,
priceдляProduct). - Неправильный тип MIME. JSON‑LD должен быть внутри тега
<script type="application/ld+json">, а не в обычном<script>. - Не обновлённые данные. При изменении контента обновляйте кэш, иначе будет показываться устаревшая разметка.
Если вы используете резервное копирование, убедитесь, что файлы functions.php и активные плагины входят в бэкап. Подробнее о надёжных бэкап‑решениях читайте в статье Бэкап WordPress: лучшие плагины и стратегии резервного копирования в 2026 году.
Где хранить файлы разметки и как управлять ими
Если разметка становится объёмной, удобно вынести её в отдельный файл и подключать через require_once. Пример структуры темы:
// functions.php
require_once get_template_directory() . '/inc/schema-recipe.php';
require_once get_template_directory() . '/inc/schema-product.php';
Такой подход упрощает поддержку и позволяет использовать Файловый менеджер WordPress для быстрой навигации по файлам.
Заключение
Schema markup – мощный SEO‑инструмент, который повышает видимость вашего контента в поиске. В WordPress вы можете реализовать его за считанные минуты с помощью плагинов или полностью контролировать процесс через код. Не забывайте проверять корректность разметки, кэшировать результаты и следить за производительностью сайта (см. CloudPanel + WordPress для оптимального хостинга).
❓ Часто задаваемые вопросы
Можно ли использовать несколько типов schema на одной странице?
Да, JSON‑LD допускает массив объектов. Главное – чтобы каждый объект имел корректный @type и обязательные свойства, иначе разметка будет отклонена.
Как добавить schema markup без изменения темы?
Для этого подойдёт любой из перечисленных плагинов – они генерируют разметку через свои настройки, не требуя правки файлов темы.
Влияет ли schema markup на скорость сайта?
Незначительно. JSON‑LD помещается в и не блокирует рендеринг. При больших объёмах данных стоит кэшировать вывод в transients.
Почему Rich Results Test показывает ошибку «Missing required field»?
Проверьте, что в разметке присутствуют обязательные свойства для выбранного типа (например, price для Product или recipeIngredient для Recipe).