Добавление Schema разметки на WordPress для вывода данных на страницах сайта

Schema.org разметка помогает поисковым системам лучше понимать содержимое вашего сайта, что может улучшить отображение в результатах поиска (например, через rich snippets). Вот как реализовать Schema разметку в WordPress без использования плагинов, с учетом того, что поисковые роботы не принимают динамически сгенерированные данные.

Основной подход

Для корректного отображения Schema разметки в инструменте проверки Google Rich Results, данные должны быть статическими (в HTML коде страницы) или генерироваться сервером, а не динамически через JavaScript.

Способ 1: Добавление через functions.php

// Добавляем Schema разметку в head страницы
function add_schema_markup() {
    // Проверяем, что мы на нужной странице (можно настроить условия)
    if (is_single() || is_page()) {
        global $post;

        // Получаем данные поста
        $post_url = get_permalink();
        $post_title = get_the_title();
        $post_date = get_the_date('c');
        $post_modified = get_the_modified_date('c');
        $post_author = get_the_author();
        $post_image = has_post_thumbnail() ? get_the_post_thumbnail_url() : '';

        // Формируем JSON-LD разметку
        $schema = array(
            '@context' => 'https://schema.org',
            '@type' => 'Article',
            'headline' => $post_title,
            'datePublished' => $post_date,
            'dateModified' => $post_modified,
            'author' => array(
                '@type' => 'Person',
                'name' => $post_author
            ),
            'publisher' => array(
                '@type' => 'Organization',
                'name' => get_bloginfo('name'),
                'logo' => array(
                    '@type' => 'ImageObject',
                    'url' => 'URL_ЛОГОТИПА_САЙТА'
                )
            ),
            'mainEntityOfPage' => array(
                '@type' => 'WebPage',
                '@id' => $post_url
            ),
            'image' => array(
                '@type' => 'ImageObject',
                'url' => $post_image
            )
        );

        // Выводим разметку
        echo '<script type="application/ld+json">' . json_encode($schema, JSON_UNESCAPED_SLASHES) . '</script>';
    }
}
add_action('wp_head', 'add_schema_markup', 5);

Способ 2: Добавление непосредственно в шаблон страницы

Если вы используете page builder или кастомные шаблоны, можно добавить Schema разметку непосредственно в шаблон:

<?php
/**
 * Template Name: Страница со Schema разметкой
 */
get_header();

// Получаем данные для Schema
$page_data = array(
    '@context' => 'https://schema.org',
    '@type' => 'WebPage',
    'name' => get_the_title(),
    'description' => get_the_excerpt(),
    'url' => get_permalink(),
    'mainEntity' => array(
        '@type' => 'Article',
        'headline' => get_the_title(),
        'author' => array(
            '@type' => 'Person',
            'name' => get_the_author()
        ),
        'datePublished' => get_the_date('c'),
        'dateModified' => get_the_modified_date('c')
    )
);
?>

<!-- Выводим Schema разметку -->
<script type="application/ld+json">
<?php echo json_encode($page_data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); ?>
</script>

<div class="page-content">
    <?php the_content(); ?>
</div>

<?php get_footer(); ?>

Универсальный подход для любых страниц

Этот метод работает как для стандартных страниц WordPress, так и для страниц, созданных через:

  1. Чистую верстку (кастомные шаблоны)
  2. Page builders (Elementor, WPBakery, Divi и др.)
  3. Gutenberg блоки
function universal_schema_markup() {
    // Определяем тип контента
    $schema_type = 'WebPage'; // По умолчанию

    if (is_single()) {
        $schema_type = 'Article';
    } elseif (is_page()) {
        $schema_type = 'WebPage';
    } elseif (is_home() || is_archive()) {
        $schema_type = 'Blog';
    }

    // Базовые данные
    $schema = array(
        '@context' => 'https://schema.org',
        '@type' => $schema_type,
        'url' => get_permalink(),
        'name' => wp_strip_all_tags(get_the_title() ?: get_bloginfo('name')),
        'description' => wp_strip_all_tags(get_the_excerpt() ?: get_bloginfo('description'))
    );

    // Добавляем дополнительные данные в зависимости от типа
    if (is_singular()) {
        $schema['datePublished'] = get_the_date('c');
        $schema['dateModified'] = get_the_modified_date('c');

        if (has_post_thumbnail()) {
            $schema['image'] = array(
                '@type' => 'ImageObject',
                'url' => get_the_post_thumbnail_url(null, 'full')
            );
        }
    }

    // Выводим результат
    echo '<script type="application/ld+json">' . 
         json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . 
         '</script>';
}
add_action('wp_head', 'universal_schema_markup', 5);

Проверка и валидация

После реализации:

  1. Проверьте страницу в инструменте Google Rich Results Test: https://search.google.com/test/rich-results
  2. Убедитесь, что разметка отображается в исходном коде страницы (не генерируется через JavaScript)
  3. Для динамических сайтов (SPA) рассмотрите серверный рендеринг или pre-rendering

Важные замечания

  1. Этот способ добавляет статическую Schema разметку, которую поисковые роботы смогут прочитать
  2. Метод работает со всеми типами страниц, включая созданные через билдеры
  3. Для разных типов контента (товары, рецепты, события) нужно адаптировать @type и свойства
  4. JSON-LD (используемый в примерах) – рекомендованный Google формат разметки

Данный подход обеспечит корректное отображение структурированных данных в результатах поиска без зависимости от плагинов.