404-страница в WordPress часто работает хуже, чем должна: вместо полезной навигации пользователь видит тупик, а поисковик — набор бесполезных URL с ошибками, параметрами и опечатками. Если сайт уже живёт, такие страницы неизбежны: старые ссылки, удалённые записи, кривые адреса из внешних источников, битые UTM и случайные запросы ботов.
Задача не в том, чтобы «убрать 404» любой ценой. Правильная цель — оставить честный HTTP-статус 404 или 410 там, где страница действительно отсутствует, но сделать сам экран полезным для пользователя и понятным для поисковых систем.
Когда 404-страница становится проблемой
Сначала стоит понять, что именно ломается. У 404 обычно три сценария:
- пользователь попадает на несуществующий URL и уходит сразу;
- поисковый робот регулярно проверяет мусорные адреса и тратит краулинговый бюджет;
- сайт отдаёт не настоящий 404, а мягкую подмену с кодом 200, из-за чего в индекс попадает мусор.
Последний случай особенно неприятен. Если тема или плагин выводит страницу «ничего не найдено», но сервер отвечает 200 OK, поисковик может считать её обычной страницей. Это уже не просто UX-проблема, а техническая ошибка индексации.
Как быстро диагностировать проблему
Проверьте несколько типичных URL вручную и через инструменты разработчика:
- откройте несуществующий адрес на сайте;
- посмотрите HTTP-статус в Network или через
curl -I; - проверьте, не подставляется ли шаблон страницы без реального 404;
- посмотрите, есть ли на странице лишние индексационные элементы: canonical на главную, meta robots с
index, редирект на нерелевантный URL.
Пример проверки из консоли:
curl -I https://example.com/this-page-does-not-existНужный результат — 404 Not Found или, если страница удалена окончательно и без замены, иногда уместен 410 Gone. Но это уже отдельный сценарий, и применять его нужно осознанно.
Что должна делать хорошая 404-страница
Полезная 404-страница не пытается обмануть пользователя. Она честно сообщает, что адрес не найден, и даёт варианты продолжить путь по сайту. На практике достаточно четырёх вещей:
- короткое объяснение, что страница не найдена;
- поиск по сайту;
- ссылка на главную или важные разделы;
- визуально спокойный шаблон без лишних скриптов и тяжёлых блоков.
Если сайт контентный, хорошо работают ссылки на популярные рубрики, последние записи или карту сайта в HTML-формате. Но не стоит превращать 404 в перегруженную витрину: чем больше там случайных блоков, тем хуже читается смысл ошибки.
Пошаговая настройка 404 в теме WordPress
В классической теме WordPress за 404 отвечает файл 404.php. Если его нет, система может использовать другие шаблоны, но в нормальной теме этот файл должен быть отдельным и понятным.
1. Проверьте, что шаблон реально отдаёт 404
Внутри 404.php должен вызываться корректный статус. Обычно WordPress делает это сам через шаблонную иерархию, но если вы собираете кастомную тему, лучше не полагаться на случай.
<?php
get_header();
status_header( 404 );
nocache_headers();
?>
<main class="site-main error-404">
<section class="page-content">
<h1>Страница не найдена</h1>
<p>Похоже, адрес устарел или был введён с ошибкой.</p>
<form role="search" method="get" class="search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<label>
<span class="screen-reader-text">Поиск по сайту</span>
<input type="search" name="s" placeholder="Найти статью">
</label>
<button type="submit">Искать</button>
</form>
<ul class="error-links">
<li><a href="<?php echo esc_url( home_url( '/' ) ); ?>">На главную</a></li>
<li><a href="<?php echo esc_url( get_permalink( get_option( 'page_for_posts' ) ) ); ?>">Все записи</a></li>
</ul>
</section>
</main>
<?php get_footer();Если у сайта нет страницы записей, get_permalink( get_option( 'page_for_posts' ) ) может вернуть пустое значение. В таком случае лучше подставить ссылку на рубрики или главную через проверку.
2. Добавьте полезные ссылки без мусора
На 404 лучше выводить не случайные виджеты, а ручной набор ссылок. Например, на важные разделы или популярные материалы. Это уменьшает отказы и помогает человеку не застрять на ошибке.
<?php
$links = array(
home_url( '/blog/' ) => 'Блог',
home_url( '/category/seo/' ) => 'SEO',
home_url( '/category/wordpress/' ) => 'WordPress',
);
if ( ! empty( $links ) ) : ?>
<nav class="error-nav" aria-label="Полезные ссылки">
<ul>
<?php foreach ( $links as $url => $label ) : ?>
<li><a href="<?php echo esc_url( $url ); ?>"><?php echo esc_html( $label ); ?></a></li>
<?php endforeach; ?>
</ul>
</nav>
<?php endif; ?>Если хотите собрать это без кода, можно использовать конструктор блоков или готовую тему с гибкой 404-страницей. Но для технически аккуратного сайта ручной шаблон обычно надёжнее: меньше лишних зависимостей и проще контролировать статус ответа.
3. Не ставьте canonical на главную
Распространённая ошибка — на 404-странице выводится canonical на главную или на ближайший раздел. Так делать не нужно. У 404 нет канонической версии в смысле контента, и подмена сигнала только путает поисковик. Если шаблон или SEO-плагин автоматически вставляет canonical, проверьте, не переопределяет ли он поведение для ошибки.
Для 404 лучше оставить страницу без индексации на уровне ответа сервера и не пытаться «склеить» её с другой страницей. Сам статус уже говорит поисковику, что документа нет.
Сравнение подходов: плагин, код или готовая тема
| Подход | Когда подходит | Плюсы | Компромисс |
|---|---|---|---|
| Код в теме | Нужен контроль над статусом и разметкой | Минимум лишнего, предсказуемое поведение | Нужно править шаблон и тестировать обновления |
| Плагин для редиректов/404 | Нужно логировать ошибки и управлять перенаправлениями | Удобно для массовой работы с битым трафиком | Легко перегрузить сайт лишней логикой |
| Готовая тема с 404-блоком | Нужна быстрая настройка без разработки | Можно собрать страницу визуально | Не всегда понятно, какой статус реально отдаётся |
Если у вас уже стоит SEO-плагин или набор оптимизаций вроде Clearfy Pro, проверьте, не дублирует ли он часть функций темы. Иногда проблема не в 404-шаблоне, а в том, что один слой пытается управлять статусом, а второй — переопределяет его. В таких случаях лучше оставить один источник истины.
Как проверить, что 404 настроена правильно
После внедрения не ограничивайтесь визуальной проверкой. Нужно убедиться, что всё работает на уровне ответа сервера и индексации.
- откройте несуществующий URL в браузере и убедитесь, что страница не редиректит;
- проверьте HTTP-статус через
curl -Iили DevTools; - посмотрите исходный код: нет ли canonical на другой URL;
- убедитесь, что страница не закрыта случайно через
noindexв шаблоне, если это мешает логике сайта; - проверьте, не грузятся ли на 404 тяжёлые скрипты, которые не нужны для ошибки.
Если у вас есть доступ к Google Search Console, посмотрите раздел с ошибками сканирования. Там полезно отследить, какие URL чаще всего дают 404. Это поможет понять, нужно ли делать редирект, а где достаточно оставить честную ошибку.
Частые ошибки и как их исправить
404 отдаёт 200 OK
Причина обычно в кастомном шаблоне или в том, что тема выводит контент страницы «как будто всё нормально». Исправление простое: убедиться, что вызывается корректный 404-шаблон и не происходит ранний вывод HTML до установки статуса.
Автоматический редирект на главную
Это плохая практика для SEO и UX. Пользователь не понимает, что адрес был неверным, а поисковик получает ложный сигнал. Редирект уместен только если у удалённой страницы есть прямой аналог, и это решение принято вручную.
На 404 слишком много блоков
Если туда вставить последние записи, баннеры, попапы и ещё один поиск, страница становится тяжёлой и шумной. Оставьте только то, что помогает выйти из тупика: поиск, ссылки на разделы, короткое сообщение.
SEO-плагин подменяет мета-теги
Иногда плагин вставляет canonical, robots meta или schema там, где это не нужно. Проверьте настройки шаблонов ошибок и исключите автоматическую генерацию для 404, если она мешает.
Что делать с массовыми 404 и битым трафиком
Если ошибки идут не от случайных опечаток, а с конкретных старых URL, имеет смысл не только улучшить 404, но и закрыть источник проблемы. Сначала соберите список адресов, которые регулярно дают ошибку, затем решите по каждому:
- есть релевантная новая страница — ставим 301;
- страница удалена без замены — оставляем 404 или 410;
- ошибка вызвана параметром или мусорным URL — проверяем правила генерации ссылок и шаблоны.
Если нужно массово управлять такими случаями, удобнее использовать отдельный плагин редиректов, а не перегружать functions.php. Но массовые перенаправления должны быть точечными: редиректить всё подряд на главную — плохая идея.
Практика по безопасности и производительности
404-страница — не то место, где стоит запускать тяжёлые запросы к базе или подключать лишние библиотеки. На высоконагруженном сайте это особенно заметно: боты часто стучатся в несуществующие URL, и каждая лишняя операция на 404 превращается в ненужную нагрузку.
- не выводите на 404 случайные блоки с запросами к популярным постам, если они не кешируются;
- не подключайте на этой странице скрипты, которые нужны только для интерактивных разделов;
- если используете логи 404, ограничьте их объём и срок хранения;
- не показывайте пользователю технические детали вроде путей к файлам или SQL-ошибок.
Если нужен более широкий набор SEO- и технических настроек, часть задач по чистке дублей, отключению лишнего и управлению служебными элементами можно закрыть через Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином всё равно стоит проверить фактический HTTP-статус и шаблон 404 вручную.
Если после настройки 404-страницы вы видите, что поисковик продолжает активно сканировать мусорные адреса, проблема может быть не в самой ошибке, а в внутренних ссылках, старых sitemap или внешних ссылках на удалённые страницы. Тогда нужно искать источник, а не только украшать экран ошибки.