Смена структуры постоянных ссылок в WordPress часто выглядит безобидно: меняете формат URL, сохраняете настройки — и часть страниц внезапно начинает отдавать 404. На практике проблема обычно не в самих записях, а в правилах перезаписи, кэше, конфликте со страницами-ярлыками или в том, что сервер не отрабатывает .htaccess / правила Nginx так, как ожидает WordPress.
Ниже — рабочий разбор для случая, когда 404 появились именно после изменения структуры URL, а не из-за удаления записей или ручной правки ссылок в контенте.
Как понять, что проблема именно в permalink’ах
Сначала стоит отделить ошибку маршрутизации от реального отсутствия страницы. Если запись открывается по старому URL, но новый адрес даёт 404, это почти всегда вопрос правил перезаписи. Если же 404 появляется только у части материалов, а остальные работают, проверьте конфликт с одинаковыми слагами, кэш и редиректы.
Что проверить в первую очередь
- Открывается ли главная и обычные страницы сайта.
- Работают ли записи в админке по кнопке «Просмотреть».
- Есть ли 404 только на одиночных записях, рубриках или страницах.
- Менялась ли структура в Настройки → Постоянные ссылки недавно.
- Используется ли кэш-плагин или серверный кэш.
Если после сохранения настроек постоянных ссылок проблема исчезает хотя бы временно, значит WordPress не успел или не смог корректно обновить rewrite rules. Это важный диагностический признак.
Почему WordPress начинает отдавать 404 после смены структуры URL
У WordPress есть внутренние правила сопоставления URL с типами записей, таксономиями и страницами. Когда вы меняете структуру, эти правила должны обновиться. Если этого не происходит, запрос уходит не туда.
Типовые причины:
- не обновились rewrite rules в базе;
.htaccessне перезаписался или не читается сервером;- в Nginx не настроен fallback на
index.php; - кэш отдает старые правила;
- новый формат URL конфликтует со страницей, рубрикой или архивом;
- плагин для SEO, мультиязычности или редиректов вмешивается в маршрутизацию.
Пошаговое решение без лишних действий
1. Пересохраните структуру постоянных ссылок
Это самый быстрый и безопасный шаг. Откройте Настройки → Постоянные ссылки, ничего не меняя, нажмите «Сохранить изменения». WordPress заново сгенерирует правила перезаписи.
Если после этого URL заработали, значит проблема была в устаревших rewrite rules. Но если 404 остались, идём дальше.
2. Очистите кэш на всех уровнях
Если на сайте стоит кэш-плагин, очистите его вручную. Затем сбросьте серверный кэш, если он есть, и проверьте страницу в приватном окне браузера. Старый кэш может продолжать отдавать неактуальные правила или старые редиректы.
Для проверки лучше использовать не только браузер, но и прямой запрос:
curl -I https://example.com/novyj-url/Если в ответе всё ещё 404, проблема не только в браузере.
3. Проверьте .htaccess на Apache
Для сайтов на Apache стандартный блок WordPress должен присутствовать и быть доступен для записи. Если файл повреждён, пустой или его правила заменены чем-то другим, красивые URL перестают работать.
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPressЕсли вы используете кастомные правила выше или ниже этого блока, проверьте, не ломают ли они маршрутизацию. Частая ошибка — жёсткий редирект на несуществующий путь или лишний RewriteRule, который перехватывает все запросы раньше WordPress.
4. Проверьте конфигурацию Nginx
На Nginx WordPress не использует .htaccess. Если после смены permalink’ов 404 появились на всех материалах, а в админке всё работает, часто проблема в блоке try_files.
location / {
try_files $uri $uri/ /index.php?$args;
}Без этой строки запросы к «красивым» URL не попадут в WordPress. Если сайт работает в подкаталоге или с нестандартным location, проверьте, что правило не перекрыто другим блоком.
5. Уберите конфликт с одинаковыми слагами
После смены структуры URL иногда всплывает конфликт: например, у вас есть страница /blog/ и рубрика с таким же слагом, либо новый формат записи совпадает с архивом таксономии. В таком случае WordPress может отдавать не ту сущность или 404.
Проверьте:
- страницы с теми же слагами, что и рубрики;
- кастомные типы записей с одинаковыми base-частями;
- плагины, которые меняют slug у записей и таксономий;
- переводы URL, если используется мультиязычность.
6. Сбросьте rewrite rules программно, если нужно
Если вы меняли структуру через код или деплоите сайт автоматически, полезно принудительно сбросить правила один раз после активации темы или плагина. Делать это на каждом запросе нельзя — это бьёт по производительности.
register_activation_hook(__FILE__, function () {
flush_rewrite_rules();
});
register_deactivation_hook(__FILE__, function () {
flush_rewrite_rules();
});Важно: flush_rewrite_rules() вызывают только при активации/деактивации или в разовой миграции. Если повесить его на init, сайт начнёт тормозить без причины.
Когда нужен редирект, а когда нет
Если вы просто поменяли структуру постоянных ссылок, старые адреса почти всегда перестают быть актуальными. В этом случае стоит настроить 301-редиректы со старых URL на новые, иначе поисковые системы и внешние ссылки будут вести на 404.
Но редирект нужен не всегда. Если вы исправляете только внутреннюю маршрутизацию и старые ссылки нигде не используются, сначала восстановите работу новых URL, а уже потом решайте вопрос с перенаправлениями.
| Подход | Когда использовать | Минус |
|---|---|---|
| Сохранить permalink и просто обновить правила | Новые URL должны работать без изменений | Старые ссылки останутся битые |
| Настроить 301-редиректы | Нужно сохранить трафик и внешние ссылки | Требует аккуратной карты старых URL |
| Откатить структуру обратно | Смена была ошибочной и не согласована | Придётся вернуть старый формат ссылок |
Проверка результата после внедрения
После исправлений не ограничивайтесь открытием одной страницы в браузере. Проверьте несколько типов URL, потому что проблема может быть частичной.
- одиночная запись;
- страница;
- рубрика;
- архив автора, если он используется;
- кастомный тип записи;
- страница пагинации.
Минимальный набор проверок:
- Откройте URL в приватном окне.
- Проверьте ответ сервера через
curl -I. - Посмотрите, нет ли цепочки редиректов.
- Убедитесь, что в HTML нет старых canonical-ссылок на прежний адрес.
Если у вас есть доступ к логам веб-сервера, полезно посмотреть, какой именно путь запрашивается и что отвечает сервер: WordPress, Nginx, Apache или кэш-слой.
Частые ошибки и как их исправить
Сохранили permalink, но 404 не исчезли
Причина обычно в кэше или в серверной конфигурации. Очистите кэш, проверьте .htaccess или try_files и убедитесь, что запрос вообще доходит до WordPress.
После смены структуры сломались только записи, а страницы работают
Часто это конфликт с базой слага у записей, кастомным типом поста или плагином, который меняет URL только для постов. Проверьте настройки SEO-плагина и правила для CPT.
404 появляется только у части материалов
Ищите совпадения в slug, особенно если в структуре появился префикс вроде /blog/ или /news/. Иногда проблема в том, что старый URL совпал с новой страницей или рубрикой.
Редирект ведёт в бесконечный цикл
Это уже не ошибка permalink’ов, а конфликт правил редиректа. Обычно виноваты одновременно настроенный плагин редиректов, правила в .htaccess и каноникал от SEO-плагина. Уберите лишний слой и оставьте один источник редиректов.
Что делать, если сайт на продакшене и рисковать нельзя
Если сайт рабочий и трафик уже идёт, не меняйте структуру URL без карты перенаправлений. Сначала проверьте новую схему на staging-копии, затем подготовьте редиректы, и только после этого переносите изменения на боевой сайт.
Полезный порядок действий:
- сделать резервную копию базы и файлов;
- проверить новую структуру на копии сайта;
- собрать список старых URL, которые уже индексируются или используются внешними ссылками;
- настроить 301-редиректы;
- после релиза проверить 404 в логах и Search Console.
Если нужна более чистая работа с дублями, редиректами и служебными URL, часть задач можно закрыть через аккуратную настройку SEO-плагина или инструментов вроде Clearfy Pro, но саму проблему 404 после смены permalink’ов всё равно нужно решать на уровне правил маршрутизации и сервера.