Как убрать дубли страниц wp json oembed в WordPress
История наверно у всех одинаковая, Вы заходите в Вебмастер и обнаруживаете кучу найденных роботом страниц со странными адресами вида «/wp-json/oembed/1.0/embed?url=http://site_name.ru/page_name» которые или выдают ошибку, или даже 200 OK, но зачем они нужны? Всем известно, что поисковики сильно недолюбливают дубли и кучу ошибочных страниц на сайте. Понять, что у Вас на сайте есть эти ссылки, можно поискав в коде страниц строку вида «<link rel=’https://api.w.org/’ href=’/wp-json/’ />».
Что такое wp json oembed 1.0?
Wp json это нововведение от версии WordPress 4.4 и выше. Разработчики ввели новый API REST, который создает кучу мусорных страниц в виртуальной директории wp-json.
WordPress REST API – это общий интерфейс данных и программирования, который позволяет считывать и записывать информацию в WordPress через разные приложения. Это позволяет разработчикам, которые нацелены на работу с WordPress, не углубленно разбираться в WP.
Как отключить WordPress REST API?
Как и обычно, добавляем следующий код в конец файла «functions.php» в теме. Сделать это можно в редакторе темы WordPress или напрямую в файле через FTP на сервере например.
Внимание!!! Данный метод может сломать работу некоторых планигов и в целом работу json (Например Contact From 7). Обязательно сделайте полный бекап перед изменением файлов!!!
// Отключаем сам 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' );
В результате ссылка вида «<link rel=’https://api.w.org/’ href=’/wp-json/’ />» должна пропасть из кода страницы.