Как проверить и исправить 404 после смены permalink в WordPress

После смены структуры постоянных ссылок в WordPress чаще всего ломаются не только старые URL из поисковой выдачи, но и внутренние ссылки, RSS, архивы и часть медиафайлов. Если сайт уже проиндексирован, такие 404 быстро превращаются в технический шум: поисковик продолжает ходить по старым адресам, а пользователи получают пустую страницу вместо контента.

Ниже разберём рабочий сценарий: как понять, что именно сломалось, чем отличаются единичные 404 от системной проблемы, как восстановить редиректы и как проверить, что всё действительно заработало.

Когда проблема не в одном URL, а в структуре ссылок

Если после изменения permalink у вас появились 404 на старых адресах, это не всегда ошибка темы или плагина. В WordPress старый путь может остаться в:

  • внутренних ссылках в записях и страницах;
  • меню и виджетах;
  • картах сайта;
  • ссылках на изображения, если они были вставлены вручную;
  • внешних ссылках из поисковиков и соцсетей.

Отдельно стоит проверить, не менялся ли одновременно category base, tag base или структура записей. Тогда 404 могут затронуть не только посты, но и рубрики, метки и архивы авторов.

Что обычно ломается после смены permalink

На практике чаще всего встречаются три сценария:

  1. Старые URL стали отдавать 404, но новые открываются нормально.
  2. Новые URL тоже отдают 404, потому что не обновились правила перезаписи.
  3. Часть адресов работает, а часть — нет, потому что конфликтует кэш или редирект-цепочка.

Если вы видите только первый вариант, проблема обычно решается редиректами. Если второй или третий — сначала нужно проверить настройки WordPress и серверный кэш.

Диагностика: где искать причину 404

Начинать лучше не с плагинов, а с проверки фактического ответа сервера. Это помогает отделить проблему WordPress от проблемы веб-сервера или кэша.

Проверьте, что именно отдаёт URL

Возьмите старый адрес и посмотрите заголовки ответа. Удобно использовать curl:

curl -I https://example.com/old-post-url/

Если в ответе сразу 404, а в админке запись существует, значит старый путь не перенаправлен. Если сначала идёт 301, а потом 404, вероятно, редирект ведёт на неправильный новый URL.

Ещё один полезный тест — открыть новый адрес в режиме инкогнито и без кэша браузера. Иногда проблема маскируется локальным кэшем или плагином оптимизации.

Сбросьте правила перезаписи

После изменения структуры ссылок WordPress должен пересобрать rewrite rules. Самый простой способ — зайти в Настройки → Постоянные ссылки и нажать Сохранить изменения без правок. Это не магия, а штатный способ обновить правила.

Если вы меняли permalink программно или через миграцию, проверьте, не остались ли старые правила в кэше объекта или на уровне сервера. На некоторых хостингах помогает очистка кэша Nginx/Apache и кэша плагина.

Пошаговое решение: как вернуть старые URL без потери трафика

Если структура ссылок уже изменилась, а старые адреса успели попасть в индекс, лучше не надеяться на автоматическое восстановление. Нужны явные 301-редиректы со старых URL на новые.

Шаг 1. Составьте список старых и новых адресов

Нужен хотя бы минимальный маппинг. Для небольшого сайта его можно собрать вручную из:

  • Google Search Console или Яндекс Вебмастера;
  • логов сервера;
  • экспорта старых URL из sitemap;
  • внутреннего поиска по базе, если менялась структура записей.

Если адресов много, не пытайтесь править каждый вручную в редакторе записей. Лучше сделать правило на уровне сайта или сервера.

Шаг 2. Добавьте редирект для конкретного старого шаблона

Если у вас менялся только префикс, можно использовать template_redirect и проверять старый путь. Пример ниже — для случая, когда старые записи были в формате /blog/post-name/, а новые стали просто /post-name/:

add_action('template_redirect', function () {
    $request_uri = $_SERVER['REQUEST_URI'] ?? '';

    if (strpos($request_uri, '/blog/') !== 0) {
        return;
    }

    $new_path = preg_replace('#^/blog/#', '/', $request_uri);
    $target = home_url($new_path);

    wp_redirect($target, 301);
    exit;
});

Этот вариант годится только для понятного и стабильного шаблона. Если структура сложнее, лучше делать редиректы через карту соответствий или на уровне сервера.

Шаг 3. Для точечных URL используйте карту редиректов

Когда старых адресов немного, безопаснее хранить их в массиве и перенаправлять только конкретные страницы:

add_action('template_redirect', function () {
    $map = [
        '/old-about/' => '/about/',
        '/old-contact/' => '/contacts/',
        '/blog/seo-checklist/' => '/seo-checklist/',
    ];

    $request_uri = parse_url($_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH);

    if (!$request_uri || !isset($map[$request_uri])) {
        return;
    }

    wp_redirect(home_url($map[$request_uri]), 301);
    exit;
});

Плюс такого подхода в том, что вы не заденете лишние URL. Минус — карту нужно поддерживать вручную, если адресов становится много.

Шаг 4. Если редиректов много, перенесите их в сервер

Для массовых правил лучше использовать конфигурацию веб-сервера или специализированный плагин редиректов. На уровне PHP это работает, но при большом количестве правил может добавлять лишнюю нагрузку на WordPress.

ПодходКогда подходитКомпромисс
Плагин редиректовМного URL, нужен интерфейсДополнительная админка и зависимость от плагина
Код в теме или mu-pluginНесколько стабильных правилНужно поддерживать вручную
Редиректы на сервереБольшой сайт, важна скоростьНужен доступ к конфигу хостинга

Проверка результата после внедрения

После настройки редиректов важно не ограничиваться открытием одной страницы в браузере. Нужна проверка цепочки ответа и индексации.

Что проверить руками

  • Старый URL отдаёт 301, а новый — 200.
  • Нет цепочки из нескольких редиректов подряд.
  • Внутренние ссылки в контенте ведут сразу на новый адрес.
  • Карта сайта содержит только актуальные URL.
  • Страница не блокируется noindex случайно из-за SEO-плагина.

Для быстрой проверки можно снова использовать curl:

curl -I https://example.com/old-post-url/
curl -I https://example.com/new-post-url/

Если старый URL возвращает 301, а новый — 200, базовая часть задачи решена. Дальше стоит проверить несколько адресов из Search Console или логов, чтобы убедиться, что правило не зацепило лишние страницы.

Что смотреть в Search Console

В отчёте по страницам с ошибкой 404 полезно отфильтровать:

  • старые записи с внешними ссылками;
  • URL с опечатками;
  • адреса с параметрами, которые больше не используются;
  • страницы, которые должны были быть перенесены, но не попали в карту редиректов.

Если после исправления 404 продолжают появляться, значит кто-то всё ещё ссылается на старый адрес — либо внутри сайта, либо снаружи.

Частые ошибки и как их исправить

Редирект ведёт на несуществующую страницу

Обычно это происходит, когда в коде неправильно собрали новый путь. Проверьте, не потерялись ли слэши, языковой префикс или часть slug. В таких случаях помогает сравнение старого и нового URL в логике редиректа, а не ручная подстановка строки.

После сохранения permalink всё равно 404

Причина часто в том, что правила перезаписи не обновились или их перехватывает кэш. Сначала сохраните настройки постоянных ссылок ещё раз, затем очистите кэш плагина и серверный кэш. Если используется CDN, проверьте и его.

Редиректов слишком много и сайт стал медленнее

Если вы сделали десятки или сотни правил через template_redirect, WordPress будет проверять их на каждом запросе. Для небольшого сайта это терпимо, но для нагруженного проекта лучше перенести правила в конфиг сервера или в плагин, который умеет работать с редиректами без лишней логики в теме.

Сломались изображения и вложения

Если менялась структура медиа-URL или путь к uploads, 404 могут возникать не только на страницах, но и на картинках. В этом случае проверьте, не были ли ссылки на изображения вставлены вручную в HTML. Иногда достаточно обновить старые URL в базе, но делать это нужно аккуратно и только после резервной копии.

Чек-лист перед публикацией изменений

  • Сделан бэкап базы и файлов.
  • Проверены старые и новые URL в браузере и через curl.
  • Сохранены настройки постоянных ссылок.
  • Добавлены 301-редиректы для всех известных старых адресов.
  • Очистен кэш WordPress, сервера и CDN.
  • Проверены внутренние ссылки в меню, контенте и виджетах.
  • Карта сайта обновлена и содержит только актуальные адреса.

Когда лучше не писать редиректы в теме

Если правка касается не одного сайта, а регулярной поддержки проектов, не стоит держать редиректы в файле темы. При смене темы вы потеряете логику перенаправлений. Для таких задач лучше использовать mu-plugin или отдельный плагин, а не шаблон оформления.

Если нужен более системный подход к чистке дублей, редиректам и технической SEO-гигиене, имеет смысл смотреть в сторону инструментов, которые работают на уровне сайта, а не только темы. Например, Clearfy Pro закрывает часть типовых технических задач WordPress, включая чистку и SEO-настройки: https://wpshop.ru/plugins/clearfy.

Главная проверка здесь простая: старый URL должен стабильно отдавать 301, новый — 200, а в отчётах по ошибкам не должно оставаться массовых 404 на уже перенесённые страницы. Если это выполняется, значит проблема решена не косметически, а технически.

Как закрыть от индексации отдельные разделы WordPress через robots.txt, noindex и X-Robots-Tag
26.08.2026
Как исключить страницы из внутреннего поиска WordPress
24.09.2026
Как создать собственный виджет WordPress: полное руководство с примерами
30.08.2026
Как добавить динамические метаданные в WordPress для улучшения SEO
15.09.2026
Как удалить неиспользуемые метаполя из базы данных WordPress
19.09.2026