Как добавить автоматические редиректы после изменения слага записи в WordPress

Почему важно создавать редиректы после изменения слага

При смене URL (слага) записи или страницы в WordPress старые ссылки перестают работать и ведут к ошибке 404. Это негативно сказывается на SEO и пользовательском опыте. Поэтому нужно настроить автоматическое создание редиректов с предыдущих URL на новые.

Диагностика проблемы: как понять, что нужны редиректы

  • Падение трафика на страницы после переименования слага.
  • В отчетах Google Search Console появляются ошибки 404 по старым URL.
  • Пользователи жалуются на неработающие ссылки.

Пошаговое решение: автоматические редиректы через хук WordPress

WordPress хранит историю изменений слагов в мета-поле _wp_old_slug. Можно использовать этот факт для реализации 301 редиректа со старых URL.

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wplesson_redirect_old_slug() {
    if (is_404()) {
        global $wpdb;
        $request_uri = trim($_SERVER['REQUEST_URI'], '/');

        // Ищем запись, у которой _wp_old_slug совпадает с URI
        $post_id = $wpdb->get_var($wpdb->prepare(
            "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_wp_old_slug' AND meta_value = %s",
            $request_uri
        ));

        if ($post_id) {
            $link = get_permalink($post_id);
            if ($link) {
                wp_redirect($link, 301);
                exit;
            }
        }
    }
}
add_action('template_redirect', 'wplesson_redirect_old_slug');

Как работает код:

  • При загрузке страницы с ошибкой 404 проверяется URI.
  • В базе ищется запись, у которой в _wp_old_slug хранится совпадающий слаг.
  • Если запись найдена, происходит редирект на текущий URL этой записи.

Проверка результата после внедрения

Для проверки:

  • Создайте тестовую запись с слагом test-post.
  • Измените слаг, например, на updated-post.
  • Откройте в браузере URL site.ru/test-post.
  • Должен произойти редирект на site.ru/updated-post с кодом 301.

Проверить HTTP-статус можно с помощью консольных команд или онлайн-сервисов, например:

curl -I https://site.ru/test-post

В ответе должен быть статус HTTP/1.1 301 Moved Permanently.

Частые ошибки и как их исправить

  • Редиректы не срабатывают после изменения слага
    Проверьте, что запись действительно была сохранена после изменения слага, и что в базе есть мета _wp_old_slug. Если записи нет, попробуйте сменить слаг повторно для создания этого мета.
  • Конфликты с плагинами SEO
    Некоторые плагины, например Yoast SEO Premium, уже реализуют подобные редиректы, что может привести к дублированию или конфликту. В таком случае лучше использовать встроенный функционал плагина.
  • Редирект зацикливается
    Проверьте, что URL для редиректа корректный и не совпадает с исходным.

Практические советы по безопасности и производительности

  • Кэширование. Если используете плагины кэширования, очистите кэш после добавления редиректов, чтобы изменения сразу вступили в силу.
  • Оптимизация запросов. Запрос в базе выполняется только при 404, что минимизирует нагрузку.
  • Безопасность. Используйте $wpdb->prepare() для предотвращения SQL-инъекций.

Альтернативы: плагины vs собственный код

ПодходПреимуществаНедостаткиПример
ПлагинПростота установки, поддержка, GUI для управленияМожет замедлять сайт, лишние функцииRedirection, Yoast SEO Premium
Собственный кодЛегковесность, гибкость, отсутствие нагрузкиТребует навыков, поддержка на разработчикеПример из статьи
Кастомизация формы регистрации WordPress с помощью хуков и кода
25.02.2026
Как использовать хук WooCommerce before_add_to_cart для дополнительной логики
25.05.2026
Как создать автоматическое отправление email в WordPress с помощью WP-Cron
01.04.2026
Как создать динамический список выполненных задач в WordPress с помощью пользовательских типов записей и AJAX
19.03.2026
Как удалить пустые meta данные в WordPress для ускорения сайта
23.03.2026