Slug — это часть URL, которая идентифицирует пост, страницу или таксономию в WordPress. Иногда возникает необходимость изменить slug записи, например, чтобы сделать URL более читабельным или SEO-дружелюбным. Однако простое изменение slug в админке может привести к потере старых ссылок, что негативно скажется на трафике и позициях в поисковых системах.
Почему важно сохранять старые URL при изменении slug
Если изменить slug поста без настройки перенаправления, все внешние ссылки, ведущие на старый адрес, будут возвращать ошибку 404. Это ухудшит пользовательский опыт и SEO-показатели сайта. Чтобы избежать этой проблемы, нужно настроить корректные 301 редиректы со старых URL на новые.
Примеры последствий удаления или изменения slug без редиректа
- Падение позиций в поисковой выдаче
- Потеря трафика с внешних ресурсов и социальных сетей
- Увеличение показателя отказов из-за ошибок 404
Как правильно изменить slug поста в WordPress
Изменение slug можно сделать через стандартный редактор WordPress, но важен этап создания редиректа. Рассмотрим пошагово:
- Откройте нужный пост в админке WordPress.
- В поле «Постоянная ссылка» измените slug на новый.
- Сохраните изменения.
- Настройте 301 редирект со старого URL на новый.
Автоматизация создания редиректов с помощью плагинов
Для удобства и минимизации ошибок рекомендуем использовать плагины, которые автоматически создают редиректы при изменении slug:
- Redirection — бесплатный и популярный плагин, который позволяет управлять редиректами без правки .htaccess. При изменении URL плагин сам добавит 301 редирект.
- Yoast SEO Premium — в премиум версии есть функция автоматического создания редиректов после изменения slug.
- Safe Redirect Manager — легкий плагин для управления 301 редиректами.
Для установки и настройки Redirection перейдите в раздел плагинов, установите и активируйте его, после чего в разделе инструменты появится меню для настройки редиректов.
Пример ручного создания 301 редиректа в functions.php темы
Если вы хотите контролировать редиректы через код, можно добавить в файл functions.php вашей темы следующий код. Он отслеживает изменение slug и создаёт редирект с прежнего URL на новый:
add_action('post_updated', 'wpreboot_redirect_on_slug_change', 10, 3);
function wpreboot_redirect_on_slug_change($post_ID, $post_after, $post_before) {
if ($post_before->post_name !== $post_after->post_name) {
$old_slug = $post_before->post_name;
$new_slug = $post_after->post_name;
$old_url = home_url('/' . $old_slug . '/');
$new_url = home_url('/' . $new_slug . '/');
// Сохраняем редирект в опции или базе, здесь простой пример — используем transient
set_transient('wpreboot_redirect_' . md5($old_url), $new_url, 60 * 60 * 24 * 30); // 30 дней
}
}
add_action('template_redirect', 'wpreboot_handle_old_slug_redirect');
function wpreboot_handle_old_slug_redirect() {
$requested_url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$redirect_url = get_transient('wpreboot_redirect_' . md5($requested_url));
if ($redirect_url) {
wp_redirect($redirect_url, 301);
exit;
}
}
Этот пример иллюстрирует базовый подход, но для боевого сайта лучше использовать проверенные плагины, которые учитывают все нюансы.
Удаление slug из URL постов — особенности и последствия
Иногда возникает задача полностью удалить slug из URL, например, чтобы сделать ссылку короче. В WordPress по умолчанию это не предусмотрено, так как slug используется для распознавания записи.
Риски удаления slug
- Возможны конфликты URL с таксономиями и страницами.
- Потеря уникальности адресов, если посты с одинаковыми названиями.
- Сложности с SEO и индексацией.
Реализация удаления slug через фильтр post_type_link
Можно попробовать убрать slug программно, например для кастомного типа записи. Пример для стандартных постов:
add_filter('post_type_link', 'wpreboot_remove_post_slug', 10, 3);
function wpreboot_remove_post_slug($post_link, $post, $leavename) {
if ('post' === $post->post_type) {
$post_link = home_url('/' . $post->post_name . '/');
}
return $post_link;
}
// Обработка запроса для правильного парсинга URL
add_action('pre_get_posts', 'wpreboot_parse_request_without_slug');
function wpreboot_parse_request_without_slug($query) {
if (!$query->is_main_query() || 2 !== count($query->query) || !isset($query->query['page'])) {
return;
}
if (!empty($query->query['page'])) {
$query->set('post_type', array('post'));
}
}
Однако такой метод требует тонкой настройки и тестирования, а также возможно использование плагинов для более надежного результата.
Рекомендации для безопасного изменения URL в WordPress
Чтобы избежать проблем с изменением slug и URL, следуйте рекомендациям:
- Перед изменением сделайте резервную копию сайта и базы данных.
- Используйте плагины для автоматического создания редиректов.
- Проверяйте корректность перенаправлений после изменений.
- Избегайте слишком частых изменений URL, чтобы не ухудшить SEO.
- Мониторьте ошибки 404 с помощью Google Search Console и плагинов.
Для дополнительной оптимизации URL и работы с редиректами можно использовать плагин Clearfy Pro, который содержит инструменты для SEO и управления ссылками.