Почему важно создавать редиректы после изменения слага
При смене URL (слага) записи или страницы в WordPress старые ссылки перестают работать и ведут к ошибке 404. Это негативно сказывается на SEO и пользовательском опыте. Поэтому нужно настроить автоматическое создание редиректов с предыдущих URL на новые.
Диагностика проблемы: как понять, что нужны редиректы
- Падение трафика на страницы после переименования слага.
- В отчетах Google Search Console появляются ошибки 404 по старым URL.
- Пользователи жалуются на неработающие ссылки.
Пошаговое решение: автоматические редиректы через хук WordPress
WordPress хранит историю изменений слагов в мета-поле _wp_old_slug. Можно использовать этот факт для реализации 301 редиректа со старых URL.
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
function wplesson_redirect_old_slug() {
if (is_404()) {
global $wpdb;
$request_uri = trim($_SERVER['REQUEST_URI'], '/');
// Ищем запись, у которой _wp_old_slug совпадает с URI
$post_id = $wpdb->get_var($wpdb->prepare(
"SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_wp_old_slug' AND meta_value = %s",
$request_uri
));
if ($post_id) {
$link = get_permalink($post_id);
if ($link) {
wp_redirect($link, 301);
exit;
}
}
}
}
add_action('template_redirect', 'wplesson_redirect_old_slug');Как работает код:
- При загрузке страницы с ошибкой 404 проверяется URI.
- В базе ищется запись, у которой в
_wp_old_slugхранится совпадающий слаг. - Если запись найдена, происходит редирект на текущий URL этой записи.
Проверка результата после внедрения
Для проверки:
- Создайте тестовую запись с слагом
test-post. - Измените слаг, например, на
updated-post. - Откройте в браузере URL
site.ru/test-post. - Должен произойти редирект на
site.ru/updated-postс кодом 301.
Проверить HTTP-статус можно с помощью консольных команд или онлайн-сервисов, например:
curl -I https://site.ru/test-postВ ответе должен быть статус HTTP/1.1 301 Moved Permanently.
Частые ошибки и как их исправить
- Редиректы не срабатывают после изменения слага
Проверьте, что запись действительно была сохранена после изменения слага, и что в базе есть мета _wp_old_slug. Если записи нет, попробуйте сменить слаг повторно для создания этого мета. - Конфликты с плагинами SEO
Некоторые плагины, например Yoast SEO Premium, уже реализуют подобные редиректы, что может привести к дублированию или конфликту. В таком случае лучше использовать встроенный функционал плагина. - Редирект зацикливается
Проверьте, что URL для редиректа корректный и не совпадает с исходным.
Практические советы по безопасности и производительности
- Кэширование. Если используете плагины кэширования, очистите кэш после добавления редиректов, чтобы изменения сразу вступили в силу.
- Оптимизация запросов. Запрос в базе выполняется только при 404, что минимизирует нагрузку.
- Безопасность. Используйте
$wpdb->prepare()для предотвращения SQL-инъекций.
Альтернативы: плагины vs собственный код
| Подход | Преимущества | Недостатки | Пример |
|---|---|---|---|
| Плагин | Простота установки, поддержка, GUI для управления | Может замедлять сайт, лишние функции | Redirection, Yoast SEO Premium |
| Собственный код | Легковесность, гибкость, отсутствие нагрузки | Требует навыков, поддержка на разработчике | Пример из статьи |