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

В WordPress по умолчанию URL (слаг) записи создаётся при первом сохранении поста на основе заголовка. Однако при дальнейшем изменении заголовка URL не меняется автоматически. Это может привести к несоответствию адреса и названия, что негативно влияет на SEO и удобство пользователей. В этой статье мы подробно разберём, как реализовать автоматическое обновление слагов постов при изменении заголовка без потери SEO и с учётом всех нюансов.

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

Когда заголовок меняется, а URL остаётся старым, возникают следующие проблемы:

  • Адрес становится менее релевантным содержимому страницы.
  • Пользователи и поисковые системы могут запутаться из-за несоответствия.
  • Если вы хотите поддерживать чёткую структуру URL для удобства SEO, нужно синхронизировать их.

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

Основные подходы и ограничения

Есть несколько вариантов:

  1. Оставить URL неизменным — самый безопасный, но не всегда удобный.
  2. Менять URL и ставить 301 редирект с прошлого адреса на новый — оптимальный SEO-подход.
  3. Менять URL без редиректа — приведёт к потерям трафика и ошибкам.

В этой статье мы реализуем вариант с автоматическим обновлением URL и созданием 301 редиректа со старого адреса.

Реализация: автоматическое обновление слага и редирект старого URL

Для решения задачи создадим функцию с префиксом wpgenerate_. Она будет срабатывать при сохранении поста, проверять изменение заголовка, обновлять слаг и сохранять старый URL для редиректа.

1. Отслеживание сохранения поста

Используем хук save_post, который вызывается при сохранении записи.

2. Проверка изменения заголовка

Для сравнения старого и нового заголовков получим предыдущие данные из базы.

3. Обновление слага и добавление редиректа

Обновим поле post_name в базе, и создадим редирект с помощью плагина Redirection или собственного решения.

Пример кода для автоматического обновления URL с редиректом

function wpgenerate_update_post_slug_on_title_change($post_id) {
    // Проверяем, что это не автосохранение
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

    // Проверяем права пользователя
    if (!current_user_can('edit_post', $post_id)) return;

    // Получаем новый объект поста
    $post = get_post($post_id);
    if (!$post || $post->post_type !== 'post') return; // Ограничиваемся типом 'post'

    // Получаем старые данные поста
    $old_post = get_post($post_id);

    // Сравниваем заголовки
    $old_title = get_post_field('post_title', $post_id, 'db');
    $new_title = $post->post_title;

    // Если заголовок не изменился, ничего не делаем
    if ($old_title === $new_title) return;

    // Генерируем новый слаг
    $new_slug = sanitize_title($new_title);

    // Если новый слаг совпадает с текущим, тоже ничего не делаем
    if ($new_slug === $post->post_name) return;

    global $wpdb;

    // Сохраняем старый URL для редиректа
    $old_slug = $post->post_name;
    $old_url = home_url('/' . $old_slug . '/');
    $new_url = home_url('/' . $new_slug . '/');

    // Обновляем слаг в базе
    $wpdb->update(
        $wpdb->posts,
        ['post_name' => $new_slug],
        ['ID' => $post_id]
    );

    clean_post_cache($post_id);

    // Добавляем 301 редирект
    // Для этого можно использовать плагин Redirection (https://wpshop.ru/plugins/redirection/?utm_source=wpgenerate.ru&utm_medium=article&utm_campaign=kak-avtomaticheski-izmenyat-url-postov-wordpress-pri-izmenenii-zagolovka) или реализовать самостоятельно

    // Пример добавления редиректа через запись в .htaccess (требует прав на запись)
    $redirect_rule = "Redirect 301 /$old_slug/ $new_url";
    $htaccess = ABSPATH . '.htaccess';
    if (is_writable($htaccess)) {
        $current = file_get_contents($htaccess);
        if (strpos($current, $redirect_rule) === false) {
            file_put_contents($htaccess, "\n" . $redirect_rule, FILE_APPEND);
        }
    }
}
add_action('save_post', 'wpgenerate_update_post_slug_on_title_change');

Работа с плагином Redirection для управления редиректами

Если вы используете плагин Redirection, то можете добавить редиректы программно через его API, что является более надежным и безопасным способом, чем правка .htaccess вручную.

Пример добавления редиректа через API Redirection

function wpgenerate_add_redirection($old_path, $new_url) {
    if (!class_exists('Red_Item')) return;

    $item = new Red_Item();
    $item->set_source($old_path);
    $item->set_target($new_url);
    $item->set_enabled(true);
    $item->save();
}

Вызовите эту функцию из wpgenerate_update_post_slug_on_title_change, передав старый путь и новый URL.

Советы и рекомендации

  • Перед внедрением обязательно протестируйте на тестовом сайте.
  • Если на сайте много постов, обновление слагов может вызвать нагрузку — применяйте с осторожностью.
  • Храните резервные копии базы данных на случай ошибок.
  • Если используете кэширование, после изменения URL чистите кэш.
  • Для сложных сайтов с кастомными типами записей и иерархией URL дополните код с учётом специфики.

Заключение

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

WooCommerce: как автоматически удалять неактивные вариации товаров с помощью кода
05.07.2026
Создание и настройка пользовательских ролей и прав в WordPress: практическое руководство
21.01.2026
WooCommerce: автоматическое изменение статусов заказов по условиям
23.06.2026
Как автоматически создавать и отображать события в WordPress
03.04.2026
Как автоматически удалять неиспользуемые категории в WordPress
31.01.2026