В процессе работы с сайтом на WordPress иногда возникает необходимость изменить URL (пермалинк) уже опубликованной записи, при этом не создавая автоматического редиректа со старого адреса на новый. Это может понадобиться, например, если вы хотите полностью отказаться от старой ссылки или же изменить структуру URL без сохранения старых вариантов. В стандартном WordPress при смене URL автоматически создаётся редирект, либо старый URL перестаёт работать, что может негативно сказаться на SEO и пользовательском опыте.
Почему WordPress создаёт редиректы при смене URL
WordPress изначально пытается сохранить доступность контента по старым адресам для удобства пользователей и поисковых систем. Для этого он создаёт внутренние редиректы, используя функцию redirect_canonical(). Она отвечает за перенаправление с устаревших URL на актуальные.
Однако в некоторых случаях автоматические редиректы нежелательны — например, если вы меняете URL массово и хотите убрать старые адреса из индекса или если у вас есть собственная система редиректов.
Поэтому полезно знать, как отключить или обойти стандартное поведение WordPress, не оставляя редиректов.
Отключение автоматических редиректов при изменении URL
Для отключения редиректа, который создаёт WordPress при смене URL записи, можно воспользоваться фильтром redirect_canonical. Ниже приведён пример функции с префиксом wplite_, которая запрещает редиректы для конкретных типов записей или по определённым условиям.
function wplite_disable_redirect_canonical( $redirect_url ) {
if ( is_singular('post') ) { // Отключаем редиректы для записей типа 'post'
return false;
}
return $redirect_url;
}
add_filter( 'redirect_canonical', 'wplite_disable_redirect_canonical' );
Данный код нужно добавить в файл functions.php вашей темы или в собственный плагин. Он проверяет, является ли текущая страница записью блога и в таком случае запрещает редирект.
Как это работает на практике
После добавления функции вы можете изменить URL записи через админку WordPress — при переходе на старый URL не будет происходить перенаправления, а скорее всего появится ошибка 404, если страница не существует. Это позволяет "отвязать" старые адреса.
Если вы хотите сохранить доступность по новому URL без редиректа, то дополнительно проверьте настройки кэша и SEO-плагинов, чтобы они не создавали свои редиректы.
Изменение URL записи через код с обходом редиректа
Для массового изменения URL записей без создания редиректов удобно использовать WP CLI или PHP код, который напрямую обновляет поле post_name в базе данных.
Пример функции для смены слагов записи с использованием префикса wplite_:
function wplite_change_post_slug( $post_id, $new_slug ) {
// Проверяем права пользователя и существование записи
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return new WP_Error( 'no_permission', 'Нет прав для редактирования записи' );
}
$post = get_post( $post_id );
if ( ! $post ) {
return new WP_Error( 'not_found', 'Запись не найдена' );
}
// Обновляем слаг
$updated = wp_update_post( array(
'ID' => $post_id,
'post_name' => sanitize_title( $new_slug ),
), true );
return $updated;
}
Вызывайте эту функцию с ID записи и нужным новым слагом. При этом редирект будет отключён, если применён фильтр redirect_canonical из предыдущего примера.
Использование плагина Clearfy Pro для управления редиректами
Если вы не хотите добавлять код вручную, рекомендую обратить внимание на плагин Clearfy Pro. Он содержит множество настроек для оптимизации WordPress, включая управление редиректами.
Через Clearfy Pro можно отключить автоматические редиректы и настроить собственные правила, что особенно полезно для сайтов с большим количеством записей и сложной структурой URL.
Преимущества Clearfy Pro
- Простое отключение редиректов без кода
- Управление SEO-настройками и очистка базы данных
- Оптимизация производительности сайта
Как проверить, что редиректы отключены
После внесения изменений важно проверить, что старые URL действительно не перенаправляют. Для этого можно использовать:
- Инструменты разработчика в браузере — вкладка Network для отслеживания ответов сервера
- Сервисы проверки редиректов, например httpstatus.io
- Команду curl в терминале:
curl -I https://example.com/starij-url— код ответа не должен быть 301 или 302
Если редиректы продолжаются, проверьте, нет ли активных SEO-плагинов (Yoast SEO, Rank Math и др.) или кэш-систем, которые могут создавать свои перенаправления.
Выводы и рекомендации
Изменение URL записи в WordPress без создания редиректа — задача нередкая, особенно при реструктуризации сайта или изменении стратегии SEO. Основной инструмент — фильтр redirect_canonical, который можно отключить для нужных типов записей. Для массовых изменений удобен PHP-код с обновлением слага.
Если вы предпочитаете готовые решения, плагин Clearfy Pro позволит управлять редиректами и оптимизировать работу сайта без программирования.