Структурированные данные для ACF Blocks

Обзор

Выводите структурированные данные Schema.org из полей ACF Block.

Описание

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

Требования

  • ACF 6.8 или новее
  • Включённая функция Schema через add_filter( 'acf/settings/enable_schema', '__return_true' );

Настройка

Через block.json

Добавьте свойства autoJsonLd и необязательное schemaType в пространство имён acf:

{
  "name": "acf/recipe-card",
  "title": "Карточка рецепта",
  "category": "formatting",
  "acf": {
    "mode": "preview",
    "autoJsonLd": true,
    "schemaType": "Recipe"
  }
}

Через программную регистрацию

Используйте массив acf при регистрации блока:

acf_register_block_type( array(
    'name'       => 'recipe-card',
    'title'      => __( 'Карточка рецепта' ),
    'category'   => 'formatting',
    'acf'        => array(
        'autoJsonLd'  => true,
        'schemaType'  => 'Recipe',
    ),
    'render_template' => 'blocks/recipe-card.php',
));

Свойства

autoJsonLd
(boolean) Включает вывод JSON-LD для этого блока. По умолчанию: false

schemaType
(string|array) Тип(ы) Schema.org для блока. Необязательно; ACF может автоматически определить их по сопоставлениям полей. Может быть один тип или массив типов.

Сопоставление полей

Сопоставьте поля блока со свойствами Schema.org в редакторе группы полей:

  1. Отредактируйте группу полей, назначенную блоку
  2. Для каждого поля задайте настройку Schema.org Property
  3. Сопоставленные значения появятся в JSON-LD выводе блока

Вывод

JSON-LD выводится встроенно для каждого экземпляра блока на фронтенде:

<!-- wp:acf/recipe-card -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Recipe",
  "name": "Печенье с шоколадной крошкой",
  "prepTime": "PT15M",
  "cookTime": "PT12M"
}
</script>
<div class="wp-block-acf-recipe-card">
  <!-- Содержимое блока -->
</div>
<!-- /wp:acf/recipe-card -->

Несколько блоков

Каждый экземпляр блока выводит собственный скрипт JSON-LD. Если на странице несколько блоков одного типа, каждый получает отдельный объект структурированных данных.

Фильтры

Включить JSON-LD для определённых блоков

add_filter( 'acf/ai/block_jsonld_enabled', function( $enabled, $block ) {
    // Включить для определённого блока
    if ( $block['name'] === 'acf/my-block' ) {
        return true;
    }
    return $enabled;
}, 10, 2 );

Изменение данных JSON-LD блока

add_filter( 'acf/schema/block_jsonld_data', function( $data, $block, $post_id ) {
    // Добавить пользовательские свойства
    $data['custom'] = 'value';
    return $data;
}, 10, 3 );

Пример: Блок рецепта

block.json:

{
  "name": "acf/recipe",
  "title": "Рецепт",
  "acf": {
    "autoJsonLd": true,
    "schemaType": "Recipe"
  }
}

Сопоставления полей:
– Название рецепта → name
– Описание → description
– Время подготовки (минуты) → prepTime (формат Duration)
– Время приготовления (минуты) → cookTime (формат Duration)
– Порции → recipeYield
– Ингредиенты (повторитель) → recipeIngredient
– Инструкции (повторитель) → recipeInstructions

Вывод:

{
  "@context": "https://schema.org",
  "@type": "Recipe",
  "name": "Печенье с шоколадной крошкой",
  "description": "Классическое домашнее печенье",
  "prepTime": "PT15M",
  "cookTime": "PT12M",
  "recipeYield": "24 печенья",
  "recipeIngredient": [
    "2 чашки муки",
    "1 чашка сахара",
    "1 чашка шоколадной крошки"
  ],
  "recipeInstructions": [
    {
      "@type": "HowToStep",
      "text": "Разогрейте духовку до 350°F"
    },
    {
      "@type": "HowToStep",
      "text": "Смешайте сухие ингредиенты"
    }
  ]
}

Примечания

  • JSON-LD не выводится в предпросмотре редактора блоков
  • Пустые значения полей автоматически исключаются
  • JSON-LD блока выводится встроенно вместе с блоком, а не в <head>
  • Несколько блоков на странице получают каждый свой скрипт JSON-LD
  • schemaType необязателен, если поля сопоставлены; ACF определяет тип автоматически

Обновлено: 01.06.2026