Всем читателям seoslim.ru привет! В прошлой статье я рассказывал каким образом можно в одни клик избавиться от ошибок в коде WordPress, дублей страниц, защитить сайт от посягательств из вне и прочих недочетов, которыми страдает бесплатная CMS.
Так что кто не хочет ковыряться в кодах и прибегать к услугам фрилансеров самое время воспользоваться плагином Clearfy, пока цены адекватные.
Использовать универсальный модуль — это здорово, но у большинства вебмастеров, которые ведут свои проекты ни один год, до обновления Вордпресс 4.2 и 4.4 версий не испытывали с ним проблем, так как ранее все уже было настроено, оптимизировано, а коды почищены от мусора.
Но пару месяцев назад произошло несколько кардинальных обновлений CMS, принесшие кроме плюсов и ряд значимых минусов в виде дублей страниц Wp-json и дополнительной нагрузки на сайт поддержкой смайликов Emoji.
Так что давайте разбираться с какой целью разработчиками были добавлены данные элементы в движок и самое главное научимся отключать wp-json и emoji.
Зачем ввели новый REST API в WordPress, итог
Так получилось, что после обновления Вордпресс до версии 4.4 владельцы сайтов стали замечать увеличение загруженных страниц роботами в панели Яндекс Вебмастер.
Как видно на скрине выше структура сайта немного изменилась и появилась новая директория wp-json, а вместе с ней и поддиректории oembed, 1.0, embed.
Причиной тому явился новый интерфейс REST API под управлением, которого и работает CMS.
Скорее всего это сделано с перспективой на будущее, таким образом разработчики будут получать доступ к данным наших сайтов через специальные приложения.
Вот только жаль, что идея не доведена до совершенства, так как никто не удосужился закрыть от поисковиков код служебных директорий.
Как итог дубли страниц wp-json стали постепенно появляться в выдаче ПС.
Что мы видим?
Введя в адресной строке браузера http://site.ru/wp-json, мы попадаем на точную копию главной страницы сайта или страницу с непонятным кодом.
Беда в том, что данная страница существует (не отдает 404 ошибку и не срабатывает редирект), поэтому велика вероятность, что роботы поисковиков ее проиндексируют.
Как убрать Wp-json, Oembed, Embed
Удаление строк этого кода из WordPress возможно с помощью внесения изменений в файл functions.php вашего шаблона.
А именно надо прописать специальные команды, которые уберут эту заразу, а при переходе на страницу http://site.ru/wp-json последняя будет отдавать 404 ошибку.
Итак находим в папке с нашей темой файл 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 ); remove_action( 'wp_head', 'wp_oembed_add_discovery_links' ); |
Для того чтобы убедиться в правильности своих действий сделайте следующее:
- Перейдите по адресу http://site.ru/wp-json — такой страницы не должно существовать (появится «Ошибка 404»).
- Посмотрите исходный код любой страницы (нажатием клавиш «Ctrl+U») — не должно быть ссылок на https://api.w.org/ и /wp-json/oembed/1.0/.
Не знаю почему, но у меня на этом боге такой прием не до конца сработал, так как при переходе на https://seoslim.ru/wp-json почему то 404 ошибка не выдавалась, поэтому пришлось в файле дописать еще один код на 301 редирект.
// Редирект wp-json add_action( 'template_redirect', function() { if ( preg_match( '#^/wp-json/(.*)#', $_SERVER['REQUEST_URI'] ) ) { wp_redirect( get_option( 'siteurl' ), 301 ); die(); } } ); |
Теперь остается только ждать, когда выпадут все страницы из панели Яндекса, думаю через пару апдейтов можно будет забыть о дублях.
Как убрать Emoji из WordPress (смайлы Эмодзи)
Второе нововведение в популярной CMS произошло немного раньше, чем наделавшие шумихи дубли wp-json.
С версии 4.2 WordPress поменял свои стандартные смайлики на Emoji, которые появились в Японии и прижились в социальных сетях VK, FC, OK, G+ и других.
И вроде бы ничего в этом плохого нет, но не меня одного смутил тот факт, как это реализовано в Вордпресс.
1. Почему разработчики не дали право выбора владельцам сайтов включать или нет данные смайлы.
2. Скрипт и стили подгружаются прямо в секции.
Чтобы проверить есть ли код на вашем проекте откройте исходный код любой страницы «Ctrl+U» и сделайте поиск по слову «emoji».
3. Так как новые картинки больших размеров 72х72px то на многих площадках могло измениться отображение комментариев.
Для того чтобы отключить загрузку эмоджи достаточно внести правки в файл functions.php темы вашего сайта.
Открываем данный файл и добавляем в самый конец перед ? > следующий код:
// отключаем Emoji смайлики remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); remove_action( 'admin_print_styles', 'print_emoji_styles' ); remove_filter( 'the_content_feed', 'wp_staticize_emoji' ); remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' ); |
Не забудьте сохранить все изменения и выполнить проверку все тем же поиском слова «emoji» в исходном коде.
Если его упоминаний нет, значит сделали все правильно.
Для тех, кто не любит копаться в файлах шаблона, но хочет избавиться от данных проблем есть решение в виде плагина Clearfy, после установки которого мусорный код из WordPress будет удален автоматически.
На этом все, а вы уже решили проблемы CMS после обновления на своих проектах?
Попытался убрать Wp-json на одном из своих сайтов, но после добавления кода сайт вообще перестал работать, просто чистый белый лист в браузере, и всё. Ведать это особенности моего шаблона. Дело в том что файл functions.php у меня начинается тегом . И по этому у меня всегда какие проблемы при внедрении каких то функций.
Да с шаблонами есть такая беда, бывает ни один час приходится решать проблему.
Спасибо) Победил
Максим, огромное вам спасибо убрал у себя на блоге эти emoj все стало чистенько!!!
О, наконец-то сработало. Редирект помог, без него открывалась главная и в строке оставались /wp-json/... Спасибо!
Здравствуйте, Максим.
Смайлы Emoji уже давно снес со своего блога — не люблю лишние элементы, а вот про Wp-json не знал, спасибо что рассказали, займусь этим вопросом.
У меня после обновления вордпресс, в загруженных роботами wp-json/ стало 245 страниц, сделал всё как описано выше, теперь при переходе на страницу powercoup.by/wp-json/oembed/1.0/embed?url=http://powercoup.by/led перекидывает на главную
Можно узнать, это нормально? И стоит ли запрещать wp-json/ в файле robots.txt
Если вы брали мой код с редиректом, то вас будет перенаправлять на главную. Я так сделал потому что страница не отдавала 404 ошибку, не знаю как у вас было. В роботс ничего прописывать не надо, дубли и так выпадут, потому что страниц больше нет.
Да, код ваш с редиректом, до этого была белая страница и куча иероглифов, теперь всё норм. Спасибо!
Максим, то есть при использовании вашего кода с редиректом, я должен попадать на главную страницу? Это правильно?
Да, должно на главную редиректить.
Супер! Спасибо Вам большое!
И еще вопрос. У меня при добавлении кода без редиректа, все эти ссылки с wp-json переводит итак на главную, но оставляет после урла кривое название этих ссылок. В этом случае также использовать редирект для отображения чистого урла или же можно оставить в грязном виде?
В идеале при переходе по ссылке с wp-json должна появляться 404 ошибка, что нет такой страницы.
Понятно, спасибо еще раз! Буду теперь разбираться почему не выходит 404 ошибка)
Привет! Эти самые джейсоны удалил уже давно также при помощи доп функции в файле functions.php, и эти дубли уже исчезли.
А вот эмоджи я решил оставить, пусть будут
Так ты же Эмодзи Руслан все равно не используешь на блоге.
Дубли это жуткая и страшная штука с которой надо бороться...
Хотел смайлы убрать, а увидел Вашу статью и редирект настроил. Спасибо!
Кстати Яндекс уже больше половины дублей выкинул из индекса. Сей факт не может не радовать
Проделана такая операция по решению этой проблемы с ясоном еще в начале сентября. Уже середина октября, и было достаточное количество апдейтов, а Яндекс продолжает добавлять в поиск эти чертовы страницы.
При переходе на них выбивается страница 404, как и нужно. И в вебмастере в списке страниц в индексе Яндекс сам пишет, что она 404. Так зачем ее добавлять?
Добрый день! Благодаря вашему коду с редиректом получилось, чтобы с мусорных страниц шла переадресация на главную блога. Спасибо!
Используя другие варианты кода только исчезали в коде статей фразы json, oembed (код на 3 строки). Еще был больший код, где была переадресация на главную, но в урл были еще мусорные ссылки.
Как думаете, если идут редиректы с таких мусорных страниц на главную, это не плохо для поисковых систем?
Пробовал вашим спосбом удалить код Emoji, он пропадает и вместе с ним все смайлики на блоге. Но они были не большими, в статьях около 16 px. Думал удалятся другие, большего размера, которые не используются. А удалились те которые набираются вручную (например ; ) )
В идеале, лучше чтобы вместо редиректа, мусорные страницы отдавали 404 ошибку. Про смайлики в курсе, это после последних обновлений WordPress они перестали работать.
При проверке кода страницы выдает в /wp-json\/contact-form-7 — это нормально, или стоит как-то избавляться? Если да, то каким образом можно избавиться от этого мусора?
Дубли страниц безусловно негативно влияют на развитие сайта. Но в будущем, я думаю, что поисковые системы начнут их распознавать и эта проблема отпадёт сама по себе.
Добрый день! Спасибо за отличную статью. Сделал все как вы написали, все работает отлично. Но в коде все равно присутствует json, это нормально?
В коде не должно быть.
Вот такая вещь у меня есть и такая <link rel="alternate" type="application/ld+json" target="_blank" href="https://site.ru/?format=application/ld+json", а как от нее избавиться?
У меня такого нет, потому что не использую плагин seo by yoast, именно он выводит этот код.
В сети есть такое решение
function remove_json_ld_output ( $data ) {
$data = array ();
return $data;
}
add_filter ('wpseo_json_ld_output', 'remove_json_ld_output', 10, 1);
Да. я видел эти кода, но, к сожалению, не помогает
Как я понял этот код влияет на микроразметку, он отключает ту что выводит плагин seo by yoast и включает вашу. Например у меня на одном сайте, где стоит модуль seo by yoast была ошибка в микроразметке. После добавления этого кода ошибки в микроразметке ушли, но в исходном коде ld+json присутствует.
Да, это микроразметка. У меня стоит плагин seo by yoast, но для микроразметки я поставил shema.org. То есть, если в коде присутствует ld+json, то ничего страшного?
Ничего страшного, что в коде есть ld+json, главное чтобы не было проблем именно с микроразметкой, как это было в моем случае.