Сценарий типичный: вы поменяли структуру постоянных ссылок, обновили тему, перенесли магазин или включили новый плагин фильтрации, а страницы каталога с параметрами начинают отдавать 404. При этом сам каталог открывается, но ссылки вида /shop/?filter_color=black или ЧПУ-страницы фильтра больше не работают. В WooCommerce это часто связано не с самим магазином, а с тем, как сервер, правила перезаписи и плагин фильтров обрабатывают запрос.
Ниже — практический разбор: как быстро найти источник проблемы, что именно поправить в WordPress и WooCommerce, и как проверить, что фильтры снова открываются без ошибок.
Что обычно ломается после изменения ЧПУ
404 на фильтрах появляется в нескольких реальных случаях. Самые частые:
- не обновились правила перезаписи после смены
Настройки → Постоянные ссылки; - плагин фильтрации использует свои rewrite rules, но они не пересоздались;
- серверный кэш или CDN продолжает отдавать старые URL;
- в теме или в плагине фильтрации конфликтуют шаблоны архива товаров;
- страницы фильтра завязаны на GET-параметры, а сервер/плагин безопасности режет query string;
- включён редирект на канонический URL, который ломает адреса с параметрами.
Как понять, что это именно проблема перезаписи
Если обычные страницы магазина и карточки товаров открываются, а 404 появляется только на адресах с фильтрами, почти всегда проблема в rewrite rules, кэше или конфликте плагина. Если же 404 возникает вообще на всех страницах магазина после смены ЧПУ, сначала проверьте базовые правила WordPress и доступность .htaccess или конфигурации Nginx.
Диагностика: где искать источник 404
Начните не с правки кода, а с проверки конкретного маршрута. Это экономит время: в WooCommerce одинаково легко перепутать ошибку шаблона, кэш и сломанные правила перезаписи.
- Откройте проблемный URL в режиме инкогнито.
- Проверьте, отдаёт ли сервер 404 или это 404-шаблон темы.
- Сравните поведение URL с параметрами и без них.
- Временно отключите плагин фильтрации и проверьте, исчезла ли ошибка.
- Очистите кэш страницы, объектный кэш и CDN, если он есть.
Если у вас есть доступ к логам, полезно посмотреть, не уходит ли запрос на несуществующий путь до WordPress вообще. Для Apache/Nginx это часто сразу показывает, на каком уровне ломается маршрут.
Быстрая проверка через wp-admin
Самый простой тест — сохранить настройки постоянных ссылок без изменений. WordPress при этом пересобирает rewrite rules. Это не магия, а штатный способ сбросить правила маршрутизации после изменений в структуре URL.
Если после этого фильтры ожили, значит проблема была именно в неактуальных правилах. Если нет — идём дальше и проверяем плагин фильтрации и кэш.
Пошаговое решение
1. Сбросьте правила перезаписи WordPress
Сначала сделайте штатный сброс через админку: откройте Настройки → Постоянные ссылки и нажмите «Сохранить изменения». Даже если вы ничего не меняете, WordPress пересоздаёт правила маршрутизации.
Если нужен программный вариант, например после миграции или в небольшом MU-плагине, используйте flush_rewrite_rules() только один раз при активации. Не вызывайте его на каждом запросе — это лишняя нагрузка.
<?php
/**
* Plugin Name: Fix Woo Filter Rewrites
*/
register_activation_hook(__FILE__, function () {
flush_rewrite_rules();
});
register_deactivation_hook(__FILE__, function () {
flush_rewrite_rules();
});
Этот код уместен только в плагине, а не в functions.php темы. На продакшене постоянный сброс правил недопустим.
2. Очистите кэш на всех уровнях
Если у вас стоит кэш-плагин, серверный кэш или CDN, старые правила могут продолжать отдавать 404 даже после сброса rewrite rules. Очистите:
- кэш плагина;
- object cache, если он используется;
- кэш на уровне хостинга;
- CDN-кэш;
- кэш браузера для проверки.
После очистки повторно откройте проблемный URL. Если страница начала открываться, значит проблема была не в WordPress, а в слое кэширования.
3. Проверьте, как плагин фильтрации строит URL
У фильтров WooCommerce есть два основных подхода: через query string и через ЧПУ-адреса. Query string обычно выглядит как ?filter_color=black, а ЧПУ-вариант — как отдельный путь или набор сегментов. Если плагин после обновления изменил формат URL, старые ссылки могут вести в 404.
Сравнение подходов:
| Подход | Плюсы | Минусы |
|---|---|---|
| GET-параметры | Проще отлаживать, меньше конфликтов с rewrite rules | Иногда хуже выглядят в адресной строке, могут конфликтовать с каноникалами |
| ЧПУ-фильтры | Удобнее для SEO и пользователей | Требуют корректных rewrite rules и аккуратной настройки кэша |
Если фильтр строит ЧПУ, проверьте настройки самого плагина: иногда там есть отдельная опция для пересоздания правил или очистки кэша маршрутов.
4. Проверьте конфликт с каноническими редиректами
Иногда 404 появляется не из-за отсутствия страницы, а из-за того, что WordPress или SEO-плагин пытается «исправить» URL и отправляет пользователя на канонический адрес без параметров. В результате фильтр открывается, но параметры отбрасываются.
Если вы используете SEO-плагин, проверьте, не включён ли агрессивный редирект канонических URL для архивов товаров. Для фильтров это особенно чувствительно: адрес с параметрами должен оставаться валидным, если он реально обрабатывается сайтом.
5. Если фильтр завязан на свои rewrite rules, пересоздайте их
Некоторые плагины фильтрации регистрируют собственные правила перезаписи. После смены ЧПУ или переноса сайта они могут не подхватиться автоматически. Если у плагина есть кнопка сброса кэша/правил — используйте её. Если нет, проверьте документацию именно этого плагина: у разных решений логика отличается, и универсального хука здесь нет.
Если вы пишете свой фильтр, регистрируйте rewrite rules через штатные API WordPress и не забывайте о flush_rewrite_rules() только на активации. Пример базового подхода:
<?php
add_action('init', function () {
add_rewrite_rule(
'^shop/filter/([^/]+)/?$',
'index.php?post_type=product&filter_color=$matches[1]',
'top'
);
});
add_filter('query_vars', function ($vars) {
$vars[] = 'filter_color';
return $vars;
});
Это не готовое решение для любого магазина, а рабочий каркас. Его нужно адаптировать под реальную структуру фильтра и затем один раз сбросить правила перезаписи.
Проверка результата после внедрения
После исправления важно проверить не только саму страницу, но и поведение фильтра в нескольких сценариях. Иначе можно пропустить скрытую ошибку, которая проявится только на части каталога.
- Откройте проблемный URL в инкогнито и убедитесь, что он больше не отдаёт 404.
- Проверьте URL с разными значениями фильтра, а не только один вариант.
- Переключите сортировку товаров и убедитесь, что фильтр не сбрасывается.
- Проверьте пагинацию каталога после применения фильтра.
- Посмотрите, не появились ли лишние редиректы на канонический URL.
- Очистите кэш ещё раз и проверьте поведение на «чистом» запросе.
Если есть доступ к инструментам разработчика, откройте вкладку Network и посмотрите код ответа. Вам нужен именно 200 на рабочем фильтре, а не цепочка редиректов, которая случайно заканчивается на корректной странице.
Частые ошибки и как их исправить
Сохранили постоянные ссылки, но не очистили кэш
Это самая частая ситуация. WordPress уже знает новые правила, а кэш-плагин продолжает отдавать старый 404. Решение простое: очистить все уровни кэша и повторить тест в инкогнито.
Добавили flush_rewrite_rules() в обычный запрос
Так делать не нужно. На каждом хите это создаёт лишнюю нагрузку и может замедлить сайт. Сброс правил должен происходить только при активации плагина, смене настроек или вручную один раз.
Поменяли структуру URL, но не обновили ссылки в шаблонах
Если фильтр генерирует старые адреса в кнопках, виджетах или JS, пользователь будет попадать на несуществующий маршрут. Проверьте шаблоны каталога, блоки фильтра и скрипты, которые собирают URL на лету.
SEO-плагин переписывает адреса фильтров
Иногда редиректы и каноникализация ломают фильтры, особенно если они используют параметры в URL. В таком случае нужно точечно отключить редирект для архивов товаров или исключить конкретные параметры из обработки.
Плагин фильтрации несовместим с новой структурой ЧПУ
После обновления плагина часть старых rewrite rules может перестать работать. Проверьте changelog, сбросьте кэш плагина и убедитесь, что он поддерживает текущую версию WooCommerce и WordPress.
Безопасность и производительность
Фильтры каталога — это не только UX, но и нагрузка. Чем больше комбинаций параметров, тем выше риск получить дубль страниц, лишние индексации и тяжёлые запросы к базе.
Что стоит держать под контролем:
- не индексировать мусорные комбинации фильтров, если они не дают ценности;
- не плодить бесконечные URL с параметрами сортировки и пагинации;
- ограничить количество rewrite rules, если вы пишете собственную логику;
- проверить, не создаёт ли фильтр тяжёлые запросы по meta_query на больших каталогах;
- следить за кэшем страниц фильтра, чтобы не отдавать устаревшие результаты.
Если проблема с дублями и служебными страницами в магазине повторяется регулярно, имеет смысл посмотреть в сторону инструментов для чистки и контроля SEO-обвязки. Например, Clearfy Pro от WPShop уместен там, где нужно убрать лишние дубли, служебные элементы и часть технического шума, но его стоит подключать только под конкретную задачу, а не «на всякий случай».
Ссылка по контексту: Clearfy Pro.
Когда проблема не в WordPress
Если после сброса правил, очистки кэша и проверки плагина фильтрации 404 остаётся, смотрите ниже по стеку:
- серверный конфиг Apache/Nginx;
- правила на уровне хостинга;
- WAF или модуль безопасности, который режет query string;
- CDN, который кэширует ошибку;
- прокси между пользователем и сайтом.
В таких случаях WordPress может быть полностью исправен, а запрос до него просто не доходит или приходит уже изменённым. Тогда править нужно не тему и не WooCommerce, а инфраструктуру.
Практический ориентир простой: если один и тот же URL открывается после очистки кэша и сброса permalink rules, значит вы нашли источник. Если нет — проверяйте сервер и конфликтующие плагины по очереди, а не всё сразу. Так быстрее найти реальную причину, а не замаскировать её очередным редиректом.