Как убрать wp-json и oembed из нового WordPress

Внимание! В новой версии Wordpress найдена критическая ошибка, которая генерирует много технических страниц, которые успешно кушает Яндекс. Если не хотите проблем с ранжированием, нужно исправить этот недостаток нового движка как можно быстрее.


как убрать json в wordpress

После очередного апдейта я зашел в панельку Я.Вебмастер и обнаружил там большое количество загруженных и исключенных страниц. При подробном просмотре обнаружился какой-то непонятный wp-json/ и в нем еще oembed/. Выглядит это следующим образом.

как убрать wp-json

Что такое wp-json? Это виртуальная директория для API REST у WordPress версии 4.4 и выше. Другими словами, это ненужный код от того, что вам не пригодится и этим никто не пользуется. Если попробовать открыть страницу по адресу https://ваш_сайт.ru/wp-json/ , то вы получите нечто подобное.

{"name":"\u041f\u0440\u043e LINUX, SOFT \u0438 HARDWARE.","description":"\u041f\u0440\u043e\u0441\u0442\u043e \u043e Linux, SEO \u0438 FOREX.","url":"http:\/\/prostolinux.ru","namespaces":["oembed\/1.0"],"authentication":[],"routes":{"\/":{"namespace":"","methods":["GET"],"endpoints":[{"methods":["GET"],"args":{"context":{"required":false,"default":"view"}}}],"_links":{"self":"http:\/\/prostolinux.ru\/wp-json\/"}},"\/oembed\/1.0":{"namespace":"oembed\/1.0","methods":["GET"],"endpoints":[{"methods":["GET"],"args":{"namespace":{"required":false,"default":"oembed\/1.0"},"context":{"required":false,"default":"view"}}}],"_links":{"self":"http:\/\/prostolinux.ru\/wp-json\/oembed\/1.0"}},"\/oembed\/1.0\/embed":{"namespace":"oembed\/1.0","methods":["GET"],"endpoints":[{"methods":["GET"],"args":{"url":{"required":true},"format":{"required":false,"default":"json"},"maxwidth":{"required":false,"default":600}}}],"_links":{"self":"http:\/\/prostolinux.ru\/wp-json\/oembed\/1.0\/embed"}}},"_links":{"help":[{"href":"http:\/\/v2.wp-api.org\/"}]}}

И это безобразие отлично сжирается Яндексом. Не буду больше расписывать, как это плохо, думаю вы уже прекрасно все поняли сами. Только добавлю, что все клиентские сайты на WordPress новой версии уже как пару дней теряют трафик волнами, а значит дело серьезное.

wp json oembed в индексе

Как отключить и избавиться от wp-json и oembed в WordPress

Мой приятель, тот который отлично разбирается в WP, любезно поделился универсальным кодом для отключения этого шлака и редиректа с подобных страниц на главную. Причем этот чудо код работает на WP с любой версией 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' );

Вставить данный код нужно в functions.php вашей темы. Если последним идет ?>, то вставлять код нужно перед ним. Вот вам и решение данной проблемы.

Совет на будущее — всегда проверяйте панельки вебмастеров после каждого апдейта движка и выдачи ПС. Так вы сможете оперативно фиксить все новые баги и решать новые проблемы.

Если вы можете дополнить данный код, поделитесь своими мыслями в комментариях. Ну а если вы просто хороший парень, то вы поделитесь данной записью в социальных сетях, чтобы другие вебмастера узнали об этом «сюрпризе» вордпреса и пофиксили его.

Андрей Чикор - руководитель и главный редактор проекта!

Контакты:



  • Занимаюсь сайтами и заработком в интернете с 2009-го года;
  • В пике управлял 10 сайтами;
  • Максимальный результат на личном сайте: 10 000 чел. в сутки;
  • Максимальный доход на личном сайте: 2500$ в месяц;
  • С июня 2020 года руковожу отделом маркетинга в нишевом интернет-магазине с трафиком до 2 000 чел. в сутки.
Больше информации обо мне можно узнать на странице: О проекте.

Понравилась статья? Получай свежие статьи первым по e-mail

Добавить комментарий для Али Профи Отменить ответ

Ваш e-mail не будет опубликован.

Комментариев: 53 на “Как убрать wp-json и oembed из нового WordPress

  1. Dmitriy говорит:

    А как быть с теми кто использует oembed для вставки например пдф файлов в класcическом редакторе с помощью плагина, который использует embed

  2. Денчик говорит:

    Очень полезная статья, решила все проблемы, спасибо!

    • Надежда говорит:

      Рад, что смогли вам помочь.

  3. Денчик говорит:

    Благодарю, топ-статья!

  4. AltayStroy говорит:

    Большое спасибо. Помогло!

  5. Василий говорит:

    Помогло, спасибо вам большое.

  6. irmaseo.ru говорит:

    очень полезная информация, спасибо

  7. Евгений говорит:

    Автор данного поста — какой то непонятный. Называет шлаком rest api, если ты этим не пользуешься, то это не означает, что данный функционал шлак или то, что другие более продвинутые пользователи его не используют.
    rest api позволяет с легкостью писать фронт на React и Vue для WordPress.

  8. Анна говорит:

    ой, хорошая статья. Спасибо, что предупредили. Теперь буду свой блог на Вордпресс редактировать, чтобы убрать эти недочеты.

  9. Stanislav Yanchenko говорит:

    что бы всё работало, но не выводился мусор, можно такой код

    //удаление заголовков, связанных с REST API start
    remove_action(‘wp_head’, ‘rest_output_link_wp_head’, 10);
    remove_action(‘wp_head’, ‘wp_oembed_add_discovery_links’, 10);
    remove_action(‘wp_head’, ‘wp_oembed_add_host_js’);
    remove_action(‘template_redirect’, ‘rest_output_link_header’, 11, 0);
    //удаление заголовков, связанных с REST API end

  10. Dain говорит:

    не отключайте события REST API, иначе не будет работать редактирование «изображений страниц»

  11. Оксана говорит:

    Добрый день!

    Данный метод действительно помогает избавиться от wp-json-i-oembed, НО! При отключении событий REST API возникают проблемы с Contact Form 7 — не выводит сообщение об отправке.
    Проверила — закомментировала эти строки, Contact Form заработал, а oembed остались.

  12. Никита говорит:

    плагин contact form 7 не работает!!!

  13. Печально говорит:

    >> Другими словами, это ненужный код от того, что вам не пригодится и этим никто не пользуется.

    «WordPress REST API is perhaps the most popular and extensively used REST API in the world. It is available to everyone who uses WordPress for online stores and web apps.»»

    Автор, бывают сайты сложнее сайта-визитки.
    Если тебе REST API в работе не нужен, за всех не говори.

  14. Иван говорит:

    Ужасное решение теперь посты не обновляются, спасибо вам большое!

  15. ФФ говорит:

    Я теперь не могу редактировать посты. пишет Updating failed

  16. Cпасибо автору за инфу!
    Спас кучу сайтов (не только у меня!
    Все работает блестяще.

  17. Владимир говорит:

    все гуд. конечно. только формы на сайте перестают работать. виснут. плагин contact form отказывается работать с отключенными rest api

  18. Этот код не лучший вариант, так как отрубает полезные функции в некоторых плагинах, например, SEO YOAST, так что лучше закрыть в robots.txt и все.

    • Руслан говорит:

      Будьте добры, скажите, а какие именно полезные функции отключаются?

  19. Все хорошо, я так и делал, но потом обнаружил, что некоторые плагины без этого wp-json не работают. Поэтому можно просто закрыть это в robots.txt и проблема решится. Но если на работу сайта не влияет, то лучше так.

  20. Boris Tsaritsyn говорит:

    А как сделать так, чтобы эта фантомные json-адреса при вызове не редиректили на главную, а отдавали 404?

  21. Боец Бойцович говорит:

    Пишем в robots.txt:
    Disallow: */embed*
    Disallow: */wp-json*
    И усё будет норм …

  22. Alexander Ivanov говорит:

    А разве не должна быть страница /wp-json/ ошибкой 404?

  23. Алексей Петрович говорит:

    Лучше мне кажется создать плагин. В папке plugins создать папку disable-wp-json-and-oembed, в этой папке файл disable-wp-json-and-oembed.php, а в нем добавить в начале
    /*
    Plugin Name: Disable wp-json and oembed
    Description: This plugin disables wp-json and oembed
    Version: 1.0
    */
    А потом код, который вы представили. Потом просто включить этот плагин в админке.

    • Самый толковый вариант, работает даже после изменения темы и обновления WordPress. Включил плагин и забыл, раньше каждый раз приходилось редактировать файл functions.php

  24. Иван говорит:

    Спасибо огромное, только сегодня зашел на сайт где всего 50 записей, смотрю а загруженных страниц — 700, и траффик упал в два раза.

  25. Виталий говорит:

    Уберите скобку в конце кода. Она вызывает у многих ошибку или неработоспособность поиска на сайте. http://prntscr.com/a1ko9n

  26. Алекс говорит:

    А как теперь сделать чтобы по этим страницам 404 ошибка вываливалась, ато у меня после добавления указанного кода в function главная подгружаться по этим адресам стала и ответ сервера всеравно 200.

  27. гость говорит:

    у меня просто открывается 404 и нет такого, как у вас. хотя, вп обновился недавно автоматически.

  28. MoneyHoney говорит:

    с одной стороны обновления позволяют заделать дыры в безопасности wp (а судя по длинному списку уязвимостей на античат, их довольно много и особенно для старых версий), а с другой стороны, как видите обновления не всегда несут только пользу.
    кстати, вы можете их совсем отключить, просто допишите в wp-config.php

    define( ‘WP_AUTO_UPDATE_CORE’, false );

  29. Ginger Dog говорит:

    меня помогает простая конструкция в роботсе
    Allow: /wp-content/uploads
    Disallow: /wp-
    а rest-api все же отключил на всякий случай

  30. AdminAndrey говорит:

    Не зря я отключаю авто обновление.

    • Это да. Ну обновы нужны, чтобы хакеры не позарились на твои детища… В старых версиях много уязвимостей.

      • MoneyHoney говорит:

        у меня много раз хакали wp даже самых последних версий, и часто через пару дней после обновления)
        иногда инъекцией убивали бд, иногда ставили какие то вредоносные коды, фреймы и т.д. От хакеров вообще сложно защититься, если ты не крутой программер. Я просто смирился с тем что меня периодически взламывают: сейчас просто делаю постоянные бэкапы, а потом когда из хостинг центра мне кричат что один из сайтов взломан, то меняю пароли и восстанавливаю бэкап)

  31. Наталья говорит:

    Спасибо за решение. Случайно не знаете, еще решение с удалением такого плана: .jpg»,tid:»OIP.M5cb22a365e7949858d07b49ef1a89f96o0 ? Добавляет к картинкам и весь этот мусор индексирует яндекс. Откуда он его создает и как избавиться?

    • Сори, я не программист такого уровня, чтобы дистанционно вашу проблему решить. Можете написать в скайп, возможно, решим вашу проблему.

      • Наталья говорит:

        Эта проблема не только у меня. В поиске яндекс выдает несколько сайтов https://yandex.ru/search/?lr=12&msid=22879.10982.1454829738.18104&text=.jpg%22%2Ctid%3A%22OIP.M
        Яндекс индексирует картинки с добавлением в конце к кадой какого-нибудь хвоста, типа «название картинки.jpg»,tid:»OIP.Mи тут большой набор цифр» При переходе по такому адресу картинки нет и не было. Вот откуда этот хвост добавляется и как убрать, чтоб не добавлял? Мне кажется проблема схожая.

  32. Еще можно в роботс txt это дерьмо добавить — тоже уйдет из индекса, даже еще быстрее.

    • Так оно будет болтаться в исключенных (за счет роботса), но по факту будет. А данный код вообще эту гадость убирает.

      • Юрий говорит:

        спасибо огромное за полезное решение, исправил на своем блоге, все работает нормально )

      • Михаил говорит:

        И нарушает функциональность плагинов завязаных на взаимодействие с REST API, в частности, anycomment перестает работать