SEO чистка WordPress
4

Удаляем ненужный код из WordPress - Чистим сайт

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

 

Базовая оптимизация wordpress header:

Некоторые вставки в верхнюю часть вашего сайта используют хуки для wp_head. Убрать эту функцию не получится, ведь если это сделать, то вместе с ней исчезнут и полезные куски кода, которые необходимы для сайта. Но тут на помощь к нам приходит файл с функциями functions.php. Открываем его и вносим правки, что я дал ниже.

 

Уберем ссылки на rss категории:

remove_action('wp_head','feed_links_extra', 3);

 

Уберем ссылки на основной rss, а также rss комментариев:

remove_action('wp_head','feed_links', 2);

 

Удаляем link rel=EditURI, сервис Really Simple Discovery:

remove_action('wp_head','rsd_link');

 

Удаляем Windows Live Writer (публикация постов к примеру с Microsoft Word и т.п).:

remove_action('wp_head','wlwmanifest_link');

 

Удаляем вывод версии WordPress:

remove_action('wp_head','wp_generator');

 

Удалим различные ссылки при отображении постов: следующий, предыдущий, короткий url:

remove_action('wp_head','start_post_rel_link',10,0);
remove_action('wp_head','index_rel_link');
remove_action('wp_head','adjacent_posts_rel_link_wp_head', 10, 0 );
remove_action('wp_head','wp_shortlink_wp_head', 10, 0 );

 

 

Убираем остальной код из движка WordPress:

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

 

Удаляем стили .recentcomments, они появляются при выводе виджета "последние комментарии":

function ny_remove_recent_comments_style() {
    global $wp_widget_factory;
    remove_action( 'wp_head', array( $wp_widget_factory->widgets['WP_Widget_Recent_Comments'], 'recent_comments_style' ) );
}
add_action( 'widgets_init', 'ny_remove_recent_comments_style' );

 

В WordPress вы могли увидеть достаточно стремный код Emoji, поясню и пролью свет на это. Это код поддержки смайликов, удалить его можно вставив вот эти строки:

remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');

 

 

Убираем лишний код плагинов и темы:

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

 

Удаляем стили из модуля WP-Syntax, в нем стилей достаточно мало и располагаются они в файле wp-syntax.css, их я переместил в основной style.css:

remove_action( 'wp_head','wp_syntax_head');

 

Удаляем вывод информации о версии, которую вставляет модуль qTranslate-X:

remove_action('wp_head','qtranxf_wp_head_meta_generator');

 

Удаляем вывод стилей и скриптов от модуля Contact Form 7, там где он не используется:

// Deregister Contact Form 7 styles
add_action( 'wp_print_styles', 'aa_deregister_styles', 100 );
function aa_deregister_styles() {
    if ( ! is_page( get_theme_mod( "header_contacts") ) ) {
        wp_deregister_style( 'contact-form-7' );
    }
}
// Deregister Contact Form 7 JavaScript files on all pages without a form
add_action( 'wp_print_scripts', 'aa_deregister_javascript', 100 );
function aa_deregister_javascript() {
    if ( ! is_page( get_theme_mod( "header_contacts") ) ) {
        wp_deregister_script( 'contact-form-7' );
    }
}

 

Удаляем стили от модуля WP-PageNavi на версии 2.5.0 (на более высоких версиях это делается через настройки модуля в админке):

remove_action('wp_print_styles', 'pagenavi_stylesheets');

 

Удаляем вывод стилей от модуля Yet Another Related Posts Plugin, их также можно внести в основной файл (т.к. их мало: widget.css, related.css и yarpp-thumbnails-yarpp-thumbnail):

add_action( 'wp_print_styles', 'tj_deregister_yarpp_header_styles' );
function tj_deregister_yarpp_header_styles() {
   wp_dequeue_style('yarppWidgetCss');
   // Следующая строка нужна, если related.css грузится в header, а в футере отключен
   wp_deregister_style('yarppRelatedCss'); 
}
 
add_action( 'wp_footer', 'tj_deregister_yarpp_footer_styles' );
function tj_deregister_yarpp_footer_styles() {
   wp_dequeue_style('yarppRelatedCss');
   wp_dequeue_style('yarpp-thumbnails-yarpp-thumbnail');
}

 

Если вы хотите убрать стили и скрипты из какого-либо модуля, то найдите в модуле строку следующего типа, он подключает экшн в ту или иную часть сайта:

add_action('wp_head', 'plugin_function_here')

Для удаления можете воспользоваться следующей конструкцией, посмотрите на код ниже и код выше, сравните их и думаю поймете в чем суть, такого способа:

remove_action('wp_head', 'plugin_function_here');

 

 

Как убрать версию из скриптов/стилей в WordPress:

Большинство скриптов в WordPress включая некоторые стандартные, при подключении выводят также их версию, а это не совсем хорошо. Почему? Злоумышленники точно будут знать вашу версию того или иного скрипта, а сами понимаете, что с этим можно поделать. :

Удаляем версии WordPress со вех возможных страниц, RSS лент, всех скриптов и стилей:

add_filter('the_generator', '__return_empty_string');
function rem_wp_ver_css_js( $src ) {
    if ( strpos( $src, 'ver=' ) )
        $src = remove_query_arg( 'ver', $src );
    return $src;
}
add_filter( 'style_loader_src', 'rem_wp_ver_css_js', 9999 );
add_filter( 'script_loader_src', 'rem_wp_ver_css_js', 9999 );

 

Как удалить wp-json и oembed в WordPress:

Начиная с версии WordPress 4.4 ввели дополнительные функции, которые генерирует огромное количество технических страниц. Они хорошо индексируются поисковыми системами, из-за чего возникают проблемы с ранжированием. А это как вы понимаете лишний мусор, мешающий нашему сайту нормально развиваться. Страниц появляется очень много и все они не несут никакой ценности, только один хлам. Избавившись от этого, мы уберем ряд критических ошибок при индексировании.:

 

Удаляем поддержку REST API:

// Отключаем сам REST API
 add_filter('rest_enabled', '__return_false');
 
// Отключаем события 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 );
 
// Отключаем фильтры 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 );
 
//Отключаем type="application/json+oembed"
 remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
 remove_action( 'wp_head', 'rest_output_link_wp_head' );
 remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 );

 

Дополнительные правки в header.php:

Дополнительно вы можете удалить следующий код из вашего движка, он особой роли не несет и как по мне он не к чему в нем:

<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>">

 

Чистим заголовки сервера WordPress:

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

 

Удаляем Link rel=shortlink:

remove_action( 'template_redirect', 'wp_shortlink_header', 11 );

 

Удаляем X-Pingback:

function ny_remove_x_pingback( $headers ) {
    unset( $headers['X-Pingback'] );
    return $headers;
}
add_filter( 'wp_headers', 'ny_remove_x_pingback' );

 

Удаляем X-Powered-By:

header_remove( 'x-powered-by' );

 

Вот и всё, мы проделали с вами достаточно большую, НО полезную работу для нашего блога, по внутренней оптимизации WordPress. Это будет полезно во-первых для SEO оптимизации и дальнейшего продвижения блога, а во-вторых для красоты исходного кода и увеличения производительности. Если есть вопросы или какие-то моменты я упустил, напишите об этом в комментариях, посмотрим вместе всё...

Запись опубликована В категории: WordPress

Shnapik

Вебмастер с опытом ищет приют! Возьмите меня, а то меня рвут!

4 комментариев

  1. Привет! Может я не совсем по теме пишу, но у меня есть явная проблема, которую не могу решить уже несколько дней.
    Есть блог на вордпресс, регистрация пользователей отключена. При отправке комментария данные пользователя (кроме текста) остаются в соответствующих полях. Они не очищаются ни при обновлении страницы, ни при смене темы (т.е. проблема не в самой теме, а в вордпресс).
    Тестировала в разных браузерах, везде данные остаются. Я не очень разбираюсь в кодах, но если ткнуть пальцем - то все настрою как надо.
    Есть какое-нибудь решение этой проблемы?
    Заранее благодарю.

    • Добрый день, посмотрел у себя в блоге, действительно сохраняются данные (email и имя), если я правильно понял и нужно, чтобы эти данные не сохранялись, а форма была всегда чистой при открытии страницы, то нужно переопределить поля формы в функции comment_form, убрав из них атрибут value.

      Примерно так должно быть:

      <?php
      $fields = array(
      'fields' => array(
        'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
               '<input id="author" name="author" type="text" size="30"' . $aria_req . $html_req . ' /></p>',
        'email'  => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
               '<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' size="30" aria-describedby="email-notes"' . $aria_req . $html_req  . ' /></p>',
        'url'    => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label> ' .
               '<input id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" /></p>',
      )
      );
      ?>
      <?php comment_form($fields); ?>
  2. О, спасибо тебе, добрый человек!) Все получилось! А я уже и не надеялась это решить, через поисковик невозможно найти ответ. Еще раз спасибо )

    • Не за что, рад помочь. Через поиск в целом можно найти решение, но самому тоже придется пописать возможно код. Сделаю позже статью про функцию comment_form.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *