Критическая ошибка WordPress
Совсем недавно в статье "Как провести SEO самостоятельно" мы рассмотрели, как избавится от дублей страниц в WordPress. Из этой же статьи мы поняли, что дублирующиеся страницы и битые ссылки могут отрицательно отразится на поисковой оптимизации, а так же продвижении нашего ресурса.
Но не успели мы рассмотреть одно решение проблемы, как разработчики WordPress добавили новых дублей в связке с битыми ссылками. На этот раз дублирование связано с REST API.
Если посмотреть в вебмастере Яндекса. то можно заметить, что:
- Резко выросло количество загруженных роботом страниц;
- Структура сайта изменилась. А ведь мы там ничего не меняли;
- Появилась непонятная директория wp-json с подкатегориями oembed , /1.0/, embed.
Но не стоит пугаться и впадать в панику. Это совсем не вирус, а внедрение разработчиками WordPress нового плагина для удобного доступа к данным Вашего сайта с помощью HTTP RESET API. Подробности Вы можете изучить на странице разработчика http://v2.wp-api.org/.
wp json
И если Вы откроите url http://ваш_сайт/wp-json то наверняка увидите нечто вроде
И так, что такое wp-json? Это не вирус. Это, прежде всего виртуальная директория для API REST для CMS WordPress версии 4.4 и выше. Но к сожалению все служебные папки и URL адреса не скрыты, что соответственно создает дубли. Конечно, они со временем удалятся поисковыми роботами, но это уже не хороший сигнал. Такое количество битых ссылок на сайте присутствовать не должно.
Я не хочу и не буду рассматривать полезность данной функции. может она 10% и помогает в доступе, мы же сразу перейдем к решению вопроса.
Запрещаем индексацию в robots.txt
Прежде всего Вам необходимо в файл robots.txt добавить запрет на индексацию ссылок с wp-json. Для этого добавьте в файл robots.txt строки:
- Disallow: /wp-json
- Disallow: /oembed
- Disallow: /embed
Запрещаем вывод кода в functions.php
Для этого в файле functions.php вашей темы пропишите следующее:
// Отключаем сам 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 );
Выполнив перечисленные выше действия, мы добилиcь лишь того что закрыли от индексации нежелательные ссылки и теперь вместо страшного и непонятного кода перейдя по ссылкам:
- http://ваш_сайт/wp-json
- http://ваш_сайт/wp-json/oembed/
- http://ваш_сайт/wp-json/oembed/1.0/
- http://ваш_сайт/wp-json/oembed/1.0/embed/
Вы можете наблюдать главную страницу сайта. Кроме того мы избавились от нежелательной ссылки на http://v2.wp-api.org/ в ответе сервера.
И все вроде в порядке, НО!!! Мы получили нежелательные дубли главной страницы сайта. Самое время поправить и этот нюанс.
Создаем 301 редирект
Открываем файл .htaccess который находится в корне вашего сайта. Если его там нет то самое время его создать. И прописываем туда:
RedirectMatch 301 /wp-json http:// ваш_сайт.ру
RedirectMatch 301 /oembed http:// ваш_сайт.ру
RedirectMatch 301 /embed http:// ваш_сайт.ру
RedirectMatch 301 /1.0/ http:// ваш_сайт.ру
Естественно заменив ваш_сайт.ру на свой домен и радуемся жизни.
Теперь все запросы по нежелательным ссылкам будут переадресовываться через 301 редирект на главную страницу Вашего сайта. Это будет актуально особенно для тех, чьи сайты уже успели обзавестись в поисковой выдаче нежелательными ссылками с wp-json.
Через несколько обновлений базы дублирующие страницы будут удалены из поисковых баз.
Для тех, кто не любит копаться в коде сайта существует альтернатива - плагин CLEARFY. Плагин платный, но он сделает всю работу за вас.