Главная/Статьи/Drupal 8: Как удалить лишние HTML теги с атрибутом rel из head?
Drupal

Drupal 8: Как удалить лишние HTML теги с атрибутом rel из head?

Drupal 8 автоматически генерирует несколько link-тегов, которые могут навредить SEO. В частности, теги rel="delete-form", rel="edit-form", rel="version-history" и rel="revision" могут индексироваться с ошибками 401 и попадать в поисковую выдачу.

Вместо правки core-файлов создадим небольшой кастомный модуль «Unset HTML head link». Он состоит из двух файлов.

Файл конфигурации

Файл unset_html_head_link.info.yml:

# Имя модуля.
name: Unset HTML head link
# Описание.
description: 'Module for unset any HTML links (like rel="delete-form" or rel="edit-form" and etc.) from head in Drupal 8.x sites.'
# Информация о модуле.
core: 8.x
type: module
package: SEO
# Версия модуля.
version: 1.0

Основной файл модуля

Файл unset_html_head_link.module — реализация через hook_entity_view_alter() для нод:

 $value) {
      if (isset($value[0]['rel']) && in_array($value[0]['rel'], $unset_html_head_link)) {
        unset($build['#attached']['html_head_link'][$key]);
      }
    }
  }
}

Для страниц таксономии

Дополнительно через hook_page_attachments_alter() и hook_module_implements_alter():

/**
 * Implements hook_page_attachments_alter().
 */
function unset_html_head_link_page_attachments_alter(array &$attachments) {
  $unset_html_head_link = [
    'delete-form',
    'edit-form',
    'version-history',
    'revision'
  ];
  foreach ($attachments['#attached']['html_head_link'] as $key => $value) {
    if (isset($value[0]['rel']) && in_array($value[0]['rel'], $unset_html_head_link)) {
      unset($attachments['#attached']['html_head_link'][$key]);
    }
  }
}

/**
 * Implements hook_module_implements_alter().
 */
function unset_html_head_link_module_implements_alter(&$implementations, $hook) {
  // Определяем выполнение hook_page_attachments_alter() в самом конце.
  if ($hook === 'page_attachments_alter') {
    $group = $implementations['unset_html_head_link'];
    unset($implementations['unset_html_head_link']);
    $implementations['unset_html_head_link'] = $group;
  }
}

Установка

Скачайте модуль, поместите в директорию modules/, включите через /admin/modules в секции SEO и очистите кэш.