Смена структуры постоянных ссылок в WordPress почти всегда тянет за собой хвост из 404 ошибок. Чаще всего это не одна проблема, а сразу несколько: старые URL уже проиндексированы, внутренние ссылки остались прежними, а часть записей и архивов начинает отдавать ошибку после обновления правил пермалинков.
Если не разрулить это сразу, поисковики продолжают ходить по старым адресам, пользователи попадают на пустые страницы, а в логах растёт шум. Ниже — рабочая схема: как понять, что именно сломалось, как быстро закрыть старые URL редиректами и как проверить, что всё действительно исправлено.
Когда 404 после смены permalink — это норма, а когда уже проблема
Короткий всплеск 404 после смены структуры URL — ожидаемая ситуация. Но если ошибки держатся неделями, значит, где-то остались старые ссылки или не настроены редиректы. В WordPress это особенно заметно после перехода, например, с /2024/05/%postname%/ на /%postname%/ или после изменения базы для рубрик и записей.
Что обычно ломается
- старые ссылки в меню, виджетах и контенте;
- URL из внешних ссылок и закладок пользователей;
- адреса из карты сайта, если она не обновилась;
- архивы таксономий, если менялись их базы;
- ссылки на вложения и медиафайлы, если они были вставлены вручную.
Диагностика: где именно появляются 404
Сначала нужно понять, какие адреса отдают ошибку и откуда на них идут переходы. Без этого легко начать ставить редиректы вслепую и пропустить основную причину.
Проверка в браузере и в логах
Откройте проблемный URL напрямую и посмотрите, действительно ли это 404 WordPress, а не ошибка веб-сервера или кэш-плагина. Затем проверьте:
- отчёт о сканировании в Google Search Console;
- логи сервера, если есть доступ;
- внутренние ссылки через поиск по базе или плагины аудита;
- список старых URL из карты сайта и внешних источников.
Если 404 идут только на старые адреса записей, задача почти всегда решается редиректами. Если же ломаются и новые URL, проблема уже в правилах пермалинков или конфликте с плагином/темой.
Пошаговое решение: как убрать 404 после смены структуры ссылок
Ниже порядок, который обычно даёт предсказуемый результат. Не меняйте всё сразу: сначала сохраните текущую структуру, затем проверьте rewrite rules, и только потом добавляйте редиректы.
1. Сбросьте правила постоянных ссылок
После изменения структуры зайдите в Настройки → Постоянные ссылки и просто нажмите кнопку сохранения. Это пересобирает rewrite rules без ручного редактирования базы. Если проблема была только в правилах маршрутизации, часть 404 исчезнет сразу.
Если нужно сделать это программно после миграции или деплоя, можно один раз вызвать flush в коде плагина или темы, но не на каждом запросе:
add_action('init', function () {
if (get_option('my_site_permalinks_flushed') !== '1') {
flush_rewrite_rules(false);
update_option('my_site_permalinks_flushed', '1');
}
});Такой код уместен только как временная мера при переносе сайта. Оставлять его постоянно нельзя: flush_rewrite_rules() тяжёлая операция.
2. Настройте 301-редиректы со старых URL
Если структура ссылок изменилась, старые адреса нужно перенаправить на новые. Для единичных случаев подойдёт редирект через template_redirect или через сервер, но для массовой миграции лучше использовать правило на уровне веб-сервера или плагин редиректов.
Пример для простого случая, когда старый формат был /2024/05/slug/, а новый стал /slug/:
add_action('template_redirect', function () {
$request_uri = $_SERVER['REQUEST_URI'] ?? '';
if (preg_match('#^/\d{4}/\d{2}/([^/]+)/?$#', $request_uri, $matches)) {
$slug = $matches[1];
$post = get_page_by_path($slug, OBJECT, ['post', 'page']);
if ($post) {
wp_redirect(get_permalink($post), 301);
exit;
}
}
});Это не универсальное решение для любого сайта, но для небольшого проекта помогает быстро закрыть старые адреса, пока вы не подготовили полноценную карту редиректов.
3. Обновите внутренние ссылки
Редиректы спасают внешний трафик, но внутренние ссылки всё равно должны вести сразу на новый адрес. Проверьте:
- меню;
- хлебные крошки;
- ссылки в контенте старых записей;
- ссылки в шаблонах темы;
- ссылки в блоках, которые вставлялись вручную.
Если на сайте много старых URL в контенте, удобнее сделать массовую замену через поиск и замену в базе, но только после бэкапа. Для таких задач часто используют WP-CLI или специализированные инструменты миграции.
4. Проверьте карту сайта и robots.txt
После смены структуры URL карта сайта должна содержать только актуальные адреса. Если в sitemap остались старые ссылки, поисковики будут продолжать их сканировать. Также проверьте, не закрыт ли новый раздел в robots.txt или через настройки SEO-плагина.
Если используете SEO-плагин, пересоздайте sitemap и отправьте его заново в Search Console. Это не убирает 404 мгновенно, но ускоряет переобход новых URL.
Сравнение подходов: плагин, код или сервер
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Плагин редиректов | Много старых URL, нет доступа к серверу | Быстро настраивается, удобно вести список | Дополнительная нагрузка, зависимость от плагина |
| Код в теме/плагине | Нужна точечная логика для нескольких шаблонов URL | Гибко, без лишнего интерфейса | Требует аккуратности и тестирования |
| .htaccess / nginx | Большой объём редиректов, есть доступ к серверу | Быстрее на уровне веб-сервера | Сложнее поддерживать, выше риск ошибки |
Проверка результата после внедрения
После настройки редиректов не ограничивайтесь ручным открытием пары страниц. Нужна проверка по нескольким слоям: браузер, сервер, поисковая консоль и внутренние ссылки.
Что проверить вручную
- старый URL отдаёт
301, а не200и не404; - новый URL открывается без цепочки редиректов;
- страница не уходит в бесконечный редирект;
- внутренние ссылки ведут сразу на новый адрес;
- карта сайта содержит только актуальные URL.
Для быстрой проверки можно использовать curl:
curl -I https://example.com/2024/05/old-post/В ответе должен быть статус 301 и заголовок Location с новым адресом. Если видите 200, редирект не сработал. Если 404 — правило не поймало маршрут или пост с таким slug не найден.
Что смотреть в Search Console
В отчёте по страницам с ошибкой важно не только количество 404, но и динамика. Если после исправления старые URL постепенно уходят из отчёта, значит, поисковик начал переобход. Если ошибки остаются на одном и том же наборе адресов, проверьте, не остались ли на сайте ссылки на старую структуру.
Частые ошибки и как их исправить
Редирект сделан на главную вместо нужной страницы
Такое часто происходит, если старый slug больше не существует и код просто отправляет пользователя «куда-нибудь». Это плохой вариант: поисковик получает нерелевантный ответ, а пользователь теряет контекст. Лучше вести на ближайший аналог или на страницу категории, если точной замены нет.
Сделали 302 вместо 301
Временный редирект не подходит для постоянной смены структуры URL. Для переезда нужен 301, иначе поисковые системы могут дольше держать старый адрес в индексе.
Сломали цепочку редиректов
Если старый URL сначала ведёт на промежуточный адрес, а потом на новый, это лишняя задержка и лишний риск. Сводите редирект сразу к финальной странице.
Не обновили внутренние ссылки
Даже идеальные редиректы не спасут, если сайт продолжает ссылаться на старые адреса из меню, блоков и шаблонов. После миграции обязательно пройдитесь по основным шаблонам темы и контенту с массовой заменой.
Безопасность и производительность: что не стоит делать
Не ставьте несколько плагинов редиректов одновременно. Они могут конфликтовать между собой и создавать лишнюю нагрузку на каждый запрос. Если редиректов много, лучше вынести их в серверную конфигурацию или хотя бы держать один инструмент для управления правилами.
Не оставляйте временный код с flush_rewrite_rules() в постоянной работе сайта. Это частая ошибка после миграций: страница начинает тормозить, а причина неочевидна.
Если на сайте есть много дублей и технического мусора, имеет смысл сначала навести порядок в SEO-настройках, а уже потом разбирать редиректы. В таких задачах иногда помогает Clearfy Pro, если нужен набор инструментов для чистки дублей и технических настроек, но саму логику редиректов он не заменяет.
Короткий чек-лист перед публикацией изменений
- Сделан бэкап базы и файлов.
- Сохранены настройки постоянных ссылок.
- Старые URL получают
301. - Новые URL открываются без цепочек редиректов.
- Внутренние ссылки обновлены.
- Карта сайта пересобрана.
- В Search Console отправлена проверка важных страниц.
Если после всех шагов 404 всё ещё остаются, соберите список конкретных адресов и проверьте их по одному. В таких задачах обычно виноват не WordPress как система, а один из трёх факторов: старые ссылки в контенте, неполные редиректы или конфликт правил на уровне сервера.