Разбираюсь с дублями страниц форматов записей в WordPress. Расскажу, почему 301 редирект на главную — плохая идея, и покажу рабочий код, который возвращает честную 404.
Вы когда-нибудь замечали в Google или Яндекс.Вебмастере странные адреса вроде мой_сайт.ru/type/video/ или …/type/image/? У меня они появились внезапно. Сначала я подумал: «Ерунда, закрою в robots.txt». Не помогло. Потом установил 301 редирект на главную через .htaccess. И только спустя время понял, что чуть не навредил сайту.
Сейчас расскажу, как я докопался до истины и что в итоге сделал.
Честная ошибка 404 оказалась лучшим другом SEO…
Давайте вначале разберём, что значит «честная 404» и почему это лучше редиректа 301?
Я долго не мог понять, в чём разница. Оба варианта вроде бы убирают страницу из поиска. Но для поисковиков это две разные вещи.
Простая аналогия
Представьте, что вы пришли в библиотеку и спросили книгу «Как приготовить плов».
Вариант с 301 редиректом — библиотекарь отвечает: «Эта книга навсегда переехала в здание напротив» и показывает на почтовое отделение. Вы приходите в почту, а там марки и конверты. Вы в замешательстве и робот Google тоже путается.
Вариант с честной 404 — библиотекарь говорит: «Извините, такой книги у нас нет, и никогда не было». Вы понимаете, что искать её здесь бесполезно, и вы уходите. Робот же в этом случае получает чёткий сигнал: «Удали страницу из индекса».
В нашем случае страницы /type/video/ на самом деле нет, если же есть, тогда создаёт дубли (полезного контента там нет). Значит, надо честно сказать об этом.
Как код возвращает 404, а не редирект
Вот тот самый код из functions.php:
if (in_array($term_slug, $formats_to_disable)) {
$query->set_404();
status_header(404);
nocache_headers();
}Эти три строчки заставляют сервер выдать HTTP-статус 404 Not Found. Никакого перенаправления. Браузер просто показывает стандартную страницу «Не найдено», а поисковик понимает: здесь нужно удалять.
Как проверить, что у вас именно 404, а не скрытый редирект
Сделайте простой тест. Я им пользуюсь каждый раз после добавления кода.
1. Откройте https://мой_сайт.ru/type/video/ в браузере (лучше в Яндекс или Chrome)
2. Нажмите клавишу F12 — откроются инструменты разработчика.
3. Перейдите на вкладку Network (Сеть).
4. Обновите страницу (F5 или Ctrl+R).
5. В списке запросов найдите самый первый — обычно он называется video/ или имеет такой же адрес.
6. Посмотрите на колонку Status (Статус).
Если там 301 или 302 — значит, всё ещё срабатывает старый редирект из .htaccess. Идите и в .htaccess удалите ту строчку RedirectMatch. Если показывает 404 — вы всё сделали правильно.
Что вы увидите на экране после проверки:
- Сам адрес /type/video/ — открывается обычная страница 404 вашей темы (скорее всего, с надписью «Ничего не найдено»).
- Код ответа в Network — 404.
- Никакого перехода на главную — адресная строка не меняется.
Именно этого мы и добивались.
Коротко: чем 404 лучше 301 в моем случае
| Критерий | 301 редирект на главную | Честная 404 |
|---|---|---|
| Сигнал роботу | «Страница переехала» (обман) | «Страницы нет» (правда) |
| Риск Soft 404 | Высокий | Ноль |
| Потребление краулингового бюджета | Есть, потому что робот идёт по редиректу | Минимальное |
| Что видит пользователь | Главная (непонятно, как сюда попал) | Сообщение «Не найдено» + поиск по сайту |
Надеюсь, теперь про «честную 404» стало яснее. Если у вас в теме не очень красивая страница 404 — рекомендую доработать её: добавить форму поиска, ссылки на популярные статьи и кнопку на главную. Это поможет удержать случайного посетителя. Но сам статус 404 менять не нужно — он идеален для таких пустышек.
Откуда вообще лезут эти /type/ страницы?
Это не баг и не вирус. WordPress из коробки умеет группировать записи по форматам: видео, изображение, цитата, галерея и так далее. Всего их 10: aside, gallery, link, image, quote, status, video, audio, chat, standard.
Когда вы хоть раз выставили у поста формат «Видео», движок автоматически создаёт архив /type/video/. Там должны показываться все видеозаписи. Только вот у большинства блогов эти архивы пустые или бесполезные.
У меня на сайте почему-то активными оказались только два формата — video и image. Остальные восемь отдавали 404, и меня это устраивало. А вот эти два дублировали контент и плодили мусорные URL.
Знакомая ситуация? Тогда читайте дальше…
Моя ошибка: 301 редирект на главную
Моей первой мыслью было: «А давай просто перенаправим всё /type/video/ на главную». Я добавил в .htaccess (apache) такую строчку:
RedirectMatch 301 ^/type/(video|image)(/page/\d+/)?/?$ https://мой_сайт.ru/Сработало. Редирект крутился, я был доволен. Но потом я полез в Google Search Console и увидел «мягкие ошибки 404». Это когда сервер возвращает 200 (всё ок), а на самом деле страница пустая и не по теме.
Оказывается, что массовый 301 редирект с пустого архива на главную — это плохой сигнал для поисковиков. Роботы начинают путаться, тратят лишний бюджет на сканирование, а ваш сайт рискует получить репутацию «не очень честного» ВебМастера.
Лучшее решение: честная 404 ошибка
Я обратился к хорошему разработчику, и он объяснил простую вещь: если страницы не существует — отдавайте 404 ошибку. Это нормально. Это не ошибка сервера, а корректный ответ.
Google прямо говорит: ошибки 404 сами по себе не влияют на ранжирование. Они просто удаляют из индекса то, чего нет.
Поэтому я решил не маскировать пустые архивы под главную, а честно сообщить роботам: «Здесь ничего нет для вас, идите мимо».
Как я отключил только video и image, а не всё подряд
Долго искал код, который не трогает остальные архивы (aside, gallery и т. д.). В итоге нашёл элегантное решение через pre_get_posts.
Вот что я добавил в functions.php своей дочерней темы (предварительно сделав бэкап):
// Выборочно отключаем архивы для форматов video и image
add_action('pre_get_posts', 'disable_specific_post_format_archives');
function disable_specific_post_format_archives($query) {
if ($query->is_tax('post_format') && $query->is_main_query() && !is_admin()) {
$term = $query->get_queried_object();
$term_slug = $term->slug;
$formats_to_disable = array('post-format-video', 'post-format-image');
if (in_array($term_slug, $formats_to_disable)) {
$query->set_404();
status_header(404);
nocache_headers();
}
}
}Что происходит: код ловит запрос к архиву, проверяет его slug, и если это post-format-video или post-format-image — возвращает 404. Все остальные форматы (даже если они появятся в будущем) остаются нетронутыми.
Важный нюанс: перед добавлением кода я удалил старый редирект из .htaccess (ту самую строчку RedirectMatch). Иначе Apache перехватывал запрос раньше, чем срабатывал WordPress, и я всё равно видел 301-е перенаправление на главную страницу.
Проверяем результат
После сохранения файла я открыл в браузере:
- https://мой_сайт.ru/type/video/ → результат страница 404.
- https://мой_сайт.ru/type/image/ → результат 404.
- А вот https://мой_сайт.ru/type/aside/ (которого у меня нет) → тоже 404, но это и не нужно.
Главное — обычные записи с форматом видео или изображения продолжают открываться без проблем. Например, статья с отметкой «Видео» работает, как обычно.
Что ещё я сделал для чистоты
Чтобы поисковики точно забыли про старые дубли, я выполнил три простых шага:
1. Проверил постоянные ссылки. Зашёл в админку → Настройки → Постоянные ссылки и просто нажал «Сохранить». Это сбрасывает правила перезаписи WordPress.
2. Отправил страницы с 404 на перепроверку в Google Search Console. Через две недели они исчезли из индекса.
А что с производительностью?
После всех манипуляций я прогнал сайт через тесты скорости в Pagespeed. Ничего не упало, наоборот — стало чуть легче, потому что роботы наконец-то перестали посещать мусорные URL.
Вот как сейчас выглядят показатели на компьютерах:

А это на мобильных устройствах:

Как видите, никакого негатива. Зато порядок в SEO и скорости загрузки страниц сайта.
Как отключить архивы форматов записей (если не хотите разбираться)
Я показал выше точечный код для video и image, но если вы хотите закрыть все архивы форматов разом, тогда делайте пошагово. Этот метод подойдёт, когда вы точно не пользуетесь форматами записей (aside, gallery, quote и т. д.).
Пошагово отключить архивы форматов записей:
- Создайте резервную копию.
Это железное правило. Перед любыми правками файлов темы обязательно сделайте бэкап. Файлы и базу данных. Мало ли что пойдёт не так — вы всегда откатитесь назад.
- Добавьте код в functions.php.
Откройте файл functions.php вашей активной темы. Лучше через FTP или редактор хоста. Добавьте в самый конец (перед закрывающим ?> — если он есть) вот этот код:
// Отключаем архивы для всех форматов записей
add_action('pre_get_posts', 'disable_post_format_archives');
function disable_post_format_archives($query) {
if ($query->is_tax('post_format') && $query->is_main_query() && !is_admin()) {
$query->set_404();
status_header(404);
nocache_headers();
}
}Что делает этот код?
Ловит любой запрос к любому архиву формата (/type/любой_формат/) и принудительно возвращает ошибку 404. Без редиректов и без мягких ошибок.
- Проверьте результат.
После сохранения файла перейдите по адресу: https://мой_сайт.ru/type/video.
А также проверьте https://мой_сайт.ru/type/image/ и, например, https://мой_сайт.ru/type/gallery/.
Во всех случаях вы должны увидеть стандартную страницу «404 Not Found» (оформленную вашей темой). Если вместо этого открылась главная или какая-то другая страница — значит, у вас остался старый редирект в .htaccess (удалите его).
Сравнение, какой способ выбрать?
| Ваш сценарий | Какой код использовать |
|---|---|
| Вы не используете форматы записей вообще | Отключайте все (это пошагово) |
| У вас есть полезные архивы, например, /type/quote/ или /type/aside/ | Используйте точечный код из основной части статьи (например, только для video и image) |
| Вы не уверены, какой формат вам пригодится в будущем | Лучше точечный — он безопаснее |
Я лично остановился на точечном отключении. Но если вы твёрдо решили зачистить всё — берите полный код из этой инструкции.
Частые вопросы
Почему нельзя просто закрыть /type/ в robots.txt?
Роботы всё равно могут найти ссылку с другого сайта и попытаться зайти. А robots.txt — это лишь рекомендация, не запрет. Плюс страница остаётся доступной, просто не индексируется. Это хуже, чем честная 404.
А что если я активно использую форматы записей и хочу оставить архивы?
Тогда ничего не отключайте. Но хотя бы поставьте канонические ссылки или noindex, чтобы избежать дублей. Эта статья — для тех, кто форматами не пользуется.
Код в functions.php сломает сайт, если я ошибся?
Риск минимальный, если вы сделали бэкап. Но на всякий случай имейте доступ к файлам через FTP, чтобы в случае чего удалить строчки.
А как быть с /type/standard/?
Стандартный формат не создаёт отдельной страницы-архива. Поэтому его можно не трогать.
Моё резюме
Я потратил пару вечеров, перепробовал редиректы и плагины. В итоге самый простой, и надёжный способ оказался самым правильным: вернуть 404 для ненужных архивов. Никаких «мягких ошибок» и никакого обмана поисковиков. Только честность и прозрачность в продвижении сайта.
Если вы тоже заметили у себя на сайте WordPress странные страницы /type/video/ или /type/image/, не спешите устанавливать 301 редирект на главную. Попробуйте данный код, который вам поможет удалить дубли страниц форматов записей.
А если остались вопросы — пишите в комментариях. Я всегда на связи. Удачи вам и быстрой индексации!
Читайте также:
Как настроить 301 редирект на главную для SEO-оптимизации
GigaChat и правда пишет за вас посты?
Как я победил атаку на WordPress




