пр. Мира 620000 Россия +7900-000-00-00
Логотип блога интернет-бродяги

Эксперимент: возвращаю в работу REST API

Возвращаю в работу REST API - эксперимент

Ну что ж, решение принято, и я возвращаю в работу REST API, который безжалостно был ликвидирован мной ещё на начальном этапе оптимизации этого сайта. Отключение функционала REST API было обусловлено тем, что после очередного обновления WordPress (версия 4.7, если не ошибаюсь), в выдаче Яндекса начали появляться технические страницы вида https://название сайта/wp-json.

В связи с этим, многие вебмастера отметили резкое увеличение числа мусорных страниц в выдаче поисковой системы и проседание посещаемости, в результате появления дублированного контента. Почти сразу в Интернете по сайтам начал «ходить» код, который решил эту проблему радикально — отключением REST API. В результате, генерация дублей прекращалась, и мусорные страницы постепенно выпадали из индекса Яндекса.

Чтобы отключить REST API в WordPress, было предложено дополнить файл functions.php рабочей темы таким кодом:

/* Отключение WP-json */
// Отключаем сам REST API
add_filter('rest_enabled', '__return_false');
 
// Отключаем фильтры REST API
remove_action( 'xmlrpc_rsd_apis', 'rest_output_rsd' );
remove_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 );
remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 );
remove_action( 'auth_cookie_malformed', 'rest_cookie_collect_status' );
remove_action( 'auth_cookie_expired', 'rest_cookie_collect_status' );
remove_action( 'auth_cookie_bad_username', 'rest_cookie_collect_status' );
remove_action( 'auth_cookie_bad_hash', 'rest_cookie_collect_status' );
remove_action( 'auth_cookie_valid', 'rest_cookie_collect_status' );
remove_filter( 'rest_authentication_errors', 'rest_cookie_check_errors', 100 );
 
// Отключаем события REST API
remove_action( 'init', 'rest_api_init' );
remove_action( 'rest_api_init', 'rest_api_default_filters', 10, 1 );
remove_action( 'parse_request', 'rest_api_loaded' );
 
// Отключаем Embeds связанные с REST API
remove_action( 'rest_api_init', 'wp_oembed_register_route');
remove_filter( 'rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4 );
 
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
// если собираетесь выводить вставки из других сайтов на своем, то закомментируйте след. строку.
	remove_action( 'wp_head', 'wp_oembed_add_host_js' );

// Редирект с wp-json на главную
add_action( 'template_redirect', function() {
	if ( preg_match( '#^/wp-json/(.*)#', $_SERVER['REQUEST_URI'] ) ) {
		wp_redirect( get_option( 'siteurl' ), 301 );
		die();
	}
} );

Этот код можно встретить на десятках или сотнях сайтов, посвящённых работе с WordPress. В общем, ликованию вебмастеров, и моему тоже, не было предела, ведь внезапно возникшая головная боль была снята.

Однако, такой бонус в виде отсутствия в выдаче не имеющих отношения к полезному контенту технических страниц стал платой за снижение некоторой функциональности WordPress при отключенном REST API. Ведь этот самый REST API обеспечивает взаимодействие WordPress с внешним программным обеспечением.

Первое неудобство в связи с блокировкой REST API я ощутил, когда не смог воспользоваться плагином комментирования. Пережить эту неприятность можно, конечно. Но за этим ограничением последовали и другие — многие полезные плагины после их установки и активации, попросту отказывались корректно работать. Кроме того, не получится работать с новым блочным редактором Гутенберг при отключенном REST API.

Инструмент «Здоровье сайта» указывает на не корректную работу REST API.

REST API работает не корректно

К слову говоря, сообщество вебмастеров разделилось относительно необходимости использования такой полезной штуковины, как REST API. Одни утверждают, что это зло, от которого следует как можно скорее избавиться при работе с сайтом (блогом). Другие же напортив, топят за безусловное использование REST API. При этом, рекомендуют закрывать от индексации wp-json и embed в файле robots.txt. Третьи вообще рекомендуют убрать руки прочь от REST API и даже не запрещать ничего в robots.txt, поскольку индексироваться мусор и так не будет.

На сегодняшний день, вышеуказанный код у меня работает. Когда я зашёл в раздел «Структура сайта» Вебмастера, то wp-json среди страниц в поиске, к счастью, не обнаружил. Однако, среди загруженных страниц, этого «добра» предостаточно.

wp-json 2019 год

rest-api 2020 год

Поскольку в дальнейшем не хотелось бы ограничивать работу сайта из-за отключенного REST API, с сегодняшнего дня восстанавливаю данный функционал. Чтобы восстановить работу REST API, необходимо перейти в настройки постоянных ссылок в административной панели сайта и просто кликнуть по кнопке «Сохранить изменения» внизу страницы. Посмотрим, что изменилось с wp-json спустя несколько обновлений WordPress. Экспериментальная часть будет заключаться в следующем:

  • Комментирую в functions.php код, блокирующий работу REST API.
  • Не вношу никакие изменения в файл robots.txt.
  • Через 1-2 апдейта поисковой системы Яндекс проверяю раздел «Страницы в поиске».
  • В случае обнаружения в поиске wp-json, запрещаю в robots.txt и наблюдаю ситуацию ещё через 1-2 апдейта.

Как раз, сегодня Вебмастер проинформировал меня об обновлении данных в поисковой базе Яндекса по сайту hoboweb.ru.

Обновились данные в поисковой базе Яндекса

Как запретить индексацию wp-json? Один из вариантов — сделать запись в robots.txt:

User-agent: *
Disallow: /wp-json/
Disallow: */embed

Все изменения, связанные с wp-json, буду фиксировать в этой записи.

Друзья, плюсаните, вдруг пригодится!

Почитайте похожие материалы

Об авторе: Hobo

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

2 × = 2

 

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять