Изменение URL записи или страницы в WordPress — частая задача при редизайне сайта или оптимизации структуры ссылок. Однако после изменения адреса важно настроить автоматический редирект со старого URL на новый, чтобы не потерять трафик и не ухудшить SEO. В этой статье подробно разберём, как реализовать автоматический 301 редирект на WordPress при изменении URL, рассмотрим готовые плагины и дадим примеры собственного кода.
Почему важен автоматический редирект при изменении URL
Если изменить URL записи без настройки редиректа, поисковые системы и пользователи, переходящие по старым ссылкам, увидят ошибку 404 — страница не найдена. Это негативно сказывается на поведенческих факторах и позиции сайта в выдаче. Ручное создание редиректов после каждого изменения — долгий и ошибочный процесс.
Автоматический редирект позволяет:
- Сохранить SEO-вес старой страницы, передав его новой.
- Обеспечить корректную работу ссылок из внешних источников и социальных сетей.
- Улучшить пользовательский опыт, избегая ошибок 404.
Реализовать автоматический редирект можно двумя способами: с помощью плагина или собственным кодом в functions.php темы.
Использование плагинов для автоматических редиректов
Для большинства сайтов самый простой и надёжный способ — использовать специализированные плагины. Рассмотрим несколько популярных и функциональных решений.
Плагин Clearfy
Clearfy — многофункциональный плагин для оптимизации WordPress, в том числе умеет автоматически создавать редиректы при изменении URL записей. Включите опцию «Автоматические редиректы при смене URL» в настройках, и плагин будет отслеживать изменения и создавать 301 редиректы без вашего участия.
Преимущества:
- Простота настройки и интеграция с другими функциями оптимизации.
- Отсутствие необходимости писать код.
- Поддержка массовых операций.
Плагин Redirection
Redirection — один из самых популярных плагинов для управления редиректами. Он не делает автоматические редиректы при смене URL по умолчанию, но умеет импортировать старые URL, если они сохранены, и позволяет создавать правила вручную.
Для автоматизации процесса можно использовать вместе с Redirection плагин Safe Redirect Manager или написать собственный код, который будет добавлять редиректы в Redirection при смене URL.
Как сделать автоматический редирект при изменении URL с помощью кода
Если вы хотите избежать установки дополнительных плагинов и имеете базовые навыки PHP, можно реализовать автоматический редирект самостоятельно. Для этого нужно отследить изменение поля post_name — слага записи, и при изменении сохранить старый URL в базе, а при запросе старого URL сделать редирект.
Основная идея — использовать хуки WordPress post_updated и template_redirect.
Шаг 1. Сохраняем старый URL при обновлении записи
function cyrtolat_save_old_slug($post_ID, $post_after, $post_before) {
if ($post_after->post_type !== 'post' && $post_after->post_type !== 'page') {
return;
}
if ($post_before->post_name !== $post_after->post_name) {
global $wpdb;
$old_slug = $post_before->post_name;
$post_type = $post_after->post_type;
// Сохраняем старый slug в отдельной таблице
$table_name = $wpdb->prefix . 'cyrtolat_old_slugs';
$wpdb->query($wpdb->prepare(
"INSERT INTO $table_name (post_id, old_slug, post_type) VALUES (%d, %s, %s) ON DUPLICATE KEY UPDATE old_slug = VALUES(old_slug)",
$post_ID, $old_slug, $post_type
));
}
}
add_action('post_updated', 'cyrtolat_save_old_slug', 10, 3);Обратите внимание, что для этого нужно создать таблицу wp_cyrtolat_old_slugs в базе с колонками post_id, old_slug и post_type. Это позволит хранить историю старых URL для редиректа.
Шаг 2. Создаём таблицу для хранения старых URL
function cyrtolat_create_old_slugs_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'cyrtolat_old_slugs';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
post_id BIGINT UNSIGNED NOT NULL,
old_slug VARCHAR(200) NOT NULL,
post_type VARCHAR(20) NOT NULL,
PRIMARY KEY (post_id),
UNIQUE KEY old_slug (old_slug)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
register_activation_hook(__FILE__, 'cyrtolat_create_old_slugs_table');Шаг 3. Перенаправляем со старого URL на новый
function cyrtolat_redirect_old_slug() {
if (is_404()) {
global $wpdb;
$requested_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
$table_name = $wpdb->prefix . 'cyrtolat_old_slugs';
$post_id = $wpdb->get_var($wpdb->prepare(
"SELECT post_id FROM $table_name WHERE old_slug = %s LIMIT 1",
$requested_path
));
if ($post_id) {
$url = get_permalink($post_id);
if ($url) {
wp_redirect($url, 301);
exit;
}
}
}
}
add_action('template_redirect', 'cyrtolat_redirect_old_slug');Этот код проверяет, если текущий URL соответствует старому слагу из таблицы, и делает редирект на новый URL записи.
Особенности и рекомендации
При использовании собственного решения важно учитывать:
- Создавайте и поддерживайте таблицу для хранения старых URL, чтобы не потерять данные.
- Следите за производительностью — запросы к БД не должны замедлять сайт.
- Проверяйте работу на тестовом сайте перед внедрением.
- Если не хотите заниматься кодом, используйте проверенные плагины.
Выводы
Автоматический редирект при изменении URL — ключевой элемент поддержки сайта на WordPress с точки зрения SEO и удобства пользователей. Самый простой способ — использовать плагин Clearfy, который автоматизирует этот процесс без лишних настроек. Если нужна кастомизация, можно создать собственное решение с использованием хуков post_updated и template_redirect, сохранять старые слаги в отдельной таблице и делать редиректы через PHP. Это позволит избежать ошибок 404 и сохранить позиции сайта в поисковиках.
Для знакомства с Clearfy и его возможностями посетите официальную страницу плагина.