Отключаем страницы терминов таксономии в Drupal

По умолчанию Drupal генерирует маршруты для каждого термина таксономии. Это означает, что у каждого термина появляется своя страница с URL вида /taxonomy/term/123. В некоторых случаях такие страницы могут быть полезны, например, если вы используете термины как категории для материалов и хотите отображать подборку по ним. Но чаще всего — особенно для вспомогательных словарей (тегов, фильтров, FAQ-групп) — такие страницы не нужны вовсе.

Проблема в том, что Drupal создаёт эти маршруты автоматически, и если вы не предпримете действий, то такие страницы могут попасть в индекс поисковых систем. Это может привести к нежелательным точкам входа на сайт, дублированию контента и негативному SEO-эффекту.

В этой статье разберём, как отключить генерацию страниц терминов таксономии на уровне маршрутов. Мы будем выбрасывать 404 ошибку при попытке открыть термин определённого словаря — в данном примере словаря faqs.

Общая идея

Вместо того чтобы отключать маршруты на уровне routing.yml, мы воспользуемся подпиской на событие KernelEvents::REQUEST и программно проверим, какой термин запрашивается. Если он относится к словарю faqs, мы выбросим исключение NotFoundHttpException, тем самым сымитировав поведение страницы с ошибкой 404.

Реализация

Создаём класс подписчика событий:

Регистрируем сервис

Чтобы подписчик начал работать, нужно зарегистрировать его как сервис с тегом event_subscriber.

Добавьте в MY_MODULE.services.yml:

Проверка

Очистите кеш маршрутов и кеш контейнера:

Теперь при попытке открыть страницу термина из словаря faqs, например /taxonomy/term/123, вы получите ошибку 404.


Отключение страниц терминов — это простой и надёжный способ предотвратить индексацию нежелательных маршрутов, сохранить чистоту структуры сайта и избежать дублирующего контента. Такой подход хорошо работает, если вы используете таксономию исключительно для внутренней фильтрации или связей, без необходимости выводить термины на отдельные страницы.

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

Мало букафф? Читайте есчо !

Drupal: шаблоны для taxonomy_term и view mode — как добавить?

Июль 19, 2025 г.

При работе с таксономией в Drupal нередко возникает потребность отображать термины по-разному в зависимости от контекста. Например, один и тот же термин в режиме teaser должен выводиться компактно, а в режиме full — с подробным описанием. Если вы используете ...

Читать

Чтение данных из oembed провайдера

Март 11, 2025 г.

В Drupal 10/11 поддержка Oembed провайдеров в ядре (модуль media) позволяет легко и непринуждённо читать данные о медиа прямо из провайдера. Ранее я рассказывал как зарегистрировать oembed для rutube, чтобы иметь возможность оперировать видео контентом ...

Читать

Инициализируем кастомную тему в Drupal

Май 12, 2025 г.

При создании новой темы у вас есть варианты выбора начиная с того, чтобы взять готовую тему (и начать её менять под ваши задачи) до создания новой темы ...

Читать

Убираем вставку   в пустые div контейнеры в CKEditor 5

Апрель 9, 2025 г.

Неприятная особенность CKEditor - добавляет в пустые контейнера (в <div>,<p> и т.п.) html код неразрывного пробела. Покажу как можно от этого избавиться через код в кастомном плагине для CKEditor 5 в экосистеме Drupal 8+. Нам понадобится ...

Читать
 

Комментарии к «Отключаем страницы терминов таксономии в Drupal»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: