Як зробити свою Schema для сайту на WordPress?

Найчастіше Schema вже є в стандартному функціоналі будь-якого SEO плагіна, який додатково встановлюється на сайт. Невеликі налаштування, і все готово. Але є нюанс! По-перше, на безкоштовній версії плагіна можливості редагування схеми немає, а по-друге, там використовуються найстандартніші (найпоширеніші) типи схем Organization, Article, Product тощо.

У такому разі є сенс зробити свою Schemu, яка міститиме всю ту необхідну інформацію, яку ми вважатимемо потрібною.

Для генерації схеми є малофункціональний сервіс від Google Markup-helper, але в нашому випадку я активно використовую Chatgpt, він дуже навіть відмінно генерує необхідний тип розмітки Schema.

З чого ж почати?

Відключаємо стандартну Schema

У файл functions.php додаємо такі рядки. Для прикладу взято плагін All in One SEO.

				
					
add_filter( 'aioseo_schema_disable', 'aioseo_disable_schema' );

function aioseo_disable_schema( $disabled ) {
   return true;
}
				
			

Додаємо додаткові поля для траниць і записів

У тілі сторінки та статті з’явиться додаткове поле, куди і потрібно буде додавати розмітку Schema.

				
					function add_custom_schema_metabox() {
    add_meta_box(
        'custom_schema_metabox',
        'Поле для нової Schema',
        'render_custom_schema_metabox',
        array('post', 'page'), // Типи записів, до яких прив'язується метабокс
        'normal', // Позиція метабоксу (normal, advanced, side)
        'high' // Пріоритет метабоксу (high, core, default, low)
    );
}
add_action('add_meta_boxes', 'add_custom_schema_metabox');

function render_custom_schema_metabox($post) {
    // Отримуємо значення метаполя, якщо воно вже існує
    $schema_code = get_post_meta($post->ID, '_custom_schema_code', true);

    // Виводимо поле для введення коду схеми
    echo '<textarea id="custom_schema_code" name="custom_schema_code" style="width:100%;" rows="10">' . esc_textarea($schema_code) . '</textarea>';
}

function save_custom_schema_code($post_id) {
    // Перевіряємо, чи є запит автозбереженням
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }

    // Перевіряємо права користувача
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }

    // Перевіряємо, чи було передано значення поля
    if (isset($_POST['custom_schema_code'])) {
        // Зберігаємо значення поля в метаполі з дозволеними тегами HTML
        update_post_meta($post_id, '_custom_schema_code', wp_kses_post($_POST['custom_schema_code']));
    }
}
add_action('save_post', 'save_custom_schema_code');

function output_custom_schema_json() {
    // Отримуємо поточний об'єкт запису
    global $post;

    // Отримуємо значення метаполя з кодом схеми
    $schema_code = get_post_meta($post->ID, '_custom_schema_code', true);

    // Перевіряємо, чи існує значення
    if ($schema_code) {
        // Виводимо JSON-код у тегу <script>
        echo '<script type="application/ld+json">' . wp_kses_post($schema_code) . '</script>';
    }
}
add_action('wp_head', 'output_custom_schema_json');

				
			

Робимо загальну Schema для всіх сторінок сайту

Загальна схема: для всіх сторінок сайту можна використовувати базові типи, які охоплюють основні аспекти сайту та його вмісту, наприклад WebSite, WebPage, Organization.

Наступний код додає загальну схему для російської та української версії сайту (код додаємо знову таки до functions.php)

Для зручності, ми на нашому сайті розмістили генератор Schema, з найбільш популярними її типами.

				
					function add_schema_script() {
    if (function_exists('icl_object_id')) {
        $current_language = apply_filters('wpml_current_language', NULL);

        // Рос версія
        if ($current_language == 'ru') {
            ?>
<script type='application/ld+json'> 
{
  "@context": "http://www.schema.org",
  "@type": "MedicalOrganization",
  "name": "Health Care Solutions Inc.",
  "url": "https://healthcaresolutions.com",
  "logo": "https://healthcaresolutions.com/logo.svg",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Wellness Avenue",
    "addressLocality": "Springfield",
    "addressRegion": "IL",
    "postalCode": "62701",
    "addressCountry": "USA"
  },
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+1 (555) 123-4567"
  }
}
 </script>
            <?php
        }
        // Укр версія
        elseif ($current_language == 'uk') {
            ?>
 <script type='application/ld+json'> 
{
  "@context": "http://www.schema.org",
  "@type": "MedicalOrganization",
  "name": "Health Care Solutions Inc.",
  "url": "https://healthcaresolutions.com",
  "logo": "https://healthcaresolutions.com/logo.svg",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Wellness Avenue",
    "addressLocality": "Springfield",
    "addressRegion": "IL",
    "postalCode": "62701",
    "addressCountry": "USA"
  },
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+1 (555) 123-4567"
  }
}
 </script>
            <?php
        }
    }
}
add_action('wp_head', 'add_schema_script');
				
			

Корисні статті