Robots API

Robots API появился в WordPress 5.7. Нужен он для централизованного изменения директив мета-тега robots, чтобы темы и плагины не писали свой «велосипеды», который к тому же могут конфликтовать друг с другом. Теперь все делается через фильтр wp_robots.

Разработчикам плагинов, добавляющим свои robots мета-теги, настоятельно рекомендуется использовать новое API, переделав код и подключив нужные директивы к фильтру wp_robots.

О мате-теге robots

Мета-тег robots позволяет указать в деталях как именно должна обрабатываться роботом страница - как именно её нужно индексировать и какие моменты нужно передать в результатах поиска для пользователей.

Мета-тег robots нужно размещать в раздел <head> страницы:

<!DOCTYPE html>
<html>
	<head>
		<meta name="robots" content="max-image-preview:large" />
	</head>
...

Все функции связанные с новым Robots API расположены в файле /wp-includes/robots-template.php.

Смотрите также возможные директивы мета-тега robots:

Функция wp_robots()

В WP 5.7 появилась функция wp_robots(), которая выводит метатег robots.

функция автоматически вызывается ядром WordPress на всех страницах фронта, происходит это на событии wp_head. Таким образом, мета-тег robots будет выводится на всех страницах фронта автоматически, если указана хоть одна директива robots.

Функция «цепляется» на хук в файле /wp-includes/default-filters.php:

add_action( 'wp_head', 'wp_robots', 1 );

Плагин или тема не должны вызывать wp_robots() отдельно! Это может быть нужно, в особых случаях, например, когда шаблон не может использовать wp_head(). В этом случае функцию нужно подключить к своему фильтру или вызвать напрямую в коде. Пример:

Подключение к своему фильтру:

add_action( 'my_custom_template_head', 'wp_robots' );

Прямой вызов:

<?php wp_robots() ?>

Как использовать Robots API

Как упоминалось выше, мета-тег robots автоматически выводится на всех страницах сайта (если сайт открыт для индексации в настройках) в момент события wp_head. Это значит что не нужно вызывать никакие функции, чтобы добавить метатег robots на страницу, а нужно просто добавлять/удалить директивы через фильтр wp_robots.

Примеры

Фильтр wp_robots передает в прикрепленную функцию массив с парами [ директива => значение ]. Т.е. своя директива добавляется таким кодом:

add_filter( 'wp_robots', 'my_wp_robots_directives' );

function my_wp_robots_directives( $robots ) {
	$robots['follow'] = true;

	return $robots;
}

В результате указанная директива добавится к имеющимся:

<meta name="robots" content="max-image-preview:large, follow" />

Чтобы удалить существующую директиву, её нужно удалить из массива:

add_filter( 'wp_robots', 'my_wp_robots_directives' );

function my_wp_robots_directives( $robots ) {
	unset( $robots['max-image-preview'] );
	$robots['follow'] = true;

	return $robots;
}

Получим:

<meta name="robots" content="follow" />

Директива max-image-preview:large

С версии WP 5.7 WordPress по умолчанию добавляет директиву max-image-preview:large в мета-тег robots на все страницы.

<meta name="robots" content="max-image-preview:large" />

Чтобы отключить эту директиву, можно использовать следующий код:

remove_filter( 'wp_robots', 'wp_robots_max_image_preview_large' );

max-image-preview: [setting]

Эта директива определяет максимальный размер изображений, которые могут показываться в результатах поиска для этой страницы.

Если не указать директиву max-image-preview, будет возможен предварительный просмотр изображения размером, заданным по умолчанию.

Допустимые значения для [setting]:

none
Нет изображения для предварительного просмотра.
standard
Может быть показано изображение для предварительного просмотра по умолчанию.
large
Может быть показано более крупное изображение, вплоть до максимальной ширины области просмотра.

Это распространяется на все виды результатов поиска (веб-поиск Google, Google Картинки, рекомендации и данные, предоставляемые Ассистентом). Ограничение не применяется в тех случаях, когда издатель предоставил отдельное разрешение на использование контента, например добавил структурированные данные или заключил лицензионное соглашение с компанией Google. В частности, структурированные данные могут определять каноническую и AMP-версию статьи.

Если вы не хотите, чтобы ваши канонические страницы и их AMP-версии были представлены в Google Поиске и рекомендациях в виде увеличенных значков, укажите в директиве max-image-preview значение standard или none.

Какие еще директивы WP добавляет по умолчанию

Robots API также используется в WP на некоторых специфических страницах:

  • Если включить опцию «не индексировать сайт». То в robots будут указаны директивы noindex, nofollow (раньше было также) и директива max-image-preview:large добавляться не будет.

  • В Предпросмотре кастомайзера добавляется директива noindex (раньше было также).

  • Страница логина (wp-login.php) и (wp-activate.php) содержит директивы noindex, noarchive, а также <meta name="referrer" content="strict-origin-when-cross-origin" /> (раньше было также).

  • В multisite, страница активации сайта (wp-activate.php), где новые пользователи могут могут подтвердить свой созданный сайт также содержит директивы noindex, noarchive, а также <meta name="referrer" content="strict-origin-when-cross-origin" /> (раньше было также).

Заметки

С августа 2021 года Google не поддерживает директиву follow в метатеге robots.

По факту для оптимизаторов ничего не изменилось. Яндекс все еще учитывает данную директиву.

Изначально был задан вопрос одним специалистом:

“…в документации Google нет информации про директиву «follow»… Google игнорирует теперь эту директиву?”

На что Джон Мюллер дал ответ:

Перевод: "Да, это значение по умолчанию, поэтому дополнительно указывать его не нужно. Это все равно что добавить директиву «Allow: /» в качестве единственной в файле robots.txt. Или как сделать дорогу и поставить знак «разрешено движение машин». Вы этим никого не удивите."

Устаревшие PHP функции WP

Новый Robots API заменяет различные отдельно вводимые метатеги роботов, которые ядро WordPress использовало до версии 5.7. Так, следующие функции устарели и больше не должны нигде использоваться:

  • Вместо noindex() появилась wp_robots_noindex(), она прикреплена к фильтру wp_robots.
  • Вместо wp_no_robots() появилась wp_robots_no_robots(), также прикреплена к фильтру wp_robots.
  • Вместо wp_sensitive_page_meta(), которая создавала 2 метатега, появились две отдельные функции:
    • Для директив noindex, noarchive функция wp_robots_sensitive_page(), её можно повесть на хук wp_robots где это необходимо.
    • Для дополнительного referrer мета-тега, появилась функция wp_strict_cross_origin_referrer(), её нужно прикреплять к хуку wp_head.

Все функции по умолчанию прикрепленные к хуку wp_robots в ядре - файл /wp-includes/default-filters.php:

// Robots filters.
add_filter( 'wp_robots', 'wp_robots_noindex' );
add_filter( 'wp_robots', 'wp_robots_noindex_embeds' );
add_filter( 'wp_robots', 'wp_robots_noindex_search' );
add_filter( 'wp_robots', 'wp_robots_max_image_preview_large' );

if ( isset( $_GET['replytocom'] ) ) {
	add_filter( 'wp_robots', 'wp_robots_no_robots' );
}