Як змусити канонічну URL-адресу використовувати http?


10

На нашій сторінці ми використовуємо модуль Metatag, щоб показати канонічний метатег. У конфігурації ми використовуємо [current-page:url:absolute]маркер. Це добре працює, але проблема полягає в тому, що незалежно від того, чи отримує доступ до сторінки HTTP або HTTPS, цей протокол використовується в канонічній URL-адресі.

Для цілей SEO ми хочемо, щоб канонічна URL-адреса була однаковою і використовували HTTP для обох протоколів.

Як ми можемо цього досягти?


2
Замість того, щоб робити це в Drupal, я просто примушував би весь трафік до HTTPS за замовчуванням через .htaccessабо Apache config. Проблема вирішена.
leymannx

Відповіді:


8

Drupal 7

Ви можете реалізувати hook_html_head_alter()для зміни заголовків тегів; наступне є неперевіреним, але слід зробити трюк:

function MYMODULE_html_head_alter(&$head_elements) {
  foreach ($head_elements as $key => &$tag) {
    if (strpos($key, 'drupal_add_html_head_link:canonical:') === 0) {
      if (strpos('https://', $tag['#attributes']['href']) === 0) {
        $tag['#attributes']['href'] = str_replace('https://', 'http://', $tag['#attributes']['href']);
      }
    }
  }
}

2

За допомогою модуля метатегів ви можете використовувати маркер [поточна сторінка: url: відносний] замість маркера [поточна сторінка: URL: абсолютний].

тож ваш канонічний тег стане чимось на зразок: http: //www.mywebsite [current-page: url: относительно]


0

Друпал 8

Для вузлів ви повинні використовувати, hook_ENTITY_TYPE_view_alterоскільки це місце, куди вони додані спочатку NodeViewController::view().

І дозвольте мені зазначити, що вам, мабуть, краще, просто перенаправляючи весь свій вхідний трафік на SSL за замовчуванням: Як просто зробити весь сайт HTTPS?

/**
 * Implements hook_ENTITY_TYPE_view_alter().
 */
function MYMODULE_node_view_alter(array &$build, Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display) {
  if (isset($build['#attached']['html_head_link'])) {
    foreach ($build['#attached']['html_head_link'] as $key => $head) {
      if ((isset($head[0]['rel']) ? $head[0]['rel'] : FALSE) == 'canonical') {

        $url = \Drupal\Core\Url::fromRoute('<current>', [], ['absolute' => 'true'])
          ->toString();

        $url = str_replace('https://', 'http://', $url);

        $build['#attached']['html_head_link'][$key][0]['href'] = $url;
      }
    }
  };
}

Я тільки що дізнався, що в кінці кінців ми знайдемо всі тег голови в hook_preprocess_htmlв $variables['page']['#attached']масив може бути змінений.


-2

Назвіть мене божевільним і, будь ласка, виправте мене, якщо я помиляюся, але чи не можете ви просто жорстко кодувати URL-адресу за допомогою HTTP?

Я впевнений, що чогось мені не вистачає, але якщо ви залишите повну URL-адресу замість того, щоб використовувати маркер, ви отримаєте саме цю URL-адресу як канонічну для кожного варіанту сторінки, яку створює Drupal.

Застереження полягає в тому, що він створює кошмар оновлення, оскільки вам потрібно пам’ятати, щоб змінити канонічне, якщо псевдонім сторінки колись зміниться.


Іноді, наприклад, коли ви використовуєте Доступ до домену, деякі статті доступні лише для певних доменів, і URL-адреса з жорстким кодуванням створює мертві посилання.
Молот
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.