VovkDesign

Блог Александры и Владимира Вовк

RSS лента
wp-puzzle

Удаляем мусор в head WordPress

По-умолчанию, WordPress добавляет в код сайта мета-теги, которые не предоставляют особой ценности. Это дополнительный код в head с версией системы, ссылками на предыдущий и следующий пост, адресами RSS-лент записей/комментариев/категорий.

В своих шаблонах я предпочитаю убирать такую информацию. Удаляя «мусор», делаем код чистым, без признаков генерации да и попросту более читабельным . По просьбе постоянного читателя, делюсь сниппетом, которым регулярно пользуюсь.

мусор в коде сайта

Откуда берется информация в head

Ненужные нам мета-теги выводятся с помощью wp_head(). Удалять ее вызов категорически нельзя, она отвечает за подключение стилей и скриптов темы и плагинов.

Чтобы удалить вывод лишней информации в <head>, воспользуемся функцией remove_action — она удалит вызов указанной функции (второй параметр), подключенной к определенному хуку (первый параметр).

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

Вызов remove_action можно добавить напрямую:

remove_action( 'wp_head', 'wp_generator' );

Или обернуть в функцию и подключить:

  1. к хуку after_setup_theme при добавлении в файл functions.php темы:
    function delete_junk_from_header() {
    
        remove_action( 'wp_head', 'wp_generator' );
    
    }
    add_filter( 'after_setup_theme', 'delete_junk_from_header' );
  2. или к хуку plugins_loaded при добавлении в свой плагин FunctionsPHP:
    function delete_junk_from_header() {
    
        remove_action( 'wp_head', 'wp_generator' ); 
    
    }
    add_action( 'plugins_loaded', 'delete_junk_from_header' );

Полный список функций, удаляющих мусор WordPress

Вот полный список экшенов, которыми я пользуюсь:

remove_action( 'wp_head', 'feed_links', 2 ); // Удаляет ссылки RSS-лент записи и комментариев
remove_action( 'wp_head', 'feed_links_extra', 3 ); // Удаляет ссылки RSS-лент категорий и архивов

remove_action( 'wp_head', 'rsd_link' ); // Удаляет RSD ссылку для удаленной публикации
remove_action( 'wp_head', 'wlwmanifest_link' ); // Удаляет ссылку Windows для Live Writer

remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0); // Удаляет короткую ссылку
remove_action( 'wp_head', 'wp_generator' ); // Удаляет информацию о версии WordPress
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 ); // Удаляет ссылки на предыдущую и следующую статьи

// отключение WordPress REST API
remove_action( 'wp_head', 'rest_output_link_wp_head' ); 
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 );
// устаревшие функции
// используйте только для WordPress до версии 3.2 включительно 
if ( get_bloginfo('version') <= '3.2' ) {

    remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 ); // Удаляет ссылки на предыдущую и следующую статьи
    remove_action( 'wp_head', 'index_rel_link'); // Удаляет ссылку на главную страницу 
    remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 ); // Удаляет ссылку на родительскую страницу 
    remove_action( 'wp_head', 'start_post_rel_link', 10, 0 ); // Удаляет ссылку на первую запись

}

Теперь немного уточнений.

Первая и вторая строчка удалят все ссылки на RSS-ленты. При удалении функции feed_links (первая строка), позаботьтесь о подключении ссылки на главную RSS-ленту блога.

При удалении RSD ссылки (третья строка), убедитесь, что не пользуетесь удаленной публикацией.

Если регулярно обновляете WordPress и его версия выше 3.2, то нет необходимости использовать последний блок с проверкой версии и удалением функции для устаревшей версии CMS.

Используйте приведенный выше код только в случае, если понимаете о чем идет речь.

Комментарии всего: 68

  • О появлении новой твоей статьи, Саша, увидел не с помощью анонса на почте, а комментария на другом посте. Такого еще не было в моей практике! 🙂
    Статья очень важная — до сих пор у многих блоггеров замечаю ненужный спам в шапке. Теперь буду знать, куда отправлять за знаниями!

    • Максим, да, есть такая хитрость! 🙂
      Анонсы отправляются утром, а статья опубликована пару часов назад. Ну а поскольку пост написан по просьбе читателя — ответный комментарий с ссылкой и пришел всем, кто следит за новыми комментариями.

      • Ну да, я так и понял. Вот она — польза, когда подписываешься на комментарии!

  • Александра, большое спасибо. А почему вы пишите, что этот код не работает в плагине Functions.php?
    Очень даже работает. Я установил на тестовом сайте этот код, даже не вставлял в файл functions предложенный код для вызова функции.
    Так выглядел исходный код до ставки кода — http://i.piccy.info/i9/faf1359568f82ca346b45c9e44921aad/1422285843/345245/853679/2015_01_26_182244.jpg
    После вставки кода в плагин, исходный код выглядит уже так — http://i.piccy.info/i9/f7b6a2840200d0316c02b158885b90bb/1422285964/253482/853679/2015_01_26_181120.jpg

    • Василий, надо вникнуть детальнее в этот вопрос. В моем случае в плагине код не сработал.

    • Василий, да — все работает. Похоже, просто не внимательно проверила. Сейчас в статье уточню этот момент.
      Спасибо за подсказку!

  • У меня в исходном коде нет RSD и Writer, поэтому я эти строчки не вставлял.
    Александра, поясните пожалуйста, по поводу функции feed_links (первая строка). Как нужно позаботиться о подключении ссылки на главную RSS-ленту блога. Мне непонятно, что мне нужно будет сделать.

    • Если Вы удаляете через хук функцию feed_links, то из <head> пропадут две ссылки — на общую RSS-ленту сайта и на ленту комментариев.
      Общая RSS-лента обычно имеет адрес вроде http://avovkdesign.com/feed. Или это может быть RSS-лента блога в FeedBurner. В любом случае, чтобы оставить одну главную RSS ленту нужно:
      1) добавить remove_action для feed_links и feed_links_extra
      2) самостоятельно вывести единственный адрес RSS в тег <head> (в примере — стандартный адрес RSS-ленты для блогов WordPress; код добавляем в свой плагин FunctionsPHP или в файл темы functions.php):

      function add_my_rss_feed() {
          echo '<link rel="alternate" type="application/rss+xml" title="'. get_bloginfo('name') .'" href="'. get_bloginfo_rss('rss2_url') .'" />';
      }
      add_action( 'wp_head', 'add_my_rss_feed' );
  • Так значит нужно добавить только этот код? В подписках у меня идет фид на Фидбёрнер. Это имеет к этому отношение?

    • Василий, можно добавить код с адресом RSS ленты FeedBurner, тогда Вы сможете смотреть статистику подписок (именно RSS, не почтовых).
      У Вас на блоге вижу только ссылку на подписку по email через фидбернер. А адрес ленты выглядит вот так — http://feeds.feedburner.com/avovkdesign и тогда код будет с прямо прописанным адресом:

      function add_my_rss_feed() {
          echo '<link rel="alternate" type="application/rss+xml" title="'. get_bloginfo('name') .'" href="http://feeds.feedburner.com/avovkdesign" />';
      }
      add_action( 'wp_head', 'add_my_rss_feed' );
      • После добавления этого кода, над верхней панелью отображается строка ссылкой на фид.
        Я пока оставил remove_action( ‘wp_head’, ‘feed_links’, чтобы там какой-либо фид присутствовал.

        • Василий, проверьте все ли верно добавили. У меня код работает.
          Вывод этой ссылки фактически идентичен выводу кода счетчиков в теге <head> с помощью своего плагина FunctionsPHP. Вместо автоматически создаваемой ссылки на RSS ленту и ее название, можно вставить готовый вариант, скопировав из кода сайта.

          • Александра, все работает. Наверное, у меня при копировании, где-то была ошибка.

          • Отлично!

  • Александра, вставка кода в статьи и комментарии, у вас плагином реализована?

    • Теги <pre> и >code> вручную приписываем, а на сайте подключен скрипт подсветки синтаксиса highlight.js

      • Так это не плагин? Код бесплатный? Я на сайте прочитал про него с помощью переводчика. Но не совсем понял как правильно поставить такой код.

        • Василий, вообще это скрипт. Он бесплатный, вот официальный сайт.
          Я на блоге подключила ко всем скриптам. Но можно и как плагин для WordPress его поставить — вот страничка.

          • Вставляю оттуда строчку скрипта, а что-то ничего не изменяется. Все отображается как обычно, при вставке через тег pre.

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

          • Владимир, а как скрипт активировать? Я его просто добавлял на сайт. Все это я вставлял.

          • Василий, на самом деле все достаточно просто. Набросала небольшое руководство по подключению, там и с плагином вариант и вручную

  • А мне последняя фраза в рамочке больше всего понравилась ))). Ну ничего, может, разберусь…

    • 🙂 Лариса, все-таки опасно ставить на сайт код, без хотя бы примерного понимания, что произойдет )))
      У Вас вижу наличие этого самого мусора. Если пользуетесь нашим плагином FunctionsPHP, то смело добавляйте в него этот код:

      function delete_junk_from_header() {
      
          remove_action( 'wp_head', 'wp_generator' ); // данные о версии
          remove_action( 'wp_head', 'feed_links_extra', 3 ); // ссылки RSS-лент категорий и архивов
          remove_action( 'wp_head', 'wlwmanifest_link' ); // ссылка Windows для Live Writer
          remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 ); // Удаляет ссылки на предыдущую и следующую статьи
      
      }
      add_action( 'plugins_loaded', 'delete_junk_from_header' );
      • Ой-ой, лучше тогда оставлю все как есть, это ж не смертельно.
        Бывало, ковырялась в настройках, потом только откаты помогали…

  • Александра, а какой вред эти мета-теги наносят сайту? Может быть поисковики их не любят, понижая сайт в результатах выдачи, или какие-то другие последствия?

    • Мария, о вреде не идет речь. Если он и есть, то мне неизвестен.
      При одинаковых прочих условиях предпочтение поисковики отдадут сайту с чистым, валидным кодом и корректной структурой.

  • Александра, можно вопрос немного не по теме. Мне сказали, что моя тема неправильно показывает заголовки статьи на странице с записью. Они идут в теге Н2, а нужно Н1. Но у меня в Н1 прописано название сайта, а описание Н2. Когда я сделала заголовок статьи Н1, то валидатор показывает это ошибкой, что у меня лишнего Н1 на странице.
    Я смотрю у всех заголовок Н1, а около названия сайта вообще нет тегов Н1. Подскажите, как это можно исправить? Действительно ли робот считает, что у меня у всех статей одно название — название сайта?

    • Софья, вопрос совершенно не по теме 🙂
      Да, название статьи должно быть в h1. Название и описание сайта не обязательно заключать в теги h1 и h2, вполне подойдут p, span или div. Исправить это можно в файле header.php (в консоли Внешний вид — Редактировать) — просто найдите там теги h1 и h2, замените их на p или span и сохраните файл.

  • Александра, можно уточнить. Опять по теме =)).
    Вот такая строчка
    А я пишу — правильно?
    И для Н2 тоже span можно?
    Просто как ни залезу файлы редактировать сама, потом приходиться из копии восстанавливать!

    • Софья, Ваш код не опубликовался. Для вставки кода нужно использовать тег <code>.
      Если восстанавливаете каждый раз и совершенно не разбираетесь в этом, то безопаснее воспользоваться услугами специалистов — и сделают как Вам нужно и время/нервы сэкономите. Фрилансеров очень много

  • В комментарии коды не видно. Я рискнула.
    Спасибо большое, всё получилось! Так просто оказывается! Спасибо огромное!
    Поменяла название статьи на h1 опять валидатор говорит, что ошибка Виды капусты фото названия.
    Пусть будет?

    • Софья, я не совсем понимаю какой валидатор и что именно пишется. Код Вы вставляете в комментарий некорректно. Попробуйте сделать скриншот

  • Александра, Владимир, я разглядела — это даже не ошибка, а замечание Consider using the h1 element as a top-level heading only (all h1 elements are treated as top-level headings by many screen readers and other tools) — переводить у меня не хочет почему- то сегодня гугл. А валидатор validator.w3.org

    • Софья, это тонкости разметки. Валидатор «планировал» увидеть в теге <header> заголовок, но мы его из шапки убрали. Это всего лишь замечание, для SEO не критично, так что можно не беспокоиться.

  • Спасибо большое за помощь.

  • Давно хотел убрать лишний мусор особенно вот эти команды
    remove_action( ‘wp_head’, ‘feed_links’, 2 ); // Удаляет ссылки RSS-лент записи и комментариев
    remove_action( ‘wp_head’, ‘feed_links_extra’, 3 ); // Удаляет ссылки RSS-лент категорий и архивов

    remove_action( ‘wp_head’, ‘rsd_link’ ); // Удаляет RSD ссылку для удаленной публикации

    Спасибо помогло, буду читать ваш блог 🙂

    • Сергей, всегда рады новым читателям! Отлично, что пригодилась статья 🙂

  • Большинство функций реализовано в плагине SEO Youst. Версия WP не выводится в новых версиях. Единственное остается, (и что плагин не убирает ) «ссылки на предыдущую и следующую статьи» . У многих топовых блоггерах эта ссылка есть. Подскажите стоит ли ее трогать тогда? или оставить все как есть? заранее спасибо!

    • Не являюсь поклонником этого плагина, больше отдаю предпочтение All In One SEO и Platinum SEO. Не вижу вреда от ссылок на предыдущую и следующую ссылки, как это отражается в плане SEO — не могу сказать, это не классические ссылки, передающие вес, но робот по ним переходит. Скорее всего, способствуют лучшей индексации, так ли это — вопрос к SEO-специалистам и экспериментам.

      • Спасибо за отзыв! Я ценю ваше мнение!) Еще хотелось бы услышать ваше мнение про одну задумку. Я планирую сделать страницу, с названием допустим «wiki» и в ней сделать словарь терминов (списком). Т.е. при написании новой статьи, выделять определенное слово и ссылаться на эту страницу (на якорь в тексте). Когда человек будет читать статью и ему попадается «незнакомое» слово, он нажимает на него и попадает на эту страницу и сразу видит в списке это слово и его термин. Получается это будет как для посетителей приятно и полезно, и для сайта перелинковка. Или это может наоборот навредить сайту из-за большого количества ссылающихся ссылок на одну страницу? =(

        • Виталий, с точки зрения юзабилити да и поведенческого фактора — это несомненно плюс будет. А вот по перелинковке я не подскажу. Владимир в этом вопросе более компетентен, подождем его комментарий 🙂

  • Александра, добрый вечер! Если не серет, почему не пользуетесь WordPress SEO?

    И еще вопрос не в кассу))) Каким образом у вс реализована вставка кода в комментариях?

    • На одном проекте пользуюсь, вроде все ок, смущают отзывы в сети об ошибках и конфликтах с другими плагинами.
      В комментариях по-умолчанию разрешен тег <code>, а кнопки — плагин от Димокса.

  • Здравствуйте.Никак не могу удалить фиды с этими кодами(( поставил пока заглушку.Если не трудно посмотрите и скажите верно ли я всё сделал http://ladies-paradise.ru/prichina-razry-va-ronaldo-i-iriny-shejk/feed/

  • Александра, спасибо за порцию полезнейшей информации! А у меня вот какая строчка в функциях прописана сразу после функций очистки мусора:
    add_theme_support( ‘automatic-feed-links’ );
    Я так понимаю, это она создаёт ненужные ссылки на фиды. Я попробовала её просто удалить на тестовом сайте, вроде всё работает, но вот не знаю, можно ли так грубо )))
    А сама функция у меня называется removeHeadLinks. Можно ли прописывать все эти ремувы в этой одной функции или лучше создать, как у Вас написано, ещё одну функцию с названием delete_junk_from_header? Пробовала и так, и так, работает, но вот думаю, как грамотней сделать

    • Елена, если Вы правите файл functions.php, то неважно — можно удалить эту строку (да, она создает ссылки на rss-ленты).
      Все ремувы можно прописать в одной функции, создавать отдельную не обязательно. Но если сделаете отдельной, то это не будет какой-то ошибкой или неправильным решением.

      • Понятно, спасибо! )))) Так, глядишь, скоро вообще в кодах понимать начну 🙂
        А у меня ещё один немного странный вопрос возник: вот выше в комментах писалось про адрес фида на фидбёрнере, который можно прописать самостоятельно там же в функциях. А обязательно ли его прописывать? Что он даёт блогу?

        • Елена, по-умолчанию в WordPress все новые статьи также выводятся в RSS-ленте блога с адресом http://адресблога/feed. Его можно заменить на адрес ленты FeedBurner — там есть возможность учета количества подписчиков.
          Ну а сама RSS-лента — это возможность читателям получать новости Вашего блога через специальные программы (я в этиъ целях пользуюсь приложением InnoReader).

          • Надо бы мне про фиды больше почитать, наверное. А то в общих чертах знаю, что это, а вот как и где реализуется — не всегда понятно У меня ещё с самого начала блогостроительства был устновлен плагин feed burner (не помню точное название), где прописывался этот адрес RSS ленты c фидбёрнера. Вот я и задумалась, а надо ли дополнительно выводить в коде страницы адрес фида.

  • Отличная статья, хорошо помогает в создании сайтов.

  • Спасибо огромное! Я начинающий веб-программист. Долго мучилась, не могла найти в нете ответа на этот вопрос. А тут — такие подробные объяснения! Мне очень помогла эта статья!

  • Александра, спасибо огромное ссылочку на эту статью, помогла удалить ленты и комментарии RSS, но три линка с atom, rss и feed не удалились.
    1. Я их из файла header просто удалил. Правильно ли я сделал? Вроде всё фунциклирует )))

    2. В хедере осталось много линков

    <link rel='stylesheet

    , как я понял это стили. Их можно куда-нибудь перенести?

    3. Ещё если смотреть исходный код в категории, видно, что Yoast SEO plugin выводит :

    <link rel="next" href="http://interior-designing.ru/arxitektory/page/2/" />

    Этот линк надо удалять? В комментах говорилось про следующую статью, а тут целая страница. Как поступит лучше?

    4. Немного не понял про feedburner, он у меня выводится ниже хедера двумя ссылками, его надо куда-то подключать? Икак проверить, что он работает? Спасибо за умные и полезные статьи и помощь и их понимании!

    • Виталий, да — некоторые ссылки могут добавляться не WordPress-ом, а напрямую в header.php прописаны. Тогда их можно удалить только вручную.

      Стили (<link rel='stylesheet') могут подключаться только в head.

      Ссылка на следующую страницу (next) в SEO-плагине Yoast полезна для поисковых роботов, но не обязательна.

      C FeedBurner все просто — если он подключен, то RSS лента блога будет выводиться в его читабельном формате для посетителей, + можно настроить отправку на почту. Но это уже совершенно другая история. Да и FeedBurner рано или поздно умрет, Google уже давно его не развивает.

  • Александра, спасибо за ответ!
    По поводу стилей в хедере.
    У меня сервис PageSpeed Insights выводит следующее:
    «Удалите из верхней части страницы код JavaScript и CSS»
    Какие именно стили и js удалять?

  • Здравствуйте, есть ли какой-нибудь способ контролировать порядок вывода кода функцией wp_head(); т.е мне не нравится что у меня идет тайтл, потом идет куча кода выводимого wp_head, а потом где то внизу идет дескрипшн и кейвордц, так же выводимые функцией wp_head (у меня это делает плагин ALL in SEO pack)

    • Ксения, можно, используя приоритеты вызова функций. Для того, чтобы перенести данные, выводимые All In One SEO Pack, можно попробовать сначала удалить их хук, а затем наново его зарегистрировать, указав приоритет.

  • подскажите пожалуйста как можно удалить название сео плагина из head

    • Алексей, можно почитать документацию по этому плагину или поискать в его исходниках фильтр, который отвечает за вывод кода в head. Затем подключить к этому фильтру или экшену свою функцию и простыми php-функциями поиска и замены заменить нужное слово на пустую строку.

  • А ведь реально пол секунды экономит при загрузке, если убрать мусор. Спасибо.

  • Отличная статья. Но я бы добавил в нее удаление скриптов и стилей Emoji, а также код для удаления REST API.

  • А почему просто не удалить ссылки в head, а именно комментировать их в functions.php?

  • спасибо за статью. Сделаю плагин

  • Этот код

    remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0); // Удаляет короткую ссылку

    не работает в последних версиях вп…пришлось вручную менять в
    wp-includes/link-template.php

    /**
    * Send a Link: rel=shortlink header if a shortlink is defined for the current page.
    *
    * Attached to the wp action.
    *
    * @since 3.0.0
    *
    * @uses wp_get_shortlink()
    */
    function wp_shortlink_header() {
    if ( headers_sent() )
    return;
    $shortlink = wp_get_shortlink(0, 'query');
    if ( empty($shortlink) )
    return;
    header('Link: <' . $shortlink . '>; rel=shortlink', false);
    }
     
  • Здравствуйте, Александра.
    Хочу оставить только общую RSS-ленту на сайт и убрать обе ленты комментариев. Т.е. сделать как на этом сайте. Но не получается!

    remove_action( 'wp_head', 'feed_links', 2 ); // Удаляет ссылки RSS-лент записи и комментариев
    remove_action( 'wp_head', 'feed_links_extra', 3 ); // Удаляет ссылки RSS-лент категорий и архивов

    убирают все ленты, включая общую. А как добавить теперь только общую? Чтобы было как у вас:

    <link rel="alternate" type="application/rss+xml" title="Александра и Владимир Вовк - RSS Лента" href="http://feeds.feedburner.com/avovkdesign" />

    Пробовал

    function add_my_rss_feed() {
    echo '<link rel="alternate" type="application/rss+xml" title="'. get_bloginfo('name') .'" href="'. get_bloginfo_rss('rss2_url') .'" />';
    }
    add_action( 'wp_head', 'add_my_rss_feed' );

    но нет результата! Что я делаю не так? Спасибо!

Комментировать

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

*

wp-puzzle.com logo