В статье собран самый полный перечень комманд для оптимизации WP. WordPress одна из самых популярных CMS для создания сайтов. Каждый SEO-специалист должен понимать особенности работы этого движка. Не смотря на то, что эта платформа позиционируется как CMS для блогов, на вордпрессе делают даже полноценные интернет магазины с модулями оплаты и доставки.
Так как WordPress разрабатывался для широкого круга задач, далеко не все функции "из коробки" нужны и полезны. Давайте рассмотрим какие из них стоит отключить и как это сделать.
Для ненужных функций я использую методы отключения в таком приоритете:
functions.php
Если открыть код, то часто в теге <head></head>
можно увидеть не понятные многим теги. (Полный код для удаления сразу всего - в конце статьи).
<link rel='pingback' href='http://domain.ru/xmlrpc.php' />
- это функция, позволяет узнавать кто поставил на Вас ссылку. А также оповещает блоги, если появляется ссылка на их страницу. Работает это таким образом, что оповещение появляется в виде автоматического комментария к Вашей статье. Эту функцию надо отключать по следующим причинам:
Отключить можно тремя способами: в настройках, плагином, кодом. Рекомендую снять галочки в админке: Настройки -> Обсуждение -> Две верхние со скриншота
<link rel='dns-prefetch' href='*' />
- dns-prefetch проверяет наличие домена в сети и переводит его в вид ip адреса. Это может ускорить загрузку страницы в тех случаях, когда часть файлов загружается со сторонних ресурсов (в т.ч. CDN). Например jquery, css/js файлы Bootstrap, шрифты Google или другие библиотеки.
Если Вы храните скрипты, стили и изображения на своем домене, то эту функцию лучше отключить.
Отключается dns-prefetch
строчкой remove_action( 'wp_head', 'wp_resource_hints', 2);
<meta name="generator" content="WordPress 4.9.8" />
- сообщает о том в какой программе создан контент. Это может быть не только CMS, некоторые редакторы кода, например Microsoft FrontPage или DreamWeaver тоже могут его добавлять. Удаляем кодом remove_action('wp_head', 'wp_generator');
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://site.ru/wp-includes/wlwmanifest.xml" />
позволяет публиковать статьи используя Windows Live Writer. Это программа от Microsoft, из которой можно делать публикации не заходя в админку сайта. Если вы не пользуетесь ею, то удалить можно строчкой remove_action('wp_head', 'wlwmanifest_link');
Мета тег выглядит так <link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://zapchasti-kotla.loc/xmlrpc.php?rsd" />
- нужен для публикации через блог-клиенты. Если не пользуетесь, то удалить можно удалять: remove_action('wp_head', 'rsd_link');
Нужны ли они - вопрос спорный. Я часто удаляю RSS ленты, но решать вам. Это можно сделать следующим кодом:
// Удаляем RSS ленту
function fb_disable_feed() {
wp_redirect(get_option('siteurl'));//будет осуществляться редирект на главную страницу
}
add_action('do_feed', 'fb_disable_feed', 1);
add_action('do_feed_rdf', 'fb_disable_feed', 1);
add_action('do_feed_rss', 'fb_disable_feed', 1);
add_action('do_feed_rss2', 'fb_disable_feed', 1);
add_action('do_feed_atom', 'fb_disable_feed', 1);
add_action('do_feed_rss2_comments', 'fb_disable_feed', 1);
add_action('do_feed_atom_comments', 'fb_disable_feed', 1);
remove_action( 'wp_head', 'feed_links_extra', 3 );
remove_action( 'wp_head', 'feed_links', 2 );
Я не рекомендую это делать, потому что многие плагины его используют. В описании плагина может не упоминаться, что он используется. Про REST API есть много статей и если вы точно не используете этот функционал, то его можно отключить. Если которотко, то это возможность получать данные из базы данных с других доменов. Например, можно вести блог и выводить на другом сайте (например интернет-магазине) записи из этого блога. Отключить его можно следующим кодом:
// Отключаем сам 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 );
Также я удаляю фильтр-автоподстановку тегов параграфа, удаляю автоподстановку размера изображений, emoji. В некоторых случаях можно удалить rel="canonical" и rel="shortlink". Публикую полный код с комментариями, можно взять только то, что нужно для решения вашей задачи:
// Отключаем сам 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' );
remove_filter( 'the_content', 'wptexturize' ); /* убираем авотдобавление параграфиов */
remove_action( 'wp_head', 'wp_resource_hints', 2 ); /* удаляем dns-prefetch */
// Удаляем автоподстановку размера картинок
function remove_thumbnail_dimensions( $html ) {
$html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
return $html;
}
add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10 );
add_filter( 'image_send_to_editor', 'remove_thumbnail_dimensions', 10 );
// убираем emoji
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
// Убираем мусор из шапки
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'rsd_link');
/* удаляем shortlink и canonical */
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0 );
// Убираем RSS
function fb_disable_feed() {
wp_redirect(get_option('siteurl'));
}
add_action('do_feed', 'fb_disable_feed', 1);
add_action('do_feed_rdf', 'fb_disable_feed', 1);
add_action('do_feed_rss', 'fb_disable_feed', 1);
add_action('do_feed_rss2', 'fb_disable_feed', 1);
add_action('do_feed_atom', 'fb_disable_feed', 1);
add_action('do_feed_rss2_comments', 'fb_disable_feed', 1);
add_action('do_feed_atom_comments', 'fb_disable_feed', 1);
remove_action( 'wp_head', 'feed_links_extra', 3 );
remove_action( 'wp_head', 'feed_links', 2 );
/* Сброс фильтра для html в описании категории */
remove_filter('pre_term_description', 'wp_filter_kses');
remove_filter('pre_term_description', 'wp_kses_data');