Часто при работе с WordPress возникает необходимость изменить URL записи (пост, страница, или пользовательский тип записи) без создания автоматического перенаправления (редиректа) с предыдущего URL. Это может понадобиться, если вы хотите полностью убрать старый адрес из индекса поисковиков или избежать путаницы для пользователей. Однако простое изменение ссылки в админке часто приводит к ошибкам 404 или автоматическим редиректам, что не всегда приемлемо.
Почему WordPress автоматически создает редиректы при изменении URL
В последних версиях WordPress реализован механизм, который автоматически добавляет перенаправления с предыдущих URL на новые — это сделано для удобства и сохранения SEO-показателей. Механизм называется wp_old_slug_redirect и работает через сохранение старых постоянных ссылок в метаданных записи.
Если вы измените URL записи, WordPress сохранит старый URL в специальном метаполе _wp_old_slug и настроит автоматический редирект. Это удобно в большинстве случаев, но если вам нужно именно удалить старый URL без редиректа, придется вмешаться вручную.
Просто удалить запись метаполя _wp_old_slug вручную не всегда помогает, так как WordPress дополнительно к этому может использовать кеш и внутренние правила.
Как отключить автоматические редиректы URL в WordPress
Чтобы полностью отключить автоматические редиректы старых URL, можно воспользоваться фильтром redirect_canonical. Этот фильтр отвечает за перенаправления, в том числе при изменении URL записи.
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин для управления функциями:
function wppremium_disable_old_slug_redirect($redirect_url) {
if (is_singular()) {
return false; // Отключаем редиректы для одиночных записей
}
return $redirect_url;
}
add_filter('redirect_canonical', 'wppremium_disable_old_slug_redirect');Этот код полностью отключит редиректы canonical URL для всех одиночных страниц и записей. Таким образом, если пользователь перейдет по старому адресу, он получит ошибку 404, что соответствует удалению старого URL без перенаправления.
Что важно учитывать при отключении редиректов
- Отключение редиректов может негативно сказаться на SEO, если старые ссылки активно индексируются и используются.
- Пользователи, переходящие по старым ссылкам, увидят страницу с ошибкой 404, что не всегда удобно.
- Рекомендуется использовать данный подход, если вы уверены, что старые ссылки не актуальны и их нужно полностью удалить.
Как удалить метаданные старых URL из базы данных
Чтобы гарантированно убрать следы старых URL, необходимо удалить метаполя _wp_old_slug из записей. Для этого можно использовать следующий скрипт, который выполнит массовое удаление из базы данных:
function wppremium_delete_old_slugs() {
global $wpdb;
$meta_key = '_wp_old_slug';
$wpdb->query($wpdb->prepare(
"DELETE FROM {$wpdb->postmeta} WHERE meta_key = %s",
$meta_key
));
}
// Запустите функцию один раз вручную, затем закомментируйте или удалите вызов
// wppremium_delete_old_slugs();Важно: запускать этот код нужно аккуратно и однократно, так как он удаляет данные из базы, и восстановить их будет сложно. Лучше сделать резервную копию базы перед выполнением.
Пример управления URL и отключения редиректов для пользовательских типов записей
Если у вас есть кастомные типы записей, например, product, вы можете применить аналогичный подход:
function wppremium_disable_redirects_for_custom_post_type($redirect_url) {
if (is_singular('product')) {
return false; // Отключаем редирект для типа product
}
return $redirect_url;
}
add_filter('redirect_canonical', 'wppremium_disable_redirects_for_custom_post_type');Это позволит более гибко управлять поведением редиректов в зависимости от типа контента.
Плагины для управления редиректами и URL в WordPress
Если вы предпочитаете не писать код, можно воспользоваться специализированными плагинами:
- Redirection — мощный плагин для управления редиректами, позволяет создавать, редактировать и удалять редиректы вручную.
- Remove Old Slugs — плагин, который автоматически удаляет метаполя
_wp_old_slug, предотвращая автоматические редиректы. - Permalink Manager Lite — позволяет гибко управлять постоянными ссылками, включая массовое редактирование и удаление старых URL.
Использование этих плагинов позволит более удобно контролировать поведение URL и редиректов без необходимости вмешиваться в код.
Советы по безопасному изменению URL записей без потерь
Изменение URL — это всегда риск потерять трафик и вызвать ошибки 404. Чтобы минимизировать риски:
- Перед изменением URL сделайте резервную копию сайта и базы данных.
- Если старый URL используется в других источниках (ссылки, соцсети, кампании), лучше не удалять редиректы, а настроить их корректно.
- Если URL меняется из-за структуры сайта, используйте плагин Redirection для создания правил редиректа с 301 кодом.
- Проверяйте после изменений, что на сайте нет битых ссылок с помощью специальных инструментов (Broken Link Checker).
Если же цель — полностью удалить старый URL без перенаправления, описанные выше методы отключения редиректов и удаления метаполей будут оптимальным решением.