WordPress. Как удалить теги в заголовке

17.07.2019

Теги: CMSWebSocketWordPressНастройкаПлагин

WordPress добавляет внутрь тега <head> множество служебных тегов, многие из которых бесполезны как для посетителей, так и для поисковых систем. Кроме того, некоторые мета-теги противоречат правилам безопасности. Например, мета-тег generator содержит информацию об используемой версии WordPress, на что хакеры смотрят в первую очередь. Зная точную версию движка, злоумышленник может использовать эту информацию для для взлома сайта.

Удаляем служебные теги

Давайте посмотрим, что это за теги и как их удалить из заголовка WordPress. Код для удаления добавляем в файл functions.php темы.

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.server.com/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://www.server.com/wp-includes/wlwmanifest.xml" />
<link rel='prev' title='Шестая запись блога' href='http://www.server.com/post-number-6/' />
<link rel='next' title='Восьмая запись блога' href='http://www.server.com/post-number-8/' />
<meta name="generator" content="WordPress 4.9.10" />
<link rel="canonical" href="http://www.server.com/post-number-7/" />
<link rel='shortlink' href='http://www.serever.com/?p=1881' />

Удаляем ссылку для редактирования внешними сервисами:

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.server.com/xmlrpc.php?rsd" />
remove_action('wp_head', 'rsd_link');

Удаляем ссылку для редактирования клиентом Windows Live Writer:

<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://www.server.com/wp-includes/wlwmanifest.xml" />
remove_action('wp_head', 'wlwmanifest_link');

Удаляем вывод ссылок на предыдущую и следующую запись:

<link rel='prev' title='Шестая запись блога' href='http://www.server.com/post-number-6/' />
<link rel='next' title='Восьмая запись блога' href='http://www.server.com/post-number-8/' />
remove_action('wp_head','adjacent_posts_rel_link_wp_head');

Удаляем версию WordPress из заголовка страницы:

<meta name="generator" content="WordPress 4.9.10" />
remove_action('wp_head', 'wp_generator');

Удаляем вывод канонических ссылок:

<link rel="canonical" href="http://www.host24.ru/post-number-7/" />
remove_action('wp_head', 'rel_canonical');

Удаляем вывод коротких ссылок:

<link rel='shortlink' href='http://www.host24.ru/?p=1881' />
remove_action('wp_head', 'wp_shortlink_wp_head');

Плагин для удаления тегов

Чтобы не переносить код удаления служебных тегов из одной темы в другую, можно оформить все в виде плагина. Создаем директорию tokmakov-clean-head, а внутри нее — файлы tokmakov-clean-head.php и uninstall.php:

<?php
/*
Plugin Name: Удаляет теги из заголовка
Plugin URI: https://tokmakov.msk.ru
Description: Позволяет удалить неиспользуемые служебные теги, настройки на странице «Настройки • Общие».
Version: 1.0
Author: Евгений Токмаков
Author URI: https://tokmakov.msk.ru
*/

/*
 * Получаем настройки плагина и удаляем служебные теги в head
 */
add_action('init', function () {
    $option = get_option('tokmakov_head_clean', false);
    if (empty($option)) {
        return;
    }
    if (isset($option['edituri'])) {
        remove_action('wp_head', 'rsd_link');
    }
    if (isset($option['wlwmanifest'])) {
        remove_action('wp_head', 'wlwmanifest_link');
    }
    if (isset($option['prevnext'])) {
        remove_action('wp_head','adjacent_posts_rel_link_wp_head');
    }
    if (isset($option['generator'])) {
        remove_action('wp_head', 'wp_generator');
    }
    if (isset($option['canonical'])) {
        remove_action('wp_head', 'rel_canonical');
    }
    if (isset($option['shortlink'])) {
        remove_action('wp_head', 'wp_shortlink_wp_head');
    }
});

/*
 * Добавляем возможность изменять настройки плагина в панели управления
 */
add_action('admin_init', function () {

    /*
     * Регистрируем новую опцию, которая содержит несколько checkbox-ов
     */
    register_setting(
        'general',
        'tokmakov_head_clean'
    );

    /*
     * Регистрируем новую секцию для этой опции из нескольких значений
     */
    add_settings_section(
        'tokmakov_head_clean_section', // идентификатор секции
        'Плагин удаления служебных тегов', // заголовок секции
        function () { // выводит описание секции
            ?>
            <p>
            Плагин позволяет удалить служебные теги, которые бесполезны
            как для посетителей, так и для поисковых систем.
            </p>
            <?php
            $html =
<<<HTML
1. <link rel="EditURI" type="..." title="..." href="..." />
2. <link rel="wlwmanifest" type="..." href="..." />
3. <link rel="prev" title="..." href="..." />
3. <link rel="next" title="..." href="..." />
4. <meta name="generator" content="..." />
5. <link rel="canonical" href="..." />
6. <link rel="shortlink" href="..." />
HTML;
            $html = esc_html($html);
            ?>
            <pre style="border: 1px solid #ddd; padding: 5px;"><?= $html; ?></pre>
            <?php
        },
        'general'
    );

    /*
     * Добавляем поле формы для первого значения опции
     */
    add_settings_field(
        'tokmakov_head_clean_edituri', // идентификатор поля формы
        'Удалить служебный тег № 1', // заголовок поля формы
        function () {  // выводит html-код поля формы
            $option = get_option('tokmakov_head_clean');
            $checked = '';
            if (isset($option['edituri'])) {
                $checked = 'checked';
            }
            ?>
            <input
                type="checkbox"
                id="tokmakov_head_clean_edituri"
                name="tokmakov_head_clean[edituri]"
                value="1"
                <?= $checked; ?>
            />
            <label for="tokmakov_head_clean_edituri">
                Ссылка для редактирования блога внешними сервисами
            </label>
            <?php
        },
        'general', // страница меню «Настройки»
        'tokmakov_head_clean_section' // идентификатор секции
    );

    /*
     * Добавляем поле формы для второго значения опции
     */
    add_settings_field(
        'tokmakov_head_clean_wlwmanifest', // идентификатор поля формы
        'Удалить служебный тег № 2', // заголовок поля формы
        function () {  // выводит html-код поля формы
            $checked = '';
            $option = get_option('tokmakov_head_clean');
            if (isset($option['wlwmanifest'])) {
                $checked = 'checked';
            }
            ?>
            <input
                type="checkbox"
                id="tokmakov_head_clean_wlwmanifest"
                name="tokmakov_head_clean[wlwmanifest]"
                value="1"
                <?= $checked; ?>
            />
            <label for="tokmakov_head_clean_wlwmanifest">
                Ссылка для редактирования блога клиентом Windows Live Writer
            </label>
            <?php
        },
        'general', // страница меню «Настройки»
        'tokmakov_head_clean_section' // идентификатор секции
    );

    /*
     * Добавляем поле формы для третьего значения опции
     */
    add_settings_field(
        'tokmakov_head_clean_prevnext', // идентификатор поля формы
        'Удалить служебный тег № 3', // заголовок поля формы
        function () {  // выводит html-код поля формы
            $checked = '';
            $option = get_option('tokmakov_head_clean');
            if (isset($option['prevnext'])) {
                $checked = 'checked';
            }
            ?>
            <input
                type="checkbox"
                id="tokmakov_head_clean_prevnext"
                name="tokmakov_head_clean[prevnext]"
                value="1"
                <?= $checked; ?>
            />
            <label for="tokmakov_head_clean_prevnext">
                Ссылки на предыдущую и следующую записи блога
            </label>
            <?php
        },
        'general', // страница меню «Настройки»
        'tokmakov_head_clean_section' // идентификатор секции
    );

    /*
     * Добавляем поле формы для четвертого значения опции
     */
    add_settings_field(
        'tokmakov_head_clean_generator', // идентификатор поля формы
        'Удалить служебный тег № 4', // заголовок поля формы
        function () { // выводит html-код поля формы
            $checked = '';
            $option = get_option('tokmakov_head_clean');
            if (isset($option['generator'])) {
                $checked = 'checked';
            }
            ?>
            <input
                type="checkbox"
                id="tokmakov_head_clean_generator"
                name="tokmakov_head_clean[generator]"
                value="1"
                <?= $checked; ?>
            />
            <label for="tokmakov_head_clean_generator">
                Мета-тег установленной версии WordPress (особо опасен)
            </label>
            <?php
        },
        'general', // страница меню «Настройки»
        'tokmakov_head_clean_section' // идентификатор секции
    );

    /*
     * Добавляем поле формы для пятого значения опции
     */
    add_settings_field(
        'tokmakov_head_clean_canonical', // идентификатор поля формы
        'Удалить служебный тег № 5', // заголовок поля формы
        function () {  // выводит html-код поля формы
            $checked = '';
            $option = get_option('tokmakov_head_clean');
            if (isset($option['canonical'])) {
                $checked = 'checked';
            }
            ?>
            <input
                type="checkbox"
                id="tokmakov_head_clean_canonical"
                name="tokmakov_head_clean[canonical]"
                value="1"
                <?= $checked; ?>
            />
            <label for="tokmakov_head_clean_canonical">
                Вывод канонической ссылки на пост или страницу
            </label>
            <?php
        },
        'general', // страница меню «Настройки»
        'tokmakov_head_clean_section' // идентификатор секции
    );

    /*
     * Добавляем поле формы для шестого значения опции
     */
    add_settings_field(
        'tokmakov_head_clean_shortlink', // идентификатор поля формы
        'Удалить служебный тег № 6', // заголовок поля формы
        function () {  // выводит html-код поля формы
            $checked = '';
            $option = get_option('tokmakov_head_clean');
            if (isset($option['shortlink'])) {
                $checked = 'checked';
            }
            ?>
            <input
                type="checkbox"
                id="tokmakov_head_clean_shortlink"
                name="tokmakov_head_clean[shortlink]"
                value="1"
                <?= $checked; ?>
            />
            <label for="tokmakov_head_clean_shortlink">
                Вывод короткой ссылки на пост или страницу
            </label>
            <?php
        },
        'general', // страница меню «Настройки»
        'tokmakov_head_clean_section' // идентификатор секции
    );
});
<?php
if (!defined('WP_UNINSTALL_PLUGIN')) {
    exit;
}

delete_option('tokmakov_head_clean');

Поиск: WebSocket • WordPress • Настройка • Оптимизация • Мета теги • remove_action • Плагин • Plugin

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.