По-умолчанию, WordPress добавляет в код сайта мета-теги, которые не предоставляют особой ценности. Это дополнительный код в head с версией системы, ссылками на предыдущий и следующий пост, адресами RSS-лент записей/комментариев/категорий.
В своих шаблонах я предпочитаю убирать такую информацию. Удаляя «мусор», делаем код чистым, без признаков генерации да и попросту более читабельным . По просьбе постоянного читателя, делюсь сниппетом, которым регулярно пользуюсь.
Откуда берется информация в head
Ненужные нам мета-теги выводятся с помощью wp_head()
. Удалять ее вызов категорически нельзя, она отвечает за подключение стилей и скриптов темы и плагинов.
Чтобы удалить вывод лишней информации в <head>
, воспользуемся функцией remove_action — она удалит вызов указанной функции (второй параметр), подключенной к определенному хуку (первый параметр).
Добавлять команды, удаляющие ненужные нам строки, нужно в файл functions.php
или воспользовавшись альтернативным и более предпочтительным вариантом — своим плагином FunctionsPHP.
Вызов remove_action
можно добавить напрямую:
remove_action( 'wp_head', 'wp_generator' );
Или обернуть в функцию и подключить:
- к хуку
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' );
- или к хуку
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.
О появлении новой твоей статьи, Саша, увидел не с помощью анонса на почте, а комментария на другом посте. Такого еще не было в моей практике! 🙂
Статья очень важная — до сих пор у многих блоггеров замечаю ненужный спам в шапке. Теперь буду знать, куда отправлять за знаниями!
Максим, да, есть такая хитрость! 🙂
Анонсы отправляются утром, а статья опубликована пару часов назад. Ну а поскольку пост написан по просьбе читателя — ответный комментарий с ссылкой и пришел всем, кто следит за новыми комментариями.
Ну да, я так и понял. Вот она — польза, когда подписываешься на комментарии!
Александра, большое спасибо. А почему вы пишите, что этот код не работает в плагине 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-лента обычно имеет адрес вроде https://avovkdesign.com/feed. Или это может быть RSS-лента блога в FeedBurner. В любом случае, чтобы оставить одну главную RSS ленту нужно:
1) добавить remove_action для
feed_links
иfeed_links_extra
2) самостоятельно вывести единственный адрес RSS в тег <head> (в примере — стандартный адрес RSS-ленты для блогов WordPress; код добавляем в свой плагин FunctionsPHP или в файл темы
functions.php
):Так значит нужно добавить только этот код? В подписках у меня идет фид на Фидбёрнер. Это имеет к этому отношение?
Василий, можно добавить код с адресом RSS ленты FeedBurner, тогда Вы сможете смотреть статистику подписок (именно RSS, не почтовых).
У Вас на блоге вижу только ссылку на подписку по email через фидбернер. А адрес ленты выглядит вот так — http://feeds.feedburner.com/avovkdesign и тогда код будет с прямо прописанным адресом:
После добавления этого кода, над верхней панелью отображается строка ссылкой на фид.
Я пока оставил remove_action( ‘wp_head’, ‘feed_links’, чтобы там какой-либо фид присутствовал.
Василий, проверьте все ли верно добавили. У меня код работает.
Вывод этой ссылки фактически идентичен выводу кода счетчиков в теге <head> с помощью своего плагина FunctionsPHP. Вместо автоматически создаваемой ссылки на RSS ленту и ее название, можно вставить готовый вариант, скопировав из кода сайта.
Александра, все работает. Наверное, у меня при копировании, где-то была ошибка.
Отлично!
Александра, вставка кода в статьи и комментарии, у вас плагином реализована?
Теги <pre> и >code> вручную приписываем, а на сайте подключен скрипт подсветки синтаксиса highlight.js
Так это не плагин? Код бесплатный? Я на сайте прочитал про него с помощью переводчика. Но не совсем понял как правильно поставить такой код.
Василий, вообще это скрипт. Он бесплатный, вот официальный сайт.
Я на блоге подключила ко всем скриптам. Но можно и как плагин для WordPress его поставить — вот страничка.
Вставляю оттуда строчку скрипта, а что-то ничего не изменяется. Все отображается как обычно, при вставке через тег pre.
Василий, плагином конечно же проще будет. Для скрипта нужно еще стили подключить и запустить выполнение самого скрипта (скриншот).
Владимир, а как скрипт активировать? Я его просто добавлял на сайт. Все это я вставлял.
Василий, на самом деле все достаточно просто. Набросала небольшое руководство по подключению, там и с плагином вариант и вручную
А мне последняя фраза в рамочке больше всего понравилась ))). Ну ничего, может, разберусь…
🙂 Лариса, все-таки опасно ставить на сайт код, без хотя бы примерного понимания, что произойдет )))
У Вас вижу наличие этого самого мусора. Если пользуетесь нашим плагином FunctionsPHP, то смело добавляйте в него этот код:
Ой-ой, лучше тогда оставлю все как есть, это ж не смертельно.
Бывало, ковырялась в настройках, потом только откаты помогали…
Александра, а какой вред эти мета-теги наносят сайту? Может быть поисковики их не любят, понижая сайт в результатах выдачи, или какие-то другие последствия?
Мария, о вреде не идет речь. Если он и есть, то мне неизвестен.
При одинаковых прочих условиях предпочтение поисковики отдадут сайту с чистым, валидным кодом и корректной структурой.
Александра, можно вопрос немного не по теме. Мне сказали, что моя тема неправильно показывает заголовки статьи на странице с записью. Они идут в теге Н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/
greench, возможно они у Вас прописаны вручную прямо в header.php
Александра, спасибо за порцию полезнейшей информации! А у меня вот какая строчка в функциях прописана сразу после функций очистки мусора:
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. В хедере осталось много линков
, как я понял это стили. Их можно куда-нибудь перенести?
3. Ещё если смотреть исходный код в категории, видно, что Yoast SEO plugin выводит :
Этот линк надо удалять? В комментах говорилось про следующую статью, а тут целая страница. Как поступит лучше?
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?
спасибо за статью. Сделаю плагин
Этот код
не работает в последних версиях вп…пришлось вручную менять в
wp-includes/link-template.php
Здравствуйте, Александра.
Хочу оставить только общую 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' );
но нет результата! Что я делаю не так? Спасибо!
Олег, Ваш пример отлично работает — именно так и нужно. А куда код добавляете? Попробуйте в свой спец. плагин https://wp-puzzle.com/ru/functionsphp/
Здравствуйте. У меня при добавлении данного кода в funktions.php ничего не меняется. Ни напрямую, ни обернутого в функцию function delete_junk_from_header() { В чем может быть моя ошибка, и как еще можно с помощью этого кода, но без плагина, добиться результата? Спасибо.
Марина, а как проверяете результат?
Здравствуйте. После некоторых манипуляций с вордпресс, в том числе добавил ваш код в functions.php, возникли проблемы с яндекс.вебмастер. Вебмастер сообщает о появлении новых страниц /?rest_route=/,
в основном с таким продолжением /?rest_route=/oembed/1.0/embed&url=http://. Страницы пустые, некоторые переадресованы на главную. Может ли это быть следствием добавления кода? И если да, то исправляется только обратным редактированием? Заранее благодарен за ответ.
Это проблемы включенного REST API. Если не используете его (например, не подключаетесь к админке сайта из мобильного приложения и не используете JetPack), то добавьте код, который отключит создание таких ссылок:
Спасибо, попробую. Еще один вопрос: строчка
только блокирует отображение shоrtlink в коде страницы или также отменяет автоматическое создание дубля с динамическим адресом при создании новой страницы с ЧПУ?
эта строчка запрещает вывод ссылки в коде страницы
Здравствуйте Александра!
Восстанавливаю свой сайт, решил усилить безопасность. Случайно открыл для себя Ваш изумительный сайт! Сразу подписался. Не являясь спецом, пытаюсь скрыть информацию, увеличивающую уязвимость сайта. Столкнулся с тем, что строку ничем скрыть не удается. Вставлял код и в functions.php и создавал свои плагины с разным кодом — не удаляется! Может какую-то ошибку увидите на скрине?
Ну, а главное: спасибо за сайт!