Как автоматизировать управление перенаправлениями в WordPress

|

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

Зачем нужна автоматизация перенаправлений в WordPress

Автоматизация редиректов позволяет:

Особенно полезна автоматизация при миграции сайта, смене структуры URL или интеграции с внешними системами.

Популярные плагины для автоматизации редиректов в WordPress

Для автоматизации перенаправлений можно использовать проверенные плагины с широким функционалом:

1. Redirection

Один из самых популярных бесплатных плагинов для управления 301 и 302 редиректами. Позволяет создавать перенаправления на основе URL, отслеживать 404 ошибки и автоматически создавать редиректы при смене URL.

Преимущества:

2. WP 404 Auto Redirect to Similar Post

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

3. Safe Redirect Manager

Легкий плагин для создания и управления редиректами с возможностью настраивать тип редиректа и условия срабатывания.

Как автоматизировать редиректы через код в functions.php

Если вы хотите обойтись без плагинов или дополнить их функционал, можно использовать код для автоматической генерации редиректов. Например, автоматический редирект со старого URL на новый при изменении слага записи.

Ниже пример функции wpdetect_auto_redirect_on_slug_change, которая создает редирект 301 при изменении слага записи:

add_action('post_updated', 'wpdetect_auto_redirect_on_slug_change', 10, 3); 
function wpdetect_auto_redirect_on_slug_change($post_ID, $post_after, $post_before) {
    if ($post_after->post_type !== 'post') return;

    $old_slug = $post_before->post_name;
    $new_slug = $post_after->post_name;

    if ($old_slug !== $new_slug) {
        global $wpdb;
        $old_url = home_url('/' . $old_slug . '/');
        $new_url = home_url('/' . $new_slug . '/');

        $redirects_table = $wpdb->prefix . 'wpdetect_redirects';

        $wpdb->query($wpdb->prepare(
            "INSERT INTO $redirects_table (old_url, new_url, redirect_type) VALUES (%s, %s, 301) ON DUPLICATE KEY UPDATE new_url = %s",
            $old_url, $new_url, $new_url
        ));
    }
}

Данная функция предполагает наличие собственной таблицы для хранения редиректов wpdetect_redirects. Далее нужно реализовать перехват запросов и выполнение редиректа на основе этой таблицы.

Обработка редиректов на уровне WordPress

Чтобы реализовать автоматический редирект при попадании на старый URL, добавим следующий код в functions.php:

add_action('template_redirect', 'wpdetect_handle_redirects');
function wpdetect_handle_redirects() {
    if (is_admin()) return;

    global $wpdb;
    $current_url = home_url(add_query_arg(null, null));

    $redirects_table = $wpdb->prefix . 'wpdetect_redirects';
    $redirect = $wpdb->get_row($wpdb->prepare("SELECT new_url, redirect_type FROM $redirects_table WHERE old_url = %s", $current_url));

    if ($redirect) {
        wp_redirect($redirect->new_url, intval($redirect->redirect_type));
        exit;
    }
}

Этот код проверяет текущий URL, ищет в таблице соответствующий редирект и выполняет перенаправление с нужным HTTP кодом.

Создание таблицы для хранения редиректов

Для работы приведенного кода нужно создать таблицу в базе данных. Пример SQL-запроса для создания таблицы:

CREATE TABLE wpdetect_redirects (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    old_url VARCHAR(255) NOT NULL UNIQUE,
    new_url VARCHAR(255) NOT NULL,
    redirect_type SMALLINT NOT NULL DEFAULT 301
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Таблица хранит старый URL, новый URL и тип редиректа (301, 302 и т.п.).

Автоматизация управления редиректами при массовом изменении URL

Если нужно массово обновить URL и создать редиректы, можно написать WP-CLI команду. Пример функции, которая по CSV-файлу с двумя колонками (старый URL, новый URL) добавляет редиректы в таблицу:

if (defined('WP_CLI') && WP_CLI) {
    WP_CLI::add_command('wpdetect import-redirects', function($args) {
        $file = $args[0] ?? '';
        if (!file_exists($file)) {
            WP_CLI::error('Файл не найден');
            return;
        }
        global $wpdb;
        $redirects_table = $wpdb->prefix . 'wpdetect_redirects';
        $handle = fopen($file, 'r');
        while (($data = fgetcsv($handle)) !== false) {
            list($old_url, $new_url) = $data;
            $wpdb->query($wpdb->prepare(
                "INSERT INTO $redirects_table (old_url, new_url, redirect_type) VALUES (%s, %s, 301) ON DUPLICATE KEY UPDATE new_url = %s",
                $old_url, $new_url, $new_url
            ));
        }
        fclose($handle);
        WP_CLI::success('Редиректы импортированы');
    });
}

Это позволит импортировать тысячи правил с минимальными усилиями.

Рекомендации по управлению редиректами

Для эффективного управления редиректами соблюдайте следующие правила:

Заключение

Автоматизация управления перенаправлениями в WordPress — ключ к поддержанию работоспособности сайта, сохранению SEO и улучшению пользовательского опыта. Комбинируя мощные плагины, такие как Redirection, с собственными решениями на PHP, вы сможете максимально эффективно управлять редиректами даже на крупных проектах.

Как автоматизировать удаление старого transient в WordPress: практическое руководство
24.03.2026
Как использовать WP-Cron для автоматизации задач в WordPress
17.12.2025
Как использовать хуки для оптимизации WordPress
08.12.2025
Как удалить неиспользуемые таблицы в базе данных WordPress
07.11.2025
Как решить проблему нерабочих скриптов в WordPress после обновления
20.04.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее